Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4IonPhysicsPHP.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//
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"
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"
56#include "G4FTFBuilder.hh"
58#include "G4BuilderType.hh"
60
63
66#include "G4NuclearLevelData.hh"
67
68using namespace std;
69
70// factory
72
74
76 : G4IonPhysicsPHP( "ionInelasticFTFP_BIC_PHP", ver)
77{}
78
80 : G4VPhysicsConstructor( nname ), verbose( ver )
81{
85 if ( verbose > 1 ) G4cout << "### G4IonPhysics: " << nname << G4endl;
86}
87
89}
90
92 // Construct ions
93 G4IonConstructor pConstructor;
94 pConstructor.ConstructParticle();
95}
96
98
99 const G4double maxPHP = 200.0*MeV;
100 const G4double overlapPHP_BIC = 10.0*MeV;
104
107 G4PreCompoundModel* thePreCompound = static_cast< G4PreCompoundModel* >(p);
108 if ( ! thePreCompound ) thePreCompound = new G4PreCompoundModel;
109
110 // Binary Cascade
111 G4HadronicInteraction* theIonBC1 = new G4BinaryLightIonReaction( thePreCompound );
112 theIonBC1->SetMinEnergy( 0.0 ); // Used for generic ions
113 theIonBC1->SetMaxEnergy( maxBIC );
114
115 G4HadronicInteraction* theIonBC2 = new G4BinaryLightIonReaction( thePreCompound );
116 theIonBC2->SetMinEnergy( maxPHP - overlapPHP_BIC ); // Used for d, t, He3, alpha
117 theIonBC2->SetMaxEnergy( maxBIC );
118
119 // FTFP
120 G4HadronicInteraction* theFTFP = nullptr;
121 if(maxFTF > maxBIC) {
122 G4FTFBuilder theBuilder( "FTFP", thePreCompound );
123 theFTFP = theBuilder.GetModel();
124 theFTFP->SetMinEnergy( minFTF );
125 theFTFP->SetMaxEnergy( maxFTF );
126 }
127
128 G4CrossSectionInelastic* theNuclNuclData =
130
131 // ParticleHP : deuteron
132 G4HadronicInteraction* modelDeuteronPHP =
133 new G4ParticleHPInelastic( G4Deuteron::Deuteron(), "ParticleHPInelastic" );
134 modelDeuteronPHP->SetMinEnergy( 0.0 );
135 modelDeuteronPHP->SetMaxEnergy( maxPHP );
136 G4ParticleHPInelasticData* theDeuteronHPInelasticData =
138 theDeuteronHPInelasticData->SetMinKinEnergy( 0.0 );
139 theDeuteronHPInelasticData->SetMaxKinEnergy( maxPHP );
140
141 // ParticleHP : triton
142 G4HadronicInteraction* modelTritonPHP =
143 new G4ParticleHPInelastic( G4Triton::Triton(), "ParticleHPInelastic" );
144 modelTritonPHP->SetMinEnergy( 0.0 );
145 modelTritonPHP->SetMaxEnergy( maxPHP );
146 G4ParticleHPInelasticData* theTritonHPInelasticData =
148 theTritonHPInelasticData->SetMinKinEnergy( 0.0 );
149 theTritonHPInelasticData->SetMaxKinEnergy( maxPHP );
150
151 // ParticleHP : 3He
152 G4HadronicInteraction* modelHe3PHP =
153 new G4ParticleHPInelastic( G4He3::He3(), "ParticleHPInelastic" );
154 modelHe3PHP->SetMinEnergy( 0.0 );
155 modelHe3PHP->SetMaxEnergy( maxPHP );
156 G4ParticleHPInelasticData* theHe3HPInelasticData =
158 theHe3HPInelasticData->SetMinKinEnergy( 0.0 );
159 theHe3HPInelasticData->SetMaxKinEnergy( maxPHP );
160
161 // ParticleHP : alpha
162 G4HadronicInteraction* modelAlphaPHP =
163 new G4ParticleHPInelastic( G4Alpha::Alpha(), "ParticleHPInelastic" );
164 modelAlphaPHP->SetMinEnergy( 0.0 );
165 modelAlphaPHP->SetMaxEnergy( maxPHP );
166 G4ParticleHPInelasticData* theAlphaHPInelasticData =
168 theAlphaHPInelasticData->SetMinKinEnergy( 0.0 );
169 theAlphaHPInelasticData->SetMaxKinEnergy( maxPHP );
170
171 AddProcess( "dInelastic", G4Deuteron::Deuteron(), theDeuteronHPInelasticData,
172 modelDeuteronPHP, theIonBC2, theFTFP, theNuclNuclData);
173 AddProcess( "tInelastic", G4Triton::Triton(), theTritonHPInelasticData,
174 modelTritonPHP, theIonBC2, theFTFP, theNuclNuclData);
175 AddProcess( "He3Inelastic", G4He3::He3(), theHe3HPInelasticData,
176 modelHe3PHP, theIonBC2, theFTFP, theNuclNuclData);
177 AddProcess( "alphaInelastic", G4Alpha::Alpha(), theAlphaHPInelasticData,
178 modelAlphaPHP, theIonBC2, theFTFP, theNuclNuclData);
179 AddProcess( "ionInelastic", G4GenericIon::GenericIon(), nullptr,
180 nullptr, theIonBC1, theFTFP, theNuclNuclData);
181
182 if ( verbose > 1 ) G4cout << "G4IonPhysicsPHP::ConstructProcess done! " << G4endl;
183}
184
185void G4IonPhysicsPHP::AddProcess( const G4String& name, G4ParticleDefinition* part,
189 G4VCrossSectionDataSet* theNuclNuclData)
190{
191 G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess( name, part );
192 G4ProcessManager* pManager = part->GetProcessManager();
193 pManager->AddDiscreteProcess( hadi );
194 hadi->AddDataSet( theNuclNuclData );
195 if ( aPHP ) {
196 hadi->RegisterMe( aPHP );
197 if ( xsecPHP ) {
198 hadi->AddDataSet( xsecPHP );
199 }
200 }
201 hadi->RegisterMe( aBIC );
202 if(aFTFP) { hadi->RegisterMe( aFTFP ); }
203}
204
@ bIons
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4Alpha * Alpha()
Definition: G4Alpha.cc:88
void SetDeexChannelsType(G4DeexChannelType)
static G4Deuteron * Deuteron()
Definition: G4Deuteron.cc:93
static G4GenericIon * GenericIon()
Definition: G4GenericIon.cc:92
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
static G4HadronicParameters * Instance()
G4double GetMinEnergyTransitionFTF_Cascade() const
G4double GetMaxEnergyTransitionFTF_Cascade() const
G4double GetMaxEnergy() const
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void RegisterMe(G4HadronicInteraction *a)
static G4He3 * He3()
Definition: G4He3.cc:93
static void ConstructParticle()
void ConstructProcess() override
void ConstructParticle() override
G4IonPhysicsPHP(G4int ver=0)
~G4IonPhysicsPHP() override
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()
G4ProcessManager * GetProcessManager() const
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
static G4Triton * Triton()
Definition: G4Triton.cc:93
void SetMaxKinEnergy(G4double value)
void SetMinKinEnergy(G4double value)
G4HadronicInteraction * GetModel()