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 "HadronPhysicsQGSP_BERT_CHIPS.hh"
00042
00043 #include "globals.hh"
00044 #include "G4ios.hh"
00045 #include "G4SystemOfUnits.hh"
00046 #include "G4ParticleDefinition.hh"
00047 #include "G4ParticleTable.hh"
00048 #include "G4HadronicProcessType.hh"
00049
00050 #include "G4MesonConstructor.hh"
00051 #include "G4BaryonConstructor.hh"
00052 #include "G4ShortLivedConstructor.hh"
00053
00054 #include "G4QHadronInelasticDataSet.hh"
00055
00056 #include "G4HadronInelasticDataSet.hh"
00057 #include "G4CrossSectionDataSetRegistry.hh"
00058 #include "G4CrossSectionPairGG.hh"
00059 #include "G4ProtonInelasticCrossSection.hh"
00060 #include "G4NeutronInelasticCrossSection.hh"
00061 #include "G4PhysListUtil.hh"
00062
00063
00064 HadronPhysicsQGSP_BERT_CHIPS::HadronPhysicsQGSP_BERT_CHIPS(G4int)
00065 : G4VPhysicsConstructor("hInelastic QGSP_BERT_CHIPS")
00066 , theNeutrons(0)
00067 , theLEPNeutron(0)
00068 , theQGSPNeutron(0)
00069 , theBertiniNeutron(0)
00070 , thePion(0)
00071 , theLEPPion(0)
00072 , theQGSPPion(0)
00073 , theBertiniPion(0)
00074 , theKaon(0)
00075 , thePro(0)
00076 , theLEPPro(0)
00077 , theQGSPPro(0)
00078 , theBertiniPro(0)
00079 , theMiscCHIPS(0)
00080 , QuasiElastic(true)
00081 , ProjectileDiffraction(false)
00082 , xsAxenWellischGGProton(0)
00083 , xsLaidlawWellischGGNeutron(0)
00084 {
00085 }
00086
00087 HadronPhysicsQGSP_BERT_CHIPS::HadronPhysicsQGSP_BERT_CHIPS(const G4String& name, G4bool quasiElastic)
00088 : G4VPhysicsConstructor(name)
00089 , theNeutrons(0)
00090 , theLEPNeutron(0)
00091 , theQGSPNeutron(0)
00092 , theBertiniNeutron(0)
00093 , thePion(0)
00094 , theLEPPion(0)
00095 , theQGSPPion(0)
00096 , theBertiniPion(0)
00097 , theKaon(0)
00098 , thePro(0)
00099 , theLEPPro(0)
00100 , theQGSPPro(0)
00101 , theBertiniPro(0)
00102 , theMiscCHIPS(0)
00103 , QuasiElastic(quasiElastic)
00104 , ProjectileDiffraction(false)
00105 , xsAxenWellischGGProton(0)
00106 , xsLaidlawWellischGGNeutron(0)
00107 {
00108 }
00109
00110 void HadronPhysicsQGSP_BERT_CHIPS::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 thePion=new G4PionBuilder;
00132 thePion->RegisterMe(theQGSPPion=new G4QGSPPionBuilder(QuasiElastic));
00133 thePion->RegisterMe(theLEPPion=new G4LEPPionBuilder);
00134 theLEPPion->SetMaxEnergy(25*GeV);
00135 theLEPPion->SetMinEnergy(9.5*GeV);
00136
00137 thePion->RegisterMe(theBertiniPion=new G4BertiniPionBuilder);
00138 theBertiniPion->SetMaxEnergy(9.9*GeV);
00139
00140 G4int verbosity(0);
00141 theKaon=new G4ChipsKaonBuilder(verbosity);
00142
00143 theMiscCHIPS=new G4MiscCHIPSBuilder;
00144 }
00145
00146 HadronPhysicsQGSP_BERT_CHIPS::~HadronPhysicsQGSP_BERT_CHIPS()
00147 {
00148 delete theMiscCHIPS;
00149 delete theQGSPNeutron;
00150 delete theLEPNeutron;
00151 delete theBertiniNeutron;
00152 delete theQGSPPro;
00153 delete theLEPPro;
00154 delete thePro;
00155 delete theBertiniPro;
00156 delete theQGSPPion;
00157 delete theLEPPion;
00158 delete theBertiniPion;
00159 delete thePion;
00160 delete theKaon;
00161
00162 delete xsAxenWellischGGProton;
00163 delete xsLaidlawWellischGGNeutron;
00164 }
00165
00166 void HadronPhysicsQGSP_BERT_CHIPS::ConstructParticle()
00167 {
00168 G4MesonConstructor pMesonConstructor;
00169 pMesonConstructor.ConstructParticle();
00170
00171 G4BaryonConstructor pBaryonConstructor;
00172 pBaryonConstructor.ConstructParticle();
00173
00174 G4ShortLivedConstructor pShortLivedConstructor;
00175 pShortLivedConstructor.ConstructParticle();
00176 }
00177
00178 #include "G4ProcessManager.hh"
00179 void HadronPhysicsQGSP_BERT_CHIPS::ConstructProcess()
00180 {
00181 CreateModels();
00182 theNeutrons->Build();
00183 thePro->Build();
00184 thePion->Build();
00185 theKaon->Build();
00186 theMiscCHIPS->Build();
00187
00188
00189
00190
00191
00192
00193 xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV);
00194 G4PhysListUtil::FindInelasticProcess(G4Proton::Proton())->AddDataSet(xsAxenWellischGGProton);
00195
00196
00197
00198
00199 xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
00200 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xsLaidlawWellischGGNeutron);
00201 }