30 #include "SToGSConfig.hh"
35 #include "G4SDManager.hh"
36 #include "G4TrackingManager.hh"
38 #ifdef G4MULTITHREADED
39 #include "G4AutoLock.hh"
40 namespace { G4Mutex buildMutex = G4MUTEX_INITIALIZER; }
48 if ( atrack->GetParentID() == 0 ) {
49 if ( atrack->GetUserInformation() ) {
51 fpTrackingManager->SetUserTrackInformation(pinfo);
55 theRealAction->PreUserTrackingAction(atrack);
60 G4TrackVector *secondaries = fpTrackingManager->GimmeSecondaries();
62 size_t nbSecondaries = secondaries->size();
63 if ( nbSecondaries > 0 ) {
65 G4int pid = atrack->GetTrackID();
69 for (
size_t i = 0; i < nbSecondaries; i++) {
71 (*secondaries)[i]->SetUserInformation(sinfo);
76 theRealAction->PostUserTrackingAction(atrack);
81 #if G4VERSION_NUMBER < 1000
84 : G4VUserActionInitialization(),
86 fUserActionOption(user_action_opt),
87 fWhichGenerator(which_gene,which_gene_opt)
92 for (
size_t i = 0; i < fAllUserAction.size(); i++) {
93 if ( fAllUserAction[i] ) {
94 delete fAllUserAction[i];
95 fAllUserAction[i] = 0x0;
101 std::pair < G4String, G4String > current = fWhichGenerator, new_one(which_gene,option);
103 fWhichGenerator = new_one;
125 G4VUserPrimaryGeneratorAction *gun = 0x0;
126 if ( which ==
"GPS" )
130 if ( which == MYPRI_ )
131 gun =
new MYPRI_CLASSTYPE(opt);
138 return GetGun(fWhichGenerator.first,fWhichGenerator.second);
146 G4cout <<
"[+[SToGS::UserActionInitialization::GetTrackerSD()]] Creating a Tracker SD " << G4endl;
147 G4VSensitiveDetector *aSD = 0x0;
150 G4SDManager::GetSDMpointer();
152 #ifdef G4MULTITHREADED
156 SDman->AddNewDetector(aSD);
158 aSD = SDman->FindSensitiveDetector(name,
false);
162 SDman->AddNewDetector(aSD);
165 G4cout <<
"[_[SToGS::UserActionInitialization::GetTrackerSD()]] Creating a Tracker SD " << G4endl;
171 G4cout <<
"[+[SToGS::UserActionInitialization::GetCopClusterSD()]] Creating a CopCluster SD " << G4endl;
172 G4VSensitiveDetector *aSD = 0x0;
175 G4SDManager::GetSDMpointer();
177 #ifdef G4MULTITHREADED
181 SDman->AddNewDetector(aSD);
183 aSD = SDman->FindSensitiveDetector(name,
false);
187 SDman->AddNewDetector(aSD);
190 G4cout <<
"[_[SToGS::UserActionInitialization::GetCopClusterSD()]] Creating a CopCluster SD " << G4endl;
196 #ifdef G4MULTITHREADED
197 G4AutoLock lock(&buildMutex);
199 G4cout <<
" ------ INF ------ from SToGS::UserActionInitialization::BuildAndRegister() " << G4endl;
200 #if G4VERSION_NUMBER < 1000
201 G4cout <<
" *** ERROR *** SToGS::UserActionInitialization::BuildAndRegister() should never be called by this version of Geant4 " << G4endl;
203 SetUserAction( GetGun(fWhichGenerator.first,fWhichGenerator.second) );
205 fAllUserAction.push_back(actions);
212 G4cout <<
" ------ END ------ from SToGS::UserActionInitialization::BuildAndRegister() " << G4endl;
217 #ifdef G4MULTITHREADED
218 G4AutoLock lock(&buildMutex);
220 G4cout <<
" ------ INF ------ from SToGS::UserActionInitialization::Register() " << G4endl;
221 #if G4VERSION_NUMBER < 1000
222 G4cout <<
" *** ERROR *** SToGS::AllInOneUserActionInitialization::Build() should never be called by this version of Geant4 " << G4endl;
224 fAllUserAction.push_back(actions);
226 G4cout <<
" ------ END ------ from SToGS::UserActionInitialization::Register() " << G4endl;
void BuildAndRegister(AllActions *) const
add the passed class to the list of allocated ones. It is required for a proper destruction ...
Informations to be kept at each step if a positive energy is deposited in a sensitive detector...
virtual void PreUserTrackingAction(const G4Track *atrack)
UserActionInitialization(G4String which_user_action_opt, G4String which_gene, G4String which_gene_opt)
Base class for a Run action that calls a concrete one.
Base class for a Tracking action that calls a concrete one.
Base class for a Steeping action that calls a concrete one.
static G4VSensitiveDetector * GetCopClusterSD(G4String name="/SToGS/SD/CopCluster")
to get a general SToGS Calorimeter. In Multi-threading mode, return a new instance otherwise a global...
Base class for a Event action that calls a concrete one.
static G4VSensitiveDetector * GetTrackerSD(G4String name="/SToGS/SD/Tracker")
to get a general SToGS tracker. In Multi-threading mode, return a new instance otherwise a global one...
virtual G4VUserPrimaryGeneratorAction * GetGun() const
depending on one string, select a given gun
virtual void PostUserTrackingAction(const G4Track *atrack)
std::pair< G4String, G4String > SetWhichGenerator(G4String which_gene, G4String option)
once allocated the generator associated with a UserActionInititialization could be changed here befor...
Base class that regroups in the same space all user's hooks. Convenient for sharing similar data...
void Register(AllActions *) const
This class is just calling the GPS interface - Could be exported to any other G4 Applications.
virtual ~UserActionInitialization()