Import Geant4 10.7.0.beta source tree
This commit is contained in:
@@ -23,10 +23,10 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4EventManager class implementation
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// Author: M.Asai, SLAC
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
#include "G4EventManager.hh"
|
||||
#include "G4ios.hh"
|
||||
@@ -42,73 +42,54 @@
|
||||
#include "Randomize.hh"
|
||||
|
||||
G4ThreadLocal G4EventManager* G4EventManager::fpEventManager = nullptr;
|
||||
G4EventManager* G4EventManager::GetEventManager()
|
||||
{ return fpEventManager; }
|
||||
|
||||
G4EventManager::G4EventManager()
|
||||
:currentEvent(nullptr),trajectoryContainer(nullptr),
|
||||
trackIDCounter(0),
|
||||
verboseLevel(0),tracking(false),abortRequested(false),
|
||||
storetRandomNumberStatusToG4Event(false)
|
||||
G4EventManager* G4EventManager::GetEventManager()
|
||||
{
|
||||
if(fpEventManager)
|
||||
{
|
||||
G4Exception("G4EventManager::G4EventManager","Event0001",FatalException,
|
||||
"G4EventManager::G4EventManager() has already been made.");
|
||||
}
|
||||
else
|
||||
{
|
||||
trackManager = new G4TrackingManager;
|
||||
transformer = new G4PrimaryTransformer;
|
||||
trackContainer = new G4StackManager;
|
||||
theMessenger = new G4EvManMessenger(this);
|
||||
sdManager = G4SDManager::GetSDMpointerIfExist();
|
||||
stateManager = G4StateManager::GetStateManager();
|
||||
fpEventManager = this;
|
||||
userEventAction = nullptr;
|
||||
userStackingAction = nullptr;
|
||||
userTrackingAction = nullptr;
|
||||
userSteppingAction = nullptr;
|
||||
}
|
||||
return fpEventManager;
|
||||
}
|
||||
|
||||
/* private -> never called
|
||||
G4EventManager::G4EventManager(const G4EventManager&) {;}
|
||||
G4EventManager& G4EventManager::operator=(const G4EventManager&)
|
||||
{ return *this; }
|
||||
*/
|
||||
G4EventManager::G4EventManager()
|
||||
{
|
||||
if(fpEventManager != nullptr)
|
||||
{
|
||||
G4Exception("G4EventManager::G4EventManager", "Event0001", FatalException,
|
||||
"G4EventManager::G4EventManager() has already been made.");
|
||||
}
|
||||
else
|
||||
{
|
||||
trackManager = new G4TrackingManager;
|
||||
transformer = new G4PrimaryTransformer;
|
||||
trackContainer = new G4StackManager;
|
||||
theMessenger = new G4EvManMessenger(this);
|
||||
sdManager = G4SDManager::GetSDMpointerIfExist();
|
||||
stateManager = G4StateManager::GetStateManager();
|
||||
fpEventManager = this;
|
||||
}
|
||||
}
|
||||
|
||||
G4EventManager::~G4EventManager()
|
||||
{
|
||||
delete trackContainer;
|
||||
delete transformer;
|
||||
delete trackManager;
|
||||
delete theMessenger;
|
||||
delete userEventAction;
|
||||
fpEventManager = 0;
|
||||
delete trackContainer;
|
||||
delete transformer;
|
||||
delete trackManager;
|
||||
delete theMessenger;
|
||||
delete userEventAction;
|
||||
fpEventManager = nullptr;
|
||||
}
|
||||
|
||||
/*
|
||||
const G4EventManager & G4EventManager::operator=(const G4EventManager &right)
|
||||
{ }
|
||||
G4bool G4EventManager::operator==(const G4EventManager &right) const { }
|
||||
G4bool G4EventManager::operator!=(const G4EventManager &right) const { }
|
||||
*/
|
||||
|
||||
void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
{
|
||||
abortRequested = false;
|
||||
G4ApplicationState currentState = stateManager->GetCurrentState();
|
||||
if(currentState!=G4State_GeomClosed)
|
||||
if(currentState != G4State_GeomClosed)
|
||||
{
|
||||
G4Exception("G4EventManager::ProcessOneEvent",
|
||||
"Event0002", JustWarning,
|
||||
"IllegalApplicationState -- Geometry is not closed : cannot process an event.");
|
||||
G4Exception("G4EventManager::ProcessOneEvent", "Event0002", JustWarning,
|
||||
"IllegalState -- Geometry not closed: cannot process an event.");
|
||||
return;
|
||||
}
|
||||
currentEvent = anEvent;
|
||||
stateManager->SetNewState(G4State_EventProc);
|
||||
if(storetRandomNumberStatusToG4Event>1)
|
||||
if(storetRandomNumberStatusToG4Event > 1)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
CLHEP::HepRandom::saveFullState(oss);
|
||||
@@ -116,14 +97,14 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
currentEvent->SetRandomNumberStatusForProcessing(randomNumberStatusToG4Event);
|
||||
}
|
||||
|
||||
// Resetting Navigator has been moved to G4EventManager, so that resetting
|
||||
// is now done for every event.
|
||||
// Resetting Navigator has been moved to G4EventManager,
|
||||
// so that resetting is now done for every event.
|
||||
G4ThreeVector center(0,0,0);
|
||||
G4Navigator* navigator =
|
||||
G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking();
|
||||
G4Navigator* navigator = G4TransportationManager::GetTransportationManager()
|
||||
->GetNavigatorForTracking();
|
||||
navigator->LocateGlobalPointAndSetup(center,0,false);
|
||||
|
||||
G4Track * track = nullptr;
|
||||
G4Track* track = nullptr;
|
||||
G4TrackStatus istop = fAlive;
|
||||
|
||||
#ifdef G4VERBOSE
|
||||
@@ -142,7 +123,7 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
#endif
|
||||
|
||||
sdManager = G4SDManager::GetSDMpointerIfExist();
|
||||
if(sdManager)
|
||||
if(sdManager != nullptr)
|
||||
{ currentEvent->SetHCofThisEvent(sdManager->PrepareNewEvent()); }
|
||||
|
||||
if(userEventAction) userEventAction->BeginOfEventAction(currentEvent);
|
||||
@@ -156,27 +137,29 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
#endif
|
||||
|
||||
if(!abortRequested)
|
||||
{ StackTracks( transformer->GimmePrimaries( currentEvent, trackIDCounter ),true ); }
|
||||
{
|
||||
StackTracks(transformer->GimmePrimaries(currentEvent,trackIDCounter), true);
|
||||
}
|
||||
|
||||
#ifdef G4VERBOSE
|
||||
if ( verboseLevel > 0 )
|
||||
{
|
||||
G4cout << trackContainer->GetNTotalTrack() << " primaries "
|
||||
<< "are passed from G4EventTransformer." << G4endl;
|
||||
<< "are passed from G4EventTransformer." << G4endl;
|
||||
G4cout << "!!!!!!! Now start processing an event !!!!!!!" << G4endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
G4VTrajectory* previousTrajectory;
|
||||
while( ( track = trackContainer->PopNextTrack(&previousTrajectory) ) != 0 ) // Loop checking 12.28.2015 M.Asai
|
||||
{
|
||||
while( (track=trackContainer->PopNextTrack(&previousTrajectory)) != nullptr )
|
||||
{ // Loop checking 12.28.2015 M.Asai
|
||||
|
||||
#ifdef G4VERBOSE
|
||||
if ( verboseLevel > 1 )
|
||||
{
|
||||
G4cout << "Track " << track << " (trackID " << track->GetTrackID()
|
||||
<< ", parentID " << track->GetParentID()
|
||||
<< ") is passed to G4TrackingManager." << G4endl;
|
||||
<< ", parentID " << track->GetParentID()
|
||||
<< ") is passed to G4TrackingManager." << G4endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -189,16 +172,16 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
if ( verboseLevel > 0 )
|
||||
{
|
||||
G4cout << "Track (trackID " << track->GetTrackID()
|
||||
<< ", parentID " << track->GetParentID()
|
||||
<< ", parentID " << track->GetParentID()
|
||||
<< ") is processed with stopping code " << istop << G4endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
G4VTrajectory * aTrajectory = nullptr;
|
||||
G4VTrajectory* aTrajectory = nullptr;
|
||||
#ifdef G4_STORE_TRAJECTORY
|
||||
aTrajectory = trackManager->GimmeTrajectory();
|
||||
|
||||
if(previousTrajectory)
|
||||
if(previousTrajectory != nullptr)
|
||||
{
|
||||
previousTrajectory->MergeTrajectory(aTrajectory);
|
||||
delete aTrajectory;
|
||||
@@ -206,14 +189,16 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
}
|
||||
if(aTrajectory&&(istop!=fStopButAlive)&&(istop!=fSuspend))
|
||||
{
|
||||
if(!trajectoryContainer)
|
||||
{ trajectoryContainer = new G4TrajectoryContainer;
|
||||
currentEvent->SetTrajectoryContainer(trajectoryContainer); }
|
||||
if(trajectoryContainer == nullptr)
|
||||
{
|
||||
trajectoryContainer = new G4TrajectoryContainer;
|
||||
currentEvent->SetTrajectoryContainer(trajectoryContainer);
|
||||
}
|
||||
trajectoryContainer->insert(aTrajectory);
|
||||
}
|
||||
#endif
|
||||
|
||||
G4TrackVector * secondaries = trackManager->GimmeSecondaries();
|
||||
G4TrackVector* secondaries = trackManager->GimmeSecondaries();
|
||||
switch (istop)
|
||||
{
|
||||
case fStopButAlive:
|
||||
@@ -233,15 +218,14 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
break;
|
||||
|
||||
case fAlive:
|
||||
G4Exception("G4EventManager::DoProcessing","Event004",JustWarning,
|
||||
"Illegal trackstatus returned from G4TrackingManager. Continue with"\
|
||||
"simulation.");
|
||||
G4Exception("G4EventManager::DoProcessing", "Event004", JustWarning,
|
||||
"Illegal trackstatus returned from G4TrackingManager."\
|
||||
" Continue with simulation.");
|
||||
break;
|
||||
case fKillTrackAndSecondaries:
|
||||
//if( secondaries ) secondaries->clearAndDestroy();
|
||||
if( secondaries )
|
||||
{
|
||||
for(size_t i=0;i<secondaries->size();i++)
|
||||
for(std::size_t i=0; i<secondaries->size(); ++i)
|
||||
{ delete (*secondaries)[i]; }
|
||||
secondaries->clear();
|
||||
}
|
||||
@@ -258,29 +242,30 @@ void G4EventManager::DoProcessing(G4Event* anEvent)
|
||||
}
|
||||
#endif
|
||||
|
||||
if(sdManager)
|
||||
{ sdManager->TerminateCurrentEvent(currentEvent->GetHCofThisEvent()); }
|
||||
if(sdManager != nullptr)
|
||||
{
|
||||
sdManager->TerminateCurrentEvent(currentEvent->GetHCofThisEvent());
|
||||
}
|
||||
|
||||
if(userEventAction) userEventAction->EndOfEventAction(currentEvent);
|
||||
if(userEventAction)
|
||||
{
|
||||
userEventAction->EndOfEventAction(currentEvent);
|
||||
}
|
||||
|
||||
stateManager->SetNewState(G4State_GeomClosed);
|
||||
currentEvent = nullptr;
|
||||
abortRequested = false;
|
||||
}
|
||||
|
||||
void G4EventManager::StackTracks(G4TrackVector *trackVector,G4bool IDhasAlreadySet)
|
||||
void G4EventManager::StackTracks(G4TrackVector* trackVector,
|
||||
G4bool IDhasAlreadySet)
|
||||
{
|
||||
if( trackVector )
|
||||
if( trackVector != nullptr )
|
||||
{
|
||||
//size_t n_passedTrack = trackVector->size();
|
||||
//if( n_passedTrack == 0 ) return;
|
||||
//for( size_t i = 0; i < n_passedTrack; i++ )
|
||||
//{
|
||||
// newTrack = (*trackVector)[ i ];
|
||||
if( trackVector->size() == 0 ) return;
|
||||
for( auto newTrack : *trackVector )
|
||||
{
|
||||
trackIDCounter++;
|
||||
++trackIDCounter;
|
||||
if(!IDhasAlreadySet)
|
||||
{
|
||||
newTrack->SetTrackID( trackIDCounter );
|
||||
@@ -297,9 +282,9 @@ void G4EventManager::StackTracks(G4TrackVector *trackVector,G4bool IDhasAlreadyS
|
||||
if ( verboseLevel > 1 )
|
||||
{
|
||||
G4cout << "A new track " << newTrack
|
||||
<< " (trackID " << newTrack->GetTrackID()
|
||||
<< ", parentID " << newTrack->GetParentID()
|
||||
<< ") is passed to G4StackManager." << G4endl;
|
||||
<< " (trackID " << newTrack->GetTrackID()
|
||||
<< ", parentID " << newTrack->GetParentID()
|
||||
<< ") is passed to G4StackManager." << G4endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -310,7 +295,10 @@ void G4EventManager::StackTracks(G4TrackVector *trackVector,G4bool IDhasAlreadyS
|
||||
void G4EventManager::SetUserAction(G4UserEventAction* userAction)
|
||||
{
|
||||
userEventAction = userAction;
|
||||
if(userEventAction) userEventAction->SetEventManager(this);
|
||||
if(userEventAction != nullptr)
|
||||
{
|
||||
userEventAction->SetEventManager(this);
|
||||
}
|
||||
}
|
||||
|
||||
void G4EventManager::SetUserAction(G4UserStackingAction* userAction)
|
||||
@@ -337,18 +325,20 @@ void G4EventManager::ProcessOneEvent(G4Event* anEvent)
|
||||
DoProcessing(anEvent);
|
||||
}
|
||||
|
||||
void G4EventManager::ProcessOneEvent(G4TrackVector* trackVector,G4Event* anEvent)
|
||||
void G4EventManager::ProcessOneEvent(G4TrackVector* trackVector,
|
||||
G4Event* anEvent)
|
||||
{
|
||||
static G4ThreadLocal G4String *randStat = 0;
|
||||
if (!randStat) randStat = new G4String;
|
||||
static G4ThreadLocal G4String* randStat = nullptr;
|
||||
if (randStat == nullptr) randStat = new G4String;
|
||||
trackIDCounter = 0;
|
||||
G4bool tempEvent = false;
|
||||
if(!anEvent)
|
||||
if(anEvent == nullptr)
|
||||
{
|
||||
anEvent = new G4Event();
|
||||
tempEvent = true;
|
||||
}
|
||||
if(storetRandomNumberStatusToG4Event==1 || storetRandomNumberStatusToG4Event==3)
|
||||
if (storetRandomNumberStatusToG4Event==1
|
||||
|| storetRandomNumberStatusToG4Event==3)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
CLHEP::HepRandom::saveFullState(oss);
|
||||
@@ -356,18 +346,18 @@ void G4EventManager::ProcessOneEvent(G4TrackVector* trackVector,G4Event* anEvent
|
||||
}
|
||||
StackTracks(trackVector,false);
|
||||
DoProcessing(anEvent);
|
||||
if(tempEvent)
|
||||
{ delete anEvent; }
|
||||
if(tempEvent) { delete anEvent; }
|
||||
}
|
||||
|
||||
void G4EventManager::SetUserInformation(G4VUserEventInformation* anInfo)
|
||||
{
|
||||
G4ApplicationState currentState = stateManager->GetCurrentState();
|
||||
if(currentState!=G4State_EventProc || currentEvent==0)
|
||||
if(currentState != G4State_EventProc || currentEvent == 0)
|
||||
{
|
||||
G4Exception("G4EventManager::SetUserInformation",
|
||||
"Event0003", JustWarning,
|
||||
"G4VUserEventInformation cannot be set because of ansense of G4Event.");
|
||||
"G4VUserEventInformation cannot be set because of absence "\
|
||||
"of G4Event.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -377,14 +367,18 @@ void G4EventManager::SetUserInformation(G4VUserEventInformation* anInfo)
|
||||
G4VUserEventInformation* G4EventManager::GetUserInformation()
|
||||
{
|
||||
G4ApplicationState currentState = stateManager->GetCurrentState();
|
||||
if(currentState!=G4State_EventProc || currentEvent==0)
|
||||
{ return 0; }
|
||||
if(currentState != G4State_EventProc || currentEvent == 0)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return currentEvent->GetUserInformation();
|
||||
}
|
||||
|
||||
void G4EventManager::KeepTheCurrentEvent()
|
||||
{ if(currentEvent) currentEvent->KeepTheEvent(); }
|
||||
{
|
||||
if(currentEvent != nullptr) { currentEvent->KeepTheEvent(); }
|
||||
}
|
||||
|
||||
void G4EventManager::AbortCurrentEvent()
|
||||
{
|
||||
@@ -392,4 +386,3 @@ void G4EventManager::AbortCurrentEvent()
|
||||
trackContainer->clear();
|
||||
if(tracking) trackManager->EventAborted();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user