47 G4VModularPhysicsList::AddTransportation();
57 G4ParallelWorldScoringProcess* LArVoxelParallelWorldScoringProcess
58 =
new G4ParallelWorldScoringProcess(
"LArVoxelReadoutScoringProcess");
60 G4ParallelWorldScoringProcess* OpDetParallelWorldScoringProcess
61 =
new G4ParallelWorldScoringProcess(
"OpDetReadoutScoringProcess");
65 LArVoxelParallelWorldScoringProcess->SetParallelWorld(
"LArVoxelReadoutGeometry");
66 OpDetParallelWorldScoringProcess->SetParallelWorld(
"OpDetReadoutGeometry");
72 static G4ParticleTable* fParticleTable = G4ParticleTable::GetParticleTable();
73 G4ParticleTable::G4PTblDicIterator* theParticleIterator;
74 theParticleIterator=fParticleTable->GetIterator();
75 theParticleIterator->reset();
76 while( (*theParticleIterator)() ){
77 G4ParticleDefinition* particle = theParticleIterator->value();
81 if(particle->GetParticleType()==
"opticalphoton"){
82 G4ProcessManager* pmanager = particle->GetProcessManager();
83 pmanager->AddProcess(OpDetParallelWorldScoringProcess);
84 pmanager->SetProcessOrderingToLast(OpDetParallelWorldScoringProcess, idxAtRest);
85 pmanager->SetProcessOrdering(OpDetParallelWorldScoringProcess, idxAlongStep, 1);
86 pmanager->SetProcessOrderingToLast(OpDetParallelWorldScoringProcess, idxPostStep);
91 else if(particle->GetPDGCharge() != 0 && !particle->IsShortLived()){
92 G4ProcessManager* pmanager = particle->GetProcessManager();
93 if(!DisableWireplanes){
94 pmanager->AddProcess(LArVoxelParallelWorldScoringProcess);
95 pmanager->SetProcessOrderingToLast(LArVoxelParallelWorldScoringProcess, idxAtRest);
96 pmanager->SetProcessOrdering(LArVoxelParallelWorldScoringProcess, idxAlongStep, 1);
97 pmanager->SetProcessOrderingToLast(LArVoxelParallelWorldScoringProcess, idxPostStep);
101 G4bool genSecondaries(
false);
103 if (((particle->GetParticleName() == G4MuonPlus::MuonPlus()->GetParticleName() ||
104 particle->GetParticleName() == G4MuonMinus::MuonMinus()->GetParticleName()
108 ((particle->GetParticleName() == G4Proton::Proton()->GetParticleName() ||
109 particle->GetParticleName() == G4Neutron::Neutron()->GetParticleName() ||
110 particle->GetParticleName() == G4KaonZeroShort::KaonZeroShort()->GetParticleName() ||
111 particle->GetParticleName() == G4KaonZeroLong::KaonZeroLong()->GetParticleName() ||
112 particle->GetParticleName() == G4Lambda::Lambda()->GetParticleName()
119 it != EnabledPhysics.end(); it++){
120 std::string PhysicsName=(*it);
121 if (!PhysicsName.compare(
"SynchrotronAndGN") && lgp->
K0Bias()){
122 genSecondaries =
true;
124 if (!PhysicsName.compare(
"ChargeExchange")){
131 G4int nSecondaries(lgp->
K0Bias());
134 mf::LogInfo(
"PhysicsList: ") <<
"Turning on WrappedMuNuclear for " 135 << particle->GetParticleName()
136 <<
"s with " << nSecondaries
137 <<
" appropriately weighted secondaries." 138 <<
" XSBias is set to " 140 <<
" and the cross-section is increased by a factor of " 142 G4MuonNuclearProcess* g4MNI =
new G4MuonNuclearProcess();
143 MuNuclearSplittingProcessXSecBias* munuclSplitting =
new MuNuclearSplittingProcessXSecBias();
146 munuclSplitting->SetNSplit(nSecondaries,xSBias,fXSBias);
147 munuclSplitting->SetIsActive(active);
148 munuclSplitting->RegisterProcess(g4MNI);
151 if (xSBias&&(fXSBias>1)) pmanager->AddProcess(munuclSplitting,-1,1,1);
152 else pmanager->AddProcess(munuclSplitting,-1,-1,1);
156 mf::LogInfo(
"PhysicsList: ") <<
"Turning on ChargeExchange for " 157 << particle->GetParticleName() <<
"s.";
158 G4ChargeExchange* model =
new G4ChargeExchange();
159 G4ChargeExchangeProcess* p =
new G4ChargeExchangeProcess();
161 p->RegisterMe(model);
162 pmanager->AddDiscreteProcess(p);
180 (*itr)->ConstructProcess();
const std::vector< std::string > & EnabledPhysics() const
MaybeLogger_< ELseverityLevel::ELsev_info, false > LogInfo
#define G4MT_physicsVector
bool UseCustomPhysics() const
bool DisableWireplanes() const