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: G4IonQMDPhysics 30 // Created from G4IonBinaryCascadePhysics 31 // 32 // Author: G.Folger 33 // 34 // Modified: 35 // 36 //---------------------------------------------------------------------------- 37 // 38 39 #include "G4IonQMDPhysics.hh" 40 41 #include "G4SystemOfUnits.hh" 42 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 "G4BinaryLightIonReaction.hh" 52 #include "G4QMDReaction.hh" 53 54 #include "G4PreCompoundModel.hh" 55 #include "G4ExcitationHandler.hh" 56 #include "G4FTFBuilder.hh" 57 #include "G4HadronicInteraction.hh" 58 #include "G4BuilderType.hh" 59 60 #include "G4ComponentGGNuclNuclXsc.hh" 61 #include "G4CrossSectionInelastic.hh" 62 63 #include "G4ParticleDefinition.hh" 64 #include "G4ParticleTable.hh" 65 #include "G4ProcessManager.hh" 66 67 // Nuclei 68 #include "G4IonConstructor.hh" 69 #include "G4BuilderType.hh" 70 #include "G4HadronicInteractionRegistry.hh" 71 #include "G4HadronicParameters.hh" 72 #include "G4DeexPrecoParameters.hh" 73 #include "G4NuclearLevelData.hh" 74 75 #include "G4HadronicParameters.hh" 76 77 // factory 78 #include "G4PhysicsConstructorFactory.hh" 79 // 80 G4_DECLARE_PHYSCONSTR_FACTORY(G4IonQMDPhysics); 81 82 G4IonQMDPhysics::G4IonQMDPhysics(G4int ver) 83 : G4IonQMDPhysics("IonQMD", ver) 84 {} 85 86 G4IonQMDPhysics::G4IonQMDPhysics(const G4String& nname, G4int ver) 87 : G4VPhysicsConstructor(nname), verbose(ver) 88 { 89 eminQMD = 100.*MeV; 90 emaxQMD = 10.*GeV; 91 overlap = 10*MeV; 92 SetPhysicsType(bIons); 93 G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters(); 94 param->SetDeexChannelsType(fCombined); 95 if(verbose > 1) { G4cout << "### IonPhysics: " << nname << G4endl; } 96 } 97 98 G4IonQMDPhysics::~G4IonQMDPhysics() 99 {} 100 101 void G4IonQMDPhysics::ConstructProcess() 102 { 103 G4HadronicInteraction* p = 104 G4HadronicInteractionRegistry::Instance()->FindModel("PRECO"); 105 G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p); 106 if(!thePreCompound) { thePreCompound = new G4PreCompoundModel; } 107 108 G4BinaryLightIonReaction* theIonBC = new G4BinaryLightIonReaction(thePreCompound); 109 theIonBC->SetMaxEnergy(eminQMD + overlap); 110 111 G4double emax = G4HadronicParameters::Instance()->GetMaxEnergy(); 112 emaxQMD = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade(); 113 G4HadronicInteraction* theFTFP = nullptr; 114 if(emax > emaxQMD) { 115 G4FTFBuilder theFTFPBuilder("FTFP",thePreCompound); 116 theFTFP = theFTFPBuilder.GetModel(); 117 theFTFP->SetMinEnergy(emaxQMD - overlap); 118 theFTFP->SetMaxEnergy(emax); 119 } 120 121 G4QMDReaction* theQMD = new G4QMDReaction(); 122 theQMD->SetMinEnergy(eminQMD); 123 theQMD->SetMaxEnergy(emaxQMD); 124 125 G4VCrossSectionDataSet* theNuclNuclData = 126 new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc() ); 127 128 AddProcess("dInelastic", G4Deuteron::Deuteron(), theIonBC, theQMD, theFTFP, theNuclNuclData); 129 AddProcess("tInelastic", G4Triton::Triton(), theIonBC, theQMD, theFTFP, theNuclNuclData); 130 AddProcess("He3Inelastic", G4He3::He3(), theIonBC, theQMD, theFTFP, theNuclNuclData); 131 AddProcess("alphaInelastic", G4Alpha::Alpha(), theIonBC, theQMD, theFTFP, theNuclNuclData); 132 AddProcess("ionInelastic", G4GenericIon::GenericIon(), theIonBC, theQMD, theFTFP, theNuclNuclData); 133 } 134 135 void G4IonQMDPhysics::AddProcess(const G4String& name, 136 G4ParticleDefinition* p, 137 G4BinaryLightIonReaction* BIC, 138 G4QMDReaction* QMD, 139 G4HadronicInteraction* FTFP, 140 G4VCrossSectionDataSet* theNuclNuclData) 141 { 142 G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess(name, p); 143 G4ProcessManager* pManager = p->GetProcessManager(); 144 pManager->AddDiscreteProcess(hadi); 145 146 hadi->AddDataSet(theNuclNuclData); 147 148 hadi->RegisterMe(BIC); 149 hadi->RegisterMe(QMD); 150 if(FTFP) { hadi->RegisterMe(FTFP); } 151 152 if(verbose > 1) { 153 G4cout << "Register " << hadi->GetProcessName() 154 << " for " << p->GetParticleName() << G4endl 155 << " Binary Cascade for E(MeV)= 0 - " 156 << eminQMD+overlap; 157 G4cout << " QMD for E(MeV)= " << eminQMD << " - " << emaxQMD; 158 if(FTFP) { 159 G4cout << " FTFP for E(MeV)= " << emaxQMD-overlap << " - " << FTFP->GetMaxEnergy(); 160 } 161 G4cout << G4endl; 162 } 163 } 164 165 void G4IonQMDPhysics::ConstructParticle() 166 { 167 // Construct light ions 168 G4IonConstructor pConstructor; 169 pConstructor.ConstructParticle(); 170 } 171