Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
LBE Class Reference

#include <LBE.hh>

+ Inheritance diagram for LBE:

Public Member Functions

 LBE (G4int ver=1)
 
virtual ~LBE ()
 
 LBE (const LBE &)=delete
 
LBEoperator= (const LBE &right)=delete
 
virtual void SetCuts ()
 
- Public Member Functions inherited from G4VModularPhysicsList
 G4VModularPhysicsList ()
 
virtual ~G4VModularPhysicsList ()
 
virtual void ConstructParticle () override
 
virtual void ConstructProcess () override
 
void RegisterPhysics (G4VPhysicsConstructor *)
 
const G4VPhysicsConstructorGetPhysics (G4int index) const
 
const G4VPhysicsConstructorGetPhysics (const G4String &name) const
 
const G4VPhysicsConstructorGetPhysicsWithType (G4int physics_type) const
 
void ReplacePhysics (G4VPhysicsConstructor *)
 
void RemovePhysics (G4VPhysicsConstructor *)
 
void RemovePhysics (G4int type)
 
void RemovePhysics (const G4String &name)
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
G4int GetInstanceID () const
 
virtual void TerminateWorker () override
 
- Public Member Functions inherited from G4VUserPhysicsList
 G4VUserPhysicsList ()
 
virtual ~G4VUserPhysicsList ()
 
 G4VUserPhysicsList (const G4VUserPhysicsList &)
 
G4VUserPhysicsListoperator= (const G4VUserPhysicsList &)
 
virtual void ConstructParticle ()=0
 
void Construct ()
 
virtual void ConstructProcess ()=0
 
void UseCoupledTransportation (G4bool vl=true)
 
virtual void SetCuts ()
 
void SetDefaultCutValue (G4double newCutValue)
 
G4double GetDefaultCutValue () const
 
void BuildPhysicsTable ()
 
void PreparePhysicsTable (G4ParticleDefinition *)
 
void BuildPhysicsTable (G4ParticleDefinition *)
 
G4bool StorePhysicsTable (const G4String &directory=".")
 
G4bool IsPhysicsTableRetrieved () const
 
G4bool IsStoredInAscii () const
 
const G4StringGetPhysicsTableDirectory () const
 
void SetPhysicsTableRetrieved (const G4String &directory="")
 
void SetStoredInAscii ()
 
void ResetPhysicsTableRetrieved ()
 
void ResetStoredInAscii ()
 
void DumpList () const
 
void DumpCutValuesTable (G4int flag=1)
 
void DumpCutValuesTableIfRequested ()
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
void SetCutsWithDefault ()
 
void SetCutValue (G4double aCut, const G4String &pname)
 
G4double GetCutValue (const G4String &pname) const
 
void SetCutValue (G4double aCut, const G4String &pname, const G4String &rname)
 
void SetParticleCuts (G4double cut, G4ParticleDefinition *particle, G4Region *region=0)
 
void SetParticleCuts (G4double cut, const G4String &particleName, G4Region *region=0)
 
void SetCutsForRegion (G4double aCut, const G4String &rname)
 
void ResetCuts ()
 obsolete methods
 
void SetApplyCuts (G4bool value, const G4String &name)
 
G4bool GetApplyCuts (const G4String &name) const
 
void RemoveProcessManager ()
 
void AddProcessManager (G4ParticleDefinition *newParticle, G4ProcessManager *newManager=0)
 
void CheckParticleList ()
 
void DisableCheckParticleList ()
 
G4int GetInstanceID () const
 
virtual void InitializeWorker ()
 
virtual void TerminateWorker ()
 

Protected Member Functions

virtual void ConstructParticle ()
 
virtual void ConstructProcess ()
 
virtual void ConstructGeneral ()
 
virtual void ConstructEM ()
 
virtual void ConstructHad ()
 
virtual void ConstructOp ()
 
virtual void AddTransportation ()
 
- Protected Member Functions inherited from G4VModularPhysicsList
 G4VModularPhysicsList (const G4VModularPhysicsList &)
 
G4VModularPhysicsListoperator= (const G4VModularPhysicsList &)
 
- Protected Member Functions inherited from G4VUserPhysicsList
void AddTransportation ()
 
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
 
void BuildIntegralPhysicsTable (G4VProcess *, G4ParticleDefinition *)
 
virtual void RetrievePhysicsTable (G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
 
void InitializeProcessManager ()
 
G4ParticleTable::G4PTblDicIteratorGetParticleIterator () const
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VModularPhysicsList
static const G4VMPLManagerGetSubInstanceManager ()
 
- Static Public Member Functions inherited from G4VUserPhysicsList
static const G4VUPLManagerGetSubInstanceManager ()
 
- Protected Types inherited from G4VModularPhysicsList
typedef G4VMPLData::G4PhysConstVectorData G4PhysConstVector
 
- Protected Attributes inherited from G4VModularPhysicsList
G4int verboseLevel
 
G4int g4vmplInstanceID
 
- Protected Attributes inherited from G4VUserPhysicsList
G4ParticleTabletheParticleTable
 
G4int verboseLevel
 
G4double defaultCutValue
 
G4bool isSetDefaultCutValue
 
G4ProductionCutsTablefCutsTable
 
G4bool fRetrievePhysicsTable
 
G4bool fStoredInAscii
 
G4bool fIsCheckedForRetrievePhysicsTable
 
G4bool fIsRestoredCutValues
 
G4String directoryPhysicsTable
 
G4bool fDisableCheckParticleList
 
G4int g4vuplInstanceID
 
- Static Protected Attributes inherited from G4VModularPhysicsList
static G4RUN_DLL G4VMPLManager G4VMPLsubInstanceManager
 
- Static Protected Attributes inherited from G4VUserPhysicsList
static G4RUN_DLL G4VUPLManager subInstanceManager
 

Detailed Description

Definition at line 58 of file LBE.hh.

Constructor & Destructor Documentation

◆ LBE() [1/2]

LBE::LBE ( G4int  ver = 1)

Definition at line 77 of file LBE.cc.

78{
79
80 G4cout << "You are using the simulation engine: LBE"<<G4endl;
82 defaultCutValue = 1.0*CLHEP::micrometer; //
83 cutForGamma = defaultCutValue;
84// cutForElectron = 1.0*CLHEP::nanometer;
85 cutForElectron = 1.0*CLHEP::micrometer;
86 cutForPositron = defaultCutValue;
87 //not used:
88 // cutForProton = defaultCutValue;
89 // cutForAlpha = 1.0*CLHEP::nanometer;
90 // cutForGenericIon = 1.0*CLHEP::nanometer;
91
92 stoppingPhysics = new G4StoppingPhysics;
93
94 VerboseLevel = ver;
95 OpVerbLevel = 0;
96
97 SetVerboseLevel(VerboseLevel);
98}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void SetVerboseLevel(G4int value)

◆ ~LBE()

LBE::~LBE ( )
virtual

Definition at line 102 of file LBE.cc.

103{
104 delete stoppingPhysics;
105}

◆ LBE() [2/2]

LBE::LBE ( const LBE )
delete

Member Function Documentation

◆ AddTransportation()

void LBE::AddTransportation ( )
protectedvirtual

Definition at line 217 of file LBE.cc.

217 {
218
220
221 auto myParticleIterator=G4ParticleTable::GetParticleTable()->GetIterator();
222 myParticleIterator->reset();
223 while( (*(myParticleIterator))() ){
224 G4ParticleDefinition* particle = myParticleIterator->value();
225 G4ProcessManager* pmanager = particle->GetProcessManager();
226 G4String particleName = particle->GetParticleName();
227 // time cuts for ONLY neutrons:
228 if(particleName == "neutron")
229 pmanager->AddDiscreteProcess(new G4MaxTimeCuts());
230 // Energy cuts to kill charged (embedded in method) particles:
231 pmanager->AddDiscreteProcess(new G4MinEkineCuts());
232 }
233}
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
void reset(G4bool ifSkipIon=true)
G4PTblDicIterator * GetIterator() const
static G4ParticleTable * GetParticleTable()
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)

Referenced by ConstructProcess().

◆ ConstructEM()

void LBE::ConstructEM ( )
protectedvirtual

Definition at line 287 of file LBE.cc.

287 {
288
289 // models & processes:
290 // Use Livermore models up to 20 MeV, and standard
291 // models for higher energy
292 G4double LivermoreHighEnergyLimit = 20*CLHEP::MeV;
293 //
294 auto myParticleIterator=G4ParticleTable::GetParticleTable()->GetIterator();
295 myParticleIterator->reset();
296 while( (*(myParticleIterator))() ){
297 G4ParticleDefinition* particle = myParticleIterator->value();
298 G4ProcessManager* pmanager = particle->GetProcessManager();
299 G4String particleName = particle->GetParticleName();
300 G4String particleType = particle->GetParticleType();
301 G4double charge = particle->GetPDGCharge();
302
303 if (particleName == "gamma")
304 {
305 G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
306 G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
308 theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
309 thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
310 pmanager->AddDiscreteProcess(thePhotoElectricEffect);
311
312 G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
313 G4LivermoreComptonModel* theLivermoreComptonModel =
315 theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
316 theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
317 pmanager->AddDiscreteProcess(theComptonScattering);
318
319 G4GammaConversion* theGammaConversion = new G4GammaConversion();
320 G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
322 theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
323 theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
324 pmanager->AddDiscreteProcess(theGammaConversion);
325
326 G4RayleighScattering* theRayleigh = new G4RayleighScattering();
327 G4LivermoreRayleighModel* theRayleighModel = new G4LivermoreRayleighModel();
328 theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
329 theRayleigh->AddEmModel(0, theRayleighModel);
330 pmanager->AddDiscreteProcess(theRayleigh);
331
332 }
333 else if (particleName == "e-")
334 {
335 //electron
336 // process ordering: AddProcess(name, at rest, along step, post step)
337 // -1 = not implemented, then ordering
339 //msc->AddEmModel(0, new G4UrbanMscModel());
341 pmanager->AddProcess(msc, -1, 1, 1);
342
343 // Ionisation
344 G4eIonisation* eIoni = new G4eIonisation();
345 G4LivermoreIonisationModel* theIoniLivermore = new
347 theIoniLivermore->SetHighEnergyLimit(1*CLHEP::MeV);
348 eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
349 eIoni->SetStepFunction(0.2, 100*CLHEP::um); //
350 pmanager->AddProcess(eIoni, -1, 2, 2);
351
352 // Bremsstrahlung
354 G4LivermoreBremsstrahlungModel* theBremLivermore = new
356 theBremLivermore->SetHighEnergyLimit(LivermoreHighEnergyLimit);
357 eBrem->AddEmModel(0, theBremLivermore);
358 pmanager->AddProcess(eBrem, -1,-3, 3);
359 }
360 else if (particleName == "e+")
361 {
362 //positron
364 //msc->AddEmModel(0, new G4UrbanMscModel());
366 pmanager->AddProcess(msc, -1, 1, 1);
367 G4eIonisation* eIoni = new G4eIonisation();
368 eIoni->SetStepFunction(0.2, 100*CLHEP::um);
369 pmanager->AddProcess(eIoni, -1, 2, 2);
370 pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
371 pmanager->AddProcess(new G4eplusAnnihilation,0,-1, 4);
372 }
373 else if( particleName == "mu+" ||
374 particleName == "mu-" )
375 {
376 //muon
377 G4MuMultipleScattering* aMultipleScattering = new G4MuMultipleScattering();
378 pmanager->AddProcess(aMultipleScattering, -1, 1, 1);
379 pmanager->AddProcess(new G4MuIonisation(), -1, 2, 2);
380 pmanager->AddProcess(new G4MuBremsstrahlung(), -1,-1, 3);
381 pmanager->AddProcess(new G4MuPairProduction(), -1,-1, 4);
382 if( particleName == "mu-" )
383 pmanager->AddProcess(new G4MuonMinusCapture(), 0,-1,-1);
384 }
385 else if (particleName == "GenericIon")
386 {
387 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
388 G4ionIonisation* ionIoni = new G4ionIonisation();
390 ionIoni->SetStepFunction(0.1, 10*CLHEP::um);
391 pmanager->AddProcess(ionIoni, -1, 2, 2);
392 pmanager->AddProcess(new G4NuclearStopping(), -1, 3,-1);
393 }
394 else if (particleName == "alpha" || particleName == "He3")
395 {
396 //MSC, ion-Ionisation, Nuclear Stopping
397 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
398
399 G4ionIonisation* ionIoni = new G4ionIonisation();
400 ionIoni->SetStepFunction(0.1, 20*CLHEP::um);
401 pmanager->AddProcess(ionIoni, -1, 2, 2);
402 pmanager->AddProcess(new G4NuclearStopping(), -1, 3,-1);
403 }
404 else if (particleName == "proton" ||
405 particleName == "deuteron" ||
406 particleName == "triton" ||
407 particleName == "pi+" ||
408 particleName == "pi-" ||
409 particleName == "kaon+" ||
410 particleName == "kaon-")
411 {
412 //MSC, h-ionisation, bremsstrahlung
413 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
414 G4hIonisation* hIoni = new G4hIonisation();
415 hIoni->SetStepFunction(0.2, 50*CLHEP::um);
416 pmanager->AddProcess(hIoni, -1, 2, 2);
417 pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3);
418 }
419 else if ((!particle->IsShortLived()) &&
420 (charge != 0.0) &&
421 (particle->GetParticleName() != "chargedgeantino"))
422 {
423 //all others charged particles except geantino
424 pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
425 pmanager->AddProcess(new G4hIonisation, -1, 2, 2);
426 }
427
428 }
429}
@ fUseDistanceToBoundary
double G4double
Definition: G4Types.hh:83
const G4String & GetParticleType() const
G4double GetPDGCharge() const
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
void SetHighEnergyLimit(G4double)
Definition: G4VEmModel.hh:757
void AddEmModel(G4int, G4VEmModel *, const G4Region *region=nullptr)
void SetStepFunction(G4double v1, G4double v2)
void SetEmModel(G4VEmModel *, G4int index=0)
void AddEmModel(G4int, G4VEmModel *, G4VEmFluctuationModel *fluc=0, const G4Region *region=nullptr)
void SetStepLimitType(G4MscStepLimitType val)

Referenced by ConstructProcess().

◆ ConstructGeneral()

void LBE::ConstructGeneral ( )
protectedvirtual

Definition at line 902 of file LBE.cc.

902 {
903
904 // Add Decay Process
905 G4Decay* theDecayProcess = new G4Decay();
906 G4bool theDecayProcessNeverUsed = true; //Check if theDecayProcess will be used
907 auto myParticleIterator=G4ParticleTable::GetParticleTable()->GetIterator();
908 myParticleIterator->reset();
909 while( (*(myParticleIterator))() )
910 {
911 G4ParticleDefinition* particle = myParticleIterator->value();
912 G4ProcessManager* pmanager = particle->GetProcessManager();
913
914 if (theDecayProcess->IsApplicable(*particle) && !particle->IsShortLived())
915 {
916 theDecayProcessNeverUsed = false;
917 pmanager ->AddProcess(theDecayProcess);
918 // set ordering for PostStepDoIt and AtRestDoIt
919 pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
920 pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
921 }
922 }
923
924 // Declare radioactive decay to the GenericIon in the IonTable.
925 const G4IonTable *theIonTable =
927 G4RadioactiveDecayBase* theRadioactiveDecay = new G4RadioactiveDecayBase();
928
929 //Fix for activation of RadioactiveDecay, based on G4RadioactiveDecayPhysics
931 param->SetAugerCascade(true);
932 param->AddPhysics("world","G4RadioactiveDecay");
933
935 deex->SetStoreAllLevels(true);
936 deex->SetMaxLifeTime(G4NuclideTable::GetInstance()->GetThresholdOfHalfLife()
937 /std::log(2.));
938
941 if(!ad) {
942 ad = new G4UAtomicDeexcitation();
943 man->SetAtomDeexcitation(ad);
945 }
946
947 for (G4int i=0; i<theIonTable->Entries(); i++)
948 {
949 G4String particleName = theIonTable->GetParticle(i)->GetParticleName();
950 G4String particleType = theIonTable->GetParticle(i)->GetParticleType();
951
952 if (particleName == "GenericIon")
953 {
954 G4ProcessManager* pmanager =
955 theIonTable->GetParticle(i)->GetProcessManager();
956 pmanager->SetVerboseLevel(VerboseLevel);
957 pmanager ->AddProcess(theRadioactiveDecay);
958 pmanager ->SetProcessOrdering(theRadioactiveDecay, idxPostStep);
959 pmanager ->SetProcessOrdering(theRadioactiveDecay, idxAtRest);
960 }
961 }
962 //If we actually never used the process, delete it
963 //From Coverity report
964 if ( theDecayProcessNeverUsed ) delete theDecayProcess;
965}
@ idxPostStep
@ idxAtRest
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
virtual G4bool IsApplicable(const G4ParticleDefinition &) override
Definition: G4Decay.cc:88
static G4EmParameters * Instance()
void SetAugerCascade(G4bool val)
void AddPhysics(const G4String &region, const G4String &type)
G4ParticleDefinition * GetParticle(G4int index) const
Definition: G4IonTable.cc:1905
G4int Entries() const
Definition: G4IonTable.cc:1962
void SetAtomDeexcitation(G4VAtomDeexcitation *)
static G4LossTableManager * Instance()
G4VAtomDeexcitation * AtomDeexcitation()
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()
static G4NuclideTable * GetInstance()
G4IonTable * GetIonTable() const
void SetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt, G4int ordDoIt=ordDefault)
void SetVerboseLevel(G4int value)

Referenced by ConstructProcess().

◆ ConstructHad()

void LBE::ConstructHad ( )
protectedvirtual

Definition at line 597 of file LBE.cc.

598{
599 // Elastic scattering
600 G4HadronElastic* elastic_lhep0 = new G4HadronElastic();
601 G4ChipsElasticModel* elastic_chip = new G4ChipsElasticModel();
603
604 const G4double elastic_elimitAntiNuc = 100.0*CLHEP::MeV;
605 G4AntiNuclElastic* elastic_anuc = new G4AntiNuclElastic();
606 elastic_anuc->SetMinEnergy( elastic_elimitAntiNuc );
607 G4CrossSectionElastic* elastic_anucxs = new G4CrossSectionElastic( elastic_anuc->GetComponentCrossSection() );
608 G4HadronElastic* elastic_lhep2 = new G4HadronElastic();
609 elastic_lhep2->SetMaxEnergy( elastic_elimitAntiNuc );
610
611 // Inelastic scattering
612 const G4double theFTFMin0 = 0.0*CLHEP::GeV;
613 const G4double theFTFMin1 = 4.0*CLHEP::GeV;
615 const G4double theBERTMin0 = 0.0*CLHEP::GeV;
616 const G4double theBERTMin1 = 19.0*CLHEP::MeV;
617 const G4double theBERTMax = 5.0*CLHEP::GeV;
618 const G4double theHPMin = 0.0*CLHEP::GeV;
619 const G4double theHPMax = 20.0*CLHEP::MeV;
620 const G4double theIonBCMin = 0.0*CLHEP::GeV;
621 const G4double theIonBCMax = 5.0*CLHEP::GeV;
622
623
624 G4FTFModel * theStringModel = new G4FTFModel;
626 theStringModel->SetFragmentationModel( theStringDecay );
627 G4PreCompoundModel * thePreEquilib = new G4PreCompoundModel( new G4ExcitationHandler );
628 G4GeneratorPrecompoundInterface * theCascade = new G4GeneratorPrecompoundInterface( thePreEquilib );
629
630 G4TheoFSGenerator * theFTFModel0 = new G4TheoFSGenerator( "FTFP" );
631 theFTFModel0->SetHighEnergyGenerator( theStringModel );
632 theFTFModel0->SetTransport( theCascade );
633 theFTFModel0->SetMinEnergy( theFTFMin0 );
634 theFTFModel0->SetMaxEnergy( theFTFMax );
635
636 G4TheoFSGenerator * theFTFModel1 = new G4TheoFSGenerator( "FTFP" );
637 theFTFModel1->SetHighEnergyGenerator( theStringModel );
638 theFTFModel1->SetTransport( theCascade );
639 theFTFModel1->SetMinEnergy( theFTFMin1 );
640 theFTFModel1->SetMaxEnergy( theFTFMax );
641
642 G4CascadeInterface * theBERTModel0 = new G4CascadeInterface;
643 theBERTModel0->SetMinEnergy( theBERTMin0 );
644 theBERTModel0->SetMaxEnergy( theBERTMax );
645
646 G4CascadeInterface * theBERTModel1 = new G4CascadeInterface;
647 theBERTModel1->SetMinEnergy( theBERTMin1 );
648 theBERTModel1->SetMaxEnergy( theBERTMax );
649
650 // Binary Cascade
651 G4BinaryLightIonReaction * theIonBC = new G4BinaryLightIonReaction( thePreEquilib );
652 theIonBC->SetMinEnergy( theIonBCMin );
653 theIonBC->SetMaxEnergy( theIonBCMax );
654
656 G4ComponentGGNuclNuclXsc * ggNuclNuclXsec = new G4ComponentGGNuclNuclXsc();
657 G4VCrossSectionDataSet * theGGNuclNuclData = new G4CrossSectionInelastic(ggNuclNuclXsec);
658
659 auto myParticleIterator=G4ParticleTable::GetParticleTable()->GetIterator();
660 myParticleIterator->reset();
661 while ((*(myParticleIterator))())
662 {
663 G4ParticleDefinition* particle = myParticleIterator->value();
664 G4ProcessManager* pmanager = particle->GetProcessManager();
665 G4String particleName = particle->GetParticleName();
666
667 if (particleName == "pi+")
668 {
669 // Elastic scattering
670 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
671 theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) );
672 theElasticProcess->RegisterMe( elastic_he );
673 pmanager->AddDiscreteProcess( theElasticProcess );
674 // Inelastic scattering
675 G4PionPlusInelasticProcess* theInelasticProcess = new G4PionPlusInelasticProcess("inelastic");
676 theInelasticProcess->AddDataSet( new G4BGGPionInelasticXS( G4PionPlus::Definition() ) );
677 theInelasticProcess->RegisterMe( theFTFModel1 );
678 theInelasticProcess->RegisterMe( theBERTModel0 );
679 pmanager->AddDiscreteProcess( theInelasticProcess );
680 }
681
682 else if (particleName == "pi-")
683 {
684 // Elastic scattering
685 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
686 theElasticProcess->AddDataSet( new G4BGGPionElasticXS( particle ) );
687 theElasticProcess->RegisterMe( elastic_he );
688 pmanager->AddDiscreteProcess( theElasticProcess );
689 // Inelastic scattering
690 G4PionMinusInelasticProcess* theInelasticProcess = new G4PionMinusInelasticProcess("inelastic");
691 theInelasticProcess->AddDataSet( new G4BGGPionInelasticXS( G4PionMinus::Definition() ) );
692 theInelasticProcess->RegisterMe( theFTFModel1 );
693 theInelasticProcess->RegisterMe( theBERTModel0 );
694 pmanager->AddDiscreteProcess( theInelasticProcess );
695 }
696
697 else if (particleName == "kaon+")
698 {
699 // Elastic scattering
700 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
701 theElasticProcess->RegisterMe( elastic_lhep0 );
702 theElasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusElasticXS::Default_Name()));
703 pmanager->AddDiscreteProcess( theElasticProcess );
704 // Inelastic scattering
705 G4KaonPlusInelasticProcess* theInelasticProcess = new G4KaonPlusInelasticProcess("inelastic");
706 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name()));
707 theInelasticProcess->RegisterMe( theFTFModel1 );
708 theInelasticProcess->RegisterMe( theBERTModel0 );
709 pmanager->AddDiscreteProcess( theInelasticProcess );
710 }
711
712 else if (particleName == "kaon0S")
713 {
714 // Elastic scattering
715 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
716 theElasticProcess->RegisterMe( elastic_lhep0 );
717 theElasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroElasticXS::Default_Name()));
718 pmanager->AddDiscreteProcess( theElasticProcess );
719 // Inelastic scattering
720 G4KaonZeroSInelasticProcess* theInelasticProcess = new G4KaonZeroSInelasticProcess("inelastic");
721 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
722 theInelasticProcess->RegisterMe( theFTFModel1 );
723 theInelasticProcess->RegisterMe( theBERTModel0 );
724 pmanager->AddDiscreteProcess( theInelasticProcess );
725 }
726
727 else if (particleName == "kaon0L")
728 {
729 // Elastic scattering
730 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
731 theElasticProcess->RegisterMe( elastic_lhep0 );
732 theElasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroElasticXS::Default_Name()));
733 pmanager->AddDiscreteProcess( theElasticProcess );
734 // Inelastic scattering
735 G4KaonZeroLInelasticProcess* theInelasticProcess = new G4KaonZeroLInelasticProcess("inelastic");
736 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
737 theInelasticProcess->RegisterMe( theFTFModel1 );
738 theInelasticProcess->RegisterMe( theBERTModel0 );
739 pmanager->AddDiscreteProcess( theInelasticProcess );
740 }
741
742 else if (particleName == "kaon-")
743 {
744 // Elastic scattering
745 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
746 theElasticProcess->RegisterMe( elastic_lhep0 );
748 pmanager->AddDiscreteProcess( theElasticProcess );
749 // Inelastic scattering
750 G4KaonMinusInelasticProcess* theInelasticProcess = new G4KaonMinusInelasticProcess("inelastic");
751 theInelasticProcess->AddDataSet( G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name()));
752 theInelasticProcess->RegisterMe( theFTFModel1 );
753 theInelasticProcess->RegisterMe( theBERTModel0 );
754 pmanager->AddDiscreteProcess( theInelasticProcess );
755 }
756
757 else if (particleName == "proton")
758 {
759 // Elastic scattering
760 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
761 theElasticProcess->AddDataSet(G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsProtonElasticXS::Default_Name()));
762 theElasticProcess->AddDataSet( new G4BGGNucleonElasticXS( G4Proton::Proton() ) );
763 theElasticProcess->RegisterMe( elastic_chip );
764 pmanager->AddDiscreteProcess( theElasticProcess );
765 // Inelastic scattering
766 G4ProtonInelasticProcess* theInelasticProcess = new G4ProtonInelasticProcess("inelastic");
767 theInelasticProcess->AddDataSet( new G4BGGNucleonInelasticXS( G4Proton::Proton() ) );
768 theInelasticProcess->RegisterMe( theFTFModel1 );
769 theInelasticProcess->RegisterMe( theBERTModel0 );
770 pmanager->AddDiscreteProcess( theInelasticProcess );
771 }
772
773 else if (particleName == "anti_proton")
774 {
775 // Elastic scattering
776 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
777 theElasticProcess->AddDataSet( elastic_anucxs );
778 theElasticProcess->RegisterMe( elastic_lhep2 );
779 theElasticProcess->RegisterMe( elastic_anuc );
780 pmanager->AddDiscreteProcess( theElasticProcess );
781 // Inelastic scattering
782 G4AntiProtonInelasticProcess* theInelasticProcess = new G4AntiProtonInelasticProcess("inelastic");
783 theInelasticProcess->AddDataSet( theAntiNucleonData );
784 theInelasticProcess->RegisterMe( theFTFModel0 );
785 pmanager->AddDiscreteProcess( theInelasticProcess );
786 }
787
788 else if (particleName == "neutron") {
789 // elastic scattering
790 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
792 G4HadronElastic* elastic_neutronChipsModel = new G4ChipsElasticModel();
793 elastic_neutronChipsModel->SetMinEnergy( 19.0*CLHEP::MeV );
794 theElasticProcess->RegisterMe( elastic_neutronChipsModel );
795 G4ParticleHPElastic * theElasticNeutronHP = new G4ParticleHPElastic;
796 theElasticNeutronHP->SetMinEnergy( theHPMin );
797 theElasticNeutronHP->SetMaxEnergy( theHPMax );
798 theElasticProcess->RegisterMe( theElasticNeutronHP );
799 theElasticProcess->AddDataSet( new G4ParticleHPElasticData );
800 pmanager->AddDiscreteProcess( theElasticProcess );
801 // inelastic scattering
802 G4NeutronInelasticProcess* theInelasticProcess = new G4NeutronInelasticProcess("inelastic");
803 theInelasticProcess->AddDataSet( new G4BGGNucleonInelasticXS( G4Neutron::Neutron() ) );
804 theInelasticProcess->RegisterMe( theFTFModel1 );
805 theInelasticProcess->RegisterMe( theBERTModel1 );
806 G4ParticleHPInelastic * theNeutronInelasticHPModel = new G4ParticleHPInelastic;
807 theNeutronInelasticHPModel->SetMinEnergy( theHPMin );
808 theNeutronInelasticHPModel->SetMaxEnergy( theHPMax );
809 theInelasticProcess->RegisterMe( theNeutronInelasticHPModel );
810 theInelasticProcess->AddDataSet( new G4ParticleHPInelasticData );
811 pmanager->AddDiscreteProcess(theInelasticProcess);
812 // capture
813 G4HadronCaptureProcess* theCaptureProcess = new G4HadronCaptureProcess;
814 G4ParticleHPCapture * theNeutronCaptureHPModel = new G4ParticleHPCapture;
815 theNeutronCaptureHPModel->SetMinEnergy( theHPMin );
816 theNeutronCaptureHPModel->SetMaxEnergy( theHPMax );
817 G4NeutronRadCapture* theNeutronRadCapture = new G4NeutronRadCapture();
818 theNeutronRadCapture->SetMinEnergy(theHPMax*0.99);
819 theCaptureProcess->RegisterMe( theNeutronCaptureHPModel );
820 theCaptureProcess->RegisterMe( theNeutronRadCapture);
821 theCaptureProcess->AddDataSet( new G4ParticleHPCaptureData );
823 pmanager->AddDiscreteProcess(theCaptureProcess);
824 }
825 else if (particleName == "anti_neutron")
826 {
827 // Elastic scattering
828 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
829 theElasticProcess->AddDataSet( elastic_anucxs );
830 theElasticProcess->RegisterMe( elastic_lhep2 );
831 theElasticProcess->RegisterMe( elastic_anuc );
832 pmanager->AddDiscreteProcess( theElasticProcess );
833 // Inelastic scattering
834 G4AntiNeutronInelasticProcess* theInelasticProcess = new G4AntiNeutronInelasticProcess("inelastic");
835 theInelasticProcess->AddDataSet( theAntiNucleonData );
836 theInelasticProcess->RegisterMe( theFTFModel0 );
837 pmanager->AddDiscreteProcess( theInelasticProcess );
838 }
839
840 else if (particleName == "deuteron")
841 {
842 // Elastic scattering
843 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
844 theElasticProcess->RegisterMe( elastic_lhep0 );
845 theElasticProcess->AddDataSet( theGGNuclNuclData );
846 pmanager->AddDiscreteProcess( theElasticProcess );
847 // Inelastic scattering
848 G4DeuteronInelasticProcess* theInelasticProcess = new G4DeuteronInelasticProcess("inelastic");
849 theInelasticProcess->AddDataSet( theGGNuclNuclData );
850 theInelasticProcess->RegisterMe( theFTFModel1 );
851 theInelasticProcess->RegisterMe( theIonBC );
852 pmanager->AddDiscreteProcess( theInelasticProcess );
853 }
854
855 else if (particleName == "triton")
856 {
857 // Elastic scattering
858 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
859 theElasticProcess->RegisterMe( elastic_lhep0 );
860 theElasticProcess->AddDataSet( theGGNuclNuclData );
861 pmanager->AddDiscreteProcess( theElasticProcess );
862 // Inelastic scattering
863 G4TritonInelasticProcess* theInelasticProcess = new G4TritonInelasticProcess("inelastic");
864 theInelasticProcess->AddDataSet( theGGNuclNuclData );
865 theInelasticProcess->RegisterMe( theFTFModel1 );
866 theInelasticProcess->RegisterMe( theIonBC );
867 pmanager->AddDiscreteProcess( theInelasticProcess );
868 }
869
870 else if (particleName == "alpha")
871 {
872 // Elastic scattering
873 G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess;
874 theElasticProcess->RegisterMe( elastic_lhep0 );
875 theElasticProcess->AddDataSet( theGGNuclNuclData );
876 pmanager->AddDiscreteProcess( theElasticProcess );
877 // Inelastic scattering
878 G4AlphaInelasticProcess* theInelasticProcess = new G4AlphaInelasticProcess("inelastic");
879 theInelasticProcess->AddDataSet( theGGNuclNuclData );
880 theInelasticProcess->RegisterMe( theFTFModel1 );
881 theInelasticProcess->RegisterMe( theIonBC );
882 pmanager->AddDiscreteProcess( theInelasticProcess );
883 }
884 } // while ((*(myParticleIterator))())
885
886 // Add stopping processes with builder
887 stoppingPhysics->ConstructProcess();
888}
G4ComponentAntiNuclNuclearXS * GetComponentCrossSection()
static const char * Default_Name()
static const char * Default_Name()
static const char * Default_Name()
static const char * Default_Name()
static G4CrossSectionDataSetRegistry * Instance()
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
static G4HadronicParameters * Instance()
G4double GetMaxEnergy() const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void RegisterMe(G4HadronicInteraction *a)
static const char * Default_Name()
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
static G4PionMinus * Definition()
Definition: G4PionMinus.cc:51
static G4PionPlus * Definition()
Definition: G4PionPlus.cc:51
static G4Proton * Proton()
Definition: G4Proton.cc:92
virtual void ConstructProcess() override
void SetTransport(G4VIntraNuclearTransportModel *const value)
void SetHighEnergyGenerator(G4VHighEnergyGenerator *const value)
void SetFragmentationModel(G4VStringFragmentation *aModel)

Referenced by ConstructProcess().

◆ ConstructOp()

void LBE::ConstructOp ( )
protectedvirtual

Definition at line 438 of file LBE.cc.

439{
440 // default scintillation process
441 //Coverity report: check that the process is actually used, if not must delete
442 G4bool theScintProcessDefNeverUsed = true;
443 G4Scintillation* theScintProcessDef = new G4Scintillation("Scintillation");
444 // theScintProcessDef->DumpPhysicsTable();
445 theScintProcessDef->SetTrackSecondariesFirst(true);
446 theScintProcessDef->SetScintillationYieldFactor(1.0); //
447 theScintProcessDef->SetScintillationExcitationRatio(0.0); //
448 theScintProcessDef->SetVerboseLevel(OpVerbLevel);
449
450 // scintillation process for alpha:
451 G4bool theScintProcessAlphaNeverUsed = true;
452 G4Scintillation* theScintProcessAlpha = new G4Scintillation("Scintillation");
453 // theScintProcessNuc->DumpPhysicsTable();
454 theScintProcessAlpha->SetTrackSecondariesFirst(true);
455 theScintProcessAlpha->SetScintillationYieldFactor(1.1);
456 theScintProcessAlpha->SetScintillationExcitationRatio(1.0);
457 theScintProcessAlpha->SetVerboseLevel(OpVerbLevel);
458
459 // scintillation process for heavy nuclei
460 G4bool theScintProcessNucNeverUsed = true;
461 G4Scintillation* theScintProcessNuc = new G4Scintillation("Scintillation");
462 // theScintProcessNuc->DumpPhysicsTable();
463 theScintProcessNuc->SetTrackSecondariesFirst(true);
464 theScintProcessNuc->SetScintillationYieldFactor(0.2);
465 theScintProcessNuc->SetScintillationExcitationRatio(1.0);
466 theScintProcessNuc->SetVerboseLevel(OpVerbLevel);
467
468 // optical processes
469 G4bool theAbsorptionProcessNeverUsed = true;
470 G4OpAbsorption* theAbsorptionProcess = new G4OpAbsorption();
471 // G4OpRayleigh* theRayleighScatteringProcess = new G4OpRayleigh();
472 G4bool theBoundaryProcessNeverUsed = true;
473 G4OpBoundaryProcess* theBoundaryProcess = new G4OpBoundaryProcess();
474 // theAbsorptionProcess->DumpPhysicsTable();
475 // theRayleighScatteringProcess->DumpPhysicsTable();
476 theAbsorptionProcess->SetVerboseLevel(OpVerbLevel);
477 // theRayleighScatteringProcess->SetVerboseLevel(OpVerbLevel);
478 theBoundaryProcess->SetVerboseLevel(OpVerbLevel);
479
480 auto myParticleIterator=G4ParticleTable::GetParticleTable()->GetIterator();
481 myParticleIterator->reset();
482 while( (*(myParticleIterator))() )
483 {
484 G4ParticleDefinition* particle = myParticleIterator->value();
485 G4ProcessManager* pmanager = particle->GetProcessManager();
486 G4String particleName = particle->GetParticleName();
487 if (theScintProcessDef->IsApplicable(*particle)) {
488 // if(particle->GetPDGMass() > 5.0*CLHEP::GeV)
489 if(particle->GetParticleName() == "GenericIon") {
490 pmanager->AddProcess(theScintProcessNuc); // AtRestDiscrete
491 pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxAtRest);
492 pmanager->SetProcessOrderingToLast(theScintProcessNuc,idxPostStep);
493 theScintProcessNucNeverUsed = false;
494 }
495 else if(particle->GetParticleName() == "alpha") {
496 pmanager->AddProcess(theScintProcessAlpha);
497 pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxAtRest);
498 pmanager->SetProcessOrderingToLast(theScintProcessAlpha,idxPostStep);
499 theScintProcessAlphaNeverUsed = false;
500 }
501 else {
502 pmanager->AddProcess(theScintProcessDef);
503 pmanager->SetProcessOrderingToLast(theScintProcessDef,idxAtRest);
504 pmanager->SetProcessOrderingToLast(theScintProcessDef,idxPostStep);
505 theScintProcessDefNeverUsed = false;
506 }
507 }
508
509 if (particleName == "opticalphoton") {
510 pmanager->AddDiscreteProcess(theAbsorptionProcess);
511 theAbsorptionProcessNeverUsed = false;
512 // pmanager->AddDiscreteProcess(theRayleighScatteringProcess);
513 theBoundaryProcessNeverUsed = false;
514 pmanager->AddDiscreteProcess(theBoundaryProcess);
515 }
516 }
517 if ( theScintProcessDefNeverUsed ) delete theScintProcessDef;
518 if ( theScintProcessAlphaNeverUsed ) delete theScintProcessAlpha;
519 if ( theScintProcessNucNeverUsed ) delete theScintProcessNuc;
520 if ( theBoundaryProcessNeverUsed ) delete theBoundaryProcess;
521 if ( theAbsorptionProcessNeverUsed ) delete theAbsorptionProcess;
522}
void SetProcessOrderingToLast(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
void SetScintillationYieldFactor(const G4double yieldfactor)
void SetTrackSecondariesFirst(const G4bool state)
void SetScintillationExcitationRatio(const G4double ratio)
G4bool IsApplicable(const G4ParticleDefinition &aParticleType) override
void SetVerboseLevel(G4int value)
Definition: G4VProcess.hh:412

Referenced by ConstructProcess().

◆ ConstructParticle()

void LBE::ConstructParticle ( )
protectedvirtual

Reimplemented from G4VModularPhysicsList.

Definition at line 109 of file LBE.cc.

110{
111
112 // In this method, static member functions should be called
113 // for all particles which you want to use.
114 // This ensures that objects of these particle types will be
115 // created in the program.
116
117 ConstructMyBosons();
118 ConstructMyLeptons();
119 ConstructMyMesons();
120 ConstructMyBaryons();
121 ConstructMyIons();
122 ConstructMyShortLiveds();
123 stoppingPhysics->ConstructParticle(); // Anything not included above
124}
virtual void ConstructParticle() override

◆ ConstructProcess()

void LBE::ConstructProcess ( )
protectedvirtual

Reimplemented from G4VModularPhysicsList.

Definition at line 203 of file LBE.cc.

204{
206 ConstructEM();
207 ConstructOp();
208 ConstructHad();
210}
virtual void ConstructEM()
Definition: LBE.cc:287
virtual void AddTransportation()
Definition: LBE.cc:217
virtual void ConstructOp()
Definition: LBE.cc:438
virtual void ConstructHad()
Definition: LBE.cc:597
virtual void ConstructGeneral()
Definition: LBE.cc:902

◆ operator=()

LBE & LBE::operator= ( const LBE right)
delete

◆ SetCuts()

void LBE::SetCuts ( )
virtual

Reimplemented from G4VUserPhysicsList.

Definition at line 968 of file LBE.cc.

969{
970
971 if (verboseLevel >1)
972 G4cout << "LBE::SetCuts:";
973
974 if (verboseLevel>0){
975 G4cout << "LBE::SetCuts:";
976 G4cout << "CutLength : "
977 << G4BestUnit(defaultCutValue,"Length") << G4endl;
978 }
979
980 //special for low energy physics
981 G4double lowlimit=250*CLHEP::eV;
983 aPCTable->SetEnergyRange(lowlimit,100*CLHEP::GeV);
984
985 // set cut values for gamma at first and for e- second and next for e+,
986 // because some processes for e+/e- need cut values for gamma
987 SetCutValue(cutForGamma, "gamma");
988 SetCutValue(cutForElectron, "e-");
989 SetCutValue(cutForPositron, "e+");
990
991 // SetCutValue(cutForProton, "proton");
992 // SetCutValue(cutForProton, "anti_proton");
993 // SetCutValue(cutForAlpha, "alpha");
994 // SetCutValue(cutForGenericIon, "GenericIon");
995
996 // SetCutValueForOthers(defaultCutValue);
997
999}
#define G4BestUnit(a, b)
void SetEnergyRange(G4double lowedge, G4double highedge)
static G4ProductionCutsTable * GetProductionCutsTable()
void SetCutValue(G4double aCut, const G4String &pname)
void DumpCutValuesTable(G4int flag=1)

The documentation for this class was generated from the following files: