16 #include "Geant4/G4ParallelWorldScoringProcess.hh" 17 #include "Geant4/G4ParticleDefinition.hh" 18 #include "Geant4/G4ParticleTable.hh" 19 #include "Geant4/G4VModularPhysicsList.hh" 21 #include "Geant4/G4ChargeExchange.hh" 22 #include "Geant4/G4ChargeExchangeProcess.hh" 23 #include "Geant4/G4ProcessManager.hh" 27 #include "Geant4/G4PhysListStamper.hh" 30 #define G4MT_physicsVector ((G4VMPLsubInstanceManager.offset[g4vmplInstanceID]).physicsVector) 40 G4VModularPhysicsList::AddTransportation();
50 G4ParallelWorldScoringProcess* LArVoxelParallelWorldScoringProcess =
51 new G4ParallelWorldScoringProcess(
"LArVoxelReadoutScoringProcess");
53 G4ParallelWorldScoringProcess* OpDetParallelWorldScoringProcess =
54 new G4ParallelWorldScoringProcess(
"OpDetReadoutScoringProcess");
58 LArVoxelParallelWorldScoringProcess->SetParallelWorld(
"LArVoxelReadoutGeometry");
59 OpDetParallelWorldScoringProcess->SetParallelWorld(
"OpDetReadoutGeometry");
65 static G4ParticleTable* fParticleTable = G4ParticleTable::GetParticleTable();
66 G4ParticleTable::G4PTblDicIterator* theParticleIterator;
67 theParticleIterator = fParticleTable->GetIterator();
68 theParticleIterator->reset();
69 while ((*theParticleIterator)()) {
70 G4ParticleDefinition* particle = theParticleIterator->value();
72 if (particle->GetParticleType() ==
"opticalphoton") {
73 G4ProcessManager* pmanager = particle->GetProcessManager();
74 pmanager->AddProcess(OpDetParallelWorldScoringProcess);
75 pmanager->SetProcessOrderingToLast(OpDetParallelWorldScoringProcess, idxAtRest);
76 pmanager->SetProcessOrdering(OpDetParallelWorldScoringProcess, idxAlongStep, 1);
77 pmanager->SetProcessOrderingToLast(OpDetParallelWorldScoringProcess, idxPostStep);
82 else if (particle->GetPDGCharge() != 0 && !particle->IsShortLived()) {
83 G4ProcessManager* pmanager = particle->GetProcessManager();
84 if (!DisableWireplanes) {
85 pmanager->AddProcess(LArVoxelParallelWorldScoringProcess);
86 pmanager->SetProcessOrderingToLast(LArVoxelParallelWorldScoringProcess, idxAtRest);
87 pmanager->SetProcessOrdering(LArVoxelParallelWorldScoringProcess, idxAlongStep, 1);
88 pmanager->SetProcessOrderingToLast(LArVoxelParallelWorldScoringProcess, idxPostStep);
92 G4bool genSecondaries(
false);
94 if (((particle->GetParticleName() == G4MuonPlus::MuonPlus()->GetParticleName() ||
95 particle->GetParticleName() == G4MuonMinus::MuonMinus()->GetParticleName()) &&
97 ((particle->GetParticleName() == G4Proton::Proton()->GetParticleName() ||
98 particle->GetParticleName() == G4Neutron::Neutron()->GetParticleName() ||
99 particle->GetParticleName() == G4KaonZeroShort::KaonZeroShort()->GetParticleName() ||
100 particle->GetParticleName() == G4KaonZeroLong::KaonZeroLong()->GetParticleName() ||
101 particle->GetParticleName() == G4Lambda::Lambda()->GetParticleName()) &&
105 it != EnabledPhysics.end();
108 if (!PhysicsName.compare(
"SynchrotronAndGN") && lgp->
K0Bias()) {
109 genSecondaries =
true;
111 if (!PhysicsName.compare(
"ChargeExchange")) { cE =
true; }
115 if (genSecondaries) {
116 G4int nSecondaries(lgp->
K0Bias());
120 <<
"Turning on WrappedMuNuclear for " << particle->GetParticleName() <<
"s with " 121 << nSecondaries <<
" appropriately weighted secondaries." 122 <<
" XSBias is set to " << xSBias
123 <<
" and the cross-section is increased by a factor of " << fXSBias <<
".";
124 G4MuonNuclearProcess* g4MNI =
new G4MuonNuclearProcess();
129 munuclSplitting->
SetNSplit(nSecondaries, xSBias, fXSBias);
131 munuclSplitting->RegisterProcess(g4MNI);
134 if (xSBias && (fXSBias > 1))
135 pmanager->AddProcess(munuclSplitting, -1, 1, 1);
137 pmanager->AddProcess(munuclSplitting, -1, -1, 1);
142 <<
"Turning on ChargeExchange for " << particle->GetParticleName() <<
"s.";
143 G4ChargeExchange*
model =
new G4ChargeExchange();
144 G4ChargeExchangeProcess*
p =
new G4ChargeExchangeProcess();
146 p->RegisterMe(model);
147 pmanager->AddDiscreteProcess(p);
165 (*itr)->ConstructProcess();
const std::vector< std::string > & EnabledPhysics() const
TConfigurablePhysicsList< ModularPhysicsList > PhysicsList
void SetIsActive(G4bool doIt)
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
void SetNSplit(G4int nTrx, G4int xB=0, G4double xFac=1)
G4_DECLARE_PHYSLIST_FACTORY_NS(larg4::PhysicsList, larg4, PhysicsList)
bool UseCustomPhysics() const
#define G4MT_physicsVector
virtual void ConstructProcess()
bool DisableWireplanes() const