ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4ExcitationHandler.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4ExcitationHandler.hh
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 // Hadronic Process: Nuclear De-excitations
27 // by V. Lara (May 1998)
28 //
29 // Modifications:
30 // 30 June 1998 by V. Lara:
31 // -Using G4ParticleTable and therefore G4IonTable
32 // it can return all kind of fragments produced in
33 // deexcitation
34 // -It uses default algorithms for:
35 // Evaporation: G4StatEvaporation
36 // MultiFragmentation: G4DummyMF (a dummy one)
37 // Fermi Breakup model: G4StatFermiBreakUp
38 //
39 // 03 September 2008 by J. M. Quesada for external choice of inverse
40 // cross section option
41 // 06 September 2008 JMQ Also external choices have been added for
42 // superimposed Coulomb barrier (if useSICBis set true, by default is false)
43 // 23 January 2012 by V.Ivanchenko remove obsolete data members; added access
44 // methods to deexcitation components
45 //
46 
47 #ifndef G4ExcitationHandler_h
48 #define G4ExcitationHandler_h 1
49 
50 #include "globals.hh"
51 #include "G4Fragment.hh"
53 #include "G4IonTable.hh"
54 #include "G4DeexPrecoParameters.hh"
55 #include "G4NistManager.hh"
56 
58 class G4VFermiBreakUp;
59 class G4VEvaporation;
61 
63 {
64 public:
65 
66  explicit G4ExcitationHandler();
68 
69  G4ReactionProductVector* BreakItUp(const G4Fragment &theInitialState);
70 
71  // short model description used for automatic web documentation
72  void ModelDescription(std::ostream& outFile) const;
73 
74  void Initialise();
75 
76  // user defined sub-models
77  // deletion is responsibility of this handler if isLocal=true
78  void SetEvaporation(G4VEvaporation* ptr, G4bool isLocal=false);
80  void SetFermiModel(G4VFermiBreakUp* ptr);
83 
84  //======== Obsolete methods to be removed =====
85 
86  // parameters of sub-models
87  inline void SetMaxZForFermiBreakUp(G4int aZ);
88  inline void SetMaxAForFermiBreakUp(G4int anA);
89  inline void SetMaxAandZForFermiBreakUp(G4int anA,G4int aZ);
90  inline void SetMinEForMultiFrag(G4double anE);
91 
92  // access methods
97 
98  // for inverse cross section choice
99  inline void SetOPTxs(G4int opt);
100  // for superimposed Coulomb Barrir for inverse cross sections
101  inline void UseSICB();
102 
103  //==============================================
104 
105 private:
106 
107  void SetParameters();
108 
109  inline void SortSecondaryFragment(G4Fragment*);
110 
112  const G4ExcitationHandler & operator
113  =(const G4ExcitationHandler &right);
114  G4bool operator==(const G4ExcitationHandler &right) const;
115  G4bool operator!=(const G4ExcitationHandler &right) const;
116 
123 
131 
133 
136 
139 
143 
147 
148  // list of fragments to store final result
149  std::vector<G4Fragment*> theResults;
150 
151  // list of fragments to store intermediate result
152  std::vector<G4Fragment*> results;
153 
154  // list of fragments to apply Evaporation or Fermi Break-Up
155  std::vector<G4Fragment*> theEvapList;
156 };
157 
159 {
160  maxZForFermiBreakUp = aZ;
161 }
162 
164 {
165  maxAForFermiBreakUp = anA;
166 }
167 
169 {
172 }
173 
175 {
176  minEForMultiFrag = anE;
177 }
178 
180 {}
181 
183 {}
184 
186 {
187  G4int A = frag->GetA_asInt();
188 
189  // gamma, e-, p, n
190  if(A <= 1) {
191  theResults.push_back(frag);
192  } else if(frag->GetExcitationEnergy() < minExcitation) {
193  // cold fragments
194  G4int Z = frag->GetZ_asInt();
195 
196  // is stable or d, t, He3, He4
197  if(nist->GetIsotopeAbundance(Z, A) > 0.0 || (A == 3 && (Z == 1 || Z == 2)) ) {
198  theResults.push_back(frag); // stable fragment
199  } else {
200  theEvapList.push_back(frag);
201  }
202  // hot fragments are unstable
203  } else {
204  theEvapList.push_back(frag);
205  }
206 }
207 
208 #endif