diff --git a/source/event/include/G4EventManager.hh b/source/event/include/G4EventManager.hh index 29679e0a22..e91ccd50b3 100644 --- a/source/event/include/G4EventManager.hh +++ b/source/event/include/G4EventManager.hh @@ -59,9 +59,6 @@ class G4EventManager static G4EventManager* GetEventManager(); // This method returns the singleton pointer of G4EventManager. - G4int ReserveNextTrackID(); - // Pre-assign the next sequential track ID to a secondary being born inside - // G4SteppingManager, so that its ID is available in UserSteppingAction. G4EventManager(); ~G4EventManager(); diff --git a/source/event/src/G4EventManager.cc b/source/event/src/G4EventManager.cc index 5943606ddf..d3b4855435 100644 --- a/source/event/src/G4EventManager.cc +++ b/source/event/src/G4EventManager.cc @@ -172,6 +172,8 @@ void G4EventManager::DoProcessing(G4Event* anEvent, } #endif + trackManager->SetTrackIDCounter(&trackIDCounter); + std::unordered_set trackingManagersToFlush; do @@ -401,11 +403,6 @@ G4int G4EventManager::StoreSubEvent(G4Event* evt, G4int& subEvtType, G4SubEvent* return evt->StoreSubEvent(subEvtType,se); } -G4int G4EventManager::ReserveNextTrackID() -{ - return ++trackIDCounter; -} - void G4EventManager::StackTracks(G4TrackVector* trackVector, G4bool IDhasAlreadySet) { diff --git a/source/tracking/include/G4SteppingManager.hh b/source/tracking/include/G4SteppingManager.hh index 80a75ecdb0..3f74264d2d 100644 --- a/source/tracking/include/G4SteppingManager.hh +++ b/source/tracking/include/G4SteppingManager.hh @@ -90,6 +90,7 @@ class G4SteppingManager void SetUserAction(G4UserSteppingAction* apAction); G4Track* GetTrack() const; void SetVerboseLevel(G4int vLevel); + void SetTrackIDCounter(G4int* counter) { fTrackIDCounter = counter; } void SetVerbose(G4VSteppingVerbose*); G4Step* GetStep() const; void SetNavigator(G4Navigator* value); @@ -195,6 +196,8 @@ class G4SteppingManager G4double sumEnergyChange = 0.0; + G4int* fTrackIDCounter = nullptr; // pointer into G4EventManager::trackIDCounter, set via SetTrackIDCounter + G4VParticleChange* fParticleChange = nullptr; G4Track* fTrack = nullptr; G4TrackVector* fSecondary = nullptr; diff --git a/source/tracking/include/G4TrackingManager.hh b/source/tracking/include/G4TrackingManager.hh index 5a1d352148..8eb8a21bb7 100644 --- a/source/tracking/include/G4TrackingManager.hh +++ b/source/tracking/include/G4TrackingManager.hh @@ -78,6 +78,7 @@ class G4TrackingManager void SetStoreTrajectory(G4int value); G4SteppingManager* GetSteppingManager() const; + void SetTrackIDCounter(G4int* counter) { fpSteppingManager->SetTrackIDCounter(counter); } G4UserTrackingAction* GetUserTrackingAction() const; diff --git a/source/tracking/src/G4SteppingManager.cc b/source/tracking/src/G4SteppingManager.cc index 6768bbfac2..6e3b92ad5c 100644 --- a/source/tracking/src/G4SteppingManager.cc +++ b/source/tracking/src/G4SteppingManager.cc @@ -32,7 +32,6 @@ // -------------------------------------------------------------------- #include "G4SteppingManager.hh" -#include "G4EventManager.hh" #include "G4ForceCondition.hh" #include "G4GPILSelection.hh" @@ -603,7 +602,9 @@ G4int G4SteppingManager::ProcessSecondariesFromParticleChange() // Pre-assign track ID so it is visible in UserSteppingAction via // GetSecondaryInCurrentStep(); G4EventManager::StackTracks skips re-assignment. - tempSecondaryTrack->SetTrackID(G4EventManager::GetEventManager()->ReserveNextTrackID()); + if (fTrackIDCounter) { + tempSecondaryTrack->SetTrackID(++(*fTrackIDCounter)); + } // If this 2ndry particle has 'zero' kinetic energy, make sure // it invokes a rest process at the beginning of the tracking