TABLE OF CONTENTS
- 1. /eN_event
- 1.1. eN_event/selectFrame
- 1.2. eN_event/restingNucleon
- 1.3. eN_event/readInput
- 1.4. eN_event/eN_Event
- 1.5. eN_event/eNev_SetProcess
- 1.6. eN_event/eNev_init_sWQ
- 1.7. eN_event/eNev_init_sxQ
- 1.8. eN_event/eNev_init_snQ
- 1.9. eN_event/eNev_init_eWQ
- 1.10. eN_event/eNev_init_exQ
- 1.11. eN_event/eNev_init_enQ
- 1.12. eN_event/eNev_init_BWQ
- 1.13. eN_event/eNev_init_BnQ
- 1.14. eN_event/eNev_init_Target
- 1.15. eN_event/eNev_init_nuStep1
- 1.16. eN_event/eNev_init_nuStep2
- 1.17. eN_event/eNev_init_nuStep3a
- 1.18. eN_event/eNev_init_nuStep3b
- 1.19. eN_event/eNev_init_nuStep3c
- 1.20. eN_event/init_electronNucleon_event
- 1.21. eN_event/RemovePot_DoNOT
- 1.22. eN_event/RemovePot_THRE
- 1.23. eN_event/RemovePot_THRE2
- 1.24. eN_event/RemovePot_CALC
- 1.25. eN_event/RemovePot_CM
- 1.26. eN_event/RemovePot_NucleonRest
- 1.27. eN_event/eNeV_GetKinV
- 1.28. eN_event/eNeV_Get_LightX
- 1.29. eN_event/eNeV_Get_CostLepton
- 1.30. eN_event/eNev_Set_PhiLepton
- 1.31. eN_event/eNev_CheckForDIS
- 1.32. eN_event/eNev_GetLeptonCM
- 1.33. eN_event/nuclearFluxFactor_correction
/eN_event [ Modules ]
NAME
module eN_event
PURPOSE
Handle the data type which is used to store the lepton-nucleon event.
eN_event/selectFrame [ Global module-variables ]
[ Top ] [ eN_event ] [ Global module-variables ]
SOURCE
integer, save :: selectFrame = 2
PURPOSE
select frame, in which the calculaton of W_free is done:
- 0 = doNOT --- do NOT remove
- 1 = CM
- 2 = CALC
- 3 = THRE prescription from correct threshold behaviour, used in heavy ion collisions
- 4 = NucleonRest : boost nucleon in the rest frame, set free mN, recalculate boson momentum
- 5 = THRE2 threshold with m^2: sfree=s+m^2-m*^2
eN_event/restingNucleon [ Global module-variables ]
[ Top ] [ eN_event ] [ Global module-variables ]
SOURCE
logical, save :: restingNucleon = .true.
PURPOSE
if this flag is .false., we use the momentum of the target nucleon in the calculation of the flux
eN_event/readInput [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine readInput
eN_event/eN_Event [ Namelists ]
[ Top ] [ eN_event ] [ Namelists ]
NAME
NAMELIST /eN_Event/
PURPOSE
Namelist for stuff connected with the storage of the lepton-nucleon event:
eN_event/eNev_SetProcess [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_SetProcess(e, idProcess,idFamily)
PURPOSE
Set the process and the lepton family for the initialisation
INPUTS
- idProcess: +-1=(anti-)EM, +-2=(anti-)CC, +-3=(anti-)NC
- idFamily: 1=e-, 2=mu-, 3=tau-
eN_event/eNev_init_sWQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_sWQ(e, sqrts,W,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given sqrts,W,Q2. The target particle is a free nucleon.
eN_event/eNev_init_sxQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
suroutine eNev_init_sxQ(e, sqrts,xB,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given sqrts,xB,Q2. The target particle is a free nucleon.
eN_event/eNev_init_snQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
suroutine eNev_init_snQ(e, sqrts,nu,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given sqrts,nu,Q2. The target particle is a free nucleon.
NOTES
- This is the one routine from all the same ones labeled by "..._s?Q", which does the actual work
- The used kinematical relations can be derived via four-momenta squared: m^2 = (p_out)^2 = (p_in-q)^2 = m^2 - Q^2 - 2 p0 q0 + 2 pZ qZ and pX^2 = E^2 - m^2 - pZ^2
- You see: this routine is only valid for EM and NC case !
- Please note: the case pX^2<0 corresponds to the boundary Q^2 > 4 E (E-nu) (for m->0) which represents the case, that the 3-momenta of lepton and photon are identical. Violation of this boundary produces unphysical kinematics.
eN_event/eNev_init_eWQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_eWQ(e, eps,W,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given eps,W,Q2. The target particle is a free nucleon.
eN_event/eNev_init_exQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_exQ(e, eps,xB,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given eps,xB,Q2. The target particle is a free nucleon.
eN_event/eNev_init_enQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_enQ(e, eps,nu,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given eps,nu,Q2. The target particle is a free nucleon.
eN_event/eNev_init_BWQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_BWQ(e, Ebeam,W,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given Ebeam,W,Q2. The target particle is a free nucleon.
NOTES
This routine is used by initHiLepton.
eN_event/eNev_init_BnQ [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_BnQ(e, Ebeam,nu,Q2, flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via given Ebeam,nu,Q2. The target particle is a free nucleon.
NOTES
This routine is used by initHiLepton.
eN_event/eNev_init_Target [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_Target(e,pTarget,flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". The purpose of this routine is to specify the target nucleon and/or to calculate W etc..
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- type(particle), OPTIONAL :: pTarget -- target nucleon
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
- logical :: flagOK -- .true., if everything was okay
NOTES
You may call this routine, if all momenta are set. If yo do not give a new target nucleon, the nucleon as given in e0 is used.
eN_event/eNev_init_nuStep1 [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_nuStep1(e,pTarget)
PURPOSE
Step 1 of "neutrino init": Set the target nucleon. In Step 0 we have set the type of incoming and outgoing lepton, but not the kinematics. Therefore we can not use "init_Target" here.
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- type(particle) :: pTarget -- target nucleon
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
eN_event/eNev_init_nuStep2 [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_nuStep2(e,Enu,IP,flagOK)
PURPOSE
Step 2 of "neutrino init": Set the kinematic of the incoming neutrino. Additionaly, it is checked whether the energy is above threshold
The neutrino is aligned along the z-axis.
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- real :: Enu -- Energy of incoming lepton
- integer :: IP -- ID of process (needed for check)
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
- logical :: flagOK -- .true., if everything was okay
eN_event/eNev_init_nuStep3a [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_nuStep3a(e,Eprime,costheta,flagOK)
PURPOSE
Step 3 of "neutrino init": Set the kinematic of the outgoing lepton. Now we have fixed everything (comparable to "eNev_init_Target")
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- real :: Eprime -- Energy of scattered lepton
- real :: costheta -- Angle of scattered lepton
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
- logical :: flagOK -- .true., if everything was okay
eN_event/eNev_init_nuStep3b [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_nuStep3b(e,Eprime,Q2,flagOK)
PURPOSE
Step 3 of "neutrino init": Set the kinematic if the outgoing lepton. Now we have fixed everything (comparable to "eNev_init_Target")
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- real :: Eprime -- Energy of scattered lepton
- real :: Q2 -- 4-mom squared of boson
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
- logical :: flagOK -- .true., if everything was okay
eN_event/eNev_init_nuStep3c [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNev_init_nuStep3c(e,x,y,flagOK)
PURPOSE
Step 3 of "neutrino init": Set the kinematic if the outgoing lepton. Now we have fixed everything (comparable to "eNev_init_Target")
INPUTS
- type(electronNucleon_event) :: e -- the event to modify
- real :: x,y -- Bjorken variables
OUTPUT
- type(electronNucleon_event) :: e -- the event to modify
- logical :: flagOK -- .true., if everything was okay
NOTES
we use the lorentz invariant definitions x = -(qq)/2(pq), y = (pq)/(pk) and not the assumptions for resting target nucleon, x -> Q^2/2Mnu, y = nu/E .
eN_event/init_electronNucleon_event [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine init_electronNucleon_event(e, k_in,k_out,nuc,flagOK)
PURPOSE
Initialize an instance of "type(electronNucleon_event)". Here via incoming and outgoing lepton momenta
OUTPUT
- type(electronNucleon_event) :: e -- fully initialized event
- logical, optional :: flagOK -- .true. if all okay
NOTES
- This is used by Olli for the low energy lepton routines
- This routine is only valid for EM and e-
eN_event/RemovePot_DoNOT [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_DoNOT(e)
PURPOSE
Calculate the "FREE" kinematics by assuming the same kinematics as in the InMedium case. I.e., we do not remove the potential at all.
eN_event/RemovePot_THRE [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_THRE(e)
PURPOSE
Calculate the "FREE" kinematics by setting the free W according
W_free = W - m* + m ,
i.e. assuring the threshold behaviour. The momenta of the 'free' target nucleon are set in the CM frame.
eN_event/RemovePot_THRE2 [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_THRE2(e)
PURPOSE
Calculate the "FREE" kinematics by setting the free W according
W_free^2 = W^2 - m*^2 + m^2 ,
i.e. assuring the threshold behaviour as expected for neutrinos. The momenta of the 'free' target nucleon are set in the CM frame.
eN_event/RemovePot_CALC [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_CALC(e)
PURPOSE
Calculate the "FREE" kinematics, while removing the potential in the CALC frame
eN_event/RemovePot_CM [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_CM(e)
PURPOSE
Calculate the "FREE" kinematics, while removing the potential in the CM frame
NOTES
All the discussions in Juergen Lehr, PhD thesis, pages 159ff are obsolete
eN_event/RemovePot_NucleonRest [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
function RemovePot_NucleonRest(e)
PURPOSE
Calculate the "FREE" kinematics, while removing the potential and adjusting the photon 4-momentum in the nucleon rest frame
NOTES
Recipe proposed on a group meeting May 2011
eN_event/eNeV_GetKinV [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNeV_GetKinV(e, nu,Q2,W, Wfree, eps, fT)
PURPOSE
return the kinematical variables buried in the event type. additionally calculate :
- real :: fT -- transversal flux fT in GeV^-3
- real :: eps -- epsilon = fL/fT
NOTES
the flux calculation was taken from PyVP:
- the original formulae were implemented by Thomas Falter (PhD, eq.(3.15),(3.16)). We modified and corrected them.
- we are now trying to supersede those by a "low-W/low-Q2" expression.
- The equivalent photon energies are (we use the Hand convention) K = (W^2-M^2)/2M = (1-x)*nu = (1-x)*y*Ebeam [Hand] K = sqrt[nu^2+Q^2] [Gilman]
- if the global variable "restingNucleon" is true, then we assume a resting nucleon for the calculation of fT and eps. Otherwise we use the target four momentum (the returned value of nu is not influenced by this)
- the returned flux fT corresponds to (c_T = 1+(1-y)^2) f_T = \frac{\alpha}{2\pi} \frac{K}{Q^2\nu^2} c_T In order to get d\sigma/dE'd\cos\theta = \Gamma \sigma^*, one has to use \Gamma = f_T \frac{E E'}{\pi}
eN_event/eNeV_Get_LightX [ Functions ]
[ Top ] [ eN_event ] [ Functions ]
NAME
real function eNeV_Get_LightX(e)
PURPOSE
return the lightcone x, not Bjorken x !!
eN_event/eNeV_Get_CostLepton [ Functions ]
[ Top ] [ eN_event ] [ Functions ]
NAME
real function eNeV_Get_CostLepton(e)
PURPOSE
return the cosine of the angle between ncoming and outgoing lepton
NOTES
- TODO: This is probably already defined elsewhere. Replace!
eN_event/eNev_Set_PhiLepton [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
real function eNeV_Set_PhiLepton(e,phi)
PURPOSE
rotate the lepton vectors around z-axis
NOTES
We assume, that before rotation, the transverse direction was the x-axis and thee y-component was zero!
eN_event/eNev_CheckForDIS [ Functions ]
[ Top ] [ eN_event ] [ Functions ]
NAME
logical function eNeV_CheckForDIS()
PURPOSE
Apply cuts, which are also tested in PYGAGA and may leed to infinite loops or program abortion.
NOTES
One of the cuts in PYTHIA we commented out, so it is also not used here anymore
eN_event/eNev_GetLeptonCM [ Subroutines ]
[ Top ] [ eN_event ] [ Subroutines ]
NAME
subroutine eNeV_GetLeptonCM(e, betacm,phi,theta,phiLepton)
PURPOSE
NOTES
The pcm stored in the event type is the pcm of the boson-nucleon system. Here we return the pcm of the lepton-nucleon system.
This is e.g. used in DoColl_nuN_Py.
eN_event/nuclearFluxFactor_correction [ Functions ]
[ Top ] [ eN_event ] [ Functions ]
NAME
real function nuclearFluxFactor_correction(p_initial,l_initial)
PURPOSE
Evaluates the correction factor due to considering the nuclear flux factor instead of the ones of the single nucleons. Outputs |v_e-v_n|=l^\mu p_\mu /(l_0 p_0)
INPUTS
- real, dimension(0:3) :: p_initial, l_initial -- initial nucleon and lepton momenta
OUTPUT
- real :: nuclearFluxFactor_correction