11 #include "G4ParticleDefinition.hh"
12 #include "G4ProcessManager.hh"
14 #include "G4MesonConstructor.hh"
15 #include "G4BaryonConstructor.hh"
16 #include "G4IonConstructor.hh"
17 #include "G4Neutron.hh"
19 #include "G4WHadronElasticProcess.hh"
20 #include "G4VHadronElastic.hh"
21 #include "G4CHIPSElastic.hh"
22 #include "G4ElasticHadrNucleusHE.hh"
23 #include "G4BGGNucleonElasticXS.hh"
24 #include "G4BGGPionElasticXS.hh"
25 #include "G4NeutronElasticXS.hh"
28 : G4VPhysicsConstructor(
"hElasticWEL_CHIPS_XS"),
verbose(ver),
32 G4cout <<
"### G4HadronElasticPhysicsHP: " << GetPhysicsName()
43 G4MesonConstructor pMesonConstructor;
44 pMesonConstructor.ConstructParticle();
46 G4BaryonConstructor pBaryonConstructor;
47 pBaryonConstructor.ConstructParticle();
50 G4IonConstructor pConstructor;
51 pConstructor.ConstructParticle();
59 G4double elimit = 1.0*GeV;
61 G4cout <<
"### HadronElasticPhysics Construct Processes with HE limit "
62 << elimit <<
" MeV" << G4endl;
65 G4VHadronElastic* plep0 =
new G4VHadronElastic();
66 G4VHadronElastic* plep1 =
new G4VHadronElastic();
67 plep1->SetMaxEnergy(elimit);
69 G4CHIPSElastic* chipsp =
new G4CHIPSElastic();
70 G4CHIPSElastic* chipsn =
new G4CHIPSElastic();
72 G4ElasticHadrNucleusHE* he =
new G4ElasticHadrNucleusHE();
73 he->SetMinEnergy(elimit);
75 theParticleIterator->reset();
76 while( (*theParticleIterator)() )
78 G4ParticleDefinition* particle = theParticleIterator->value();
79 G4String pname = particle->GetParticleName();
80 if(pname ==
"anti_lambda" ||
81 pname ==
"anti_neutron" ||
82 pname ==
"anti_omega-" ||
83 pname ==
"anti_proton" ||
84 pname ==
"anti_sigma-" ||
85 pname ==
"anti_sigma+" ||
86 pname ==
"anti_xi-" ||
87 pname ==
"anti_xi0" ||
101 pname ==
"deuteron" ||
104 G4ProcessManager* pmanager = particle->GetProcessManager();
105 G4WHadronElasticProcess* hel =
new G4WHadronElasticProcess();
106 if(pname ==
"proton") {
107 hel->AddDataSet(
new G4BGGNucleonElasticXS(particle));
108 hel->RegisterMe(chipsp);
109 }
else if (pname ==
"pi+" || pname ==
"pi-") {
110 hel->AddDataSet(
new G4BGGPionElasticXS(particle));
111 hel->RegisterMe(plep1);
114 hel->RegisterMe(plep0);
116 pmanager->AddDiscreteProcess(hel);
118 G4cout <<
"### HadronElasticPhysicsXS: " << hel->GetProcessName()
119 <<
" added for " << particle->GetParticleName() << G4endl;
123 }
else if(pname ==
"neutron") {
125 G4ProcessManager* pmanager = particle->GetProcessManager();
126 G4WHadronElasticProcess* hel =
new G4WHadronElasticProcess();
127 hel->AddDataSet(
new G4NeutronElasticXS());
128 hel->RegisterMe(chipsn);
130 pmanager->AddDiscreteProcess(hel);
133 G4cout <<
"### HadronElasticPhysicsXS: " << hel->GetProcessName()
134 <<
" added for " << particle->GetParticleName() << G4endl;
CMSHadronElasticPhysicsXS(G4int ver=1)
virtual ~CMSHadronElasticPhysicsXS()
virtual void ConstructParticle()
virtual void ConstructProcess()