ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4IonQMDPhysics.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4IonQMDPhysics.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 // 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 
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 
62 
63 #include "G4ParticleDefinition.hh"
64 #include "G4ParticleTable.hh"
65 #include "G4ProcessManager.hh"
66 
67 // Nuclei
68 #include "G4IonConstructor.hh"
69 #include "G4BuilderType.hh"
71 #include "G4HadronicParameters.hh"
72 #include "G4DeexPrecoParameters.hh"
73 #include "G4NuclearLevelData.hh"
74 
75 #include "G4HadronicParameters.hh"
76 
77 // factory
79 //
81 
83 
85  : G4IonQMDPhysics("IonQMD", ver)
86 {}
87 
89  : G4VPhysicsConstructor(nname), verbose(ver)
90 {
91  eminQMD = 100.*MeV;
92  emaxQMD = 10.*GeV;
93  overlap = 10*MeV;
97  if(verbose > 1) { G4cout << "### IonPhysics: " << nname << G4endl; }
98 }
99 
101 {
102  delete theFTFPBuilder; theFTFPBuilder = nullptr;
103 }
104 
106 {
109  G4PreCompoundModel* thePreCompound = static_cast<G4PreCompoundModel*>(p);
110  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel; }
111 
112  G4BinaryLightIonReaction* theIonBC = new G4BinaryLightIonReaction(thePreCompound);
113  theIonBC->SetMaxEnergy(eminQMD + overlap);
114 
117  G4HadronicInteraction* theFTFP = nullptr;
118  if(emax > emaxQMD) {
119  theFTFPBuilder = new G4FTFBuilder("FTFP",thePreCompound);
120  theFTFP = theFTFPBuilder->GetModel();
121  theFTFP->SetMinEnergy(emaxQMD - overlap);
122  theFTFP->SetMaxEnergy(emax);
123  }
124 
125  G4QMDReaction* theQMD = new G4QMDReaction();
126  theQMD->SetMinEnergy(eminQMD);
127  theQMD->SetMaxEnergy(emaxQMD);
128 
129  G4VCrossSectionDataSet* theNuclNuclData =
131 
132  AddProcess("dInelastic", G4Deuteron::Deuteron(), theIonBC, theQMD, theFTFP, theNuclNuclData);
133  AddProcess("tInelastic", G4Triton::Triton(), theIonBC, theQMD, theFTFP, theNuclNuclData);
134  AddProcess("He3Inelastic", G4He3::He3(), theIonBC, theQMD, theFTFP, theNuclNuclData);
135  AddProcess("alphaInelastic", G4Alpha::Alpha(), theIonBC, theQMD, theFTFP, theNuclNuclData);
136  AddProcess("ionInelastic", G4GenericIon::GenericIon(), theIonBC, theQMD, theFTFP, theNuclNuclData);
137 }
138 
142  G4QMDReaction* QMD,
143  G4HadronicInteraction* FTFP,
144  G4VCrossSectionDataSet* theNuclNuclData)
145 {
147  G4ProcessManager* pManager = p->GetProcessManager();
148  pManager->AddDiscreteProcess(hadi);
149 
150  hadi->AddDataSet(theNuclNuclData);
151 
152  hadi->RegisterMe(BIC);
153  hadi->RegisterMe(QMD);
154  if(FTFP) { hadi->RegisterMe(FTFP); }
155 
156  if(verbose > 1) {
157  G4cout << "Register " << hadi->GetProcessName()
158  << " for " << p->GetParticleName() << G4endl
159  << " Binary Cascade for E(MeV)= 0 - "
160  << eminQMD+overlap;
161  G4cout << " QMD for E(MeV)= " << eminQMD << " - " << emaxQMD;
162  if(FTFP) {
163  G4cout << " FTFP for E(MeV)= " << emaxQMD-overlap << " - " << FTFP->GetMaxEnergy();
164  }
165  G4cout << G4endl;
166  }
167 }
168 
170 {
171  // Construct light ions
172  G4IonConstructor pConstructor;
173  pConstructor.ConstructParticle();
174 }