source: ELYSE/HEAD/source/TrackingAction.cxx@ 626

Last change on this file since 626 was 294, checked in by campagne, 19 years ago

Unuseful Sensitive Detector for the moment (JEC)

File size: 5.4 KB
Line 
1#include "ELYSE/TrackingAction.hh"
2
3//Geant4
4#include "G4ParticleTable.hh"
5#include "G4ParticleTypes.hh"
6#include "G4TrackingManager.hh"
7#include "G4Track.hh"
8#include "G4ios.hh"
9#include "G4VProcess.hh"
10
11//ELYSE
12#include "ELYSE/Trajectory.hh"
13#include "ELYSE/TrackInformation.hh"
14#include "ELYSE/TrackingActionMessenger.hh"
15
16ELYSE::TrackingAction::TrackingAction() {
17 ProcessList.insert("eIoni") ;
18
19 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
20 ParticleList.insert(particleTable->FindParticle("e-")->GetPDGEncoding());
21 ParticleList.insert(particleTable->FindParticle("e+")->GetPDGEncoding());
22
23
24 // don't put gammas there or there'll be too many
25
26 messenger = new TrackingActionMessenger(this);
27
28}//Ctor
29
30//--------------------------------------------------------------------------------------------------
31
32ELYSE::TrackingAction::~TrackingAction(){
33 //JEC 24/1/06
34 delete messenger;
35 messenger = 0;
36}//Dtor
37
38//---------------------------------------------------------------------------------------------------
39
40void ELYSE::TrackingAction::PreUserTrackingAction(const G4Track* aTrack) {
41
42 G4ParticleDefinition* particleType = aTrack->GetDefinition();
43 G4String particleName = particleType->GetParticleName();
44
45
46 fpTrackingManager->SetStoreTrajectory(false); //Track default: no custom or G4Trajectories
47
48 //-----------optical photon: store trajectory objects
49
50// G4cout << "(JEC) PreUserTrackingAction (" << particleName
51// << ") and DrawOptical = " << drawOpticalPhoton
52// << G4endl;
53
54 if(!drawOpticalPhoton && (particleName == "opticalphoton") )return;
55
56 if(drawOpticalPhoton && (particleName == "opticalphoton") ){
57
58// G4cout << "(JEC) PreUserTrackingAction: Optical--ParentID : " << aTrack->GetParentID()
59// << G4endl;
60
61
62 Trajectory* aTrajectory = new Trajectory(aTrack);
63 fpTrackingManager->SetTrajectory(aTrajectory);
64 fpTrackingManager->SetStoreTrajectory(true); //(JEC) 14/12/05 keep it and delete it a posteriori
65 // only if it has not produced a hit
66
67 TrackInformation* aInfo = new TrackInformation(aTrack);
68 fpTrackingManager->SetUserTrackInformation(aInfo);
69
70 return;
71
72 }//eo optical photon
73
74 //-----------other particle: store trajectory objects
75
76 // A priori some tracks are worth to be saved
77 // is it a primary ?
78 // is the process in the set ?
79 // is the particle in the set ?
80 // is it a gamma with enough energy
81 // due to lazy evaluation of the 'or' in C++ the order is important
82
83 const G4VProcess* creatorProcess = aTrack->GetCreatorProcess();
84 G4double thresholdTobeSaved = 0.*keV; //JEC FIXME put in the messenger
85
86// G4cout << "(JEC) PreUserTrackingAction (" << particleName
87// << " ParentID " << aTrack->GetParentID();
88// if (creatorProcess!=0) G4cout << ") and Process Name " << creatorProcess->GetProcessName();
89// G4cout << G4endl;
90
91
92 //JEC 20/2/06 debug: keep all particle for the moment
93// if( ( aTrack->GetParentID() == 0 ) ||
94// ( (creatorProcess!=0) && ProcessList.count(creatorProcess->GetProcessName()) ) ||
95// ( ParticleList.count(particleType->GetPDGEncoding()) ) ||
96// ( (particleType->GetPDGEncoding() == 22) && (aTrack->GetTotalEnergy() > thresholdTobeSaved) ) ) {
97
98 //G4cout <<"Pre Tracking::particle = " << particleName
99 // << " " << aTrack << G4endl;
100
101 Trajectory* aTrajectory = new Trajectory(aTrack);
102 fpTrackingManager->SetTrajectory(aTrajectory);
103 fpTrackingManager->SetStoreTrajectory(true);
104 return;
105
106// }//eo particles
107
108
109
110}//PreUserTrackingAction
111
112//---------------------------------------------------------------------------------------------------
113
114void ELYSE::TrackingAction::PostUserTrackingAction(const G4Track* aTrack) {
115
116 //-----------Check StoreTrajectory for particle : true or false?
117
118 G4bool storetrajectory = fpTrackingManager->GetStoreTrajectory();
119 if(!storetrajectory)return;
120
121 G4ParticleDefinition* particleType = aTrack->GetDefinition();
122 G4String particleName = particleType->GetParticleName();
123
124 //-----------opticalphoton
125 //---------------do not store it if it is not detected by the Tyvek
126
127 if ( particleName == "opticalphoton" ) {
128
129 TrackInformation* aInfo = (TrackInformation*)(aTrack->GetUserInformation());
130
131 //G4cout <<"PostTracking::opticalphoton = "
132 // << particleName << " " << aTrack << " " << aInfo << G4endl;
133
134 //------------- produced or not a hit: if not remove and return
135
136 if ( !(aInfo->GetTrackStatus() & hitProduced) ) {
137 //JEC temporary fpTrackingManager->SetStoreTrajectory(false);
138 return;
139 }
140
141 }//eo optical photon
142
143 //-----------Get the trajectory from TrackingManager
144 //---------------and fill in
145
146 //G4cout <<"PostTracking::particles = "
147 // << particleName << " " << aTrack << G4endl;
148
149 Trajectory *currentTrajectory = (Trajectory*)fpTrackingManager->GimmeTrajectory();
150
151 G4ThreeVector currentPosition = aTrack->GetPosition();
152 G4VPhysicalVolume* currentVolume = aTrack->GetVolume();
153
154 currentTrajectory->SetStoppingPoint(currentPosition);
155 currentTrajectory->SetStoppingVolume(currentVolume);
156 currentTrajectory->SetSaveFlag(true); //For saving into Tuple (see EventAction)
157
158 //JEC to be fixed the above flag should not be needed now
159
160}//PostUserTrackingAction
161
162
163
164
Note: See TracBrowser for help on using the repository browser.