DV Creating LUND Files

From New IAC Wiki
Jump to navigation Jump to search

The LUND format

The LUND file format is broken into two parts. The first part of the format is the header, which basically tells how many particles follow this line. For Moller scattering, this number should always be two electrons. The second component of the LUND format contains the kinematic variable for the scattered electron and the Moller electron.

The LUND format has extra variables that are not utilized within GEMC. Only the BOLD variables are necessary within GEMC simulations.[1]

The Header

LUND Header
Column Quantity
1
Number of Particles
2
Number of Target Nucleons
3
Number of Target Protons
4
Target Polarization
5
Beam Polarization
6
x
7
y
8
W
9
[math]Q^2[/math]
10
[math]\nu[/math]

Where

1:Number of Particles

This line tells how many particles follow the header line. For Moller Scattering, this number should always be 2.

2:Number of Target Nucleons

For this simulation, only an electron-electron collision is considered. This quantity is always set to 1 for the one stationary electron we consider the incident electron scattering from.

3:Number of Target Protons

For Moller Scattering, there are no target protons. This number is set to 1, but does not have any effect within the GEMC simulations.

4:Target Polarization

This represents the polarization of the target material, either positive or negative 1. This value is always set to 1 and has no effect within the GEMC simulations.

5:Beam Polarization

This represents the polarization of the electron beam, either negative or positive 1. This value is always set to positive 1.

6:x

This represents the Bjorken x scaling variable. [2]

[math]x=\frac{-q^2}{2p\cdot q}=\frac{-q^2}{2M\nu}=\frac{Q^2}{2M\nu}[/math]


Where M is the rest mass-energy of the proton[math] M\approx 938MeV[/math]

7:y

[math]y=\frac{p\cdot q}{p\cdot k}=\frac{\nu}{E_i}=\frac{E_i-E_f}{E_i}[/math][2]

8:W

The invariant mass of the final hadronic system


[math]W^2\equiv (p+q)^2=M^2+2M\nu+q^2=M^2+2M\nu-Q^2[/math]

9:[math]Q^2[/math]

This represents the squared 4-momentum-transfer vector q of the exchanged virtual photon.[3]


[math]Q^2\equiv -q^2[/math]


Where q is the momentum transfer betwwn the incident electron and target via the virtual photon.


[math]q\equiv k_i-k_f[/math]

10:[math]\nu[/math]

This represents the energy loss between scattering electrons.

[math]\nu = \frac{p\cdot q}{M}[/math]

This can be written in the Lab frame as:


[math]\nu\equiv E_i-E_f[/math]


where Ei and Ef are the initial and final electron energies.

Particles

Particle Data
Column Quantity
1
Index
2
Charge
3
Type (1 is active)
4
Particle ID
5
Parent Index
6
Daughter Index
7
Momentum x (GeV)
8
Momentum y (GeV)
9
Momentum z (GeV)
10
[math]E[/math]
11
Mass
12
Vertex x (cm)
13
Vertex y (cm)
14
Vertex z (cm)


Where

1:Index

From the header line 1, which states how many particles follow, this counts in increments of one up to the required number.

2:Charge

-1, 0, 1

3:Type

1 denotes that this is an active particle that can interact within the simulation.

4:Particle ID

This quantity follows the Particle Data Group Monte Carlo numbering scheme for representing what type of particle is simulated.[4]

File:MontecarlorPDGparticleID.pdf

5:Parent Index

This signifies if the particle can be considered a primary (=0) or secondary particle. For this simulation, GEMC does not utilize this variable and all values have been set to 0

6:Daughter Index

This signifies if the particle has created secondary particles. For this simulation, GEMC does not utilize this variable and all values have been set to 0.

7:Momentum x

This is the value of the momentum vector in the x direction. Values must be given in GeV.

8:Momentum y

This is the value of the momentum vector in the y direction. Values must be given in GeV.

9:Momentum z

This is the value of the momentum vector in the z direction. Values must be given in GeV.

10:E

E is the total relativistic energy,

[math]E\equiv \sqrt{p^2+m^2}[/math]

For the Ultrarelativistic limit,

[math]E\approx p\ \ \ [/math]Since [math]p\ggg m[/math]

11:Mass

This represents the rest mass-energy of the particle being simulated. For Moller scattering this value has been set to .000511 GeV.

12:Vertex x

This represents the x position within the eg12 detector at time t=0.

13:Vertex y

This represents the y position within the eg12 detector at time t=0.

14:Vertex z

This represents the z position within the eg12 detector at time t=0.

Writing LUND files

Reading the GEANT4 simulation output in,

void MollerLUND()
{
        struct evt_t
                {
                Long_t event;
                Float_t IntKE, IntMom[3],IntPos[3],FnlKE,FnlMom[3],FnlPos[3],MolKE,MolMom[3],MolPos[3];
                };
        ifstream in;
        in.open("MollerScattering_NH3_4e8incident.dat");
        evt_t evt;
        Int_t nlines=0;
        TFile *f = new TFile("MollerScattering_NH3_4e7incident.root","RECREATE");
        TTree *tree0 = new TTree("MollerScattering_NH3_4e7","Moller data from ascii file");
        FILE *f0;
        f0=fopen("MollerScattering_NH3_4e7.LUND","w");
                
        tree0->Branch("evt",&evt.event,"event/I:IntKE/F:IntPx:IntPy:IntPz:IntPosx:IntPosy:IntPosz:FnlKE:FnlPx:FnlPy:FnlPz:FnlPosx:FnlPosy:FnlPosz:
                MolKE:MolPx:MolPy:MolPz:MolPosx:MolPosy:MolPosz");
                
        while(in.good())
                {
                evt.event=nlines; 
                in >> evt.IntKE >> evt.IntMom[0] >> evt.IntMom[1] >> evt.IntMom[2]   >> evt.IntPos[0]
                >> evt.IntPos[1] >> evt.IntPos[2] >> evt.FnlKE >> evt.FnlMom[0] >> evt.FnlMom[1] >> evt.FnlMom[2]
                >> evt.FnlPos[0] >> evt.FnlPos[1] >> evt.FnlPos[2] >> evt.MolKE >> evt.MolMom[0] >> evt.MolMom[1]
                >> evt.MolMom[2] >> evt.MolPos[0] >> evt.MolPos[1] >> evt.MolPos[2];                double Nu;
                double x_bj; // Bjorken-x
                double y;
                double W ; // missing mass
        
// Momentum and Energy are measured in MeV!
        
                evt.FnlKE=sqrt(evt.FnlMom[0]*evt.FnlMom[0]+evt.FnlMom[1]*evt.FnlMom[1]+evt.FnlMom[2]*evt.FnlMom[2]+0.511*0.511);
                evt.MolKE=sqrt(evt.MolMom[0]*evt.MolMom[0]+evt.MolMom[1]*evt.MolMom[1]+evt.MolMom[2]*evt.MolMom[2]+0.511*0.511);
        
        
                Nu=evt.IntKE-evt.FnlKE;
                Qsqrd=4*evt.IntKE*evt.FnlKE*(1-evt.FnlMom[2]/evt.FnlKE)/2; /* should be final momentum and not final energy*/
                
                x_bj=Qsqrd/(2*0.938*Nu);
                y=Nu/evt.IntKE;
                W=0.938*0.938+2*0.938*Nu-Qsqrd;
                if(W>0) 
                        W=sqrt(W);
                
//
// MeV MUST be converted to GeV for LUND format!  

                double px,py,pz;
                double Px,Py,Pz;
                double KE,ke;
                
                Px=evt.FnlMom[0]/10;
                Py=evt.FnlMom[1]/10;
                Pz=evt.FnlMom[2]/10;                
                px=evt.MolMom[0]/100;
                py=evt.MolMom[1]/100;
                pz=evt.MolMom[2]/100;
                
                KE=evt.FnlKE/10;
                ke=evt.MolKE/100;


                fprintf(f0,"%d\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\n",2,1.,1.,1.,1.,x_bj,y,W,Qsqrd,Nu);
                fprintf(f0, "%d\t%g\t%g\t%g\t%g\t%g\t%f\t%f\t%f\t%f\t%g\t%g\t%g\t%g\n",
                         1,-1.,1.,11.,0.,0.,Px,Py,Pz,KE,0.000511, 0.,0.,0.);
                fprintf(f0, "%d\t%g\t%g\t%g\t%g\t%g\t%f\t%f\t%f\t%f\t%g\t%g\t%g\t%g\n",
                         2,-1.,1.,11.,0.,0.,px,py,pz,ke,0.000511, 0.,0.,0.);
                
                        
                nlines++;
                tree0->Fill();
                }
        printf("NumberLines=%d\n",nlines);
        tree0->Print();
        tree0->Write();
        delete tree0;
                
 }


The file is written as seen below.

LUND view.png

Corrections

The prefered coordinates for the reconstruction within GEMC would have the vertex location at (0, 0, 0). The Moller event data from GEANT4 contains the location within that simulation where the scattering occured. These variables will need to be renormalized within the LUND file to zero. Only the 14th column within the 2nd and 3rd rows out of every 3 rows needs to be changed. Using a script:


awk '{if('NR%3==2'||'NR%3==0') {$14="0"}; print $0}' MollerScattering_NH3_4e7.LUND>MollerScattering.LUND

The LUND format has a limit of 75000 lines, so to account for this by creating 21 new files with the suffix of aa-au are created:

split -l 75000 MollerScattering.LUND MollerScattering_NH3_4e7_ 

We will use 5 of the 21 sets of 75000 entries in GEMC trials involving different solenoid field strengths. We can use the simple command:

 mv MollerScattering_NH3_4e7_aa MollerScattering_NH3_4e7_aa.LUND

Repeating this for the other 4 files.

References

[1] M. Ungaro, et al., Jefferson Lab:The LUND format, https://gemc.jlab.org/gemc/html/documentation/generator/lund.html (2016)

[2] F. Halzen, and A. Martin, Quarks and Leptons:An Introductory Course in Modern Particle Physics, John Wiley & Sons (1984)

[3] W. Tung, Bjorken scaling, http://www.scholarpedia.org/article/Bjorken_scaling (2009)

[4] L. Garren, et al., MONTE CARLO PARTICLE NUMBERING SCHEME, http://pdg.lbl.gov/2007/reviews/montecarlorpp.pdf (2007)



Links

Back