33#include "G4EmConfigurator.hh"
34#include "G4FastSimulationManagerProcess.hh"
35#include "G4LossTableManager.hh"
36#include "G4PAIModel.hh"
37#include "G4PAIPhotModel.hh"
38#include "G4ProcessManager.hh"
39#include "G4ProcessVector.hh"
40#include "G4ProductionCuts.hh"
42#include "G4RegionStore.hh"
43#include "G4SystemOfUnits.hh"
44#include "G4UnitsTable.hh"
46#include "QGSP_BERT_HP.hh"
52 SetVerboseLevel(verb);
53 defaultCutValue = 1 * CLHEP::mm;
54 QGSP_BERT_HP* physicsList =
new QGSP_BERT_HP;
55 for (G4int i = 0;; ++i) {
56 G4VPhysicsConstructor* elem =
57 const_cast<G4VPhysicsConstructor*
>(physicsList->GetPhysics(i));
58 if (elem == NULL)
break;
59 G4cout <<
"RegisterPhysics: " << elem->GetPhysicsName() << G4endl;
60 RegisterPhysics(elem);
73 auto fastSimProcess_garfield =
new G4FastSimulationManagerProcess(
"G4FSMP_garfield");
75 auto theParticleIterator = GetParticleIterator();
76 theParticleIterator->reset();
77 while ((*theParticleIterator)()) {
78 G4ParticleDefinition* particle = theParticleIterator->value();
79 G4ProcessManager* pmanager = particle->GetProcessManager();
80 G4EmConfigurator* config = G4LossTableManager::Instance()->EmConfigurator();
81 G4LossTableManager::Instance()->SetVerbose(1);
83 auto particleName = particle->GetParticleName();
85 pmanager->AddDiscreteProcess(fastSimProcess_garfield);
90 particleName,
"geant4");
92 particleName,
"geant4");
93 if (ionizationModel ==
"PAI") {
94 G4PAIModel* pai =
new G4PAIModel(particle,
"G4PAIModel");
95 if (particleName ==
"e-" || particleName ==
"e+") {
96 config->SetExtraEmModel(particleName,
"eIoni", pai,
97 "RegionGarfield", eMin, eMax, pai);
98 }
else if (particleName ==
"mu-" || particleName ==
"mu+") {
99 config->SetExtraEmModel(particleName,
"muIoni", pai,
100 "RegionGarfield", eMin, eMax, pai);
101 }
else if (particleName ==
"proton" ||
102 particleName ==
"pi+" || particleName ==
"pi-") {
103 config->SetExtraEmModel(particleName,
"hIoni", pai,
104 "RegionGarfield", eMin, eMax, pai);
105 }
else if (particleName ==
"alpha" || particleName ==
"He3" ||
106 particleName ==
"GenericIon") {
107 config->SetExtraEmModel(particleName,
"ionIoni", pai,
108 "RegionGarfield", eMin, eMax, pai);
110 }
else if (ionizationModel ==
"PAIPhot") {
111 G4PAIPhotModel* paiPhot =
new G4PAIPhotModel(particle,
"G4PAIModel");
112 if (particleName ==
"e-" || particleName ==
"e+") {
113 config->SetExtraEmModel(particleName,
"eIoni", paiPhot,
114 "RegionGarfield", eMin, eMax, paiPhot);
115 }
else if (particleName ==
"mu-" || particleName ==
"mu+") {
116 config->SetExtraEmModel(particleName,
"muIoni", paiPhot,
117 "RegionGarfield", eMin, eMax, paiPhot);
118 }
else if (particleName ==
"proton" ||
119 particleName ==
"pi+" || particleName ==
"pi-") {
120 config->SetExtraEmModel(particleName,
"hIoni", paiPhot,
121 "RegionGarfield", eMin, eMax, paiPhot);
122 }
else if (particleName ==
"alpha" || particleName ==
"He3" ||
123 particleName ==
"GenericIon") {
124 config->SetExtraEmModel(particleName,
"ionIoni", paiPhot,
125 "RegionGarfield", eMin, eMax, paiPhot);
133 G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100. * eV,
136 SetCutsWithDefault();
138 G4Region* region = G4RegionStore::GetInstance()->GetRegion(
"RegionGarfield");
139 G4ProductionCuts* cuts =
new G4ProductionCuts();
140 cuts->SetProductionCut(1 * um, G4ProductionCuts::GetIndex(
"gamma"));
141 cuts->SetProductionCut(1 * um, G4ProductionCuts::GetIndex(
"e-"));
142 cuts->SetProductionCut(1 * um, G4ProductionCuts::GetIndex(
"e+"));
144 region->SetProductionCuts(cuts);
147 DumpCutValuesTable();
151 G4VModularPhysicsList::ConstructParticle();
155 G4VModularPhysicsList::ConstructProcess();
Definition of the GarfieldPhysicsList class.
Definition of the GarfieldPhysics class.
void AddParameterisation()
virtual void ConstructProcess()
virtual void ConstructParticle()
virtual ~GarfieldPhysicsList()
double GetMaxEnergyMeVParticle(std::string name, std::string program="garfield")
static GarfieldPhysics * GetInstance()
double GetMinEnergyMeVParticle(std::string name, std::string program="garfield")
std::string GetIonizationModel()
bool FindParticleName(const std::string name, std::string program="garfield")