Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HadronPhysicsQGSP_BERT_CHIPS.cc
Go to the documentation of this file.
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$
27 //
28 //---------------------------------------------------------------------------
29 //
30 // ClassName: HadronPhysicsQGSP_BERT_CHIPS
31 //
32 // Author: 2010 G.Folger
33 // derived from HadronPhysicsQGSP_BERT
34 //
35 // Modified:
36 //
37 //----------------------------------------------------------------------------
38 //
39 #include <iomanip>
40 
42 
43 #include "globals.hh"
44 #include "G4ios.hh"
45 #include "G4SystemOfUnits.hh"
46 #include "G4ParticleDefinition.hh"
47 #include "G4ParticleTable.hh"
48 #include "G4HadronicProcessType.hh"
49 
50 #include "G4MesonConstructor.hh"
51 #include "G4BaryonConstructor.hh"
53 
55 
58 #include "G4CrossSectionPairGG.hh"
61 #include "G4PhysListUtil.hh"
62 
63 
65  : G4VPhysicsConstructor("hInelastic QGSP_BERT_CHIPS")
66  , theNeutrons(0)
67  , theLEPNeutron(0)
68  , theQGSPNeutron(0)
69  , theBertiniNeutron(0)
70  , thePion(0)
71  , theLEPPion(0)
72  , theQGSPPion(0)
73  , theBertiniPion(0)
74  , theKaon(0)
75  , thePro(0)
76  , theLEPPro(0)
77  , theQGSPPro(0)
78  , theBertiniPro(0)
79  , theMiscCHIPS(0)
80  , QuasiElastic(true)
81  , ProjectileDiffraction(false)
82  , xsAxenWellischGGProton(0)
83  , xsLaidlawWellischGGNeutron(0)
84 {
85 }
86 
88  : G4VPhysicsConstructor(name)
89  , theNeutrons(0)
90  , theLEPNeutron(0)
91  , theQGSPNeutron(0)
92  , theBertiniNeutron(0)
93  , thePion(0)
94  , theLEPPion(0)
95  , theQGSPPion(0)
96  , theBertiniPion(0)
97  , theKaon(0)
98  , thePro(0)
99  , theLEPPro(0)
100  , theQGSPPro(0)
101  , theBertiniPro(0)
102  , theMiscCHIPS(0)
103  , QuasiElastic(quasiElastic)
104  , ProjectileDiffraction(false)
105  , xsAxenWellischGGProton(0)
106  , xsLaidlawWellischGGNeutron(0)
107 {
108 }
109 
110 void HadronPhysicsQGSP_BERT_CHIPS::CreateModels()
111 {
112  theNeutrons=new G4NeutronBuilder;
113  theNeutrons->RegisterMe(theQGSPNeutron=new G4QGSPNeutronBuilder(QuasiElastic, ProjectileDiffraction));
114  theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
115  theLEPNeutron->SetMinInelasticEnergy(9.5*GeV);
116  theLEPNeutron->SetMaxInelasticEnergy(25*GeV);
117 
118  theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
119  theBertiniNeutron->SetMinEnergy(0.0*GeV);
120  theBertiniNeutron->SetMaxEnergy(9.9*GeV);
121 
122  thePro=new G4ProtonBuilder;
123  thePro->RegisterMe(theQGSPPro=new G4QGSPProtonBuilder(QuasiElastic, ProjectileDiffraction));
124  thePro->RegisterMe(theLEPPro=new G4LEPProtonBuilder);
125  theLEPPro->SetMinEnergy(9.5*GeV);
126  theLEPPro->SetMaxEnergy(25*GeV);
127 
128  thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
129  theBertiniPro->SetMaxEnergy(9.9*GeV);
130 
131  thePion=new G4PionBuilder;
132  thePion->RegisterMe(theQGSPPion=new G4QGSPPionBuilder(QuasiElastic));
133  thePion->RegisterMe(theLEPPion=new G4LEPPionBuilder);
134  theLEPPion->SetMaxEnergy(25*GeV);
135  theLEPPion->SetMinEnergy(9.5*GeV);
136 
137  thePion->RegisterMe(theBertiniPion=new G4BertiniPionBuilder);
138  theBertiniPion->SetMaxEnergy(9.9*GeV);
139 
140  G4int verbosity(0);
141  theKaon=new G4ChipsKaonBuilder(verbosity); // is self contained, use G4QInelastic
142 
143  theMiscCHIPS=new G4MiscCHIPSBuilder;
144 }
145 
147 {
148  delete theMiscCHIPS;
149  delete theQGSPNeutron;
150  delete theLEPNeutron;
151  delete theBertiniNeutron;
152  delete theQGSPPro;
153  delete theLEPPro;
154  delete thePro;
155  delete theBertiniPro;
156  delete theQGSPPion;
157  delete theLEPPion;
158  delete theBertiniPion;
159  delete thePion;
160  delete theKaon;
161 
162  delete xsAxenWellischGGProton;
163  delete xsLaidlawWellischGGNeutron;
164 }
165 
167 {
168  G4MesonConstructor pMesonConstructor;
169  pMesonConstructor.ConstructParticle();
170 
171  G4BaryonConstructor pBaryonConstructor;
172  pBaryonConstructor.ConstructParticle();
173 
174  G4ShortLivedConstructor pShortLivedConstructor;
175  pShortLivedConstructor.ConstructParticle();
176 }
177 
178 #include "G4ProcessManager.hh"
180 {
181  CreateModels();
182  theNeutrons->Build();
183  thePro->Build();
184  thePion->Build();
185  theKaon->Build(); // has CHIPS cross sections for Kaons
186  theMiscCHIPS->Build();
187 
188  // Inelastic cross sections
189 
190  // --- Protons ---
191  // Use Axen-Wellisch inelastic proton cross section up to 91 GeV,
192  // and Glauber-Gribov above
193  xsAxenWellischGGProton = new G4CrossSectionPairGG(new G4ProtonInelasticCrossSection(), 91*GeV);
195 
196  // --- Neutrons ---
197  // Use Laidlaw-Wellisch inelastic neutron cross section up to 91 GeV,
198  // and Glauber-Gribov above
199  xsLaidlawWellischGGNeutron = new G4CrossSectionPairGG(new G4NeutronInelasticCrossSection(), 91*GeV);
201 }