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 #include "HadronPhysicsFTFP_BERT_HP.hh"
00033
00034 #include <iomanip>
00035 #include "globals.hh"
00036 #include "G4ios.hh"
00037 #include "G4SystemOfUnits.hh"
00038 #include "G4ParticleDefinition.hh"
00039 #include "G4ParticleTable.hh"
00040
00041 #include "G4MesonConstructor.hh"
00042 #include "G4BaryonConstructor.hh"
00043 #include "G4ShortLivedConstructor.hh"
00044
00045 #include "G4ChipsKaonMinusInelasticXS.hh"
00046 #include "G4ChipsKaonPlusInelasticXS.hh"
00047 #include "G4ChipsKaonZeroInelasticXS.hh"
00048 #include "G4CrossSectionDataSetRegistry.hh"
00049
00050 #include "G4PhysListUtil.hh"
00051
00052
00053 #include "G4PhysicsConstructorFactory.hh"
00054
00055 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsFTFP_BERT_HP);
00056
00057 HadronPhysicsFTFP_BERT_HP::HadronPhysicsFTFP_BERT_HP(G4int)
00058 : G4VPhysicsConstructor("hInelastic FTFP_BERT_HP")
00059 , theNeutrons(0)
00060 , theBertiniNeutron(0)
00061 , theFTFPNeutron(0)
00062 , theLEPNeutron(0)
00063 , theHPNeutron(0)
00064 , thePiK(0)
00065 , theBertiniPiK(0)
00066 , theFTFPPiK(0)
00067 , thePro(0)
00068 , theBertiniPro(0)
00069 , theFTFPPro(0)
00070 , theHyperon(0)
00071 , theAntiBaryon(0)
00072 , theFTFPAntiBaryon(0)
00073 , QuasiElastic(false)
00074 , ChipsKaonMinus(0)
00075 , ChipsKaonPlus(0)
00076 , ChipsKaonZero(0)
00077 {}
00078
00079 HadronPhysicsFTFP_BERT_HP::HadronPhysicsFTFP_BERT_HP(const G4String& name, G4bool quasiElastic)
00080 : G4VPhysicsConstructor(name)
00081 , theNeutrons(0)
00082 , theBertiniNeutron(0)
00083 , theFTFPNeutron(0)
00084 , theLEPNeutron(0)
00085 , theHPNeutron(0)
00086 , thePiK(0)
00087 , theBertiniPiK(0)
00088 , theFTFPPiK(0)
00089 , thePro(0)
00090 , theBertiniPro(0)
00091 , theFTFPPro(0)
00092 , theHyperon(0)
00093 , theAntiBaryon(0)
00094 , theFTFPAntiBaryon(0)
00095 , QuasiElastic(quasiElastic)
00096 , ChipsKaonMinus(0)
00097 , ChipsKaonPlus(0)
00098 , ChipsKaonZero(0)
00099 {}
00100
00101 void HadronPhysicsFTFP_BERT_HP::CreateModels()
00102 {
00103
00104 theNeutrons=new G4NeutronBuilder;
00105 theFTFPNeutron=new G4FTFPNeutronBuilder(QuasiElastic);
00106 theNeutrons->RegisterMe(theFTFPNeutron);
00107 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00108 theBertiniNeutron->SetMinEnergy(19.9*MeV);
00109 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00110 theLEPNeutron->SetMinEnergy(19.9*MeV);
00111 theLEPNeutron->SetMinInelasticEnergy(0.0*eV);
00112 theLEPNeutron->SetMaxInelasticEnergy(0.0*eV);
00113 theBertiniNeutron->SetMaxEnergy(5*GeV);
00114 theNeutrons->RegisterMe(theHPNeutron=new G4NeutronHPBuilder);
00115
00116 thePro=new G4ProtonBuilder;
00117 theFTFPPro=new G4FTFPProtonBuilder(QuasiElastic);
00118 thePro->RegisterMe(theFTFPPro);
00119 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00120 theBertiniPro->SetMaxEnergy(5*GeV);
00121
00122 thePiK=new G4PiKBuilder;
00123 theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic);
00124 thePiK->RegisterMe(theFTFPPiK);
00125 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00126 theBertiniPiK->SetMaxEnergy(5*GeV);
00127
00128 theHyperon=new G4HyperonFTFPBuilder;
00129
00130 theAntiBaryon=new G4AntiBarionBuilder;
00131 theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(QuasiElastic));
00132 }
00133
00134 HadronPhysicsFTFP_BERT_HP::~HadronPhysicsFTFP_BERT_HP()
00135 {
00136 delete theNeutrons;
00137 delete theBertiniNeutron;
00138 delete theFTFPNeutron;
00139 delete theLEPNeutron;
00140 delete theHPNeutron;
00141
00142 delete thePiK;
00143 delete theBertiniPiK;
00144 delete theFTFPPiK;
00145
00146 delete thePro;
00147 delete theBertiniPro;
00148 delete theFTFPPro;
00149
00150 delete theHyperon;
00151 delete theAntiBaryon;
00152 delete theFTFPAntiBaryon;
00153 }
00154
00155 void HadronPhysicsFTFP_BERT_HP::ConstructParticle()
00156 {
00157 G4MesonConstructor pMesonConstructor;
00158 pMesonConstructor.ConstructParticle();
00159
00160 G4BaryonConstructor pBaryonConstructor;
00161 pBaryonConstructor.ConstructParticle();
00162
00163 G4ShortLivedConstructor pShortLivedConstructor;
00164 pShortLivedConstructor.ConstructParticle();
00165 }
00166
00167 #include "G4ProcessManager.hh"
00168 void HadronPhysicsFTFP_BERT_HP::ConstructProcess()
00169 {
00170 CreateModels();
00171 theNeutrons->Build();
00172 thePro->Build();
00173 thePiK->Build();
00174
00175
00176 ChipsKaonMinus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name());
00177 ChipsKaonPlus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name());
00178 ChipsKaonZero = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name());
00179
00180 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(ChipsKaonMinus);
00181 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(ChipsKaonPlus);
00182 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(ChipsKaonZero );
00183 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(ChipsKaonZero );
00184
00185 theHyperon->Build();
00186 theAntiBaryon->Build();
00187 }