85 theParameters->ActivateDNA();
86 theParameters->SetFluo(
true);
91G4bool G4EmDNAPhysicsActivator::IsVerbose()
const
107 const std::vector<G4String>& regnamesDNA = theParameters->RegionsDNA();
108 std::size_t nreg = regnamesDNA.size();
114 const std::vector<G4String>& typesDNA = theParameters->TypesDNA();
115 G4bool fast = theParameters->DNAFast();
116 G4bool st = theParameters->DNAStationary();
118 const G4double emaxDNA = 1.*CLHEP::MeV;
119 const G4double emaxIonDNA = 300.*CLHEP::MeV;
120 const G4double emaxLightIonDNA = 400.*CLHEP::MeV;
121 const G4double eminBorn = 500.*CLHEP::keV;
122 const G4double emax = theParameters->MaxKinEnergy();
125 G4cout <<
"### G4EmDNAPhysicsActivator::ConstructProcess for " << nreg
126 <<
" regions; DNA physics type " <<
G4endl;
141 for(std::size_t i = 0; i < nreg; ++i)
145 G4cout <<
"### DNA models type " << typesDNA[i]
146 <<
" are activated for G4Region " << regnamesDNA[i] <<
G4endl;
149 if(
nullptr == reg) {
continue; }
151 if(typesDNA[i] ==
"DNA_Opt1") {
153 }
else if(typesDNA[i] ==
"DNA_Opt2") {
155 }
else if(typesDNA[i] ==
"DNA_Opt3") {
157 }
else if(typesDNA[i] ==
"DNA_Opt4") {
159 }
else if(typesDNA[i] ==
"DNA_Opt5") {
161 }
else if(typesDNA[i] ==
"DNA_Opt6") {
163 }
else if(typesDNA[i] ==
"DNA_Opt7") {
165 }
else if(typesDNA[i] ==
"DNA_Opt8") {
168 DeactivateElectronProcesses(emaxDNA, emax, reg);
170 DeactivateHadronProcesses(prot, emaxIonDNA, emax, reg);
172 DeactivateIonProcesses(gion, emaxIonDNA, emax, reg);
174 DeactivateIonProcesses(
alpha2, emaxLightIonDNA, emax, reg);
176 DeactivateHadronProcesses(alpha1, emaxLightIonDNA, emax, reg);
185void G4EmDNAPhysicsActivator::DeactivateElectronProcesses(
const G4double emaxDNA,
189 if(emaxDNA >= emax) {
return; }
190 const G4double msclimit = 100.*CLHEP::MeV;
195 if(emaxDNA < msclimit) {
197 G4VMultipleScattering* msc =
dynamic_cast<G4VMultipleScattering*
>(p);
198 G4double elim = std::min(msclimit, emax);
200 msc =
new G4eMultipleScattering();
203 auto mod =
new G4GoudsmitSaundersonMscModel();
204 mod->SetActivationLowEnergyLimit(emaxDNA);
205 mod->SetHighEnergyLimit(elim);
210 G4VEnergyLossProcess* ptr =
dynamic_cast<G4VEnergyLossProcess*
>(p);
211 G4VEmFluctuationModel* fluc =
nullptr;
213 ptr =
new G4eIonisation();
216 auto modi =
new G4MollerBhabhaModel();
217 modi->SetActivationLowEnergyLimit(emaxDNA);
218 modi->SetHighEnergyLimit(emax);
219 fluc =
new G4UniversalFluctuation();
223 ptr =
dynamic_cast<G4VEnergyLossProcess*
>(p);
225 ptr =
new G4eBremsstrahlung();
228 auto modb =
new G4SeltzerBergerModel();
229 modb->SetAngularDistribution(
new G4Generator2BS());
230 modb->SetActivationLowEnergyLimit(emaxDNA);
231 modb->SetHighEnergyLimit(emax);
244 if(emaxDNA >= emax) {
return; }
247 G4VMultipleScattering* msc =
dynamic_cast<G4VMultipleScattering*
>(p);
249 msc =
new G4hMultipleScattering();
252 G4VMscModel* mod =
new G4UrbanMscModel();
257 const G4double braggmax = 2*CLHEP::MeV;
259 G4VEnergyLossProcess* ptr =
dynamic_cast<G4VEnergyLossProcess*
>(p);
260 G4VEmFluctuationModel* fluc;
263 br =
new G4BraggIonModel();
264 fluc =
new G4IonFluctuations();
266 br =
new G4BraggModel();
267 fluc =
new G4UniversalFluctuation();
271 ptr =
new G4ionIonisation();
273 ptr =
new G4hIonisation();
282 auto be =
new G4BetheBlochModel();
283 be->SetLowEnergyLimit(braggmax);
284 be->SetActivationLowEnergyLimit(braggmax);
285 be->SetHighEnergyLimit(emax);
288 DeactivateNuclearStopping(part, emaxDNA, reg);
299 if(emaxDNA >= emax) {
return; }
302 G4VMultipleScattering* msc =
dynamic_cast<G4VMultipleScattering*
>(p);
304 msc =
new G4hMultipleScattering();
307 auto mod =
new G4UrbanMscModel();
312 const G4double braggmax = 2*CLHEP::MeV;
314 G4VEnergyLossProcess* ptr =
dynamic_cast<G4VEnergyLossProcess*
>(p);
315 G4VEmFluctuationModel* fluc =
new G4IonFluctuations();
317 ptr =
new G4ionIonisation();
321 auto br =
new G4BraggIonModel();
326 auto be =
new G4BetheBlochModel();
327 be->SetLowEnergyLimit(braggmax);
328 be->SetActivationLowEnergyLimit(braggmax);
329 be->SetHighEnergyLimit(emax);
332 DeactivateNuclearStopping(part, emaxDNA, reg);
343 G4NuclearStopping* ptr =
dynamic_cast<G4NuclearStopping*
>(p);
345 auto mod =
new G4ICRU49NuclearStoppingModel();
G4GLOB_DLL std::ostream G4cout
static G4DNAGenericIonsManager * Instance()
G4ParticleDefinition * GetIon(const G4String &name)
static G4Electron * Electron()
static void ConstructDNALightIonPhysics(G4ParticleDefinition *part, const G4int charge, const G4int opt, const G4double emax, const G4bool fast, const G4bool stationary, const G4Region *reg=nullptr)
static void ConstructDNAParticles()
static void ConstructDNAIonPhysics(const G4double emax, const G4bool stationary, const G4Region *reg=nullptr)
static void ConstructDNAProtonPhysics(const G4double e1DNA, const G4double emaxDNA, const G4int opt, const G4bool fast, const G4bool stationary, const G4Region *reg=nullptr)
static void ConstructDNAElectronPhysics(const G4double emaxDNA, const G4int opt, const G4bool fast, const G4bool stationary, const G4Region *reg=nullptr)
void ConstructProcess() override
void ConstructParticle() override
G4EmDNAPhysicsActivator(G4int ver=1)
static G4EmParameters * Instance()
static const G4Region * FindRegion(const G4String ®ionName, const G4int verbose=0)
static G4GenericIon * GenericIon()
static G4VProcess * FindProcess(const G4ParticleDefinition *, G4int subtype)
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4Proton * Proton()
void SetHighEnergyLimit(G4double)
void SetActivationLowEnergyLimit(G4double)
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=nullptr, const G4Region *region=nullptr)
void SetFluctModel(G4VEmFluctuationModel *)
void AddEmModel(G4int order, G4VMscModel *, const G4Region *region=nullptr)
G4VPhysicsConstructor(const G4String &="")