Geant4  10.02.p03
G4UnstableFragmentBreakUp Class Reference

#include <G4UnstableFragmentBreakUp.hh>

Inheritance diagram for G4UnstableFragmentBreakUp:
Collaboration diagram for G4UnstableFragmentBreakUp:

Public Member Functions

 G4UnstableFragmentBreakUp ()
 
virtual ~G4UnstableFragmentBreakUp ()
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *fragment)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus)
 
virtual G4FragmentEmittedFragment (G4Fragment *fragment)
 
virtual G4FragmentVectorBreakUp (const G4Fragment &fragment)
 
virtual G4double GetEmissionProbability (G4Fragment *fragment)
 
void SetVerboseLevel (G4int val)
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()
 
virtual void Initialise ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual void Dump () const
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
virtual G4double GetFinalLevelEnergy (G4int Z, G4int A, G4double energy)
 
virtual G4double GetUpperLevelEnergy (G4int Z, G4int A)
 
G4double GetMaxLevelEnergy (G4int Z, G4int A)
 
G4double GetNearestLevelEnergy (G4int Z, G4int A, G4double energy)
 
void SetPhotonEvaporation (G4VEvaporationChannel *p)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Private Member Functions

 G4UnstableFragmentBreakUp (const G4UnstableFragmentBreakUp &right)
 
const G4UnstableFragmentBreakUpoperator= (const G4UnstableFragmentBreakUp &right)
 
G4bool operator== (const G4UnstableFragmentBreakUp &right) const
 
G4bool operator!= (const G4UnstableFragmentBreakUp &right) const
 

Private Attributes

G4int verbose
 
G4int Zfr [6]
 
G4int Afr [6]
 
G4double masses [6]
 
G4NistManagerfNistManager
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 57 of file G4UnstableFragmentBreakUp.hh.

Constructor & Destructor Documentation

◆ G4UnstableFragmentBreakUp() [1/2]

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( )

Definition at line 53 of file G4UnstableFragmentBreakUp.cc.

54  :verbose(0)
55 {
57  const G4int z[6] = {0, 1, 1, 1, 2, 2};
58  const G4int a[6] = {1, 1, 2, 3, 3, 4};
59  for(G4int i=0; i<6; ++i) {
60  Zfr[i] = z[i];
61  Afr[i] = a[i];
63  }
64 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
Here is the call graph for this function:

◆ ~G4UnstableFragmentBreakUp()

G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp ( )
virtual

Definition at line 66 of file G4UnstableFragmentBreakUp.cc.

67 {}

◆ G4UnstableFragmentBreakUp() [2/2]

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( const G4UnstableFragmentBreakUp right)
private

Member Function Documentation

◆ BreakUp()

G4FragmentVector * G4UnstableFragmentBreakUp::BreakUp ( const G4Fragment fragment)
virtual

Implements G4VEvaporationChannel.

Definition at line 153 of file G4UnstableFragmentBreakUp.cc.

154 {
155  return 0;
156 }

◆ BreakUpChain()

G4bool G4UnstableFragmentBreakUp::BreakUpChain ( G4FragmentVector theResult,
G4Fragment theNucleus 
)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 82 of file G4UnstableFragmentBreakUp.cc.

84 {
85  //G4cout << "G4UnstableFragmentBreakUp::BreakUpChain" << G4endl;
86 
87  G4int Z = nucleus->GetZ_asInt();
88  G4int A = nucleus->GetA_asInt();
89  G4int Amax = A;
90  G4LorentzVector lv = nucleus->GetMomentum();
91  G4double time = nucleus->GetCreationTime();
92 
93  G4double deltaE, mass, mass1(0.0), mass2(0.0);
94  G4int i, index;
95 
96  // Starts loop over evaporated particles, loop is limited by number
97  // of nucleons
98  for(G4int ia=0; ia<Amax; ++ia) {
99 
100  mass = lv.mag();
101  deltaE = 0.0;
102  index = -1;
103  for(i=0; i<6; ++i) {
104  G4int Zres = Z - Zfr[i];
105  G4int Ares = A - Afr[i];
106  if(Zres >= 0 && Ares >= Zres && Ares > 0) {
108  G4double de = mass - m1 - masses[i];
109  if(de > deltaE) {
110  mass1 = m1;
111  mass2 = masses[i];
112  deltaE= de;
113  index = i;
114  }
115  }
116  }
117 
118  // no decay channels
119  if(index < 0) { break; }
120 
121  // compute energy of light fragment
122  G4double e2 = 0.5*((mass - mass1)*(mass + mass1) + mass2*mass2)/mass;
123  if(e2 < mass2) { break; }
124 
125  // sample decay
126  G4ThreeVector bst = lv.boostVector();
127 
128  G4double cosTheta = 1. - 2. * G4UniformRand();
129  G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta);
130  G4double phi = twopi * G4UniformRand();
131  G4double mom = std::sqrt((e2 - mass2)*(e2 + mass2));
132  G4LorentzVector mom2(mom * sinTheta * std::cos(phi),
133  mom * sinTheta * std::sin(phi),
134  mom * cosTheta,
135  e2);
136  mom2.boost(bst);
137  G4Fragment* fr = new G4Fragment(Afr[index], Zfr[index], mom2);
138  fr->SetCreationTime(time);
139  theResult->push_back(fr);
140 
141  // residual
142  lv -= mom2;
143  Z -= Zfr[index];
144  A -= Afr[index];
145  }
146 
147  nucleus->SetZandA_asInt(Z, A);
148  nucleus->SetMomentum(lv);
149  theResult->push_back(nucleus);
150  return false;
151 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
Int_t index
static const G4double e2
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:97
double A(double temperature)
Float_t Z
static const double twopi
Definition: G4SIunits.hh:75
void SetCreationTime(G4double time)
Definition: G4Fragment.hh:425
Hep3Vector boostVector() const
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ BreakUpFragment()

G4FragmentVector * G4UnstableFragmentBreakUp::BreakUpFragment ( G4Fragment fragment)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 74 of file G4UnstableFragmentBreakUp.cc.

75 {
76  //G4cout << "G4UnstableFragmentBreakUp::BreakUpFragment" << G4endl;
77  G4FragmentVector * theResult = new G4FragmentVector();
78  BreakUpChain(theResult, nucleus);
79  return theResult;
80 }
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)
Here is the call graph for this function:

◆ EmittedFragment()

G4Fragment * G4UnstableFragmentBreakUp::EmittedFragment ( G4Fragment fragment)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 69 of file G4UnstableFragmentBreakUp.cc.

70 {
71  return 0;
72 }

◆ GetEmissionProbability()

G4double G4UnstableFragmentBreakUp::GetEmissionProbability ( G4Fragment fragment)
virtual

Implements G4VEvaporationChannel.

Definition at line 158 of file G4UnstableFragmentBreakUp.cc.

159 {
160  return 0.0;
161 }

◆ operator!=()

G4bool G4UnstableFragmentBreakUp::operator!= ( const G4UnstableFragmentBreakUp right) const
private

◆ operator=()

const G4UnstableFragmentBreakUp& G4UnstableFragmentBreakUp::operator= ( const G4UnstableFragmentBreakUp right)
private

◆ operator==()

G4bool G4UnstableFragmentBreakUp::operator== ( const G4UnstableFragmentBreakUp right) const
private

◆ SetVerboseLevel()

void G4UnstableFragmentBreakUp::SetVerboseLevel ( G4int  val)
inline

Definition at line 100 of file G4UnstableFragmentBreakUp.hh.

101 {
102  verbose = val;
103 }

Member Data Documentation

◆ Afr

G4int G4UnstableFragmentBreakUp::Afr[6]
private

Definition at line 94 of file G4UnstableFragmentBreakUp.hh.

◆ fNistManager

G4NistManager* G4UnstableFragmentBreakUp::fNistManager
private

Definition at line 97 of file G4UnstableFragmentBreakUp.hh.

◆ masses

G4double G4UnstableFragmentBreakUp::masses[6]
private

Definition at line 95 of file G4UnstableFragmentBreakUp.hh.

◆ verbose

G4int G4UnstableFragmentBreakUp::verbose
private

Definition at line 91 of file G4UnstableFragmentBreakUp.hh.

◆ Zfr

G4int G4UnstableFragmentBreakUp::Zfr[6]
private

Definition at line 93 of file G4UnstableFragmentBreakUp.hh.


The documentation for this class was generated from the following files: