source: trunk/source/physics_lists/lists/src/HadronPhysicsQGSP_FTFP_BERT.cc @ 1353

Last change on this file since 1353 was 1337, checked in by garnier, 14 years ago

tag geant4.9.4 beta 1 + modifs locales

File size: 7.4 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26// $Id: HadronPhysicsQGSP_FTFP_BERT.cc,v 1.4 2010/06/19 11:12:46 vnivanch Exp $
27// GEANT4 tag $Name: geant4-09-04-beta-01 $
28//
29//---------------------------------------------------------------------------
30//
31// ClassName:   HadronPhysicsQGSP_FTFP_BERT
32//
33// Authors: 2 Apr 2009 J.Apostolakis/V.Ivantchenko: created starting from QGSP_BERT
34//
35// Modified:
36//----------------------------------------------------------------------------
37//
38#include "HadronPhysicsQGSP_FTFP_BERT.hh"
39
40#include "globals.hh"
41#include "G4ios.hh"
42#include <iomanip>  
43#include "G4ParticleDefinition.hh"
44#include "G4ParticleTable.hh"
45
46#include "G4MesonConstructor.hh"
47#include "G4BaryonConstructor.hh"
48#include "G4ShortLivedConstructor.hh"
49
50#include "G4QHadronInelasticDataSet.hh"
51
52HadronPhysicsQGSP_FTFP_BERT::HadronPhysicsQGSP_FTFP_BERT(G4int)
53                    :  G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT")
54                     , QuasiElastic(true)
55{
56   ProjectileDiffraction=false;
57}
58
59HadronPhysicsQGSP_FTFP_BERT::HadronPhysicsQGSP_FTFP_BERT(const G4String&, 
60                                                         G4bool quasiElastic)
61                    :  G4VPhysicsConstructor("hInelastic QGSP_FTFP_BERT"), 
62                       QuasiElastic(quasiElastic)
63{
64   ProjectileDiffraction=false;
65}
66
67void HadronPhysicsQGSP_FTFP_BERT::CreateModels()
68{
69  // First transition, between BERT and FTF/P
70  G4double minFTFP= 6.0 * GeV;     // Was 9.5 for LEP   (in FTFP_BERT 6.0 * GeV);
71  G4double maxBERT= 8.0 * GeV;     // Was 9.9 for LEP   (in FTFP_BERT 8.0 * GeV);
72  // Second transition, between FTF/P and QGS/P
73  G4double minQGSP= 12.0 * GeV;
74  G4double maxFTFP= 25.0 * GeV; 
75
76  G4bool   quasiElasFTF= false;   // Use built-in quasi-elastic (not add-on)
77  G4bool   quasiElasQGS= true;    // For QGS, it must use it.
78
79  G4cout << " New QGSP_FTFP_BERT physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
80  G4cout << "  Thresholds: " << G4endl;
81  G4cout << "    1) between BERT  and FTF/P over the interval " 
82         << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
83  G4cout << "    2) between FTF/P and QGS/P over the interval " 
84         << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
85  G4cout << "  -- quasiElastic was asked to be " << QuasiElastic << G4endl
86         << "     Changed to " << quasiElasQGS << " for QGS "
87         << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
88
89  theNeutrons=new G4NeutronBuilder;
90  theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
91  theQGSPNeutron->SetMinEnergy(minQGSP);   
92  theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
93  theFTFPNeutron->SetMinEnergy(minFTFP);   // was (9.5*GeV);
94  theFTFPNeutron->SetMaxEnergy(maxFTFP);   // was (25*GeV); 
95  // Exclude LEP only from Inelastic
96  //  -- Register it for other processes: Capture, Elastic
97  theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
98  theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
99  theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
100
101  theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
102  theBertiniNeutron->SetMinEnergy(0.0*GeV);
103  theBertiniNeutron->SetMaxEnergy(maxBERT);         // was (9.9*GeV);
104
105  thePro=new G4ProtonBuilder;
106  thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
107  theQGSPPro->SetMinEnergy(minQGSP);   
108  thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
109  theFTFPPro->SetMinEnergy(minFTFP);   // was (9.5*GeV);
110  theFTFPPro->SetMaxEnergy(maxFTFP);   // was (25*GeV);
111
112  thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
113  theBertiniPro->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
114 
115  thePiK=new G4PiKBuilder;
116  thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
117  theQGSPPiK->SetMinEnergy(minQGSP);   
118  thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
119  theFTFPPiK->SetMaxEnergy(maxFTFP);   // was (25*GeV);
120  theFTFPPiK->SetMinEnergy(minFTFP);   // was (9.5*GeV);
121
122  thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
123  theBertiniPiK->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
124 
125  theMiscCHIPS=new G4MiscCHIPSBuilder;
126}
127
128HadronPhysicsQGSP_FTFP_BERT::~HadronPhysicsQGSP_FTFP_BERT()
129{
130   delete theMiscCHIPS;
131   delete theQGSPNeutron;
132   delete theFTFPNeutron;
133   delete theBertiniNeutron;
134   delete theNeutrons;
135   delete theQGSPPro;
136   delete theFTFPPro;
137   delete thePro;
138   delete theBertiniPro;
139   delete theQGSPPiK;
140   delete theFTFPPiK;
141   delete theBertiniPiK;
142   delete thePiK;
143   delete theCHIPSInelastic;
144}
145
146void HadronPhysicsQGSP_FTFP_BERT::ConstructParticle()
147{
148  G4MesonConstructor pMesonConstructor;
149  pMesonConstructor.ConstructParticle();
150
151  G4BaryonConstructor pBaryonConstructor;
152  pBaryonConstructor.ConstructParticle();
153
154  G4ShortLivedConstructor pShortLivedConstructor;
155  pShortLivedConstructor.ConstructParticle(); 
156}
157
158#include "G4ProcessManager.hh"
159void HadronPhysicsQGSP_FTFP_BERT::ConstructProcess()
160{
161  CreateModels();
162  theNeutrons->Build();
163  thePro->Build();
164  thePiK->Build();
165  // use CHIPS cross sections also for Kaons
166  theCHIPSInelastic = new G4QHadronInelasticDataSet();
167 
168  FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(theCHIPSInelastic);
169  FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(theCHIPSInelastic);
170  FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(theCHIPSInelastic);
171  FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(theCHIPSInelastic);
172
173  theMiscCHIPS->Build();
174}
175
176
177G4HadronicProcess* 
178HadronPhysicsQGSP_FTFP_BERT::FindInelasticProcess(const G4ParticleDefinition* p)
179{
180  G4HadronicProcess* had = 0;
181  if(p) {
182     G4ProcessVector*  pvec = p->GetProcessManager()->GetProcessList();
183     size_t n = pvec->size();
184     if(0 < n) {
185       for(size_t i=0; i<n; ++i) {
186         if(fHadronInelastic == ((*pvec)[i])->GetProcessSubType()) {
187           had = static_cast<G4HadronicProcess*>((*pvec)[i]);
188           break;
189         }
190       }
191     }
192  }
193  return had;
194}
Note: See TracBrowser for help on using the repository browser.