Improved sim speed at high energies by stopping muons from wiggling in moderator wires

This commit is contained in:
Janka Gianluca 2023-01-13 15:53:53 +01:00
parent 3dc1b9bbfe
commit 023d7dc701

View File

@ -120,6 +120,20 @@ void musrSteppingAction::UserSteppingAction(const G4Step* aStep) {
aTrack->SetTrackStatus(fStopAndKill);
}
// put energy to 0 if muon+ energy is too low in the moderator wires (hack for Geant4 11.1, not sure before it seemed to work without. GJ)
if(aTrack->GetDynamicParticle()->GetDefinition()->GetParticleName() == "mu+" && aTrack->GetVolume()->GetLogicalVolume()->GetName().find("Wire") != std::string::npos){
if(preStepPoint->GetKineticEnergy() < 0.001*CLHEP::electronvolt){
postStepPoint->SetMomentumDirection(G4ThreeVector(0,0,0));
postStepPoint->SetKineticEnergy(0.001*CLHEP::electronvolt); //0 doesn't work. This is the minimum.
//aTrack->SetTrackStatus(fStopAndKill); //not optimal, no decay here
musrErrorMessage::GetInstance()->musrError(WARNING,
"musrSteppingAction: Mu+ has hit Wires in Moderator and wont stop 'wiggling'. Got stopped manually.",true);
}
}
// abort the event if it takes too long to finish (e.g. more than 60 seconds)
if ((time(0) - realTimeWhenThisEventStarted)>musrParameters::maximumTimePerEvent) {
G4RunManager* fRunManager = G4RunManager::GetRunManager();