CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/SimG4Core/PhysicsLists/src/HadronPhysicsQGSPCMS_FTFP_BERT.cc

Go to the documentation of this file.
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