Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4UnstableFragmentBreakUp Class Reference

#include <G4UnstableFragmentBreakUp.hh>

Inheritance diagram for G4UnstableFragmentBreakUp:
G4VEvaporationChannel

Public Member Functions

 G4UnstableFragmentBreakUp ()
 
virtual ~G4UnstableFragmentBreakUp ()
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *fragment)
 
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="Anonymous", G4EvaporationChannelType timeType=fDelayedEmission)
 
virtual ~G4VEvaporationChannel ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
G4String GetName () const
 
void SetName (const G4String &aName)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4EvaporationChannelType sampleDecayTime
 
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 57 of file G4UnstableFragmentBreakUp.hh.

Constructor & Destructor Documentation

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( )

Definition at line 53 of file G4UnstableFragmentBreakUp.cc.

References test::a, G4NucleiProperties::GetNuclearMass(), G4NistManager::Instance(), and z.

54  :verbose(0)
55 {
56  fNistManager = G4NistManager::Instance();
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];
62  masses[i] = G4NucleiProperties::GetNuclearMass(a[i], z[i]);
63  }
64 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double z
Definition: TRTMaterials.hh:39
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp ( )
virtual

Definition at line 66 of file G4UnstableFragmentBreakUp.cc.

67 {}

Member Function Documentation

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

Implements G4VEvaporationChannel.

Definition at line 148 of file G4UnstableFragmentBreakUp.cc.

149 {
150  return 0;
151 }
G4FragmentVector * G4UnstableFragmentBreakUp::BreakUpFragment ( G4Fragment fragment)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 74 of file G4UnstableFragmentBreakUp.cc.

References CLHEP::HepLorentzVector::boost(), CLHEP::HepLorentzVector::boostVector(), G4UniformRand, G4Fragment::GetA_asInt(), G4Fragment::GetCreationTime(), G4Fragment::GetMomentum(), G4NucleiProperties::GetNuclearMass(), G4Fragment::GetZ_asInt(), CLHEP::HepLorentzVector::mag(), G4Fragment::SetCreationTime(), G4Fragment::SetMomentum(), G4Fragment::SetZandA_asInt(), and python.hepunit::twopi.

Referenced by G4Evaporation::BreakItUp().

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

Reimplemented from G4VEvaporationChannel.

Definition at line 69 of file G4UnstableFragmentBreakUp.cc.

70 {
71  return 0;
72 }
G4double G4UnstableFragmentBreakUp::GetEmissionProbability ( G4Fragment fragment)
virtual

Implements G4VEvaporationChannel.

Definition at line 153 of file G4UnstableFragmentBreakUp.cc.

154 {
155  return 0.0;
156 }
void G4UnstableFragmentBreakUp::SetVerboseLevel ( G4int  val)
inline

Definition at line 95 of file G4UnstableFragmentBreakUp.hh.

96 {
97  verbose = val;
98 }

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