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 #include <iomanip>
00035
00036 #include "HadronPhysicsQGSP_BERT_95.hh"
00037
00038 #include "globals.hh"
00039 #include "G4ios.hh"
00040 #include "G4SystemOfUnits.hh"
00041 #include "G4ParticleDefinition.hh"
00042 #include "G4ParticleTable.hh"
00043
00044 #include "G4MesonConstructor.hh"
00045 #include "G4BaryonConstructor.hh"
00046 #include "G4ShortLivedConstructor.hh"
00047
00048 #include "G4PiNuclearCrossSection.hh"
00049 #include "G4HadronInelasticDataSet.hh"
00050 #include "G4CrossSectionDataSetRegistry.hh"
00051 #include "G4CrossSectionPairGG.hh"
00052 #include "G4ProtonInelasticCrossSection.hh"
00053 #include "G4NeutronInelasticCrossSection.hh"
00054
00055 #include "G4PhysListUtil.hh"
00056
00057
00058 #include "G4PhysicsConstructorFactory.hh"
00059
00060 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsQGSP_BERT_95);
00061
00062 HadronPhysicsQGSP_BERT_95::HadronPhysicsQGSP_BERT_95(G4int)
00063 : G4VPhysicsConstructor("hInelastic QGSP_BERT_95")
00064 , theNeutrons(0)
00065 , theLEPNeutron(0)
00066 , theQGSPNeutron(0)
00067 , theBertiniNeutron(0)
00068 , thePiK(0)
00069 , theLEPPiK(0)
00070 , theQGSPPiK(0)
00071 , theBertiniPiK(0)
00072 , thePro(0)
00073 , theLEPPro(0)
00074 , theQGSPPro(0)
00075 , theBertiniPro(0)
00076 , theMiscLHEP(0)
00077 , QuasiElastic(true)
00078 , ProjectileDiffraction(false)
00079 , xsBarashenkovGGPion(0)
00080 , xsGeisha(0)
00081 , xsAxenWellischGGProton(0)
00082 , xsLaidlawWellischGGNeutron(0)
00083 {
00084 }
00085
00086 HadronPhysicsQGSP_BERT_95::HadronPhysicsQGSP_BERT_95(const G4String& name, G4bool quasiElastic)
00087 : G4VPhysicsConstructor(name)
00088 , theNeutrons(0)
00089 , theLEPNeutron(0)
00090 , theQGSPNeutron(0)
00091 , theBertiniNeutron(0)
00092 , thePiK(0)
00093 , theLEPPiK(0)
00094 , theQGSPPiK(0)
00095 , theBertiniPiK(0)
00096 , thePro(0)
00097 , theLEPPro(0)
00098 , theQGSPPro(0)
00099 , theBertiniPro(0)
00100 , theMiscLHEP(0)
00101 , QuasiElastic(quasiElastic)
00102 , ProjectileDiffraction(false)
00103 , xsBarashenkovGGPion(0)
00104 , xsGeisha(0)
00105 , xsAxenWellischGGProton(0)
00106 , xsLaidlawWellischGGNeutron(0)
00107 {
00108 }
00109
00110 void HadronPhysicsQGSP_BERT_95::CreateModels()
00111 {
00112 theNeutrons=new G4NeutronBuilder;
00113 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(QuasiElastic, ProjectileDiffraction));
00114 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00115 theLEPNeutron->SetMinInelasticEnergy(9.5*GeV);
00116 theLEPNeutron->SetMaxInelasticEnergy(25*GeV);
00117
00118 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00119 theBertiniNeutron->SetMinEnergy(0.0*GeV);
00120 theBertiniNeutron->SetMaxEnergy(9.9*GeV);
00121
00122 thePro=new G4ProtonBuilder;
00123 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(QuasiElastic, ProjectileDiffraction));
00124 thePro->RegisterMe(theLEPPro=new G4LEPProtonBuilder);
00125 theLEPPro->SetMinEnergy(9.5*GeV);
00126 theLEPPro->SetMaxEnergy(25*GeV);
00127
00128 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00129 theBertiniPro->SetMaxEnergy(9.9*GeV);
00130
00131 thePiK=new G4PiKBuilder;
00132 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(QuasiElastic));
00133 thePiK->RegisterMe(theLEPPiK=new G4LEPPiKBuilder);
00134 theLEPPiK->SetMaxEnergy(25*GeV);
00135 theLEPPiK->SetMinEnergy(9.5*GeV);
00136
00137 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00138 theBertiniPiK->SetMaxEnergy(9.9*GeV);
00139
00140 theMiscLHEP=new G4MiscLHEPBuilder;
00141 }
00142
00143 HadronPhysicsQGSP_BERT_95::~HadronPhysicsQGSP_BERT_95()
00144 {
00145 delete theMiscLHEP;
00146 delete theQGSPNeutron;
00147 delete theLEPNeutron;
00148 delete theNeutrons;
00149 delete theBertiniNeutron;
00150 delete theQGSPPro;
00151 delete theLEPPro;
00152 delete thePro;
00153 delete theBertiniPro;
00154 delete theQGSPPiK;
00155 delete theLEPPiK;
00156 delete theBertiniPiK;
00157 delete thePiK;
00158
00159 delete xsBarashenkovGGPion;
00160 delete xsGeisha;
00161 delete xsAxenWellischGGProton;
00162 delete xsLaidlawWellischGGNeutron;
00163 }
00164
00165 void HadronPhysicsQGSP_BERT_95::ConstructParticle()
00166 {
00167 G4MesonConstructor pMesonConstructor;
00168 pMesonConstructor.ConstructParticle();
00169
00170 G4BaryonConstructor pBaryonConstructor;
00171 pBaryonConstructor.ConstructParticle();
00172
00173 G4ShortLivedConstructor pShortLivedConstructor;
00174 pShortLivedConstructor.ConstructParticle();
00175 }
00176
00177 #include "G4ProcessManager.hh"
00178 void HadronPhysicsQGSP_BERT_95::ConstructProcess()
00179 {
00180 CreateModels();
00181 theNeutrons->Build();
00182 thePro->Build();
00183 thePiK->Build();
00184 theMiscLHEP->Build();
00185
00186
00187
00188
00189
00190
00191 xsBarashenkovGGPion = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
00192 G4PhysListUtil::FindInelasticProcess(G4PionPlus::PionPlus())->AddDataSet(xsBarashenkovGGPion);
00193 G4PhysListUtil::FindInelasticProcess(G4PionMinus::PionMinus())->AddDataSet(xsBarashenkovGGPion);
00194
00195
00196
00197 xsGeisha = new G4HadronInelasticDataSet();
00198 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(xsGeisha);
00199 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(xsGeisha);
00200 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(xsGeisha);
00201 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(xsGeisha);
00202
00203
00204
00205
00206 xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV);
00207 G4PhysListUtil::FindInelasticProcess(G4Proton::Proton())->AddDataSet(xsAxenWellischGGProton);
00208
00209
00210
00211
00212 xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
00213 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xsLaidlawWellischGGNeutron);
00214
00215
00216
00217 G4PhysListUtil::FindInelasticProcess(G4Lambda::Lambda())->AddDataSet(xsGeisha);
00218 G4PhysListUtil::FindInelasticProcess(G4AntiLambda::AntiLambda())->AddDataSet(xsGeisha);
00219 G4PhysListUtil::FindInelasticProcess(G4SigmaMinus::SigmaMinus())->AddDataSet(xsGeisha);
00220 G4PhysListUtil::FindInelasticProcess(G4AntiSigmaMinus::AntiSigmaMinus())->AddDataSet(xsGeisha);
00221 G4PhysListUtil::FindInelasticProcess(G4SigmaPlus::SigmaPlus())->AddDataSet(xsGeisha);
00222 G4PhysListUtil::FindInelasticProcess(G4AntiSigmaPlus::AntiSigmaPlus())->AddDataSet(xsGeisha);
00223 G4PhysListUtil::FindInelasticProcess(G4XiMinus::XiMinus())->AddDataSet(xsGeisha);
00224 G4PhysListUtil::FindInelasticProcess(G4AntiXiMinus::AntiXiMinus())->AddDataSet(xsGeisha);
00225 G4PhysListUtil::FindInelasticProcess(G4XiZero::XiZero())->AddDataSet(xsGeisha);
00226 G4PhysListUtil::FindInelasticProcess(G4AntiXiZero::AntiXiZero())->AddDataSet(xsGeisha);
00227 G4PhysListUtil::FindInelasticProcess(G4OmegaMinus::OmegaMinus())->AddDataSet(xsGeisha);
00228 G4PhysListUtil::FindInelasticProcess(G4AntiOmegaMinus::AntiOmegaMinus())->AddDataSet(xsGeisha);
00229
00230
00231
00232 G4PhysListUtil::FindInelasticProcess(G4AntiProton::AntiProton())->AddDataSet(xsGeisha);
00233 G4PhysListUtil::FindInelasticProcess(G4AntiNeutron::AntiNeutron())->AddDataSet(xsGeisha);
00234
00235 }