ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonPhysicsPHP.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonPhysicsPHP.cc
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 //
27 //---------------------------------------------------------------------------
28 //
29 // Header: G4IonPhysicsPHP
30 //
31 // Author: A.Ribon 24-May-2016
32 //
33 // Modified:
34 //
35 //---------------------------------------------------------------------------
36 //
37 
38 #include "G4IonPhysicsPHP.hh"
39 #include "G4SystemOfUnits.hh"
40 #include "G4ParticleDefinition.hh"
41 #include "G4ProcessManager.hh"
42 #include "G4Deuteron.hh"
43 #include "G4Triton.hh"
44 #include "G4He3.hh"
45 #include "G4Alpha.hh"
46 #include "G4GenericIon.hh"
47 #include "G4IonConstructor.hh"
48 
53 
54 #include "G4PreCompoundModel.hh"
55 #include "G4ExcitationHandler.hh"
56 #include "G4FTFBuilder.hh"
57 #include "G4HadronicInteraction.hh"
58 #include "G4BuilderType.hh"
60 
61 #include "G4ParticleHPInelastic.hh"
63 
64 #include "G4HadronicParameters.hh"
65 #include "G4DeexPrecoParameters.hh"
66 #include "G4NuclearLevelData.hh"
67 
68 using namespace std;
69 
70 // factory
72 
74 
76 
78  : G4IonPhysicsPHP( "ionInelasticFTFP_BIC_PHP" )
79 {
80  verbose = ver;
81 }
82 
84  : G4VPhysicsConstructor( nname ), verbose( 1 )
85 {
89  if ( verbose > 1 ) G4cout << "### G4IonPhysics: " << nname << G4endl;
90 }
91 
92 
94  //Explictly setting pointers to zero is actually needed.
95  //These are static variables, in case we restart threads we need to re-create objects
96  delete theBuilder; theBuilder = nullptr;
97 }
98 
99 
101  // Construct ions
102  G4IonConstructor pConstructor;
103  pConstructor.ConstructParticle();
104 }
105 
106 
108 
109  const G4double maxPHP = 200.0*MeV;
110  const G4double overlapPHP_BIC = 10.0*MeV;
114 
117  G4PreCompoundModel* thePreCompound = static_cast< G4PreCompoundModel* >(p);
118  if ( ! thePreCompound ) thePreCompound = new G4PreCompoundModel;
119 
120  // Binary Cascade
121  G4HadronicInteraction* theIonBC1 = new G4BinaryLightIonReaction( thePreCompound );
122  theIonBC1->SetMinEnergy( 0.0 ); // Used for generic ions
123  theIonBC1->SetMaxEnergy( maxBIC );
124 
125  G4HadronicInteraction* theIonBC2 = new G4BinaryLightIonReaction( thePreCompound );
126  theIonBC2->SetMinEnergy( maxPHP - overlapPHP_BIC ); // Used for d, t, He3, alpha
127  theIonBC2->SetMaxEnergy( maxBIC );
128 
129  // FTFP
130  G4HadronicInteraction* theFTFP = nullptr;
131  if(maxFTF > maxBIC) {
132  theBuilder = new G4FTFBuilder( "FTFP", thePreCompound );
133  theFTFP = theBuilder->GetModel();
134  theFTFP->SetMinEnergy( minFTF );
135  theFTFP->SetMaxEnergy( maxFTF );
136  }
137 
138  G4CrossSectionInelastic* theNuclNuclData =
140 
141  // ParticleHP : deuteron
142  G4HadronicInteraction* modelDeuteronPHP =
143  new G4ParticleHPInelastic( G4Deuteron::Deuteron(), "ParticleHPInelastic" );
144  modelDeuteronPHP->SetMinEnergy( 0.0 );
145  modelDeuteronPHP->SetMaxEnergy( maxPHP );
146  G4ParticleHPInelasticData* theDeuteronHPInelasticData =
148  theDeuteronHPInelasticData->SetMinKinEnergy( 0.0 );
149  theDeuteronHPInelasticData->SetMaxKinEnergy( maxPHP );
150 
151  // ParticleHP : triton
152  G4HadronicInteraction* modelTritonPHP =
153  new G4ParticleHPInelastic( G4Triton::Triton(), "ParticleHPInelastic" );
154  modelTritonPHP->SetMinEnergy( 0.0 );
155  modelTritonPHP->SetMaxEnergy( maxPHP );
156  G4ParticleHPInelasticData* theTritonHPInelasticData =
158  theTritonHPInelasticData->SetMinKinEnergy( 0.0 );
159  theTritonHPInelasticData->SetMaxKinEnergy( maxPHP );
160 
161  // ParticleHP : 3He
162  G4HadronicInteraction* modelHe3PHP =
163  new G4ParticleHPInelastic( G4He3::He3(), "ParticleHPInelastic" );
164  modelHe3PHP->SetMinEnergy( 0.0 );
165  modelHe3PHP->SetMaxEnergy( maxPHP );
166  G4ParticleHPInelasticData* theHe3HPInelasticData =
168  theHe3HPInelasticData->SetMinKinEnergy( 0.0 );
169  theHe3HPInelasticData->SetMaxKinEnergy( maxPHP );
170 
171  // ParticleHP : alpha
172  G4HadronicInteraction* modelAlphaPHP =
173  new G4ParticleHPInelastic( G4Alpha::Alpha(), "ParticleHPInelastic" );
174  modelAlphaPHP->SetMinEnergy( 0.0 );
175  modelAlphaPHP->SetMaxEnergy( maxPHP );
176  G4ParticleHPInelasticData* theAlphaHPInelasticData =
178  theAlphaHPInelasticData->SetMinKinEnergy( 0.0 );
179  theAlphaHPInelasticData->SetMaxKinEnergy( maxPHP );
180 
181  AddProcess( "dInelastic", G4Deuteron::Deuteron(), theDeuteronHPInelasticData,
182  modelDeuteronPHP, theIonBC2, theFTFP, theNuclNuclData);
183  AddProcess( "tInelastic", G4Triton::Triton(), theTritonHPInelasticData,
184  modelTritonPHP, theIonBC2, theFTFP, theNuclNuclData);
185  AddProcess( "He3Inelastic", G4He3::He3(), theHe3HPInelasticData,
186  modelHe3PHP, theIonBC2, theFTFP, theNuclNuclData);
187  AddProcess( "alphaInelastic", G4Alpha::Alpha(), theAlphaHPInelasticData,
188  modelAlphaPHP, theIonBC2, theFTFP, theNuclNuclData);
189  AddProcess( "ionInelastic", G4GenericIon::GenericIon(), nullptr,
190  nullptr, theIonBC1, theFTFP, theNuclNuclData);
191 
192  if ( verbose > 1 ) G4cout << "G4IonPhysicsPHP::ConstructProcess done! " << G4endl;
193 }
194 
195 
198  G4HadronicInteraction* aBIC,
199  G4HadronicInteraction* aFTFP,
200  G4VCrossSectionDataSet* theNuclNuclData)
201 {
202  G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess( name, part );
203  G4ProcessManager* pManager = part->GetProcessManager();
204  pManager->AddDiscreteProcess( hadi );
205  hadi->AddDataSet( theNuclNuclData );
206  if ( aPHP ) {
207  hadi->RegisterMe( aPHP );
208  if ( xsecPHP ) {
209  hadi->AddDataSet( xsecPHP );
210  }
211  }
212  hadi->RegisterMe( aBIC );
213  if(aFTFP) { hadi->RegisterMe( aFTFP ); }
214 }
215