HadronPhysicsQGSP_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_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 
00048 #include "G4PiNuclearCrossSection.hh"
00049 #include "G4HadronInelasticDataSet.hh"
00050 #include "G4CrossSectionDataSetRegistry.hh"
00051 #include "G4CrossSectionPairGG.hh"
00052 #include "G4ProtonInelasticCrossSection.hh"
00053 #include "G4NeutronInelasticCrossSection.hh"
00054 
00055 #include "G4PhysListUtil.hh"
00056 
00057 // factory
00058 #include "G4PhysicsConstructorFactory.hh"
00059 //
00060 G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsQGSP_BERT_95);
00061 
00062 HadronPhysicsQGSP_BERT_95::HadronPhysicsQGSP_BERT_95(G4int)
00063     :  G4VPhysicsConstructor("hInelastic QGSP_BERT_95")
00064     , theNeutrons(0)
00065     , theLEPNeutron(0)
00066     , theQGSPNeutron(0)
00067     , theBertiniNeutron(0)
00068     , thePiK(0)
00069     , theLEPPiK(0)
00070     , theQGSPPiK(0)
00071     , theBertiniPiK(0)
00072     , thePro(0)
00073     , theLEPPro(0)
00074     , theQGSPPro(0) 
00075     , theBertiniPro(0)
00076     , theMiscLHEP(0)
00077     , QuasiElastic(true)
00078     , ProjectileDiffraction(false)
00079     , xsBarashenkovGGPion(0)
00080     , xsGeisha(0)
00081     , xsAxenWellischGGProton(0)
00082     , xsLaidlawWellischGGNeutron(0)
00083 {
00084 }
00085 
00086 HadronPhysicsQGSP_BERT_95::HadronPhysicsQGSP_BERT_95(const G4String& name, G4bool quasiElastic)
00087     :  G4VPhysicsConstructor(name)
00088     , theNeutrons(0)
00089     , theLEPNeutron(0)
00090     , theQGSPNeutron(0)
00091     , theBertiniNeutron(0)
00092     , thePiK(0)
00093     , theLEPPiK(0)
00094     , theQGSPPiK(0)
00095     , theBertiniPiK(0)
00096     , thePro(0)
00097     , theLEPPro(0)
00098     , theQGSPPro(0) 
00099     , theBertiniPro(0)
00100     , theMiscLHEP(0)
00101     , QuasiElastic(quasiElastic)
00102     , ProjectileDiffraction(false)
00103     , xsBarashenkovGGPion(0)
00104     , xsGeisha(0)
00105     , xsAxenWellischGGProton(0)
00106     , xsLaidlawWellischGGNeutron(0)
00107 {
00108 }
00109 
00110 void HadronPhysicsQGSP_BERT_95::CreateModels()
00111 {
00112   theNeutrons=new G4NeutronBuilder;
00113   theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(QuasiElastic, ProjectileDiffraction));
00114   theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
00115   theLEPNeutron->SetMinInelasticEnergy(9.5*GeV);
00116   theLEPNeutron->SetMaxInelasticEnergy(25*GeV);  
00117 
00118   theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
00119   theBertiniNeutron->SetMinEnergy(0.0*GeV);
00120   theBertiniNeutron->SetMaxEnergy(9.9*GeV);
00121 
00122   thePro=new G4ProtonBuilder;
00123   thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(QuasiElastic, ProjectileDiffraction));
00124   thePro->RegisterMe(theLEPPro=new G4LEPProtonBuilder);
00125   theLEPPro->SetMinEnergy(9.5*GeV);
00126   theLEPPro->SetMaxEnergy(25*GeV);
00127 
00128   thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
00129   theBertiniPro->SetMaxEnergy(9.9*GeV);
00130   
00131   thePiK=new G4PiKBuilder;
00132   thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(QuasiElastic));
00133   thePiK->RegisterMe(theLEPPiK=new G4LEPPiKBuilder);
00134   theLEPPiK->SetMaxEnergy(25*GeV);
00135   theLEPPiK->SetMinEnergy(9.5*GeV);
00136 
00137   thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
00138   theBertiniPiK->SetMaxEnergy(9.9*GeV);
00139   
00140   theMiscLHEP=new G4MiscLHEPBuilder;
00141 }
00142 
00143 HadronPhysicsQGSP_BERT_95::~HadronPhysicsQGSP_BERT_95()
00144 {
00145    delete theMiscLHEP;
00146    delete theQGSPNeutron;
00147    delete theLEPNeutron;
00148    delete theNeutrons;
00149    delete theBertiniNeutron;
00150    delete theQGSPPro;
00151    delete theLEPPro;
00152    delete thePro;
00153    delete theBertiniPro;
00154    delete theQGSPPiK;
00155    delete theLEPPiK;
00156    delete theBertiniPiK;
00157    delete thePiK;
00158 
00159    delete xsBarashenkovGGPion;
00160    delete xsGeisha;
00161    delete xsAxenWellischGGProton;
00162    delete xsLaidlawWellischGGNeutron;
00163 }
00164 
00165 void HadronPhysicsQGSP_BERT_95::ConstructParticle()
00166 {
00167   G4MesonConstructor pMesonConstructor;
00168   pMesonConstructor.ConstructParticle();
00169 
00170   G4BaryonConstructor pBaryonConstructor;
00171   pBaryonConstructor.ConstructParticle();
00172 
00173   G4ShortLivedConstructor pShortLivedConstructor;
00174   pShortLivedConstructor.ConstructParticle();  
00175 }
00176 
00177 #include "G4ProcessManager.hh"
00178 void HadronPhysicsQGSP_BERT_95::ConstructProcess()
00179 {
00180   CreateModels();
00181   theNeutrons->Build();
00182   thePro->Build();
00183   thePiK->Build();
00184   theMiscLHEP->Build();
00185 
00186   // Inelastic cross sections
00187 
00188   // --- Pions ---
00189   // Use Barashenkov inelastic pion cross section up to 91 GeV, 
00190   // and Glauber-Gribov above
00191   xsBarashenkovGGPion = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
00192   G4PhysListUtil::FindInelasticProcess(G4PionPlus::PionPlus())->AddDataSet(xsBarashenkovGGPion);
00193   G4PhysListUtil::FindInelasticProcess(G4PionMinus::PionMinus())->AddDataSet(xsBarashenkovGGPion);
00194 
00195   // --- Kaons ---
00196   // Use Geisha inelastic cross sections
00197   xsGeisha = new G4HadronInelasticDataSet();
00198   G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(xsGeisha);
00199   G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(xsGeisha);
00200   G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(xsGeisha);
00201   G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(xsGeisha);
00202 
00203   // --- Protons ---
00204   // Use Axen-Wellisch inelastic proton cross section up to 91 GeV,
00205   // and Glauber-Gribov above
00206   xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV); 
00207   G4PhysListUtil::FindInelasticProcess(G4Proton::Proton())->AddDataSet(xsAxenWellischGGProton);
00208 
00209   // --- Neutrons ---
00210   // Use Laidlaw-Wellisch inelastic neutron cross section up to 91 GeV,
00211   // and Glauber-Gribov above
00212   xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
00213   G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(xsLaidlawWellischGGNeutron);
00214 
00215   // --- Hyperons ---
00216   // Use Geisha inelastic cross sections
00217   G4PhysListUtil::FindInelasticProcess(G4Lambda::Lambda())->AddDataSet(xsGeisha);
00218   G4PhysListUtil::FindInelasticProcess(G4AntiLambda::AntiLambda())->AddDataSet(xsGeisha);
00219   G4PhysListUtil::FindInelasticProcess(G4SigmaMinus::SigmaMinus())->AddDataSet(xsGeisha);
00220   G4PhysListUtil::FindInelasticProcess(G4AntiSigmaMinus::AntiSigmaMinus())->AddDataSet(xsGeisha);
00221   G4PhysListUtil::FindInelasticProcess(G4SigmaPlus::SigmaPlus())->AddDataSet(xsGeisha);
00222   G4PhysListUtil::FindInelasticProcess(G4AntiSigmaPlus::AntiSigmaPlus())->AddDataSet(xsGeisha);
00223   G4PhysListUtil::FindInelasticProcess(G4XiMinus::XiMinus())->AddDataSet(xsGeisha);
00224   G4PhysListUtil::FindInelasticProcess(G4AntiXiMinus::AntiXiMinus())->AddDataSet(xsGeisha);
00225   G4PhysListUtil::FindInelasticProcess(G4XiZero::XiZero())->AddDataSet(xsGeisha);
00226   G4PhysListUtil::FindInelasticProcess(G4AntiXiZero::AntiXiZero())->AddDataSet(xsGeisha);
00227   G4PhysListUtil::FindInelasticProcess(G4OmegaMinus::OmegaMinus())->AddDataSet(xsGeisha);
00228   G4PhysListUtil::FindInelasticProcess(G4AntiOmegaMinus::AntiOmegaMinus())->AddDataSet(xsGeisha);
00229 
00230   // --- AntiBaryons ---
00231   // Use Geisha inelastic cross sections
00232   G4PhysListUtil::FindInelasticProcess(G4AntiProton::AntiProton())->AddDataSet(xsGeisha);
00233   G4PhysListUtil::FindInelasticProcess(G4AntiNeutron::AntiNeutron())->AddDataSet(xsGeisha);
00234 
00235 }

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