Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4InuclEvaporation Class Reference

#include <G4InuclEvaporation.hh>

Inheritance diagram for G4InuclEvaporation:
Collaboration diagram for G4InuclEvaporation:

Public Member Functions

 G4InuclEvaporation ()
 
 ~G4InuclEvaporation ()
 
G4FragmentVectorBreakItUp (const G4Fragment &theNucleus)
 
void setVerboseLevel (const G4int verbose)
 
- Public Member Functions inherited from G4VEvaporation
 G4VEvaporation ()
 
virtual ~G4VEvaporation ()
 
virtual void BreakFragment (G4FragmentVector *, G4Fragment *theNucleus)
 
virtual void InitialiseChannels ()
 
virtual void SetPhotonEvaporation (G4VEvaporationChannel *ptr)
 
void SetFermiBreakUp (G4VFermiBreakUp *ptr)
 
G4VFermiBreakUpGetFermiBreakUp () const
 
G4VEvaporationChannelGetPhotonEvaporation ()
 
G4VEvaporationChannelGetFissionChannel ()
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 
size_t GetNumberOfChannels () const
 

Additional Inherited Members

- Protected Member Functions inherited from G4VEvaporation
void CleanChannels ()
 
- Protected Attributes inherited from G4VEvaporation
G4VEvaporationChannelthePhotonEvaporation
 
G4VFermiBreakUptheFBU
 
G4int OPTxs
 
G4bool useSICB
 
std::vector
< G4VEvaporationChannel * > * 
theChannels
 
G4VEvaporationFactorytheChannelFactory
 

Detailed Description

Definition at line 44 of file G4InuclEvaporation.hh.

Constructor & Destructor Documentation

G4InuclEvaporation::G4InuclEvaporation ( )

Definition at line 73 of file G4InuclEvaporation.cc.

74  : verboseLevel(0), evaporator(new G4EvaporationInuclCollider) {}
G4InuclEvaporation::~G4InuclEvaporation ( )

Definition at line 80 of file G4InuclEvaporation.cc.

80  {
81  delete evaporator;
82 }

Member Function Documentation

G4FragmentVector * G4InuclEvaporation::BreakItUp ( const G4Fragment theNucleus)

Definition at line 101 of file G4InuclEvaporation.cc.

101  {
102  G4FragmentVector* theResult = new G4FragmentVector;
103 
104  if (theNucleus.GetExcitationEnergy() <= 0.0) { // Check that Excitation Energy > 0
105  theResult->push_back(new G4Fragment(theNucleus));
106  return theResult;
107  }
108 
109  G4int A = theNucleus.GetA_asInt();
110  G4int Z = theNucleus.GetZ_asInt();
111  G4double mTar = G4NucleiProperties::GetNuclearMass(A, Z); // Mass of the target nucleus
112 
113  G4ThreeVector momentum = theNucleus.GetMomentum().vect();
114  G4double exitationE = theNucleus.GetExcitationEnergy();
115 
116  G4double mass = mTar;
117  G4ThreeVector boostToLab( momentum/mass );
118 
119  if ( verboseLevel > 2 )
120  G4cout << " G4InuclEvaporation : initial kinematics : boostToLab vector = " << boostToLab << G4endl
121  << " excitation energy : " << exitationE << G4endl;
122 
123  if (verboseLevel > 2) {
124  G4cout << "G4InuclEvaporation::BreakItUp >>> A: " << A << " Z: " << Z
125  << " exitation E: " << exitationE << " mass: " << mTar/GeV << " GeV"
126  << G4endl;
127  };
128 
129  G4InuclNuclei* nucleus = new G4InuclNuclei(A, Z);
130  nucleus->setExitationEnergy(exitationE);
131 
132  G4CollisionOutput output;
133  evaporator->collide(0, nucleus, output);
134 
135  const std::vector<G4InuclNuclei>& outgoingNuclei = output.getOutgoingNuclei();
136  const std::vector<G4InuclElementaryParticle>& particles = output.getOutgoingParticles();
137 
138  G4double eTot=0.0;
139  G4int i=1;
140 
141  if (!particles.empty()) {
142  G4int outgoingType;
143  particleIterator ipart = particles.begin();
144  for (; ipart != particles.end(); ipart++) {
145  outgoingType = ipart->type();
146 
147  if (verboseLevel > 2) {
148  G4cout << "Evaporated particle: " << i << " of type: "
149  << outgoingType << G4endl;
150  i++;
151  }
152 
153  eTot += ipart->getEnergy();
154 
155  G4LorentzVector vlab = ipart->getMomentum().boost(boostToLab);
156 
157  // TEMPORARY: Remove constness on PD until G4Fragment is fixed
158  theResult->push_back( new G4Fragment(vlab, ipart->getDefinition()) );
159  }
160  }
161 
162  if (!outgoingNuclei.empty()) {
163  nucleiIterator ifrag = outgoingNuclei.begin();
164  for (i=1; ifrag != outgoingNuclei.end(); ifrag++) {
165  if (verboseLevel > 2) {
166  G4cout << " Nuclei fragment: " << i << G4endl; i++;
167  }
168 
169  eTot += ifrag->getEnergy();
170 
171  G4LorentzVector vlab = ifrag->getMomentum().boost(boostToLab);
172 
173  G4int fragA = ifrag->getA();
174  G4int fragZ = ifrag->getZ();
175  if (verboseLevel > 2) {
176  G4cout << "boosted v" << vlab << G4endl;
177  }
178  theResult->push_back( new G4Fragment(fragA, fragZ, vlab) );
179  }
180  }
181 
182  return theResult;
183 }
static G4double GetNuclearMass(const G4double A, const G4double Z)
int G4int
Definition: G4Types.hh:78
void setExitationEnergy(G4double e)
Hep3Vector vect() const
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4int GetA_asInt() const
Definition: G4Fragment.hh:266
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:307
HepLorentzVector & boost(double, double, double)
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
virtual void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const
const std::vector< G4InuclElementaryParticle > & getOutgoingParticles() const
static constexpr double GeV
Definition: G4SIunits.hh:217
G4int GetZ_asInt() const
Definition: G4Fragment.hh:271
std::vector< G4InuclNuclei >::const_iterator nucleiIterator
std::vector< G4InuclElementaryParticle >::iterator particleIterator
Definition: G4BigBanger.cc:65
#define G4endl
Definition: G4ios.hh:61
double getZ() const
double G4double
Definition: G4Types.hh:76
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:283

Here is the call graph for this function:

void G4InuclEvaporation::setVerboseLevel ( const G4int  verbose)

Definition at line 97 of file G4InuclEvaporation.cc.

97  {
98  verboseLevel = verbose;
99 }

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