00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include <iomanip>
00040
00041 #include "HadronPhysicsShielding.hh"
00042
00043 #include "globals.hh"
00044 #include "G4ios.hh"
00045 #include "G4SystemOfUnits.hh"
00046 #include "G4ParticleDefinition.hh"
00047 #include "G4ParticleTable.hh"
00048
00049 #include "G4MesonConstructor.hh"
00050 #include "G4BaryonConstructor.hh"
00051 #include "G4ShortLivedConstructor.hh"
00052
00053 #include "G4BGGNucleonInelasticXS.hh"
00054 #include "G4NeutronHPBGGNucleonInelasticXS.hh"
00055 #include "G4NeutronHPJENDLHEInelasticData.hh"
00056 #include "G4NeutronHPInelasticData.hh"
00057
00058 #include "G4ChipsKaonMinusInelasticXS.hh"
00059 #include "G4ChipsKaonPlusInelasticXS.hh"
00060 #include "G4ChipsKaonZeroInelasticXS.hh"
00061 #include "G4CrossSectionDataSetRegistry.hh"
00062 #include "G4PhysListUtil.hh"
00063
00064
00065 #include "G4PhysicsConstructorFactory.hh"
00066
00067 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsShielding);
00068
00069 HadronPhysicsShielding::HadronPhysicsShielding( G4int )
00070 : G4VPhysicsConstructor("hInelastic Shielding")
00071 , theNeutrons(0)
00072 , theLENeutron(0)
00073 , theBertiniNeutron(0)
00074 , theFTFPNeutron(0)
00075 , theLEPNeutron(0)
00076 , thePiK(0)
00077 , theBertiniPiK(0)
00078 , theFTFPPiK(0)
00079 , thePro(0)
00080 , theBertiniPro(0)
00081 , theFTFPPro(0)
00082 , theMiscCHIPS(0)
00083 , QuasiElastic(false)
00084 , theCHIPSInelastic(0)
00085 , BGGxsNeutron(0)
00086 , NeutronHPJENDLHEInelastic(0)
00087 , BGGxsProton(0)
00088 , useLEND(false)
00089 , evaluation()
00090 {}
00091
00092 HadronPhysicsShielding::HadronPhysicsShielding(const G4String& name, G4bool quasiElastic)
00093 : G4VPhysicsConstructor(name)
00094 , theNeutrons(0)
00095 , theLENeutron(0)
00096 , theBertiniNeutron(0)
00097 , theFTFPNeutron(0)
00098 , theLEPNeutron(0)
00099 , thePiK(0)
00100 , theBertiniPiK(0)
00101 , theFTFPPiK(0)
00102 , thePro(0)
00103 , theBertiniPro(0)
00104 , theFTFPPro(0)
00105 , theMiscCHIPS(0)
00106 , QuasiElastic(quasiElastic)
00107 , theCHIPSInelastic(0)
00108 , BGGxsNeutron(0)
00109 , NeutronHPJENDLHEInelastic(0)
00110 , BGGxsProton(0)
00111 , useLEND(false)
00112 , evaluation()
00113 {}
00114
00115 #include "G4NeutronLENDBuilder.hh"
00116 void HadronPhysicsShielding::CreateModels()
00117 {
00118
00119 theNeutrons=new G4NeutronBuilder;
00120 theFTFPNeutron=new G4FTFPNeutronBuilder(QuasiElastic);
00121 theNeutrons->RegisterMe(theFTFPNeutron);
00122 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00123 theBertiniNeutron->SetMinEnergy(19.9*MeV);
00124 theBertiniNeutron->SetMaxEnergy(5*GeV);
00125 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00126 theLEPNeutron->SetMinEnergy(19.9*MeV);
00127 theLEPNeutron->SetMinInelasticEnergy(0.0*eV);
00128 theLEPNeutron->SetMaxInelasticEnergy(0.0*eV);
00129
00130
00131 if ( useLEND != true )
00132 theNeutrons->RegisterMe(theLENeutron=new G4NeutronHPBuilder);
00133 else
00134 {
00135 theNeutrons->RegisterMe(theLENeutron=new G4NeutronLENDBuilder(evaluation));
00136 }
00137
00138 thePro=new G4ProtonBuilder;
00139 theFTFPPro=new G4FTFPProtonBuilder(QuasiElastic);
00140 thePro->RegisterMe(theFTFPPro);
00141 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00142 theBertiniPro->SetMaxEnergy(5*GeV);
00143
00144 thePiK=new G4PiKBuilder;
00145 theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic);
00146 thePiK->RegisterMe(theFTFPPiK);
00147 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00148 theBertiniPiK->SetMaxEnergy(5*GeV);
00149
00150 theMiscCHIPS=new G4MiscCHIPSBuilder;
00151 }
00152
00153 HadronPhysicsShielding::~HadronPhysicsShielding()
00154 {
00155 delete theNeutrons;
00156 delete theBertiniNeutron;
00157 delete theFTFPNeutron;
00158
00159 delete theLENeutron;
00160
00161 delete thePiK;
00162 delete theBertiniPiK;
00163 delete theFTFPPiK;
00164
00165 delete thePro;
00166 delete theBertiniPro;
00167 delete theFTFPPro;
00168
00169 delete theMiscCHIPS;
00170 delete theCHIPSInelastic;
00171 delete BGGxsNeutron;
00172 delete NeutronHPJENDLHEInelastic;
00173 delete BGGxsProton;
00174 }
00175
00176 void HadronPhysicsShielding::ConstructParticle()
00177 {
00178 G4MesonConstructor pMesonConstructor;
00179 pMesonConstructor.ConstructParticle();
00180
00181 G4BaryonConstructor pBaryonConstructor;
00182 pBaryonConstructor.ConstructParticle();
00183
00184 G4ShortLivedConstructor pShortLivedConstructor;
00185 pShortLivedConstructor.ConstructParticle();
00186 }
00187
00188 #include "G4ProcessManager.hh"
00189 void HadronPhysicsShielding::ConstructProcess()
00190 {
00191 CreateModels();
00192
00193
00194 thePro->Build();
00195 theNeutrons->Build();
00196
00197
00198
00199
00200
00201 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(new G4BGGNucleonInelasticXS(G4Neutron::Neutron()));
00202 NeutronHPJENDLHEInelastic=new G4NeutronHPJENDLHEInelasticData;
00203 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(NeutronHPJENDLHEInelastic);
00204 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(new G4NeutronHPInelasticData);
00205
00206
00207
00208
00209 thePiK->Build();
00210
00211
00212 G4CrossSectionDataSetRegistry* registry = G4CrossSectionDataSetRegistry::Instance();
00213
00214 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(registry->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name()));
00215 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(registry->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name()));
00216 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(registry->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
00217 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(registry->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name()));
00218
00219 theMiscCHIPS->Build();
00220 }