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 #include <iomanip>
00038
00039 #include "HadronPhysicsQGSP_FTFP_BERT.hh"
00040
00041 #include "globals.hh"
00042 #include "G4ios.hh"
00043 #include "G4SystemOfUnits.hh"
00044 #include "G4ParticleDefinition.hh"
00045 #include "G4ParticleTable.hh"
00046
00047 #include "G4MesonConstructor.hh"
00048 #include "G4BaryonConstructor.hh"
00049 #include "G4ShortLivedConstructor.hh"
00050 #include "G4IonConstructor.hh"
00051
00052 #include "G4PhysListUtil.hh"
00053
00054
00055 #include "G4PhysicsConstructorFactory.hh"
00056
00057 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsQGSP_FTFP_BERT);
00058
00059 HadronPhysicsQGSP_FTFP_BERT::HadronPhysicsQGSP_FTFP_BERT(G4int)
00060 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT")
00061 , theNeutrons(0)
00062 , theFTFPNeutron(0)
00063 , theQGSPNeutron(0)
00064 , theBertiniNeutron(0)
00065 , theLEPNeutron(0)
00066 , thePiK(0)
00067 , theFTFPPiK(0)
00068 , theQGSPPiK(0)
00069 , theBertiniPiK(0)
00070 , thePro(0)
00071 , theFTFPPro(0)
00072 , theQGSPPro(0)
00073 , theBertiniPro(0)
00074 , theHyperon(0)
00075 , theAntiBaryon(0)
00076 , theFTFPAntiBaryon(0)
00077 , QuasiElastic(true)
00078 , ProjectileDiffraction(false)
00079 {
00080 }
00081
00082 HadronPhysicsQGSP_FTFP_BERT::HadronPhysicsQGSP_FTFP_BERT(const G4String&,
00083 G4bool quasiElastic)
00084 : G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT")
00085 , theNeutrons(0)
00086 , theFTFPNeutron(0)
00087 , theQGSPNeutron(0)
00088 , theBertiniNeutron(0)
00089 , theLEPNeutron(0)
00090 , thePiK(0)
00091 , theFTFPPiK(0)
00092 , theQGSPPiK(0)
00093 , theBertiniPiK(0)
00094 , thePro(0)
00095 , theFTFPPro(0)
00096 , theQGSPPro(0)
00097 , theBertiniPro(0)
00098 , theHyperon(0)
00099 , theAntiBaryon(0)
00100 , theFTFPAntiBaryon(0)
00101 , QuasiElastic(quasiElastic)
00102 , ProjectileDiffraction(false)
00103 {
00104 }
00105
00106 void HadronPhysicsQGSP_FTFP_BERT::CreateModels()
00107 {
00108
00109 G4double minFTFP= 6.0 * GeV;
00110 G4double maxBERT= 8.0 * GeV;
00111
00112 G4double minQGSP= 12.0 * GeV;
00113 G4double maxFTFP= 25.0 * GeV;
00114
00115 G4bool quasiElasFTF= false;
00116 G4bool quasiElasQGS= true;
00117
00118 G4cout << " New QGSP_FTFP_BERT physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
00119 G4cout << " Thresholds: " << G4endl;
00120 G4cout << " 1) between BERT and FTF/P over the interval "
00121 << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
00122 G4cout << " 2) between FTF/P and QGS/P over the interval "
00123 << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
00124 G4cout << " -- quasiElastic was asked to be " << QuasiElastic << G4endl
00125 << " Changed to " << quasiElasQGS << " for QGS "
00126 << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
00127
00128 theNeutrons=new G4NeutronBuilder;
00129 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
00130 theQGSPNeutron->SetMinEnergy(minQGSP);
00131 theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
00132 theFTFPNeutron->SetMinEnergy(minFTFP);
00133 theFTFPNeutron->SetMaxEnergy(maxFTFP);
00134
00135
00136 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00137 theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
00138 theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
00139
00140 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00141 theBertiniNeutron->SetMinEnergy(0.0*GeV);
00142 theBertiniNeutron->SetMaxEnergy(maxBERT);
00143
00144 thePro=new G4ProtonBuilder;
00145 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
00146 theQGSPPro->SetMinEnergy(minQGSP);
00147 thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
00148 theFTFPPro->SetMinEnergy(minFTFP);
00149 theFTFPPro->SetMaxEnergy(maxFTFP);
00150 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00151 theBertiniPro->SetMaxEnergy(maxBERT);
00152
00153 thePiK=new G4PiKBuilder;
00154 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
00155 theQGSPPiK->SetMinEnergy(minQGSP);
00156 thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
00157 theFTFPPiK->SetMaxEnergy(maxFTFP);
00158 theFTFPPiK->SetMinEnergy(minFTFP);
00159 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00160 theBertiniPiK->SetMaxEnergy(maxBERT);
00161
00162
00163 theHyperon=new G4HyperonFTFPBuilder;
00164
00165 theAntiBaryon=new G4AntiBarionBuilder;
00166 theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(quasiElasFTF));
00167 }
00168
00169 HadronPhysicsQGSP_FTFP_BERT::~HadronPhysicsQGSP_FTFP_BERT()
00170 {
00171 delete theQGSPNeutron;
00172 delete theFTFPNeutron;
00173 delete theBertiniNeutron;
00174 delete theNeutrons;
00175
00176 delete theQGSPPro;
00177 delete theFTFPPro;
00178 delete thePro;
00179 delete theBertiniPro;
00180
00181 delete theQGSPPiK;
00182 delete theFTFPPiK;
00183 delete theBertiniPiK;
00184 delete thePiK;
00185
00186 delete theHyperon;
00187 delete theAntiBaryon;
00188 delete theFTFPAntiBaryon;
00189 }
00190
00191 void HadronPhysicsQGSP_FTFP_BERT::ConstructParticle()
00192 {
00193 G4MesonConstructor pMesonConstructor;
00194 pMesonConstructor.ConstructParticle();
00195
00196 G4BaryonConstructor pBaryonConstructor;
00197 pBaryonConstructor.ConstructParticle();
00198
00199 G4ShortLivedConstructor pShortLivedConstructor;
00200 pShortLivedConstructor.ConstructParticle();
00201
00202 G4IonConstructor pIonConstructor;
00203 pIonConstructor.ConstructParticle();
00204 }
00205
00206 #include "G4ProcessManager.hh"
00207 void HadronPhysicsQGSP_FTFP_BERT::ConstructProcess()
00208 {
00209 CreateModels();
00210 theNeutrons->Build();
00211 thePro->Build();
00212 thePiK->Build();
00213 theHyperon->Build();
00214 theAntiBaryon->Build();
00215 }