106static const G4double lowEnergyRPWBA = 100*CLHEP::MeV;
107static const G4double lowEnergyMSC = 1*CLHEP::MeV;
108static const G4double lowEnergyProtonIoni = 2*CLHEP::MeV;
120 genericIonsManager->
GetIon(
"alpha+");
121 genericIonsManager->
GetIon(
"helium");
122 genericIonsManager->
GetIon(
"hydrogen");
152 cModel->SetHighEnergyLimit(20*CLHEP::MeV);
153 theComptonScattering->AddEmModel(0, cModel);
165 if(emin_elec < emax) {
171 }
else if(mscType ==
dnaGS) {
177 msc_el->SetEmModel(msc_model_el);
182 mb_el->SetActivationLowEnergyLimit(emin_elec);
183 ioni->SetEmModel(mb_el);
188 sb_el->SetActivationLowEnergyLimit(emin_elec);
189 sb_el->SetHighEnergyLimit(emax);
191 brem->SetEmModel(sb_el);
201 }
else if(mscType ==
dnaGS) {
206 msc_pos->SetEmModel(msc_model_pos);
212 sb->SetHighEnergyLimit(emax);
214 brem->SetEmModel(sb);
219 if(emin_proton < emax) {
221 StandardHadronPhysics(part, lowEnergyMSC, emin_proton, emax,
226 if(emin_ion < emax) {
228 StandardHadronPhysics(ion, lowEnergyMSC, emin_ion, emax,
233 if(emin_alpha < emax) {
235 StandardHadronPhysics(part, lowEnergyMSC, emin_alpha, emax,
241 part = genericIonsManager->
GetIon(
"alpha+");
242 StandardHadronPhysics(part, lowEnergyMSC, emin_alpha, emax,
246 const std::vector<G4int> chargedParticles = {
247 13, -13, 211, -211, 321, -321, -2212,
248 1000010020, 1000010030, 1000020030
270 msc_model =
new G4UrbanMscModel();
278 G4VEnergyLossProcess* ioni =
nullptr;
279 G4VEmModel* mod1 =
nullptr;
281 ioni =
new G4ionIonisation();
282 mod1 =
new G4BraggIonModel();
284 ioni =
new G4hIonisation();
285 mod1 =
new G4BraggModel();
292 G4VEmModel* mod2 =
new G4BetheBlochModel();
316 G4double emaxCPA100 = 250*CLHEP::keV;
318 emaxE = 10.*CLHEP::keV;
319 emaxT = 10.*CLHEP::eV;
321 emaxT = 11.*CLHEP::eV;
327 therm->SetHighEnergyLimit(emaxT);
338 mod->SelectStationary(stationary);
345 pElasticProcess->AddEmModel(-2, elast, reg);
347 if(
nullptr != elast2) {
351 pElasticProcess->AddEmModel(-3, elast2, reg);
358 theDNAExc->AddEmModel(-1, modE, reg);
359 modE->SelectStationary(stationary);
360 modE->SetHighEnergyLimit(emaxE);
366 mod->SelectStationary(stationary);
369 mod1->SelectStationary(stationary);
373 mod->SelectStationary(stationary);
378 theDNAExc->AddEmModel(-2, modB, reg);
379 if(
nullptr != modB2) {
383 theDNAExc->AddEmModel(-3, modB2, reg);
390 theDNAIoni->AddEmModel(-1, modE, reg);
391 modE->SelectFasterComputation(fast);
392 modE->SelectStationary(stationary);
393 modE->SetHighEnergyLimit(emaxE);
399 mod->SelectStationary(stationary);
400 mod->SelectFasterComputation(fast);
403 mod1->SelectStationary(stationary);
407 mod->SelectStationary(stationary);
408 mod->SelectFasterComputation(fast);
413 theDNAIoni->AddEmModel(-2, modI, reg);
414 if(
nullptr != modI2) {
418 theDNAIoni->AddEmModel(-3, modI2, reg);
421 if(4 != opt && 6 != opt) {
425 theDNAVibExc->AddEmModel(-1, modS, reg);
426 modS->SelectStationary(stationary);
431 theDNAAttach->AddEmModel(-1, modM, reg);
432 modM->SelectStationary(stationary);
453 modE->SetHighEnergyLimit(lowEnergyMSC);
454 modE->SelectStationary(stationary);
455 pElasticProcess->AddEmModel(-1, modE, reg);
458 G4double e2DNA = std::min(e1DNA, lowEnergyRPWBA);
461 modMGE->SetHighEnergyLimit(e2DNA);
462 modMGE->SelectStationary(stationary);
463 theDNAExc->AddEmModel(-1, modMGE, reg);
465 if(e2DNA < lowEnergyRPWBA) {
467 modB->SelectStationary(stationary);
468 modB->SetLowEnergyLimit(e2DNA);
469 modB->SetHighEnergyLimit(lowEnergyRPWBA);
470 theDNAExc->AddEmModel(-2, modB, reg);
472 if(lowEnergyRPWBA < emaxIonDNA) {
474 modC->SelectStationary(stationary);
475 modC->SetLowEnergyLimit(lowEnergyRPWBA);
476 modC->SetHighEnergyLimit(emaxIonDNA);
477 theDNAExc->AddEmModel(-3, modC, reg);
485 mod->SelectStationary(stationary);
489 mod->SelectStationary(stationary);
493 theDNAIoni->AddEmModel(-1, modRI, reg);
495 if(e2DNA < lowEnergyRPWBA) {
497 modI->SelectFasterComputation(fast);
498 modI->SelectStationary(stationary);
499 modI->SetLowEnergyLimit(e2DNA);
500 modI->SetHighEnergyLimit(lowEnergyRPWBA);
501 theDNAIoni->AddEmModel(-2, modI, reg);
503 if(lowEnergyRPWBA < emaxIonDNA) {
505 modJ->SelectFasterComputation(fast);
506 modJ->SelectStationary(stationary);
507 modJ->SetLowEnergyLimit(lowEnergyRPWBA);
508 modJ->SetHighEnergyLimit(emaxIonDNA);
509 theDNAIoni->AddEmModel(-3, modJ, reg);
513 auto theDNAChargeDecreaseProcess =
516 modDCD->SelectStationary(stationary);
517 modDCD->SetLowEnergyLimit(0.0);
518 modDCD->SetHighEnergyLimit(emax);
519 theDNAChargeDecreaseProcess->AddEmModel(-1, modDCD, reg);
536 mod->SelectStationary(stationary);
537 mod->SetHighEnergyLimit(emaxIonDNA);
538 theDNAIoni->AddEmModel(-1, mod, reg);
565 modEI->SelectStationary(stationary);
566 modEI->SetHighEnergyLimit(lowEnergyMSC);
567 theDNAElastic->AddEmModel(-1, modEI, reg);
572 modMGE->SelectStationary(stationary);
573 modMGE->SetLowEnergyLimit(0.0);
574 modMGE->SetHighEnergyLimit(emaxIonDNA);
575 theDNAExc->AddEmModel(-1, modMGE, reg);
582 mod->SelectStationary(stationary);
586 mod->SelectStationary(stationary);
590 theDNAIoni->AddEmModel(-1, modRI, reg);
594 auto theDNAChargeIncrease =
597 modDCI->SelectStationary(stationary);
598 modDCI->SetLowEnergyLimit(0.0);
599 modDCI->SetHighEnergyLimit(emax);
600 theDNAChargeIncrease->AddEmModel(-1, modDCI, reg);
605 auto theDNAChargeDecrease =
608 modDCD->SelectStationary(stationary);
609 modDCD->SetLowEnergyLimit(0.0);
610 modDCD->SetHighEnergyLimit(emax);
611 theDNAChargeDecrease->AddEmModel(-1, modDCD, reg);
760 if (
nullptr == ptr) {
775 if (
nullptr == ptr) {
G4DNABornExcitationModel1 G4DNABornExcitationModel
#define G4DNABornIonisationModel
@ fLowEnergyChargeIncrease
@ fLowEnergyVibrationalExcitation
@ fLowEnergyElectronSolvation
@ fLowEnergyChargeDecrease
static G4DNAGenericIonsManager * Instance()
G4ParticleDefinition * GetIon(const G4String &name)
static G4VEmModel * GetMacroDefinedModel()
One step thermalization model can be chosen via macro using /process/dna/e-SolvationSubType Ritchie19...
static G4Electron * Electron()
static void ConstructMinimalEmSet()
static void PrepareEMPhysics()
static void ConstructBasicEmPhysics(G4hMultipleScattering *hmsc, const std::vector< G4int > &listHadrons)
static G4LowECapture * FindOrBuildCapture(const G4double elim, G4ParticleDefinition *part)
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 G4DNAChargeDecrease * FindOrBuildChargeDecrease(G4ParticleDefinition *part, const G4String &name)
static G4DNAExcitation * FindOrBuildExcitation(G4ParticleDefinition *part, const G4String &name)
static G4DNAElastic * FindOrBuildElastic(G4ParticleDefinition *part, const G4String &name)
static G4DNAChargeIncrease * FindOrBuildChargeIncrease(G4ParticleDefinition *part, const G4String &name)
static void ConstructDNAParticles()
static void FindOrBuildNuclearStopping(G4ParticleDefinition *part, const G4double elim)
static void ConstructDNAIonPhysics(const G4double emax, const G4bool stationary, const G4Region *reg=nullptr)
static G4DNAElectronSolvation * FindOrBuildElectronSolvation()
static void ConstructDNAProtonPhysics(const G4double e1DNA, const G4double emaxDNA, const G4int opt, const G4bool fast, const G4bool stationary, const G4Region *reg=nullptr)
static G4DNAVibExcitation * FindOrBuildVibExcitation(G4ParticleDefinition *part, const G4String &name)
static void ConstructStandardEmPhysics(const G4double emin_electron, const G4double emin_proton, const G4double emin_alpha, const G4double emin_ion, const G4EmDNAMscModelType mscType, const G4bool fast)
static G4DNAAttachment * FindOrBuildAttachment(G4ParticleDefinition *part, const G4String &name)
static G4DNAIonisation * FindOrBuildIonisation(G4ParticleDefinition *part, const G4String &name)
static void ConstructDNAElectronPhysics(const G4double emaxDNA, const G4int opt, const G4bool fast, const G4bool stationary, const G4Region *reg=nullptr)
static G4EmParameters * Instance()
G4double MaxKinEnergy() const
static G4GenericIon * GenericIon()
G4ProcessManager * GetProcessManager() const
G4double GetPDGMass() const
const G4String & GetParticleName() const
static G4VProcess * FindProcess(const G4ParticleDefinition *, G4int subtype)
G4bool RegisterProcess(G4VProcess *process, G4ParticleDefinition *particle)
static G4PhysicsListHelper * GetPhysicsListHelper()
static G4Positron * Positron()
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4Proton * Proton()
void SetHighEnergyLimit(G4double)
void SetActivationLowEnergyLimit(G4double)
void SetLowEnergyLimit(G4double)
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetMaxKinEnergy(G4double e)
void SetEmModel(G4VEmModel *, G4int index=0)
void SetEmModel(G4VMscModel *, G4int idx=0)