Geant4 Cross Reference |
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 // ClassName: G4IonINCLXXPhysics 30 // 31 // Author: D. Mancusi 32 // 33 // Modified: 34 // 35 //---------------------------------------------------------------------------- 36 // 37 38 #include "G4IonINCLXXPhysics.hh" 39 40 #include "G4SystemOfUnits.hh" 41 #include "G4ParticleDefinition.hh" 42 #include "G4ProcessManager.hh" 43 #include "G4Deuteron.hh" 44 #include "G4Triton.hh" 45 #include "G4He3.hh" 46 #include "G4Alpha.hh" 47 #include "G4GenericIon.hh" 48 #include "G4IonConstructor.hh" 49 50 #include "G4HadronInelasticProcess.hh" 51 #include "G4ComponentGGNuclNuclXsc.hh" 52 #include "G4CrossSectionInelastic.hh" 53 54 #include "G4INCLXXInterface.hh" 55 #include "G4PreCompoundModel.hh" 56 #include "G4ExcitationHandler.hh" 57 #include "G4FTFBuilder.hh" 58 #include "G4HadronicInteraction.hh" 59 #include "G4HadronicInteractionRegistry.hh" 60 #include "G4HadronicParameters.hh" 61 #include "G4DeexPrecoParameters.hh" 62 #include "G4NuclearLevelData.hh" 63 #include "G4BuilderType.hh" 64 #include "G4HadronicParameters.hh" 65 66 // factory 67 #include "G4PhysicsConstructorFactory.hh" 68 // 69 G4_DECLARE_PHYSCONSTR_FACTORY(G4IonINCLXXPhysics); 70 71 G4IonINCLXXPhysics::G4IonINCLXXPhysics(G4int ver) : 72 G4IonINCLXXPhysics("IonINCLXX", ver) 73 {} 74 75 G4IonINCLXXPhysics::G4IonINCLXXPhysics(const G4String& nname, G4int ver) 76 : G4VPhysicsConstructor(nname), verbose(ver) 77 { 78 // INCLXX light ion maximum energy is 3.0 GeV/nucleon 79 emaxINCLXX = 3.0 * GeV; 80 deltaE = 100.*MeV; 81 SetPhysicsType(bIons); 82 G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters(); 83 param->SetDeexChannelsType(fCombined); 84 if(verbose > 1) { G4cout << "### IonPhysics: " << nname << G4endl; } 85 } 86 87 G4IonINCLXXPhysics::~G4IonINCLXXPhysics() 88 {} 89 90 void G4IonINCLXXPhysics::ConstructProcess() 91 { 92 G4INCLXXInterface* theINCLXXDeuteron= new G4INCLXXInterface(); 93 G4INCLXXInterface* theINCLXXTriton= new G4INCLXXInterface(); 94 G4INCLXXInterface* theINCLXXHe3= new G4INCLXXInterface(); 95 G4INCLXXInterface* theINCLXXAlpha= new G4INCLXXInterface(); 96 G4INCLXXInterface* theINCLXXIons= new G4INCLXXInterface(); 97 98 G4HadronicInteraction* p = 99 G4HadronicInteractionRegistry::Instance()->FindModel("PRECO"); 100 G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p); 101 if(!thePreCompound) { thePreCompound = new G4PreCompoundModel; } 102 103 G4CrossSectionInelastic* theNuclNuclData = 104 new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc() ); 105 106 G4double emax = G4HadronicParameters::Instance()->GetMaxEnergy(); 107 G4HadronicInteraction* theFTFP = nullptr; 108 if(emax > emaxINCLXX) { 109 G4FTFBuilder theFTFPBuilder("FTFP",thePreCompound); 110 theFTFP = theFTFPBuilder.GetModel(); 111 theFTFP->SetMinEnergy(emaxINCLXX - deltaE); 112 theFTFP->SetMaxEnergy(emax); 113 } 114 115 AddProcess("dInelastic", G4Deuteron::Deuteron(), theINCLXXDeuteron, theFTFP, theNuclNuclData); 116 AddProcess("tInelastic", G4Triton::Triton(), theINCLXXTriton, theFTFP, theNuclNuclData); 117 AddProcess("He3Inelastic", G4He3::He3(), theINCLXXHe3, theFTFP, theNuclNuclData); 118 AddProcess("alphaInelastic", G4Alpha::Alpha(), theINCLXXAlpha, theFTFP, theNuclNuclData); 119 AddProcess("ionInelastic", G4GenericIon::GenericIon(), theINCLXXIons, theFTFP, theNuclNuclData); 120 } 121 122 void G4IonINCLXXPhysics::AddProcess(const G4String& name, 123 G4ParticleDefinition* p, 124 G4HadronicInteraction* model1, 125 G4HadronicInteraction* model2, 126 G4VCrossSectionDataSet* xs) 127 { 128 G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess(name, p); 129 G4ProcessManager* pManager = p->GetProcessManager(); 130 pManager->AddDiscreteProcess(hadi); 131 hadi->AddDataSet(xs); 132 model1->SetMaxEnergy(emaxINCLXX); 133 hadi->RegisterMe(model1); 134 if(model2) { hadi->RegisterMe(model2); } 135 136 if(verbose > 1) { 137 G4cout << "Register " << hadi->GetProcessName() 138 << " for " << p->GetParticleName() 139 << " INCLXX/G4DeexcitationHandler for E(MeV)= 0" << " - " << emaxINCLXX; 140 if(model2) { 141 G4cout << " FTFP for E(MeV)= " << emaxINCLXX - deltaE << " - " 142 << model2->GetMaxEnergy(); 143 } 144 G4cout << G4endl; 145 } 146 } 147 148 void G4IonINCLXXPhysics::ConstructParticle() 149 { 150 // Construct light ions 151 G4IonConstructor pConstructor; 152 pConstructor.ConstructParticle(); 153 } 154