# DDVCS and TCS event generator

Update > Dec. 2018, see new webpage on DEEPGen event generator

## Contents

## Principle

This event generator was developed for JLab@12 GeV TCS and DDVCS future experiments. The main options are the generation of:

- "TCS" events with a real photon beam,

- "TCS" events with an electron beam, and a quasi-real photon emitted (default cut is Q2<0.3 GeV2) originating from interaction with the target or from bremsstrahlung in the target,

- "DDVCS" events where the final virtual photon decays into a muons pair

These processes also interfere with Bethe-Heitler (BH). Each generated event contains weight for TCS (or DDVCS) cross section, BH cross section, TCS (or DDVCS) + BH cross section. For TCS (DDVCS) and BH "only" weights, only unpolarized cross section is provided. Their calculation can be switch off to gain time. For BH+TCS, unpolarized and all kind of polarized cross sections are calculated according to polarization setup in the input file. Polarized cross sections are corrected for dilution factors. Several options allow for calculations of beam-only, target-only, beam+target polarized cross sections. Spin directions of beam and target can be modified. Asymmetries are also provided but are not corrected for dilution factors. In the case of TCS with a quasi-real photon, two weights are given: the corresponding weight for photoproduction, and the cross section accounting the photon emission.

For DDVCS, unpolarized and beam polarized cross sections are provided (with dilution factor correction) as well as the beam spin asymmetry (without dilution).

Units for cross sections for both processes are picobarn.

Cross sections and GPD parametrization are calculated according to VGG model (1-2). Reference articles for these processes using VGG model are, for DDVCS: (3), and for TCS: (4).

## Kinematics

The generator is developed for some specific JLab experiment, also the kinematic range it handle was choosen according to these experiments. The default beam energy is 11 GeV for an electron beam, and in a range between 5 and 11 GeV for the case of TCS with a real or a quasi-real photon beam. Limits of the generator are given in the user's files.

Default is a proton target. The lenght of the target is an user choice. (other targets in development).

For TCS, the user can choose the beam type (electron or photon) and the range in energy of the photon. The user also defines the range in Q'2 (emitted photon virtuality), t, theta (polar decay angles for the lepton pair). In case of an electron beam, its default energy is 11 GeV. The cross section also depends on phi (azimuthal decay angles for the lepton pair), ranging by default in [0°, 360°].

For DDVCS, the beam energy is 11 GeV by default. The user can define the range in Xbj, Q2 (initial photon virtuality), Q'2 (final photon virtuality), t, theta_cm (equivalent as TCS theta angle). The cross section also depends on phi_LH (corresponding to DVCS angle), and phi_cm (corresponding to TCS angle).

## Usage

To run the code: use root ./DEEPGen (process = tcs or ddvcs) (index = any integer) (seed = optionnal, user provided and/or internal)

input files: TCS.input and DDVCS.input. The user can change any parameter, and define the kinematics and the number of events in ouput file.

output file: DEEPGen_(index).root. Contains TCS_Tree (only for tcs option), DDVCS_Tree (only for DDVCS option) and Debug_Tree (a verbose mode Tree with all the 50 first events four-vectors and parameters for each step of the generation).

## Output

The root format output file contains the four-vectors of the final state particle, where the energy and momentum are provided in the "lab" frame. It also contains the weights of events and kinematic variables.

Main variables contained in the Tree.

### TCS

ALV_minus_lab = 4-vector or outgoing lepton- in lab frame (all 4-vector "ALV_xxx" are arrays containing: E, px, py, pz) ALV_plus_lab = outgoing lepton+ in lab frame ALV_gamma_in = incoming photon in lab frame ALV_el_in = incoming electron in lab frame (case of quasi-real beam) ALV_Recoil_lab = recoil proton in lab frame ALV_el_out = scattered beam electron in lab frame (case of quasi-real beam) Q2 = incoming photon virtuality in case of quasi real beam theta_gamma = polar angle of incoming photon in case of quasi real beam theta_beam = scattered electron polar angle in case of quasi real beam phi_beam = azimuthal angle of electron and incoming photon versus x-axis in case of quasi real beam Psi_s = angle between reaction plane and spin direction of linearly polarized incoming photon (option linear polarization only) yy = electron beam energy loss Qp2 = final photon virtuality tt = t Mandelstam RotAxis = arbitrary rotation of all planes versus x-axis ttmin = minimal t allowed at this kinematic Phi_CMV = azimuthal angle of decay leptons plane versus reaction plane Theta_CMV = polar angle of decay electron versus reaction plane and virtual photon direction Egamma = energy of incoming photon cross_tot_unpol = unpolarized cross section for real photon beam cross_BH = Bethe-Heitler "only" unpolarized cross section for real photon beam cross_TCS = TCS "only" unpolarized cross section for real photon beam W_tot_unpol = actual total unpolarized cross section with flux factor for quasi real beam W_BH = B-H "only" unpolarized cross section with flux factor for quasi real beam W_TCS = TCS "only" unpolarized cross section with flux factor for quasi real beam VirtualFlag = if 0 the incoming photon is real (real beam or bremsstrahlung in target), if 1 the incoming photon is quasi real Flux_qr = quasi real equivalent flux Flux_bmr = bremsstrahlung in the target equivalent flux epsilon = polarization BSA = single beam spin asymmetry at this kinematic (no dilution) TSA = single target spin asymmetry (no dilution) BTSA = double beam and target spin asymmetry (no dilution) EventNumber = event number TrueEventNumber = actual number of events generated in hyper cubical space (for normalization) cross_tot_pol = beam + target polarized cross section (real photon / dilution factors) W_tot_pol = beam + target actual polarized cross section (quasi real beam + flux / dilution factors) cross_tot_pol_beam = beam only polarized cross section (real photon / dilution factor) cross_tot_pol_beam_circ = circular beam polarized cross section (real photon / dilution factor) cross_tot_pol_beam_lin = linearly polarized beam cross section (real photon / dilution factor) W_tot_pol_beam = beam only polarized cross section (quasi real photon + flux / dilution factor) W_tot_pol_beam_circ = circular beam polarized cross section (quasi real photon + flux / dilution factor) W_tot_pol_beam_lin = linearly polarized beam cross section (quasi real photon + flux / dilution factor) cross_tot_pol_target = target polarized cross section (real photon / dilution factor) W_tot_pol_target = target polarized cross section (quasi real photon + flux / dilution factor) phi_s = target spin azimuthal angle versus x+z plane in lab frame theta_s = target spin polar angle versus z-axis in lab frame target_spindir = spin orientation of target (+1 or -1) beam_spindir = spin orientation of beam (+1 or -1) poltargetdeg = dilution factor of target polarization polbeamdeg_circ = dilution factor for circularly polarized beam (includes energy dependence) polbeamdeg_lin = dilution factor for linearly polarized beam (averaged, no energy dependence) polbeamdeg = dilution factor of initial beam: real photon or electron

### DDVCS

ALV_minus_lab = 4-vector or outgoing lepton- in lab frame (all 4-vector "ALV_xxx" are arrays containing: E, px, py, pz) ALV_plus_lab = outgoing lepton+ in lab frame ALV_gamma_in = incoming photon in lab frame ALV_el_in = incoming electron in lab frame ALV_Recoil_lab = recoil proton in lab frame ALV_el_out = scattered beam electron in lab frame Q2 = initial photon virtuality theta_beam = scattered electron polar angle phi_beam = azimuthal angle of electron and incoming photon versus x-axis yy = electron beam energy loss Xbj = bjorken variable Qp2 = final photon virtuality tt = t Mandelstam RotAxis = arbitrary rotation of all planes versus x-axis ttmin = minimal t allowed at this kinematic Phi_CMV = azimuthal angle of decay leptons plane versus reaction plane Theta_CMV = polar angle of decay electron versus reaction plane and virtual photon direction Phi_LH = angle between leptonic (beam, scattered) and reaction plane W_tot_unpol = unpolarized total cross section W_BH = Bethe-Heitler "only" unpolarized cross section W_DDVCS = DDVCS "only" unpolarized cross section BSA_ddvcs = beam spin asymmetry with no dilution factor at this kinematic cross_tot_pol_beam = polarized cross section for specific spin and dilution factor polbeamdeg_lin = degree of linear polarization (assume average, didn't included dependences in this version) beam_spindir = spin direction of the incoming electron EventNumber = event number TrueEventNumber = actual event number generated in hyper-cubical space for normalization purpose

### Debug Tree

ALV_minus_lab = 4-vector or outgoing lepton- in lab frame (all 4-vector "ALV_xxx" are arrays containing: E, px, py, pz) ALV_plus_lab = outgoing lepton+ in lab frame ALV_gamma_in = incoming photon in lab frame ALV_el_in = incoming electron in lab frame (case of quasi-real beam if tcs, or ddvcs) ALV_Recoil_lab = recoil proton in lab frame ALV_el_out = scattered beam electron in lab frame (case of quasi-real beam if tcs, or ddvcs) ALV_minus_CMV = lepton- in virtual photon center of mass frame ALV_plus_CMV = lepton+ in virtual photon center of mass frame ALV_minus_CMeP = lepton- in photon-proton center of mass frame ALV_plus_CMeP = lepton+ in photon-proton center of mass frame ALV_gamma_CMeP = incoming photon in photon-proton center of mass frame ALV_Recoil_CMeP = recoil proton in photon-proton center of mass frame ALV_Virtual_CMeP = final virtual photon in photon-proton center of mass frame ALV_Virtual = final virtual photon in lab frame ALV_Target_CMeP = incoming proton in photon-proton center of mass frame Q2 = incoming photon virtuality in case of tcs quasi real beam or ddvcs RotAxis = random azimuthal rotation of reaction plane theta_beam = scattered electron polar angle in case of tcs quasi real beam or ddvcs phi_beam = azimuthal angle of scattered electron and photon plane in case of tcs quasi real beam or ddvcs yy = beam electron energy loss Xbj = valid for ddvcs Qp2 = final photon virtuality tt = t Mandelstam ttmin = minimal t at this kinematic Phi_CMV = azimuthal angle of decay lepton plane versus reaction plane Phi_LH = azimuthal angle of scattered electron plane versus virtual photon (reaction) plane for ddvcs Theta_CMV = polar angle of decay lepton minus versus virtual photon orientation EventNumber = event number TrueEventNumber = number of events actually generated at this step (for normalization purpose)

## Where to find the generator (version 3.1 and 3.0)

### Public version 3.1 (Feb. 2018)

Generator: /work/halla/solid/mboer/public/Generator_publicversion/version3.1

A copy is also available on: /work/hallc/nps/mboer/public_files/Generator_publicversion/version3.1

To run the generator, copy the full directory, run set.sh and generate events with: ./DEEPGen tcs (int number) (seed) The seed has to be provided by the user when running the code. It has to be set to run multiple jobs on the farm. If not, a seed is provided inside the code but may not be valid for parallel jobs starting at the same time.

Instructions in the README file. Example on: /work/halla/solid/mboer/public/Generator_publicversion/examples/version3.1

The directory on solid disk contains one generated file and the corresponding input file as example.

Note: to run tests, or to run unpolarized cross sections, set target polarization at 0 or 3 (unpolarized or linearly polarized) and set beam polarization as circular (option 0). The code runs much faster with these options.

Remark: DDVCS is disabled in this version. TCS has been tested for all polarization cases. Example files on demand.

### Public TEST version 3.0 (June 2017)

Generator: /work/halla/solid/mboer/public/Generator_publicversion/version3.0_slow development version FOR TEST ONLY. PLEASE DON'T RUN IT ON IFARM.

More instructions on: /work/halla/solid/mboer/public/Generator_publicversion/version3.0_slow/README

Check files used for testing version 3.0: /work/halla/solid/mboer/public/Generator_publicversion/examples/version3.0_slow_testfiles

## Normalization

Use a phase space factor equal to the product of the range of each kinematic variable used to calculate the cross section. Depends on user defined phase space. Weights of the generator are differential cross sections dσ/(dQ'2dtdφdcos(θ)). They are unpolarized or polarized, for different scenarios.

Nevent = W_BH*sin(Theta_CMV)*luminosity*Δ(t)*Δ(Q'2)*Δ(theta)*Δ(phi)/sum(TrueEventNumber of last event of each files)

If events are not generated at fix beam energy, they have to be rescaled to beam profile. For convenience, events are generated flat over the range in ΔE and can be rescaled to the integrated luminosity over the realistic energy distribution.

## Presentations and slides about updates

- July 6th, 2017. Few update on version 3.0, polar angle for bremsstrahlung photons in TCS

/work/halla/solid/mboer/public/Presentations/2017/updategenerator_6juillet2017.pdf

- Presentation for ee meeting, June 29, 2017. General presentation on the generator, how to run and public version

/work/halla/solid/mboer/public/Presentations/2017/mboer_eemeeting_29juin2017.pdf

- Instructions on how to run the generator, checks of test version 3.0 for TCS and DDVCS:

/work/halla/solid/mboer/public/Presentations/2017/generator_testversion30_14juin2017.pdf

## History and past versions

### version 1.0: April 2015

- used for PAC 44 proposals/ LOI

- discretisation effects in cross sections

- include luminosity and actual targets for direct counting rates predictions

### version 2.xx: 2015 / 2016

- (Summer 2015) faster: use of grids with specific indexations for faster read and less memory use

- (Fall 2015) more precise with extrapolations/ interpolation of cross sections, spin asymmetries but no particle's spin dependences and no corrections to the polarized cross sections

- (2016) several versions, slower and faster, more or less precise. Discretisation accuracy shown at % level

- (Jan. 2016) flags used to prevent divergencies of BH cross section in some part of the phase space. Calculations at several "safe" points to prevent such effect

### Last updates on version 3.0

#### TCS

Updates on the web on June 15, 2017:

- polarization vector for beam and for target: phi_s, theta_s (target) and Psi_s (linearly polarized beam) dependences

- transversally and linearly polarized targets

- corrections in polarized cross sections for spin not aligned along beam or target axis

- spin asymmetries (raw) and polarized cross sections (corrected for dilutions factor (s) of beam and/or target )

- circular polarization rate

- non zero polar angle from sampling for bremsstrahlung photons

- spin of incoming particles

Updates July 6, 2017:

- target choices updated: H, He, NH3... see input file.

- correction for theta_s in case of transverse polarization

- correction for angular dependence of bremsstrahlung for TCS with an electron beam

#### DDVCS

- beam spin asymmetry (raw) and polarized cross sections (corrected for beam dilution factor)

General:

- faster than last "slow" version

- new options in input files

- option to run only BH to go faster

- calculations with VGG GPD model, no interpolation/extrapolations in this version ("slow")

## Instructions for version 2 - deprecated (2015-2016)

### Principle

The main options are the generation of:

- "TCS" events with a real photon beam,

- "TCS" events with an electron beam, and a quasi-real photon emitted (default cut is Q2<0.3 GeV2) originating from interaction with the target or from bremsstrahlung in the target,

- "DDVCS" events where the final virtual photon decays into a muons pair

These processes also interfere with Bethe-Heitler (BH). Each generated event contains weight for TCS (or DDVCS) cross section, BH cross section, TCS (or DDVCS) + BH cross section. The weights are calculated before the use of the generator and saved in data grids. To avoid strong discretization effects, a linear interpolation is done between the adjacent bins (5 dim for TCS and 7 dim for DDVCS).

The generator also gives a "weight" for beam and target spin asymmetries (warning: in development). In the case of DDVCS, linearly polarized electron beam spin asymmetry is provided. In the case of TCS, all beam+target combinations of single and double spin asymmetries are provided. These weights are indicative and should only be use to give an estimation of the spin asymmetry for a given event kinematic.

In the case of TCS with a quasi-real photon, two weights are given: the corresponding weight for photoproduction, and the cross section accounting the photon emission.

### Output for TCS (similar for DDVCS)

- ALV_minus_lab, ALV_plus_lab: final lepton pair (array, 0=E, 1, 2, 3 = px, py, pz)

- ALV_gamma_in, ALV_el_in (if electron beam): initial particles, photon and/or electron from the beam

- ALV_Recoil_lab: final proton

- ALV_el_out: scattered electron in case of an electron beam

- Q2, yy, phi_beam, theta_beam: virtuality of the initial photon, beam energy loss fraction, scatteting angle of the electron in case of an electron beam and a quasi-real photon

- theta_gamma: polar angle of the quasi-real photon in case of an electron beam

- RotAxis: angle between lab x-axis and reaction plane

- tt = t, Qp2 = Q'2, Egamma: kinematics

- ttmin = t_min: maximal value of t allowed by the kinematic

- CosThetagg: cosine of the angle between initial and final photon

- Phi_CMV and Theta_CMV: angles of the electron from the decay of the virtual photons, between e- direction and the reaction plane

- Flux_qr, Flux_bmr: quasi real photon flux and bremsstrahlung flux for the given kinematic

- W_TCS, W_BH, W_tot_unpol: unpolarized cross section for TCS, BH, TCS+BH

- cross_TCS, cross_BH, cross_tot_unpol: cross section accounting the photon flux

- EventNumber: event number in the file. The last event correspond number correspond to the user request of number of events in a file.

- TrueEventNumber: number of the event in the generation process. The last event gives the total number of events that have been generated in a hypercubical space in kinematic variables to provide in the ouput file the required number of events by the user. Used for normalization.

- Flags: see below.

### Flags

Some flags are given as information to prevent numerical divergencies.

- FlagEdge: only informative, the higher this number is, the closer it is from kinematic limits of the process or of the cross section grid.

- FlagStab: should be = 0, otherwise it indicates possible numerical divergences when calculating the cross sections.

- FlagVar: should be as low as possible. If > 1000, it indicates that the weight is not correct (numerical divergence). Otherwise it indicates that the cross section had strong variation between the given kinematic bin (of the grid) and its N-1 and N+1.

## References

(1) M. Vanderhaeghen, P.A.M. Guichon and M. Guidal, "Deeply virtual electroproduction of photons and mesons on the nucleon: Leading order amplitudes and power corrections", Phys. Rev. D 60 (1999) 094017.

(2) M. Guidal, VGG code, (private communication).

(3) M. Guidal and M.Vanderhaeghen, "Double deeply virtual Compton scattering off the nucleon" Phys. Rev. Lett. 90 (2003).

(4) M. Boër, M. Guidal and M. Vanderhaeghen, "Timelike Compton scattering off the proton and generalized parton distributions" Eur. Phys. J. A 51 (2015) no.8, 103.