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_FTFP_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 #include "G4IonConstructor.hh"
00048
00049 #include "G4PiNuclearCrossSection.hh"
00050 #include "G4ChipsKaonMinusInelasticXS.hh"
00051 #include "G4ChipsKaonPlusInelasticXS.hh"
00052 #include "G4ChipsKaonZeroInelasticXS.hh"
00053 #include "G4CrossSectionDataSetRegistry.hh"
00054 #include "G4CrossSectionPairGG.hh"
00055 #include "G4ProtonInelasticCrossSection.hh"
00056 #include "G4NeutronInelasticCrossSection.hh"
00057 #include "G4ChipsHyperonInelasticXS.hh"
00058 #include "G4CrossSectionInelastic.hh"
00059 #include "G4ComponentAntiNuclNuclearXS.hh"
00060
00061 #include "G4PhysListUtil.hh"
00062
00063
00064 #include "G4PhysicsConstructorFactory.hh"
00065
00066 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsQGSP_FTFP_BERT_95);
00067
00068 HadronPhysicsQGSP_FTFP_BERT_95::HadronPhysicsQGSP_FTFP_BERT_95(G4int)
00069 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT_95")
00070 , theNeutrons(0)
00071 , theFTFPNeutron(0)
00072 , theQGSPNeutron(0)
00073 , theBertiniNeutron(0)
00074 , theLEPNeutron(0)
00075 , thePiK(0)
00076 , theFTFPPiK(0)
00077 , theQGSPPiK(0)
00078 , theBertiniPiK(0)
00079 , thePro(0)
00080 , theFTFPPro(0)
00081 , theQGSPPro(0)
00082 , theBertiniPro(0)
00083 , theHyperon(0)
00084 , theAntiBaryon(0)
00085 , theFTFPAntiBaryon(0)
00086 , QuasiElastic(true)
00087 , ProjectileDiffraction(false)
00088 , xsBarashenkovGGPion(0)
00089 , xsChipsKaonMinus(0)
00090 , xsChipsKaonPlus(0)
00091 , xsChipsKaonZero(0)
00092 , xsAxenWellischGGProton(0)
00093 , xsLaidlawWellischGGNeutron(0)
00094 , xsChipsHyperons(0)
00095 , xsGaloyanUzhinskyAntibaryon(0)
00096 {
00097 }
00098
00099 HadronPhysicsQGSP_FTFP_BERT_95::HadronPhysicsQGSP_FTFP_BERT_95(const G4String&,
00100 G4bool quasiElastic)
00101 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT_95")
00102 , theNeutrons(0)
00103 , theFTFPNeutron(0)
00104 , theQGSPNeutron(0)
00105 , theBertiniNeutron(0)
00106 , theLEPNeutron(0)
00107 , thePiK(0)
00108 , theFTFPPiK(0)
00109 , theQGSPPiK(0)
00110 , theBertiniPiK(0)
00111 , thePro(0)
00112 , theFTFPPro(0)
00113 , theQGSPPro(0)
00114 , theBertiniPro(0)
00115 , theHyperon(0)
00116 , theAntiBaryon(0)
00117 , theFTFPAntiBaryon(0)
00118 , QuasiElastic(quasiElastic)
00119 , ProjectileDiffraction(false)
00120 , xsBarashenkovGGPion(0)
00121 , xsChipsKaonMinus(0)
00122 , xsChipsKaonPlus(0)
00123 , xsChipsKaonZero(0)
00124 , xsAxenWellischGGProton(0)
00125 , xsLaidlawWellischGGNeutron(0)
00126 , xsChipsHyperons(0)
00127 , xsGaloyanUzhinskyAntibaryon(0)
00128 {
00129 }
00130
00131 void HadronPhysicsQGSP_FTFP_BERT_95::CreateModels()
00132 {
00133
00134 G4double minFTFP= 6.0 * GeV;
00135 G4double maxBERT= 8.0 * GeV;
00136
00137 G4double minQGSP= 12.0 * GeV;
00138 G4double maxFTFP= 25.0 * GeV;
00139
00140 G4bool quasiElasFTF= false;
00141 G4bool quasiElasQGS= true;
00142
00143 G4cout << " New QGSP_FTFP_BERT_95 physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
00144 G4cout << " Thresholds: " << G4endl;
00145 G4cout << " 1) between BERT and FTF/P over the interval "
00146 << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
00147 G4cout << " 2) between FTF/P and QGS/P over the interval "
00148 << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
00149 G4cout << " -- quasiElastic was asked to be " << QuasiElastic << G4endl
00150 << " Changed to " << quasiElasQGS << " for QGS "
00151 << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
00152
00153 theNeutrons=new G4NeutronBuilder;
00154 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
00155 theQGSPNeutron->SetMinEnergy(minQGSP);
00156 theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
00157 theFTFPNeutron->SetMinEnergy(minFTFP);
00158 theFTFPNeutron->SetMaxEnergy(maxFTFP);
00159
00160
00161 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00162 theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
00163 theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
00164
00165 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00166 theBertiniNeutron->SetMinEnergy(0.0*GeV);
00167 theBertiniNeutron->SetMaxEnergy(maxBERT);
00168
00169 thePro=new G4ProtonBuilder;
00170 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
00171 theQGSPPro->SetMinEnergy(minQGSP);
00172 thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
00173 theFTFPPro->SetMinEnergy(minFTFP);
00174 theFTFPPro->SetMaxEnergy(maxFTFP);
00175 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00176 theBertiniPro->SetMaxEnergy(maxBERT);
00177
00178 thePiK=new G4PiKBuilder;
00179 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
00180 theQGSPPiK->SetMinEnergy(minQGSP);
00181 thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
00182 theFTFPPiK->SetMaxEnergy(maxFTFP);
00183 theFTFPPiK->SetMinEnergy(minFTFP);
00184 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00185 theBertiniPiK->SetMaxEnergy(maxBERT);
00186
00187
00188 theHyperon=new G4HyperonFTFPBuilder;
00189
00190 theAntiBaryon=new G4AntiBarionBuilder;
00191 theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasFTF));
00192 }
00193
00194 HadronPhysicsQGSP_FTFP_BERT_95::~HadronPhysicsQGSP_FTFP_BERT_95()
00195 {
00196 delete theQGSPNeutron;
00197 delete theFTFPNeutron;
00198 delete theBertiniNeutron;
00199 delete theNeutrons;
00200
00201 delete theQGSPPro;
00202 delete theFTFPPro;
00203 delete thePro;
00204 delete theBertiniPro;
00205
00206 delete theQGSPPiK;
00207 delete theFTFPPiK;
00208 delete theBertiniPiK;
00209 delete thePiK;
00210
00211 delete theHyperon;
00212 delete theAntiBaryon;
00213 delete theFTFPAntiBaryon;
00214
00215 delete xsBarashenkovGGPion;
00216 delete xsAxenWellischGGProton;
00217 delete xsLaidlawWellischGGNeutron;
00218 delete xsGaloyanUzhinskyAntibaryon;
00219 }
00220
00221 void HadronPhysicsQGSP_FTFP_BERT_95::ConstructParticle()
00222 {
00223 G4MesonConstructor pMesonConstructor;
00224 pMesonConstructor.ConstructParticle();
00225
00226 G4BaryonConstructor pBaryonConstructor;
00227 pBaryonConstructor.ConstructParticle();
00228
00229 G4ShortLivedConstructor pShortLivedConstructor;
00230 pShortLivedConstructor.ConstructParticle();
00231
00232 G4IonConstructor pIonConstructor;
00233 pIonConstructor.ConstructParticle();
00234 }
00235
00236 #include "G4ProcessManager.hh"
00237 void HadronPhysicsQGSP_FTFP_BERT_95::ConstructProcess()
00238 {
00239 CreateModels();
00240 theNeutrons->Build();
00241 thePro->Build();
00242 thePiK->Build();
00243 theHyperon->Build();
00244 theAntiBaryon->Build();
00245
00246
00247
00248
00249
00250
00251 xsBarashenkovGGPion = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
00252 G4PhysListUtil::FindInelasticProcess(G4PionPlus::PionPlus())->AddDataSet(xsBarashenkovGGPion);
00253 G4PhysListUtil::FindInelasticProcess(G4PionMinus::PionMinus())->AddDataSet(xsBarashenkovGGPion);
00254
00255
00256
00257 xsChipsKaonMinus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name());
00258 xsChipsKaonPlus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name());
00259 xsChipsKaonZero = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name());
00260 G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(xsChipsKaonMinus);
00261 G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(xsChipsKaonPlus);
00262 G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(xsChipsKaonZero);
00263 G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(xsChipsKaonZero);
00264
00265
00266
00267
00268 xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV);
00269 G4PhysListUtil::FindInelasticProcess(G4Proton::Proton())->AddDataSet(xsAxenWellischGGProton);
00270
00271
00272
00273
00274 xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
00275 G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xsLaidlawWellischGGNeutron);
00276
00277
00278
00279 xsChipsHyperons = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsHyperonInelasticXS::Default_Name());
00280 G4PhysListUtil::FindInelasticProcess(G4Lambda::Lambda())->AddDataSet(xsChipsHyperons);
00281 G4PhysListUtil::FindInelasticProcess(G4AntiLambda::AntiLambda())->AddDataSet(xsChipsHyperons);
00282 G4PhysListUtil::FindInelasticProcess(G4SigmaMinus::SigmaMinus())->AddDataSet(xsChipsHyperons);
00283 G4PhysListUtil::FindInelasticProcess(G4AntiSigmaMinus::AntiSigmaMinus())->AddDataSet(xsChipsHyperons);
00284 G4PhysListUtil::FindInelasticProcess(G4SigmaPlus::SigmaPlus())->AddDataSet(xsChipsHyperons);
00285 G4PhysListUtil::FindInelasticProcess(G4AntiSigmaPlus::AntiSigmaPlus())->AddDataSet(xsChipsHyperons);
00286 G4PhysListUtil::FindInelasticProcess(G4XiMinus::XiMinus())->AddDataSet(xsChipsHyperons);
00287 G4PhysListUtil::FindInelasticProcess(G4AntiXiMinus::AntiXiMinus())->AddDataSet(xsChipsHyperons);
00288 G4PhysListUtil::FindInelasticProcess(G4XiZero::XiZero())->AddDataSet(xsChipsHyperons);
00289 G4PhysListUtil::FindInelasticProcess(G4AntiXiZero::AntiXiZero())->AddDataSet(xsChipsHyperons);
00290 G4PhysListUtil::FindInelasticProcess(G4OmegaMinus::OmegaMinus())->AddDataSet(xsChipsHyperons);
00291 G4PhysListUtil::FindInelasticProcess(G4AntiOmegaMinus::AntiOmegaMinus())->AddDataSet(xsChipsHyperons);
00292
00293
00294
00295
00296 xsGaloyanUzhinskyAntibaryon = new G4CrossSectionInelastic(new G4ComponentAntiNuclNuclearXS());
00297 G4PhysListUtil::FindInelasticProcess(G4AntiProton::AntiProton())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00298 G4PhysListUtil::FindInelasticProcess(G4AntiNeutron::AntiNeutron())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00299 G4PhysListUtil::FindInelasticProcess(G4AntiDeuteron::AntiDeuteron())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00300 G4PhysListUtil::FindInelasticProcess(G4AntiTriton::AntiTriton())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00301 G4PhysListUtil::FindInelasticProcess(G4AntiHe3::AntiHe3())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00302 G4PhysListUtil::FindInelasticProcess(G4AntiAlpha::AntiAlpha())->AddDataSet(xsGaloyanUzhinskyAntibaryon);
00303
00304 }