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

Last change on this file since 1347 was 1347, checked in by garnier, 13 years ago

geant4 tag 9.4

File size: 7.5 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.13 2010/11/17 16:20:31 vnivanch Exp $
27// GEANT4 tag $Name: geant4-09-04-ref-00 $
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// needed for default models
62#include "G4Evaporation.hh"
63#include "G4StatMF.hh"
64#include "G4FermiBreakUp.hh"
65#include "G4PhotonEvaporation.hh"
66
67class G4IonTable;
68
69class G4ExcitationHandler 
70{
71public:
72  G4ExcitationHandler(); 
73  ~G4ExcitationHandler();
74
75private:
76
77  G4ExcitationHandler(const G4ExcitationHandler &right);
78  const G4ExcitationHandler & operator=(const G4ExcitationHandler &right);
79  G4bool operator==(const G4ExcitationHandler &right) const;
80  G4bool operator!=(const G4ExcitationHandler &right) const;
81 
82public:
83
84  G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState) const;
85
86  void SetEvaporation(G4VEvaporation *const  value);
87
88  void SetMultiFragmentation(G4VMultiFragmentation *const  value);
89
90  void SetFermiModel(G4VFermiBreakUp *const  value);
91
92  void SetPhotonEvaporation(G4VEvaporationChannel * const value);
93
94  void SetMaxZForFermiBreakUp(G4int aZ);
95  void SetMaxAForFermiBreakUp(G4int anA);
96  void SetMaxAandZForFermiBreakUp(G4int anA,G4int aZ);
97  void SetMinEForMultiFrag(G4double anE);
98
99  // for inverse cross section choice
100  inline void SetOPTxs(G4int opt);
101  // for superimposed Coulomb Barrir for inverse cross sections
102  inline void UseSICB();
103
104private:
105
106  void SetParameters();
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 G4VEvaporationChannel * 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
126
127private:
128 
129  G4VEvaporation *theEvaporation;
130 
131  G4VMultiFragmentation *theMultiFragmentation;
132 
133  G4VFermiBreakUp *theFermiModel;
134 
135  G4VEvaporationChannel * thePhotonEvaporation;
136
137  G4int maxZForFermiBreakUp;
138  G4int maxAForFermiBreakUp;
139  G4double minEForMultiFrag;
140  G4double minExcitation;
141
142  G4IonTable* theTableOfIons;
143
144  G4bool MyOwnEvaporationClass;
145  G4bool MyOwnMultiFragmentationClass; 
146  G4bool MyOwnFermiBreakUpClass;
147  G4bool MyOwnPhotonEvaporationClass;
148
149  G4int OPTxs;
150  G4bool useSICB;
151 
152  struct DeleteFragment
153  {
154    template<typename T>
155    void operator()(const T* ptr) const
156    {
157      delete ptr;
158    }
159  };
160 
161};
162
163inline void G4ExcitationHandler::SetOPTxs(G4int opt) 
164{ 
165  OPTxs = opt; 
166  SetParameters();
167}
168
169inline void G4ExcitationHandler::UseSICB()
170{ 
171  useSICB = true; 
172  SetParameters();
173}
174
175inline const G4VEvaporation * G4ExcitationHandler::GetEvaporation() const
176{
177  return theEvaporation;
178}
179
180inline void G4ExcitationHandler::SetEvaporation(G4VEvaporation *const  value)
181{
182  if (theEvaporation != 0 && MyOwnEvaporationClass) delete theEvaporation;
183  MyOwnEvaporationClass = false;
184  theEvaporation = value;
185  SetParameters();
186}
187
188inline const G4VMultiFragmentation * G4ExcitationHandler::GetMultiFragmentation() const
189{
190  return theMultiFragmentation;
191}
192
193inline void G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation *const  value)
194{
195  if (theMultiFragmentation != 0 && MyOwnMultiFragmentationClass) delete theMultiFragmentation;
196  MyOwnMultiFragmentationClass = false;
197  theMultiFragmentation = value;
198}
199
200inline const G4VFermiBreakUp * G4ExcitationHandler::GetFermiModel() const
201{
202  return theFermiModel;
203}
204
205inline void G4ExcitationHandler::SetFermiModel(G4VFermiBreakUp *const  value)
206{
207  if (theFermiModel != 0 && MyOwnFermiBreakUpClass) delete theFermiModel;
208  MyOwnFermiBreakUpClass = false;
209  theFermiModel = value;
210}
211
212
213inline const G4VEvaporationChannel * G4ExcitationHandler::GetPhotonEvaporation() const
214{
215  return thePhotonEvaporation;
216}
217
218inline void G4ExcitationHandler::SetPhotonEvaporation(G4VEvaporationChannel *const  value)
219{
220  if (thePhotonEvaporation != 0 && MyOwnPhotonEvaporationClass) delete thePhotonEvaporation;
221  MyOwnPhotonEvaporationClass = false;
222  thePhotonEvaporation = value;
223}
224
225inline void G4ExcitationHandler::SetMaxZForFermiBreakUp(G4int aZ)
226{
227  maxZForFermiBreakUp = aZ;
228}
229
230inline void G4ExcitationHandler::SetMaxAForFermiBreakUp(G4int anA)
231{
232  maxAForFermiBreakUp = anA;
233}
234
235inline void G4ExcitationHandler::SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
236{
237  maxAForFermiBreakUp = anA;
238  maxZForFermiBreakUp = aZ;
239}
240
241inline void G4ExcitationHandler::SetMinEForMultiFrag(G4double anE)
242{
243  minEForMultiFrag = anE;
244}
245
246inline G4int G4ExcitationHandler::GetMaxZ() const
247{
248  return maxZForFermiBreakUp;
249}
250
251inline G4int G4ExcitationHandler::GetMaxA() const 
252{
253  return maxAForFermiBreakUp;
254}
255
256inline G4double G4ExcitationHandler::GetMinE() const 
257{
258  return minEForMultiFrag;
259}
260
261
262#endif
Note: See TracBrowser for help on using the repository browser.