File indexing completed on 2025-02-23 09:20:46
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "GB06BOptrSplitAndKillByImportance.hh"
0030
0031 #include "GB06BOptnSplitAndKillByImportance.hh"
0032
0033 #include "G4BiasingProcessInterface.hh"
0034 #include "G4BiasingProcessSharedData.hh"
0035 #include "G4ParallelGeometriesLimiterProcess.hh"
0036 #include "G4ParticleDefinition.hh"
0037 #include "G4ParticleTable.hh"
0038 #include "G4TouchableHandle.hh"
0039 #include "G4TransportationManager.hh"
0040 #include "G4VProcess.hh"
0041
0042
0043
0044 GB06BOptrSplitAndKillByImportance::GB06BOptrSplitAndKillByImportance(G4String particleName,
0045 G4String name)
0046 : G4VBiasingOperator(name),
0047 fParallelWorld(nullptr),
0048 fParallelWorldIndex(-1),
0049 fBiasingLimiterProcess(nullptr)
0050 {
0051 fParticleToBias = G4ParticleTable::GetParticleTable()->FindParticle(particleName);
0052
0053 if (fParticleToBias == 0) {
0054 G4ExceptionDescription ed;
0055 ed << "Particle `" << particleName << "' not found !" << G4endl;
0056 G4Exception("GB06BOptrSplitAndKillByImportance(...)", "exGB06.01", JustWarning, ed);
0057 }
0058
0059 fSplitAndKillByImportance = new GB06BOptnSplitAndKillByImportance("splitterFor_" + particleName);
0060 }
0061
0062
0063
0064 GB06BOptrSplitAndKillByImportance::~GB06BOptrSplitAndKillByImportance()
0065 {
0066 delete fSplitAndKillByImportance;
0067 }
0068
0069
0070
0071 void GB06BOptrSplitAndKillByImportance::StartRun()
0072 {
0073
0074
0075
0076
0077 const G4ProcessManager* processManager = fParticleToBias->GetProcessManager();
0078
0079 fBiasingSharedData = G4BiasingProcessInterface::GetSharedData(processManager);
0080
0081 fBiasingLimiterProcess = fBiasingSharedData->GetParallelGeometriesLimiterProcess();
0082 fParallelWorldIndex = fBiasingLimiterProcess->GetParallelWorldIndex(fParallelWorld);
0083
0084
0085 fSplitAndKillByImportance->SetBiasingSharedData(fBiasingSharedData);
0086 fSplitAndKillByImportance->SetParallelWorldIndex(fParallelWorldIndex);
0087 fSplitAndKillByImportance->SetImportanceMap(&fImportanceMap);
0088 }
0089
0090
0091
0092 G4VBiasingOperation* GB06BOptrSplitAndKillByImportance::ProposeNonPhysicsBiasingOperation(
0093 const G4Track* track, const G4BiasingProcessInterface* )
0094 {
0095
0096 if (track->GetDefinition() != fParticleToBias) return 0;
0097
0098
0099 return fSplitAndKillByImportance;
0100 }