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

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

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

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.3 2010/06/03 10:42:44 gunter Exp $
27// GEANT4 tag $Name: geant4-09-04-beta-cand-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& name, G4bool quasiElastic)
60                    :  G4VPhysicsConstructor(name) , QuasiElastic(quasiElastic)
61{
62   ProjectileDiffraction=false;
63}
64
65void HadronPhysicsQGSP_FTFP_BERT::CreateModels()
66{
67  // First transition, between BERT and FTF/P
68  G4double minFTFP= 6.0 * GeV;     // Was 9.5 for LEP   (in FTFP_BERT 6.0 * GeV);
69  G4double maxBERT= 8.0 * GeV;     // Was 9.9 for LEP   (in FTFP_BERT 8.0 * GeV);
70  // Second transition, between FTF/P and QGS/P
71  G4double minQGSP= 12.0 * GeV;
72  G4double maxFTFP= 25.0 * GeV; 
73
74  G4bool   quasiElasFTF= false;   // Use built-in quasi-elastic (not add-on)
75  G4bool   quasiElasQGS= true;    // For QGS, it must use it.
76
77  G4cout << " New QGSP_FTFP_BERT physics list, replaces LEP with FTF/P for p/n/pi (/K?)";
78  G4cout << "  Thresholds: " << G4endl;
79  G4cout << "    1) between BERT  and FTF/P over the interval " 
80         << minFTFP/GeV << " to " << maxBERT/GeV << " GeV. " << G4endl;
81  G4cout << "    2) between FTF/P and QGS/P over the interval " 
82         << minQGSP/GeV << " to " << maxFTFP/GeV << " GeV. " << G4endl;
83  G4cout << "  -- quasiElastic was asked to be " << QuasiElastic << G4endl
84         << "     Changed to " << quasiElasQGS << " for QGS "
85         << " and to " << quasiElasFTF << " (must be false) for FTF" << G4endl;
86
87  theNeutrons=new G4NeutronBuilder;
88  theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(quasiElasQGS, ProjectileDiffraction));
89  theQGSPNeutron->SetMinEnergy(minQGSP);   
90  theNeutrons->RegisterMe(theFTFPNeutron=new G4FTFPNeutronBuilder(quasiElasFTF));
91  theFTFPNeutron->SetMinEnergy(minFTFP);   // was (9.5*GeV);
92  theFTFPNeutron->SetMaxEnergy(maxFTFP);   // was (25*GeV); 
93  // Exclude LEP only from Inelastic
94  //  -- Register it for other processes: Capture, Elastic
95  theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
96  theLEPNeutron->SetMinInelasticEnergy(0.0*GeV);
97  theLEPNeutron->SetMaxInelasticEnergy(0.0*GeV);
98
99  theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
100  theBertiniNeutron->SetMinEnergy(0.0*GeV);
101  theBertiniNeutron->SetMaxEnergy(maxBERT);         // was (9.9*GeV);
102
103  thePro=new G4ProtonBuilder;
104  thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(quasiElasQGS, ProjectileDiffraction));
105  theQGSPPro->SetMinEnergy(minQGSP);   
106  thePro->RegisterMe(theFTFPPro=new G4FTFPProtonBuilder(quasiElasFTF));
107  theFTFPPro->SetMinEnergy(minFTFP);   // was (9.5*GeV);
108  theFTFPPro->SetMaxEnergy(maxFTFP);   // was (25*GeV);
109
110  thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
111  theBertiniPro->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
112 
113  thePiK=new G4PiKBuilder;
114  thePiK->RegisterMe(theQGSPPiK=new G4QGSPPiKBuilder(quasiElasQGS));
115  theQGSPPiK->SetMinEnergy(minQGSP);   
116  thePiK->RegisterMe(theFTFPPiK=new G4FTFPPiKBuilder(quasiElasFTF));
117  theFTFPPiK->SetMaxEnergy(maxFTFP);   // was (25*GeV);
118  theFTFPPiK->SetMinEnergy(minFTFP);   // was (9.5*GeV);
119
120  thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
121  theBertiniPiK->SetMaxEnergy(maxBERT);  //  was (9.9*GeV);
122 
123  theMiscCHIPS=new G4MiscCHIPSBuilder;
124}
125
126HadronPhysicsQGSP_FTFP_BERT::~HadronPhysicsQGSP_FTFP_BERT()
127{
128   delete theMiscCHIPS;
129   delete theQGSPNeutron;
130   delete theFTFPNeutron;
131   delete theBertiniNeutron;
132   delete theQGSPPro;
133   delete theFTFPPro;
134   delete thePro;
135   delete theBertiniPro;
136   delete theQGSPPiK;
137   delete theFTFPPiK;
138   delete theBertiniPiK;
139   delete thePiK;
140   delete theCHIPSInelastic;
141}
142
143void HadronPhysicsQGSP_FTFP_BERT::ConstructParticle()
144{
145  G4MesonConstructor pMesonConstructor;
146  pMesonConstructor.ConstructParticle();
147
148  G4BaryonConstructor pBaryonConstructor;
149  pBaryonConstructor.ConstructParticle();
150
151  G4ShortLivedConstructor pShortLivedConstructor;
152  pShortLivedConstructor.ConstructParticle(); 
153}
154
155#include "G4ProcessManager.hh"
156void HadronPhysicsQGSP_FTFP_BERT::ConstructProcess()
157{
158  CreateModels();
159  theNeutrons->Build();
160  thePro->Build();
161  thePiK->Build();
162  // use CHIPS cross sections also for Kaons
163  theCHIPSInelastic = new G4QHadronInelasticDataSet();
164 
165  FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(theCHIPSInelastic);
166  FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(theCHIPSInelastic);
167  FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(theCHIPSInelastic);
168  FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(theCHIPSInelastic);
169
170  theMiscCHIPS->Build();
171}
172
173
174G4HadronicProcess* 
175HadronPhysicsQGSP_FTFP_BERT::FindInelasticProcess(const G4ParticleDefinition* p)
176{
177  G4HadronicProcess* had = 0;
178  if(p) {
179     G4ProcessVector*  pvec = p->GetProcessManager()->GetProcessList();
180     size_t n = pvec->size();
181     if(0 < n) {
182       for(size_t i=0; i<n; ++i) {
183         if(fHadronInelastic == ((*pvec)[i])->GetProcessSubType()) {
184           had = static_cast<G4HadronicProcess*>((*pvec)[i]);
185           break;
186         }
187       }
188     }
189  }
190  return had;
191}
Note: See TracBrowser for help on using the repository browser.