Hi, so
I have this loop in my stepping action to try and record the electrons in my simulation. Unfortunately It appears to be double counting the number of electrons:
//SteppingAction.hh
struct ElectronTrack {
G4int trackID;
G4double totalLength;
bool counted;
ElectronTrack(G4int id) : trackID(id), totalLength(0.0), counted(false) {}
};
private:
std::map<G4int, ElectronTrack> electronTracks;
//SteppingAction.cc
void SteppingAction::UserSteppingAction(const G4Step* aStep)
{
...<other code>...
ElectronTrack& eleTrack = electronTracks[trackID];
if (aStep->GetTrack()->GetDynamicParticle()->GetDefinition() ->GetParticleName() == "e-"
){
/* G4cout << "ELECTRON"<<G4endl; */
G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
G4int eventid = G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID();
G4int trackID = track->GetTrackID();
G4double stepLength = step->GetStepLength();
eleTrack.totalLength += stepLength;
// Check for exit or absorption
if (track->GetTrackStatus() == fStopAndKill) {
G4double trackLength = eleTrack.totalLength;
// Process the track length as needed
G4ThreeVector position = track->GetPosition();
G4double energy = track->GetTotalEnergy();
G4double timing = track->GetGlobalTime();
G4ThreeVector mom =track->GetMomentum();
G4double tracklength = track->GetTrackLength();
G4cout << "ELECTRON, track length = "<< G4BestUnit(trklength,"Length")<< G4endl;
analysisManager->FillNtupleIColumn(1,0,eventid);
analysisManager->FillNtupleIColumn(1,1,trackID);
analysisManager->FillNtupleDColumn(1,2,position[0]);
analysisManager->FillNtupleDColumn(1,3,position[1]);
analysisManager->FillNtupleDColumn(1,4,position[2]);
analysisManager->FillNtupleDColumn(1,5,energy);
analysisManager->FillNtupleDColumn(1,6,timing);
analysisManager->FillNtupleDColumn(1,7,mom[0]);
analysisManager->FillNtupleDColumn(1,8,mom[1]);
analysisManager->FillNtupleDColumn(1,9,mom[2]);
analysisManager->FillNtupleDColumn(1,10,tracklength);
analysisManager->AddNtupleRow(1);
}
}
}
But it a appears that ~10 x the number of electrons as expected from theory are being stored. I think by counting via the steps without a check for repeating steps might explain this. Any advice is greatly appreciated! Thanks!
_Geant4 Version:_11.0.0
_Operating System:_MacOS
_Compiler/Version:_Apple clang version 14.0.0
_CMake Version:_3.25.1