00001 #include "SimG4Core/PhysicsLists/interface/HadronPhysicsQGSPCMS_FTFP_BERT.h" 00002 00003 #include "globals.hh" 00004 #include "G4ios.hh" 00005 #include <iomanip> 00006 #include "G4ParticleDefinition.hh" 00007 #include "G4ParticleTable.hh" 00008 00009 #include "G4MesonConstructor.hh" 00010 #include "G4BaryonConstructor.hh" 00011 #include "G4ShortLivedConstructor.hh" 00012 00013 HadronPhysicsQGSPCMS_FTFP_BERT::HadronPhysicsQGSPCMS_FTFP_BERT(const G4String& name, G4bool quasiElastic) 00014 : G4VPhysicsConstructor(name) , QuasiElastic(quasiElastic) 00015 { 00016 ProjectileDiffraction=false; 00017 } 00018 00019 void HadronPhysicsQGSPCMS_FTFP_BERT::CreateModels() 00020 { 00021 // First transition, between BERT and FTF/P 00022 G4double minFTFP= 6.0 * GeV; // Was 9.5 for LEP (in FTFP_BERT 6.0 * GeV); 00023 G4double maxBERT= 8.0 * GeV; // Was 9.9 for LEP (in FTFP_BERT 8.0 * GeV); 00024 // Second transition, between FTF/P and QGS/P 00025 G4double minQGSP= 12.0 * GeV; 00026 G4double maxFTFP= 25.0 * GeV; 00027 00028 G4bool quasiElasFTF= false; // Use built-in quasi-elastic (not add-on) 00029 G4bool quasiElasQGS= true; // For QGS, it must use it. 00030 00031 G4cout << " New QGSPCMS_FTFP_BERT physics list, replaces LEP with FTF/P for p/n/pi (/K?)"; 00032 G4cout << " Thresholds: " << G4endl; 00033 G4cout << " 1) between BERT and FTF/P over the interval " 00034 << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl; 00035 G4cout << " 2) between FTF/P and QGS/P over the interval " 00036 << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl; 00037 G4cout << " -- quasiElastic was asked to be " << QuasiElastic << G4endl 00038 << " Changed to " << quasiElasQGS << " for QGS " 00039 << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl; 00040 00041 theNeutrons=new G4NeutronBuilder; 00042 theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction)); 00043 theQGSPNeutron->SetMinEnergy(minQGSP); 00044 theNeutrons->RegisterMe(theFTFPNeutron=new CMSFTFPNeutronBuilder(quasiElasFTF)); 00045 theFTFPNeutron->SetMinEnergy(minFTFP); // was (9.5*GeV); 00046 theFTFPNeutron->SetMaxEnergy(maxFTFP); // was (25*GeV); 00047 // Exclude LEP only from Inelastic 00048 // -- Register it for other processes: Capture, Elastic 00049 theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder); 00050 theLEPNeutron->SetMinInelasticEnergy(0.0*GeV); 00051 theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV); 00052 00053 theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder); 00054 theBertiniNeutron->SetMinEnergy(0.0*GeV); 00055 theBertiniNeutron->SetMaxEnergy(maxBERT); // was (9.9*GeV); 00056 00057 thePro=new G4ProtonBuilder; 00058 thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction)); 00059 theQGSPPro->SetMinEnergy(minQGSP); 00060 thePro->RegisterMe(theFTFPPro=new CMSFTFPProtonBuilder(quasiElasFTF)); 00061 theFTFPPro->SetMinEnergy(minFTFP); // was (9.5*GeV); 00062 theFTFPPro->SetMaxEnergy(maxFTFP); // was (25*GeV); 00063 00064 thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder); 00065 theBertiniPro->SetMaxEnergy(maxBERT); // was (9.9*GeV); 00066 00067 thePiK=new G4PiKBuilder; 00068 thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS)); 00069 theQGSPPiK->SetMinEnergy(minQGSP); 00070 thePiK->RegisterMe(theFTFPPiK=new CMSFTFPPiKBuilder(quasiElasFTF)); 00071 theFTFPPiK->SetMaxEnergy(maxFTFP); // was (25*GeV); 00072 theFTFPPiK->SetMinEnergy(minFTFP); // was (9.5*GeV); 00073 00074 thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder); 00075 theBertiniPiK->SetMaxEnergy(maxBERT); // was (9.9*GeV); 00076 00077 theMiscLHEP=new G4MiscLHEPBuilder; 00078 } 00079 00080 HadronPhysicsQGSPCMS_FTFP_BERT::~HadronPhysicsQGSPCMS_FTFP_BERT() 00081 { 00082 delete theMiscLHEP; 00083 delete theQGSPNeutron; 00084 delete theFTFPNeutron; 00085 delete theBertiniNeutron; 00086 delete theQGSPPro; 00087 delete theFTFPPro; 00088 delete thePro; 00089 delete theBertiniPro; 00090 delete theQGSPPiK; 00091 delete theFTFPPiK; 00092 delete theBertiniPiK; 00093 delete thePiK; 00094 } 00095 00096 void HadronPhysicsQGSPCMS_FTFP_BERT::ConstructParticle() 00097 { 00098 G4MesonConstructor pMesonConstructor; 00099 pMesonConstructor.ConstructParticle(); 00100 00101 G4BaryonConstructor pBaryonConstructor; 00102 pBaryonConstructor.ConstructParticle(); 00103 00104 G4ShortLivedConstructor pShortLivedConstructor; 00105 pShortLivedConstructor.ConstructParticle(); 00106 } 00107 00108 #include "G4ProcessManager.hh" 00109 void HadronPhysicsQGSPCMS_FTFP_BERT::ConstructProcess() 00110 { 00111 CreateModels(); 00112 theNeutrons->Build(); 00113 thePro->Build(); 00114 thePiK->Build(); 00115 theMiscLHEP->Build(); 00116 } 00117