109static const G4double lowEnergyRPWBA = 100*CLHEP::MeV;
110static const G4double lowEnergyMSC = 1*CLHEP::MeV;
111static const G4double lowEnergyProtonIoni = 2*CLHEP::MeV;
112static const G4double highEnergyMillerGrean = 0.5*CLHEP::MeV;
113static const G4double highEnergyChargeExchange = 100*CLHEP::MeV;
125 genericIonsManager->
GetIon(
"alpha+");
126 genericIonsManager->
GetIon(
"helium");
127 genericIonsManager->
GetIon(
"hydrogen");
157 cModel->SetHighEnergyLimit(20*CLHEP::MeV);
158 theComptonScattering->AddEmModel(0, cModel);
170 if(emin_elec < emax) {
176 }
else if(mscType ==
dnaGS) {
182 msc_el->SetEmModel(msc_model_el);
187 mb_el->SetActivationLowEnergyLimit(emin_elec);
188 ioni->SetEmModel(mb_el);
193 sb_el->SetActivationLowEnergyLimit(emin_elec);
194 sb_el->SetHighEnergyLimit(emax);
196 brem->SetEmModel(sb_el);
206 }
else if(mscType ==
dnaGS) {
211 msc_pos->SetEmModel(msc_model_pos);
217 sb->SetHighEnergyLimit(emax);
219 brem->SetEmModel(sb);
224 if(emin_proton < emax) {
226 StandardHadronPhysics(part, lowEnergyMSC, emin_proton, emax,
231 if(emin_ion < emax) {
233 StandardHadronPhysics(ion, lowEnergyMSC, emin_ion, emax,
238 if(emin_alpha < emax) {
240 StandardHadronPhysics(part, lowEnergyMSC, emin_alpha, emax,
246 part = genericIonsManager->
GetIon(
"alpha+");
247 StandardHadronPhysics(part, lowEnergyMSC, emin_alpha, emax,
251 const std::vector<G4int> chargedParticles = {
252 13, -13, 211, -211, 321, -321, -2212,
253 1000010020, 1000010030, 1000020030
275 msc_model =
new G4UrbanMscModel();
283 G4VEnergyLossProcess* ioni =
nullptr;
284 G4VEmModel* mod1 =
nullptr;
286 ioni =
new G4ionIonisation();
287 mod1 =
new G4BraggIonModel();
289 ioni =
new G4hIonisation();
290 mod1 =
new G4BraggModel();
297 G4VEmModel* mod2 =
new G4BetheBlochModel();
321 G4double emaxCPA100 = 250*CLHEP::keV;
323 emaxE = 10.*CLHEP::keV;
324 emaxT = 10.*CLHEP::eV;
325 }
else if(6 <= opt) {
326 emaxT = 11.*CLHEP::eV;
332 therm->SetHighEnergyLimit(emaxT);
341 }
else if(6 <= opt) {
343 mod->SelectStationary(stationary);
351 pElasticProcess->AddEmModel(-2, elast, reg);
353 if(
nullptr != elast2) {
357 pElasticProcess->AddEmModel(-3, elast2, reg);
364 theDNAExc->AddEmModel(-1, modE, reg);
365 modE->SelectStationary(stationary);
366 modE->SetHighEnergyLimit(emaxE);
372 mod->SelectStationary(stationary);
375 mod1->SelectStationary(stationary);
379 mod->SelectStationary(stationary);
384 theDNAExc->AddEmModel(-2, modB, reg);
385 if(
nullptr != modB2) {
389 theDNAExc->AddEmModel(-3, modB2, reg);
396 theDNAIoni->AddEmModel(-1, modE, reg);
397 modE->SelectFasterComputation(fast);
398 modE->SelectStationary(stationary);
399 modE->SetHighEnergyLimit(emaxE);
405 mod->SelectStationary(stationary);
406 mod->SelectFasterComputation(fast);
414 theDNAIoni->AddEmModel(-2, modI, reg);
415 if(
nullptr != modI2) {
419 theDNAIoni->AddEmModel(-3, modI2, reg);
422 if(4 != opt && 6 != opt) {
426 theDNAVibExc->AddEmModel(-1, modS, reg);
427 modS->SelectStationary(stationary);
432 theDNAAttach->AddEmModel(-1, modM, reg);
433 modM->SelectStationary(stationary);
450 G4double e2DNA = (8 == opt) ? std::min(lowEnergyRPWBA, emax) : e1DNA;
455 modE->SetHighEnergyLimit(lowEnergyMSC);
456 modE->SelectStationary(stationary);
457 pElasticProcess->AddEmModel(-1, modE, reg);
462 modMGE->SetHighEnergyLimit(e2DNA);
463 modMGE->SelectStationary(stationary);
464 theDNAExc->AddEmModel(-1, modMGE, reg);
466 if(e2DNA < lowEnergyRPWBA) {
468 modB->SelectStationary(stationary);
469 modB->SetLowEnergyLimit(e2DNA);
470 modB->SetHighEnergyLimit(lowEnergyRPWBA);
471 theDNAExc->AddEmModel(-2, modB, reg);
473 if(lowEnergyRPWBA < emaxIonDNA) {
475 modC->SelectStationary(stationary);
476 modC->SetLowEnergyLimit(lowEnergyRPWBA);
477 modC->SetHighEnergyLimit(emaxIonDNA);
478 theDNAExc->AddEmModel(-3, modC, reg);
490 theDNAIoni->AddEmModel(-1, modRI, reg);
492 if (e2DNA < lowEnergyRPWBA) {
496 theDNAIoni->AddEmModel(-2, modI, reg);
498 if (lowEnergyRPWBA < emaxIonDNA) {
500 modJ->SelectFasterComputation(fast);
501 modJ->SelectStationary(stationary);
502 modJ->SetLowEnergyLimit(lowEnergyRPWBA);
503 modJ->SetHighEnergyLimit(emaxIonDNA);
504 theDNAIoni->AddEmModel(-3, modJ, reg);
508 auto theDNAChargeDecreaseProcess =
511 modDCD->SelectStationary(stationary);
512 modDCD->SetLowEnergyLimit(0.0);
513 modDCD->SetHighEnergyLimit(highEnergyChargeExchange);
514 theDNAChargeDecreaseProcess->AddEmModel(-1, modDCD, reg);
517 G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV;
534 theDNAIoni->AddEmModel(-1, mod, reg);
540 G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV;
559 elim1 = highEnergyMillerGrean;
560 elim2 = highEnergyChargeExchange;
566 modEI->SelectStationary(stationary);
567 modEI->SetHighEnergyLimit(lowEnergyMSC);
568 theDNAElastic->AddEmModel(-1, modEI, reg);
573 modMGE->SelectStationary(stationary);
574 modMGE->SetLowEnergyLimit(0.0);
575 modMGE->SetHighEnergyLimit(elim1);
576 theDNAExc->AddEmModel(-1, modMGE, reg);
587 theDNAIoni->AddEmModel(-2, modRI, reg);
591 auto theDNAChargeIncrease =
594 modDCI->SelectStationary(stationary);
595 modDCI->SetLowEnergyLimit(0.0);
596 modDCI->SetHighEnergyLimit(elim2);
597 theDNAChargeIncrease->AddEmModel(-1, modDCI, reg);
602 auto theDNAChargeDecrease =
605 modDCD->SelectStationary(stationary);
606 modDCD->SetLowEnergyLimit(0.0);
607 modDCD->SetHighEnergyLimit(elim2);
608 theDNAChargeDecrease->AddEmModel(-1, modDCD, reg);
612 G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV;
758 if (
nullptr == ptr) {
773 if (
nullptr == ptr) {
G4DNABornExcitationModel1 G4DNABornExcitationModel
@ 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 G4int opt, 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()
G4Region defines a region or a group of regions in the detector geometry setup, sharing properties as...
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)