source: trunk/source/processes/hadronic/models/de_excitation/handler/include/G4ExcitationHandler.hh @ 1245

Last change on this file since 1245 was 1228, checked in by garnier, 15 years ago

update geant4.9.3 tag

File size: 7.3 KB
Line 
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// $Id: G4ExcitationHandler.hh,v 1.10 2009/11/24 11:18:48 vnivanch Exp $
28// GEANT4 tag $Name: geant4-09-03 $
29//
30// Hadronic Process: Nuclear De-excitations
31// by V. Lara (May 1998)
32//
33// Modif (03 September 2008) by J. M. Quesada for external choice of inverse
34// cross section option
35//
36// Modif (30 June 1998) by V. Lara:
37//      -Using G4ParticleTable and therefore G4IonTable
38//       it can return all kind of fragments produced in
39//       deexcitation
40//      -It uses default algorithms for:
41//              Evaporation: G4StatEvaporation
42//              MultiFragmentation: G4DummyMF (a dummy one)
43//              Fermi Breakup model: G4StatFermiBreakUp
44//
45// Modif (03 September 2008) by J. M. Quesada for external choice of inverse
46// cross section option
47// JMQ (06 September 2008) Also external choices have been added for
48// superimposed Coulomb barrier (if useSICBis set true, by default is false)
49
50#ifndef G4ExcitationHandler_h
51#define G4ExcitationHandler_h 1
52
53#include "G4VMultiFragmentation.hh"
54#include "G4VFermiBreakUp.hh"
55#include "G4VEvaporation.hh"
56#include "G4VPhotonEvaporation.hh"
57#include "G4Fragment.hh"
58#include "G4DynamicParticle.hh"
59#include "G4ReactionProductVector.hh"
60#include "G4ReactionProduct.hh"
61#include "G4ParticleTypes.hh"
62#include "G4ParticleTable.hh"
63// needed for default models
64#include "G4Evaporation.hh"
65#include "G4StatMF.hh"
66#include "G4FermiBreakUp.hh"
67#include "G4PhotonEvaporation.hh"
68#include "G4IonConstructor.hh"
69
70//#define debug
71
72class G4ExcitationHandler 
73{
74public:
75  G4ExcitationHandler(); 
76  ~G4ExcitationHandler();
77private:
78  G4ExcitationHandler(const G4ExcitationHandler &right);
79
80  const G4ExcitationHandler & operator=(const G4ExcitationHandler &right);
81  G4bool operator==(const G4ExcitationHandler &right) const;
82  G4bool operator!=(const G4ExcitationHandler &right) const;
83 
84
85public:
86  G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const;
87
88  void SetEvaporation(G4VEvaporation *const  value);
89
90  void SetMultiFragmentation(G4VMultiFragmentation *const  value);
91
92  void SetFermiModel(G4VFermiBreakUp *const  value);
93
94  void SetPhotonEvaporation(G4VPhotonEvaporation * const value);
95
96  void SetMaxZForFermiBreakUp(G4int aZ);
97  void SetMaxAForFermiBreakUp(G4int anA);
98  void SetMaxAandZForFermiBreakUp(G4int anA,G4int aZ);
99  void SetMinEForMultiFrag(G4double anE);
100
101// for inverse cross section choice
102  inline void SetOPTxs(G4int opt) { OPTxs = opt;}
103// for superimposed Coulomb Barrir for inverse cross sections
104  inline void UseSICB(){useSICB=true;}
105
106private:
107
108  G4ReactionProductVector * Transform(G4FragmentVector * theFragmentVector) const;
109
110  const G4VEvaporation * GetEvaporation() const;
111
112  const G4VMultiFragmentation * GetMultiFragmentation() const;
113
114  const G4VFermiBreakUp * GetFermiModel() const;
115
116  const G4VPhotonEvaporation * GetPhotonEvaporation() const;
117
118  G4int GetMaxZ() const;
119  G4int GetMaxA() const;
120  G4double GetMinE() const;
121 
122#ifdef debug
123  void CheckConservation(const G4Fragment & aFragment,
124                         G4FragmentVector * Result) const;
125#endif
126private:
127 
128  G4VEvaporation *theEvaporation;
129 
130  G4VMultiFragmentation *theMultiFragmentation;
131 
132  G4VFermiBreakUp *theFermiModel;
133 
134  G4VPhotonEvaporation * thePhotonEvaporation;
135
136  G4int maxZForFermiBreakUp;
137  G4int maxAForFermiBreakUp;
138  G4double minEForMultiFrag;
139
140  G4ParticleTable *theTableOfParticles;
141
142  G4bool MyOwnEvaporationClass;
143  G4bool MyOwnMultiFragmentationClass; 
144  G4bool MyOwnFermiBreakUpClass;
145  G4bool MyOwnPhotonEvaporationClass;
146
147  G4int OPTxs;
148  G4bool useSICB;
149
150  struct DeleteFragment
151  {
152    template<typename T>
153    void operator()(const T* ptr) const
154    {
155      delete ptr;
156    }
157  };
158
159
160};
161
162
163
164inline const G4VEvaporation * G4ExcitationHandler::GetEvaporation() const
165{
166  return theEvaporation;
167}
168
169inline void G4ExcitationHandler::SetEvaporation(G4VEvaporation *const  value)
170{
171  if (theEvaporation != 0 && MyOwnEvaporationClass) delete theEvaporation;
172  MyOwnEvaporationClass = false;
173  theEvaporation = value;
174}
175
176inline const G4VMultiFragmentation * G4ExcitationHandler::GetMultiFragmentation() const
177{
178  return theMultiFragmentation;
179}
180
181inline void G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation *const  value)
182{
183  if (theMultiFragmentation != 0 && MyOwnMultiFragmentationClass) delete theMultiFragmentation;
184  MyOwnMultiFragmentationClass = false;
185  theMultiFragmentation = value;
186}
187
188inline const G4VFermiBreakUp * G4ExcitationHandler::GetFermiModel() const
189{
190  return theFermiModel;
191}
192
193inline void G4ExcitationHandler::SetFermiModel(G4VFermiBreakUp *const  value)
194{
195  if (theFermiModel != 0 && MyOwnFermiBreakUpClass) delete theFermiModel;
196  MyOwnFermiBreakUpClass = false;
197  theFermiModel = value;
198}
199
200
201inline const G4VPhotonEvaporation * G4ExcitationHandler::GetPhotonEvaporation() const
202{
203  return thePhotonEvaporation;
204}
205
206inline void G4ExcitationHandler::SetPhotonEvaporation(G4VPhotonEvaporation *const  value)
207{
208  if (thePhotonEvaporation != 0 && MyOwnPhotonEvaporationClass) delete thePhotonEvaporation;
209  MyOwnPhotonEvaporationClass = false;
210  thePhotonEvaporation = value;
211}
212
213inline void G4ExcitationHandler::SetMaxZForFermiBreakUp(G4int aZ)
214{
215  maxZForFermiBreakUp = aZ;
216}
217
218inline void G4ExcitationHandler::SetMaxAForFermiBreakUp(G4int anA)
219{
220  maxAForFermiBreakUp = anA;
221}
222
223inline void G4ExcitationHandler::SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
224{
225  maxAForFermiBreakUp = anA;
226  maxZForFermiBreakUp = aZ;
227}
228
229inline void G4ExcitationHandler::SetMinEForMultiFrag(G4double anE)
230{
231  minEForMultiFrag = anE;
232}
233
234inline G4int G4ExcitationHandler::GetMaxZ() const
235{
236  return maxZForFermiBreakUp;
237}
238
239inline G4int G4ExcitationHandler::GetMaxA() const 
240{
241  return maxAForFermiBreakUp;
242}
243
244inline G4double G4ExcitationHandler::GetMinE() const 
245{
246  return minEForMultiFrag;
247}
248
249
250#endif
Note: See TracBrowser for help on using the repository browser.