HadronPhysicsQGSP_FTFP_BERT_95.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 // Modified:
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 // factory
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   // First transition, between BERT and FTF/P
00134   G4double minFTFP= 6.0 * GeV;     // Was 9.5 for LEP   (in FTFP_BERT 6.0 * GeV);
00135   G4double maxBERT= 8.0 * GeV;     // Was 9.9 for LEP   (in FTFP_BERT 8.0 * GeV);
00136   // Second transition, between FTF/P and QGS/P
00137   G4double minQGSP= 12.0 * GeV;
00138   G4double maxFTFP= 25.0 * GeV; 
00139 
00140   G4bool   quasiElasFTF= false;   // Use built-in quasi-elastic (not add-on)
00141   G4bool   quasiElasQGS= true;    // For QGS, it must use it.
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);   // was (9.5*GeV);
00158   theFTFPNeutron->SetMaxEnergy(maxFTFP);   // was (25*GeV);  
00159   // Exclude LEP only from Inelastic 
00160   //  -- Register it for other processes: Capture, Elastic
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);         // was (9.9*GeV);
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);   // was (9.5*GeV);
00174   theFTFPPro->SetMaxEnergy(maxFTFP);   // was (25*GeV); 
00175   thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00176   theBertiniPro->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
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);   // was (25*GeV); 
00183   theFTFPPiK->SetMinEnergy(minFTFP);   // was (9.5*GeV);
00184   thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00185   theBertiniPiK->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
00186   
00187   // Hyperons use FTF
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   // Inelastic cross sections
00247 
00248   // --- Pions ---
00249   // Use Barashenkov inelastic pion cross section up to 91 GeV, 
00250   // and Glauber-Gribov above
00251   xsBarashenkovGGPion = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
00252   G4PhysListUtil::FindInelasticProcess(G4PionPlus::PionPlus())->AddDataSet(xsBarashenkovGGPion);
00253   G4PhysListUtil::FindInelasticProcess(G4PionMinus::PionMinus())->AddDataSet(xsBarashenkovGGPion);
00254 
00255   // --- Kaons ---
00256   // Use Chips inelastic kaon cross sections
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   // --- Protons ---
00266   // Use Axen-Wellisch inelastic proton cross section up to 91 GeV,
00267   // and Glauber-Gribov above
00268   xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV); 
00269   G4PhysListUtil::FindInelasticProcess(G4Proton::Proton())->AddDataSet(xsAxenWellischGGProton);
00270 
00271   // --- Neutrons ---
00272   // Use Laidlaw-Wellisch inelastic neutron cross section up to 91 GeV,
00273   // and Glauber-Gribov above
00274   xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
00275   G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xsLaidlawWellischGGNeutron);
00276 
00277   // --- Hyperons ---
00278   // Use Chips inelastic hyperon cross sections
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   // --- AntiBaryons ---
00294   // Use Galoyan-Uzhinsky antibaryon cross sections based on 
00295   // Glauber-Grichine approach
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 }

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