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

Last change on this file since 1315 was 1315, checked in by garnier, 14 years ago

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

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