ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PurgMagSteppingAction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PurgMagSteppingAction.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // Code developed by:
27 // S.Larsson
28 //
29 // ***********************************
30 // * *
31 // * PurgMagSteppingAction.cc *
32 // * *
33 // ***********************************
34 //
35 //
36 
37 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
38 
39 #include "PurgMagSteppingAction.hh"
40 #include "PurgMagRunAction.hh"
42 
43 #include "G4SteppingManager.hh"
44 #include "G4Electron.hh"
45 #include "G4Gamma.hh"
46 #include "G4Positron.hh"
47 #include "G4VTouchable.hh"
48 #include "G4VPhysicalVolume.hh"
49 
51 #include "G4SystemOfUnits.hh"
52 
53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
54 
57 :Detector(det)
58 { }
59 
60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
61 
63 { }
64 
65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
66 
68 
69 {
71 
72  //Collection at SSD in N-tuples. Electrons and photons separated
73  //Prestep point in World, next volume MeasureVolume, process transportation
74  if ((aStep->GetPreStepPoint()->GetPhysicalVolume() == Detector->GetWorld())&&
75  (aStep->GetTrack()->GetNextVolume() == Detector->GetMeasureVolume())&&
76  //(aStep->GetTrack()->GetMomentumDirection().z()>0.)&& // only particles with positive momentum
77  (aStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName() == "Transportation"))
78  {
79  G4double gx, gy, gz, ge, gpx, gpy, gpz, ex, ey, ez, ee;
80  G4double epx, epy, epz, px, py, pz, pe, ppx, ppy, ppz;
81 
82  // Electrons
83  if(aStep->GetTrack()->GetDynamicParticle()->GetDefinition()
85  {//Position
86  ex = (aStep->GetTrack()->GetPosition().x())/cm;
87  ey = (aStep->GetTrack()->GetPosition().y())/cm;
88  ez = (aStep->GetTrack()->GetPosition().z())/cm;
89  // Energy
90  ee = (aStep->GetTrack()->GetKineticEnergy())/MeV;
91  // Momentum
92  epx = aStep->GetTrack()->GetMomentum().x();
93  epy = aStep->GetTrack()->GetMomentum().y();
94  epz = aStep->GetTrack()->GetMomentum().z();
95 
96  // Fill N-tuple electrons ( id = 1)
97  man->FillNtupleDColumn(1,0, ex);
98  man->FillNtupleDColumn(1,1, ey);
99  man->FillNtupleDColumn(1,2, ez);
100  man->FillNtupleDColumn(1,3, ee);
101  man->FillNtupleDColumn(1,4, epx);
102  man->FillNtupleDColumn(1,5, epy);
103  man->FillNtupleDColumn(1,6, epz);
104  man->AddNtupleRow(1);
105  }
106 
107  // Photons
108  if (aStep->GetTrack()->GetDynamicParticle()->GetDefinition() ==
110  {
111 
112  // Position
113  gx = (aStep->GetTrack()->GetPosition().x())/cm;
114  gy = (aStep->GetTrack()->GetPosition().y())/cm;
115  gz = (aStep->GetTrack()->GetPosition().z())/cm;
116 
117  // Energy
118  ge = (aStep->GetTrack()->GetKineticEnergy())/MeV;
119 
120  // Momentum
121  gpx = aStep->GetTrack()->GetMomentum().x();
122  gpy = aStep->GetTrack()->GetMomentum().y();
123  gpz = aStep->GetTrack()->GetMomentum().z();
124 
125  // Fill N-tuple photons (id=2)
126  man->FillNtupleDColumn(2,0, gx);
127  man->FillNtupleDColumn(2,1, gy);
128  man->FillNtupleDColumn(2,2, gz);
129  man->FillNtupleDColumn(2,3, ge);
130  man->FillNtupleDColumn(2,4, gpx);
131  man->FillNtupleDColumn(2,5, gpy);
132  man->FillNtupleDColumn(2,6, gpz);
133  man->AddNtupleRow(2);
134  }
135 
136 
137  // Positrons
138  if (aStep->GetTrack()->GetDynamicParticle()->GetDefinition() ==
140  {
141 
142  // Position
143  px = (aStep->GetTrack()->GetPosition().x())/cm;
144  py = (aStep->GetTrack()->GetPosition().y())/cm;
145  pz = (aStep->GetTrack()->GetPosition().z())/cm;
146 
147  // Energy
148  pe = (aStep->GetTrack()->GetKineticEnergy())/MeV;
149 
150  // Momentum
151  ppx = aStep->GetTrack()->GetMomentum().x();
152  ppy = aStep->GetTrack()->GetMomentum().y();
153  ppz = aStep->GetTrack()->GetMomentum().z();
154 
155  // Fill Ntuple positrons ( id = 3)
156  man->FillNtupleDColumn(3,0, px);
157  man->FillNtupleDColumn(3,1, py);
158  man->FillNtupleDColumn(3,2, pz);
159  man->FillNtupleDColumn(3,3, pe);
160  man->FillNtupleDColumn(3,4, ppx);
161  man->FillNtupleDColumn(3,5, ppy);
162  man->FillNtupleDColumn(3,6, ppz);
163  man->AddNtupleRow(3);
164  }
165  }
166 }
167 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....