Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4ExcitationHandler.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 // $Id: G4ExcitationHandler.cc 104984 2017-07-03 15:13:37Z gcosmo $
27 //
28 // Hadronic Process: Nuclear De-excitations
29 // by V. Lara (May 1998)
30 //
31 //
32 // Modified:
33 // 30 June 1998 by V. Lara:
34 // -Modified the Transform method for use G4ParticleTable and
35 // therefore G4IonTable. It makes possible to convert all kind
36 // of fragments (G4Fragment) produced in deexcitation to
37 // G4DynamicParticle
38 // -It uses default algorithms for:
39 // Evaporation: G4Evaporation
40 // MultiFragmentation: G4StatMF
41 // Fermi Breakup model: G4FermiBreakUp
42 // 24 Jul 2008 by M. A. Cortes Giraldo:
43 // -Max Z,A for Fermi Break-Up turns to 9,17 by default
44 // -BreakItUp() reorganised and bug in Evaporation loop fixed
45 // -Transform() optimised
46 // (September 2008) by J. M. Quesada. External choices have been added for :
47 // -inverse cross section option (default OPTxs=3)
48 // -superimposed Coulomb barrier (if useSICB is set true, by default it is false)
49 // September 2009 by J. M. Quesada:
50 // -according to Igor Pshenichnov, SMM will be applied (just in case) only once.
51 // 27 Nov 2009 by V.Ivanchenko:
52 // -cleanup the logic, reduce number internal vectors, fixed memory leak.
53 // 11 May 2010 by V.Ivanchenko:
54 // -FermiBreakUp activated, used integer Z and A, used BreakUpFragment method for
55 // final photon deexcitation; used check on adundance of a fragment, decay
56 // unstable fragments with A <5
57 // 22 March 2011 by V.Ivanchenko: general cleanup and addition of a condition:
58 // products of Fermi Break Up cannot be further deexcited by this model
59 // 30 March 2011 by V.Ivanchenko removed private inline methods, moved Set methods
60 // to the source
61 // 23 January 2012 by V.Ivanchenko general cleanup including destruction of
62 // objects, propagate G4PhotonEvaporation pointer to G4Evaporation class and
63 // not delete it here
64 
65 #include "G4ExcitationHandler.hh"
66 #include "G4SystemOfUnits.hh"
67 #include "G4LorentzVector.hh"
68 #include "G4NistManager.hh"
69 #include "G4ParticleTable.hh"
70 #include "G4ParticleTypes.hh"
71 #include "G4Ions.hh"
72 #include "G4Electron.hh"
73 
74 #include "G4VMultiFragmentation.hh"
75 #include "G4VFermiBreakUp.hh"
76 
77 #include "G4VEvaporation.hh"
78 #include "G4VEvaporationChannel.hh"
79 #include "G4Evaporation.hh"
80 #include "G4PhotonEvaporation.hh"
81 #include "G4StatMF.hh"
82 #include "G4FermiBreakUpVI.hh"
83 #include "G4NuclearLevelData.hh"
84 #include "G4Pow.hh"
85 
87  : maxZForFermiBreakUp(9),maxAForFermiBreakUp(17),
88  fVerbose(0),isInitialised(false),isEvapLocal(true)
89 {
92 
93  theMultiFragmentation = nullptr;
94  theFermiModel = nullptr;
98  theResults.reserve(60);
99  results.reserve(30);
100  theEvapList.reserve(30);
101  thePhotoEvapList.reserve(10);
102 
103  SetParameters();
105 
106  if(fVerbose > 0) { G4cout << "### New handler " << this << G4endl; }
107 }
108 
110 {
111  //G4cout << "### Delete handler " << this << G4endl;
112  delete theMultiFragmentation;
113  delete theFermiModel;
114  if(isEvapLocal) { delete theEvaporation; }
115 }
116 
118 {
119  G4DeexPrecoParameters* param =
121  isActive = true;
122  if(fDummy == param->GetDeexChannelsType()) { isActive = false; }
124  minExcitation = param->GetMinExcitation();
125  icID = param->GetInternalConversionID();
126  if(isActive) {
127  if(!thePhotonEvaporation) {
129  }
132  }
133 }
134 
136 {
137  if(isInitialised) { return; }
138  if(fVerbose > 0) {
139  G4cout << "G4ExcitationHandler::Initialise() started " << this << G4endl;
140  }
141  G4DeexPrecoParameters* param =
143  isInitialised = true;
144  SetParameters();
145  if(isActive) {
148  }
149  param->Dump();
150 }
151 
153 {
154  if(ptr && ptr != theEvaporation) {
155  delete theEvaporation;
156  theEvaporation = ptr;
159  isEvapLocal = flag;
160  }
161 }
162 
163 void
165 {
166  if(ptr && ptr != theMultiFragmentation) {
167  delete theMultiFragmentation;
168  theMultiFragmentation = ptr;
169  }
170 }
171 
173 {
174  if(ptr && ptr != theFermiModel) {
175  delete theFermiModel;
176  theFermiModel = ptr;
178  }
179 }
180 
181 void
183 {
184  if(ptr && ptr != thePhotonEvaporation) {
185  thePhotonEvaporation = ptr;
187  }
188 }
189 
191 {
192  G4Evaporation* evap = static_cast<G4Evaporation*>(theEvaporation);
193  if(val == fDummy) {
194  isActive = false;
195  return;
196  }
197  if(!evap) { return; }
198  if(val == fEvaporation) {
199  evap->SetDefaultChannel();
200  } else if(val == fCombined) {
201  evap->SetCombinedChannel();
202  } else if(val == fGEM) {
203  evap->SetGEMChannel();
204  }
205  evap->InitialiseChannels();
207  G4cout << "Number of de-excitation channels is changed to "
209  if(fVerbose > 0) { G4cout << " " << this; }
210  G4cout << G4endl;
211  }
212 }
213 
216 {
217  // Variables existing until end of method
218  G4Fragment * theInitialStatePtr = new G4Fragment(theInitialState);
219  if(fVerbose > 1) {
220  G4cout << "@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " << G4endl;
221  G4cout << theInitialState << G4endl;
222  }
223  if(!isInitialised) { Initialise(); }
224 
225  // pointer to fragment vector which receives temporal results
226  G4FragmentVector * theTempResult = nullptr;
227 
228  theResults.clear();
229  thePhotoEvapList.clear();
230  theEvapList.clear();
231 
232  // Variables to describe the excited configuration
233  G4double exEnergy = theInitialState.GetExcitationEnergy();
234  G4int A = theInitialState.GetA_asInt();
235  G4int Z = theInitialState.GetZ_asInt();
236 
237  // In case A <= 1 the fragment will not perform any nucleon emission
238  if (A <= 1 || !isActive) {
239  theResults.push_back( theInitialStatePtr );
240 
241  // check if a fragment is stable
242  } else if(exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
243  theResults.push_back( theInitialStatePtr );
244 
245  // JMQ 150909: first step in de-excitation is treated separately
246  // Fragments after the first step are stored in theEvapList
247  } else {
249  || exEnergy <= minEForMultiFrag*A) {
250  theEvapList.push_back(theInitialStatePtr);
251 
252  // Statistical Multifragmentation will take place only once
253  } else {
254  theTempResult = theMultiFragmentation->BreakItUp(theInitialState);
255  if(!theTempResult) {
256  theEvapList.push_back(theInitialStatePtr);
257  } else {
258  size_t nsec = theTempResult->size();
259 
260  // no fragmentation
261  if(0 == nsec) {
262  theEvapList.push_back(theInitialStatePtr);
263 
264  // secondary are produced - sort out secondary fragments
265  } else {
266  G4bool deletePrimary = true;
267  G4FragmentVector::iterator j;
268  for (j = theTempResult->begin(); j != theTempResult->end(); ++j) {
269 
270  if((*j) == theInitialStatePtr) { deletePrimary = false; }
271  A = (*j)->GetA_asInt();
272 
273  // gamma, p, n
274  if(A <= 1) {
275  theResults.push_back(*j);
276 
277  // Analyse fragment A > 1
278  } else {
279  G4double exEnergy1 = (*j)->GetExcitationEnergy();
280 
281  // cold fragments
282  if(exEnergy1 < minExcitation) {
283  Z = (*j)->GetZ_asInt();
284  if(nist->GetIsotopeAbundance(Z, A) > 0.0) {
285  theResults.push_back(*j); // stable fragment
286  } else {
287  theEvapList.push_back(*j);
288  }
289  // hot fragments are unstable
290  } else {
291  theEvapList.push_back(*j);
292  }
293  }
294  }
295  if( deletePrimary ) { delete theInitialStatePtr; }
296  }
297  delete theTempResult; // end multifragmentation
298  }
299  }
300  }
301  if(fVerbose > 2) {
302  G4cout << "## After first step " << theEvapList.size() << " for evap; "
303  << thePhotoEvapList.size() << " for photo-evap; "
304  << theResults.size() << " results. " << G4endl;
305  }
306  // -----------------------------------
307  // FermiBreakUp and De-excitation loop
308  // -----------------------------------
309 
310  static const G4int countmax = 1000;
311  G4Fragment* frag;
312  size_t kk;
313  for (kk=0; kk<theEvapList.size(); ++kk) {
314  frag = theEvapList[kk];
315  if(fVerbose > 2) {
316  G4cout << "Next evaporate: " << G4endl;
317  G4cout << *frag << G4endl;
318  }
319  if(kk >= countmax) {
321  ed << "Infinite loop in the de-excitation module: " << kk
322  << " iterations \n"
323  << " Initial fragment: \n" << theInitialState
324  << "\n Current fragment: \n" << *frag;
325  G4Exception("G4ExcitationHandler::BreakItUp","had0333",FatalException,
326  ed,"Stop execution");
327 
328  }
329  A = frag->GetA_asInt();
330  Z = frag->GetZ_asInt();
331  results.clear();
332 
333  // Fermi Break-Up
334  if(theFermiModel->IsApplicable(Z, A, frag->GetExcitationEnergy())) {
336  size_t nsec = results.size();
337  if(fVerbose > 2) { G4cout << "FermiBreakUp Nsec= " << nsec << G4endl; }
338 
339  // FBU takes care to delete input fragment or add it to the results
340  // The secondary may be excited - photo-evaporation should be applied
341  for(size_t j=0; j<nsec; ++j) {
342  exEnergy = results[j]->GetExcitationEnergy();
343  if(exEnergy < minExcitation) { theResults.push_back(results[j]); }
344  else { thePhotoEvapList.push_back(results[j]); }
345  }
346  continue;
347  }
348  // apply Evaporation, residual nucleus is always added to the results
350  size_t nsec = results.size();
351  if(fVerbose > 2) { G4cout << "Evaporation Nsec= " << nsec << G4endl; }
352 
353  // no evaporation
354  if(1 >= nsec) {
355  theResults.push_back(frag);
356  continue;
357  }
358 
359  // Sort out secondary fragments
360  for (size_t j = 0; j<nsec; ++j) {
361  if(fVerbose > 3) {
362  G4cout << "Evaporated product #" << j << G4endl;
363  G4cout << results[j] << G4endl;
364  }
365  A = results[j]->GetA_asInt();
366  if(A <= 1) {
367  theResults.push_back(results[j]); // gamma, p, n
368  continue;
369  }
370  exEnergy = results[j]->GetExcitationEnergy();
371 
372  // hot fragment
373  if(exEnergy >= minExcitation) {
374  theEvapList.push_back(results[j]);
375 
376  // cold fragment
377  } else {
378  Z = results[j]->GetZ_asInt();
379 
380  // natural isotope
381  if(nist->GetIsotopeAbundance(Z, A) > 0.0) {
382  theResults.push_back(results[j]); // stable fragment
383 
384  } else {
385  theEvapList.push_back(results[j]);
386  }
387  }
388  } // end of loop on secondary
389  } // end of the loop over theEvapList
390  if(fVerbose > 2) {
391  G4cout << "## After 2nd step " << theEvapList.size() << " was evap; "
392  << thePhotoEvapList.size() << " for photo-evap; "
393  << theResults.size() << " results. " << G4endl;
394  }
395  // -----------------------
396  // Photon-Evaporation loop
397  // -----------------------
398 
399  // at this point only photon evaporation is possible
400  size_t kkmax = thePhotoEvapList.size();
401  for (kk=0; kk<kkmax; ++kk) {
402  frag = thePhotoEvapList[kk];
403  if(fVerbose > 2) {
404  G4cout << "Next photon evaporate: " << thePhotonEvaporation << G4endl;
405  G4cout << *frag << G4endl;
406  }
407  exEnergy = frag->GetExcitationEnergy();
408 
409  // photon de-excitation only for hot fragments
410  if(exEnergy > minExcitation) {
412  }
413 
414  // primary fragment is kept
415  theResults.push_back(frag);
416 
417  } // end of photon-evaporation loop
418  if(fVerbose > 2) {
419  G4cout << "## After 3d step " << theEvapList.size() << " was evap; "
420  << thePhotoEvapList.size() << " was photo-evap; "
421  << theResults.size() << " results. " << G4endl;
422  }
423  G4ReactionProductVector * theReactionProductVector =
425 
426  // MAC (24/07/08)
427  // To optimise the storing speed, we reserve space in memory for the vector
428  theReactionProductVector->reserve( theResults.size() );
429 
430  G4int theFragmentA, theFragmentZ;
431 
432  if(fVerbose > 1) {
433  G4cout << "### ExcitationHandler provides " << theResults.size()
434  << " evaporated products:" << G4endl;
435  }
436  kkmax = theResults.size();
437  for (kk=0; kk<kkmax; ++kk) {
438  frag = theResults[kk];
439 
440  // in the case of dummy de-excitation, excitation energy is transfered
441  // into kinetic energy
442  if(!isActive && 0 == kk) {
443  G4double mass = frag->GetGroundStateMass();
444  G4double ptot = (frag->GetMomentum()).vect().mag();
445  G4double etot = (frag->GetMomentum()).e();
446  G4double fac = (etot <= mass || 0.0 == ptot) ? 0.0
447  : std::sqrt((etot - mass)*(etot + mass))/ptot;
448  G4LorentzVector lv((frag->GetMomentum()).px()*fac,
449  (frag->GetMomentum()).py()*fac,
450  (frag->GetMomentum()).pz()*fac, etot);
451  frag->SetMomentum(lv);
452  }
453  if(fVerbose > 1) {
454  G4cout << kk << "-th fragment " << frag;
455  if(frag->NuclearPolarization()) {
456  G4cout << " " << frag->NuclearPolarization();
457  }
458  G4cout << G4endl;
459  G4cout << *frag << G4endl;
460  }
461 
462  theFragmentA = frag->GetA_asInt();
463  theFragmentZ = frag->GetZ_asInt();
464  G4double etot= frag->GetMomentum().e();
465  G4double eexc = 0.0;
466  const G4ParticleDefinition* theKindOfFragment = nullptr;
467  if (theFragmentA == 0) { // photon or e-
468  theKindOfFragment = frag->GetParticleDefinition();
469  } else if (theFragmentA == 1 && theFragmentZ == 0) { // neutron
470  theKindOfFragment = G4Neutron::NeutronDefinition();
471  } else if (theFragmentA == 1 && theFragmentZ == 1) { // proton
472  theKindOfFragment = G4Proton::ProtonDefinition();
473  } else if (theFragmentA == 2 && theFragmentZ == 1) { // deuteron
474  theKindOfFragment = G4Deuteron::DeuteronDefinition();
475  } else if (theFragmentA == 3 && theFragmentZ == 1) { // triton
476  theKindOfFragment = G4Triton::TritonDefinition();
477  } else if (theFragmentA == 3 && theFragmentZ == 2) { // helium3
478  theKindOfFragment = G4He3::He3Definition();
479  } else if (theFragmentA == 4 && theFragmentZ == 2) { // alpha
480  theKindOfFragment = G4Alpha::AlphaDefinition();;
481  } else {
482 
483  // fragment
484  eexc = frag->GetExcitationEnergy();
485  G4int idxf = frag->GetFloatingLevelNumber();
486  if(eexc < minExcitation) {
487  eexc = 0.0;
488  idxf = 0;
489  }
490 
491  theKindOfFragment = theTableOfIons->GetIon(theFragmentZ,theFragmentA,eexc,
492  G4Ions::FloatLevelBase(idxf));
493  if(fVerbose > 1) {
494  G4cout << "### EXCH: Find ion Z= " << theFragmentZ << " A= " << theFragmentA
495  << " Eexc(MeV)= " << eexc/MeV << " idx= " << idxf
496  << " " << theKindOfFragment << G4endl;
497  }
498  }
499  // fragment identified
500  if(theKindOfFragment) {
501  G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
502  theNew->SetMomentum(frag->GetMomentum().vect());
503  theNew->SetTotalEnergy(etot);
504  theNew->SetFormationTime(frag->GetCreationTime());
505  if(theKindOfFragment == electron) { theNew->SetCreatorModel(icID); }
506  theReactionProductVector->push_back(theNew);
507 
508  // fragment not found out ground state is created
509  } else {
510  theKindOfFragment =
511  theTableOfIons->GetIon(theFragmentZ,theFragmentA,0.0,noFloat,0);
512  if(theKindOfFragment) {
513  G4ThreeVector mom(0.0,0.0,0.0);
514  G4double ionmass = theKindOfFragment->GetPDGMass();
515  if(etot <= ionmass) {
516  etot = ionmass;
517  } else {
518  G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
519  mom = (frag->GetMomentum().vect().unit())*ptot;
520  }
521  G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
522  theNew->SetMomentum(mom);
523  theNew->SetTotalEnergy(etot);
524  theNew->SetFormationTime(frag->GetCreationTime());
525  theReactionProductVector->push_back(theNew);
526  if(fVerbose > 2) {
527  G4cout << "### Find ion Z= " << theFragmentZ << " A= " << theFragmentA
528  << " ground state, energy corrected E(MeV)= " << etot << G4endl;
529  }
530  }
531  }
532  delete frag;
533  if(fVerbose > 1) { G4cout << "G4Fragment #" << kk << " is deleted" << G4endl; }
534  }
535  if(fVerbose > 2) {
536  G4cout << "@@@@@@@@@@ End G4Excitation Handler "<< G4endl;
537  }
538  return theReactionProductVector;
539 }
540 
541 void G4ExcitationHandler::ModelDescription(std::ostream& outFile) const
542 {
543  outFile << "G4ExcitationHandler description\n"
544  << "This class samples de-excitation of excited nucleus using\n"
545  << "Fermi Break-up model for light fragments (Z < 9, A < 17), "
546  << "evaporation, fission, and photo-evaporation models. Evaporated\n"
547  << "particle may be proton, neutron, and other light fragment \n"
548  << "(Z < 13, A < 29). During photon evaporation produced gamma \n"
549  << "or electrons due to internal conversion \n";
550 }
551 
552 
553 
554 
555 
556 
G4VEvaporation * theEvaporation
G4double GetCreationTime() const
Definition: G4Fragment.hh:441
static G4Triton * TritonDefinition()
Definition: G4Triton.cc:90
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:300
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
void SetFermiModel(G4VFermiBreakUp *ptr)
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:45
static G4ParticleTable * GetParticleTable()
static constexpr double MeV
Definition: G4SIunits.hh:214
const G4ParticleDefinition * electron
static G4Deuteron * DeuteronDefinition()
Definition: G4Deuteron.cc:89
G4DeexPrecoParameters * GetParameters()
void SetMomentum(const G4double x, const G4double y, const G4double z)
#define G4endl
Definition: G4ios.hh:61
static G4NuclearLevelData * GetInstance()
G4int GetInternalConversionID() const
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
G4int GetA_asInt() const
Definition: G4Fragment.hh:259
G4IonTable * GetIonTable() const
G4bool IsMasterThread()
Definition: G4Threading.cc:130
std::vector< G4Fragment * > theEvapList
G4double GetMinExPerNucleounForMF() const
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:281
G4VMultiFragmentation * theMultiFragmentation
G4VEvaporationChannel * GetPhotonEvaporation()
virtual void BreakFragment(G4FragmentVector *results, G4Fragment *theNucleus)=0
G4double GetMinExcitation() const
std::vector< G4Fragment * > theResults
G4double GetPDGMass() const
void SetGEMChannel()
void SetTotalEnergy(const G4double en)
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
Float_t Z
std::vector< G4Fragment * > results
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
void SetFermiBreakUp(G4VFermiBreakUp *ptr)
static G4Pow * GetInstance()
Definition: G4Pow.cc:57
virtual void Initialise()=0
virtual void InitialiseChannels() final
std::vector< G4Fragment * > thePhotoEvapList
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)
G4double GetIsotopeAbundance(G4int Z, G4int N) const
double A(double temperature)
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:305
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0
static G4Electron * Electron()
Definition: G4Electron.cc:94
std::vector< G4ReactionProduct * > G4ReactionProductVector
#define noFloat
Definition: G4Ions.hh:118
G4int GetZ_asInt() const
Definition: G4Fragment.hh:264
G4DeexChannelType GetDeexChannelsType() const
Hep3Vector unit() const
static G4Alpha * AlphaDefinition()
Definition: G4Alpha.cc:84
G4VFermiBreakUp * theFermiModel
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.hh:65
int G4int
Definition: G4Types.hh:78
void ModelDescription(std::ostream &outFile) const
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus)
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4VEvaporationChannel * thePhotonEvaporation
static const G4double fac
static G4Neutron * NeutronDefinition()
Definition: G4Neutron.cc:99
G4GLOB_DLL std::ostream G4cout
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
G4int GetFloatingLevelNumber() const
Definition: G4Fragment.hh:420
const G4ParticleDefinition * GetParticleDefinition() const
Definition: G4Fragment.hh:431
void SetFormationTime(G4double aTime)
Hep3Vector vect() const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:504
virtual void InitialiseChannels()
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
Definition: G4Ions.hh:189
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:276
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
void SetDeexChannelsType(G4DeexChannelType val)
void SetCreatorModel(const G4int mod)
void SetCombinedChannel()
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const =0
static G4NistManager * Instance()
size_t GetNumberOfChannels() const
void SetDefaultChannel()
static G4He3 * He3Definition()
Definition: G4He3.cc:89