HadronPhysicsQGSP_FTFP_BERT.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 //---------------------------------------------------------------------------
00029 //
00030 // ClassName:   HadronPhysicsQGSP_FTFP_BERT
00031 //
00032 // Authors: 2 Apr 2009 J.Apostolakis/V.Ivantchenko: created starting from QGSP_BERT
00033 //
00034 // Modified:
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 // factory
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   // First transition, between BERT and FTF/P
00109   G4double minFTFP= 6.0 * GeV;     // Was 9.5 for LEP   (in FTFP_BERT 6.0 * GeV);
00110   G4double maxBERT= 8.0 * GeV;     // Was 9.9 for LEP   (in FTFP_BERT 8.0 * GeV);
00111   // Second transition, between FTF/P and QGS/P
00112   G4double minQGSP= 12.0 * GeV;
00113   G4double maxFTFP= 25.0 * GeV; 
00114 
00115   G4bool   quasiElasFTF= false;   // Use built-in quasi-elastic (not add-on)
00116   G4bool   quasiElasQGS= true;    // For QGS, it must use it.
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);   // was (9.5*GeV);
00133   theFTFPNeutron->SetMaxEnergy(maxFTFP);   // was (25*GeV);  
00134   // Exclude LEP only from Inelastic 
00135   //  -- Register it for other processes: Capture, Elastic
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);         // was (9.9*GeV);
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);   // was (9.5*GeV);
00149   theFTFPPro->SetMaxEnergy(maxFTFP);   // was (25*GeV); 
00150   thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00151   theBertiniPro->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
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);   // was (25*GeV); 
00158   theFTFPPiK->SetMinEnergy(minFTFP);   // was (9.5*GeV);
00159   thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00160   theBertiniPiK->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
00161   
00162   // Hyperons use FTF
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 }

Generated on Mon May 27 17:50:30 2013 for Geant4 by  doxygen 1.4.7