96 static std::mutex userActionMutex;
97 std::lock_guard<std::mutex> userActionLock(userActionMutex);
109 if( G4RunManager::GetRunManager()->GetUserRunAction() ||
110 G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction() ||
111 G4RunManager::GetRunManager()->GetUserEventAction() ||
112 G4RunManager::GetRunManager()->GetUserStackingAction() ||
113 G4RunManager::GetRunManager()->GetUserTrackingAction() ||
114 G4RunManager::GetRunManager()->GetUserSteppingAction() )
116 ATH_MSG_FATAL(
"UserActionSvc has found that actions were already " <<
117 "registered to the G4RunManager. Check your code/configuration");
118 return StatusCode::FAILURE;
124 ATH_CHECK( tool->fillUserAction(actions) );
129 ATH_MSG_ERROR(
"Run action already exists for current thread!");
130 return StatusCode::FAILURE;
132 auto runAction = std::make_unique<G4AtlasRunAction>();
135 runAction->addRunAction(action);
136 G4RunManager::GetRunManager()->SetUserAction( runAction.get() );
141 ATH_MSG_ERROR(
"Primary generator action already exists for current thread!");
142 return StatusCode::FAILURE;
144 auto primaryGeneratorAction = std::make_unique<G4AtlasPrimaryGeneratorAction>();
147 primaryGeneratorAction->addPrimaryGeneratorAction(action);
148 G4RunManager::GetRunManager()->SetUserAction( primaryGeneratorAction.get() );
153 ATH_MSG_ERROR(
"Event action already exists for current thread!");
154 return StatusCode::FAILURE;
156 auto eventAction = std::make_unique<G4AtlasEventAction>();
159 eventAction->addEventAction(action);
161 action->SetEventManager( G4EventManager::GetEventManager() );
163 G4RunManager::GetRunManager()->SetUserAction( eventAction.get() );
168 ATH_MSG_ERROR(
"Stacking action already exists for current thread!");
169 return StatusCode::FAILURE;
171 auto stackAction = std::make_unique<G4AtlasStackingAction>();
174 stackAction->addAction(action);
176 action->SetStackManager( G4EventManager::GetEventManager()->GetStackManager() );
178 G4RunManager::GetRunManager()->SetUserAction( stackAction.get() );
183 ATH_MSG_ERROR(
"Tracking action already exists for current thread!");
184 return StatusCode::FAILURE;
186 auto trackAction = std::make_unique<G4AtlasTrackingAction>();
189 trackAction->addTrackAction(action);
191 action->SetTrackingManagerPointer ( G4EventManager::GetEventManager()->GetTrackingManager() );
193 G4RunManager::GetRunManager()->SetUserAction( trackAction.get() );
198 ATH_MSG_ERROR(
"Stepping action already exists for current thread!");
199 return StatusCode::FAILURE;
201 auto stepAction = std::make_unique<G4AtlasSteppingAction>();
204 stepAction->addAction(action);
206 action->SetSteppingManagerPointer( G4EventManager::GetEventManager()->GetTrackingManager()->GetSteppingManager() );
208 G4RunManager::GetRunManager()->SetUserAction( stepAction.get() );
211 return StatusCode::SUCCESS;