Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/physics_lists/constructors/ions/src/G4IonPhysicsPHP.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 
 49 #include "G4HadronInelasticProcess.hh"
 50 #include "G4BinaryLightIonReaction.hh"
 51 #include "G4ComponentGGNuclNuclXsc.hh"
 52 #include "G4CrossSectionInelastic.hh"
 53 
 54 #include "G4PreCompoundModel.hh"
 55 #include "G4ExcitationHandler.hh"
 56 #include "G4FTFBuilder.hh"
 57 #include "G4HadronicInteraction.hh"
 58 #include "G4BuilderType.hh"
 59 #include "G4HadronicInteractionRegistry.hh"
 60 
 61 #include "G4ParticleHPInelastic.hh"
 62 #include "G4ParticleHPInelasticData.hh"
 63 
 64 #include "G4HadronicParameters.hh"
 65 #include "G4DeexPrecoParameters.hh"
 66 #include "G4NuclearLevelData.hh"
 67 
 68 using namespace std;
 69 
 70 // factory
 71 #include "G4PhysicsConstructorFactory.hh"
 72 
 73 G4_DECLARE_PHYSCONSTR_FACTORY( G4IonPhysicsPHP );
 74 
 75 G4IonPhysicsPHP::G4IonPhysicsPHP( G4int ver )
 76   : G4IonPhysicsPHP( "ionInelasticFTFP_BIC_PHP", ver)
 77 {}
 78 
 79 G4IonPhysicsPHP::G4IonPhysicsPHP( const G4String& nname, G4int ver )
 80   : G4VPhysicsConstructor( nname ), verbose( ver ) 
 81 {
 82   SetPhysicsType( bIons );
 83   G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters();
 84   param->SetDeexChannelsType(fCombined);
 85   if ( verbose > 1 ) G4cout << "### G4IonPhysics: " << nname << G4endl;
 86 }
 87 
 88 G4IonPhysicsPHP::~G4IonPhysicsPHP() {
 89 }
 90 
 91 void G4IonPhysicsPHP::ConstructParticle() {
 92   //  Construct ions
 93   G4IonConstructor pConstructor;
 94   pConstructor.ConstructParticle();
 95 }
 96 
 97 void G4IonPhysicsPHP::ConstructProcess() {
 98 
 99   const G4double maxPHP = 200.0*MeV;
100   const G4double overlapPHP_BIC = 10.0*MeV;
101   const G4double maxBIC = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade();
102   const G4double minFTF = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade();
103   const G4double maxFTF = G4HadronicParameters::Instance()->GetMaxEnergy();
104 
105   G4HadronicInteraction* p =
106     G4HadronicInteractionRegistry::Instance()->FindModel( "PRECO" );
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 = 
129     new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc() );
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 = 
137     new G4ParticleHPInelasticData( G4Deuteron::Deuteron() );
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 = 
147     new G4ParticleHPInelasticData( G4Triton::Triton() );
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 = 
157     new G4ParticleHPInelasticData( G4He3::He3() );
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 = 
167     new G4ParticleHPInelasticData( G4Alpha::Alpha() );
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 
185 void G4IonPhysicsPHP::AddProcess( const G4String& name, G4ParticleDefinition* part, 
186                                   G4ParticleHPInelasticData* xsecPHP, G4HadronicInteraction* aPHP, 
187                                   G4HadronicInteraction* aBIC,
188                                   G4HadronicInteraction* aFTFP,
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 
205