Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4InuclEvaporation Class Reference

#include <G4InuclEvaporation.hh>

+ Inheritance 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 G4FragmentVectorBreakItUp (const G4Fragment &theNucleus)=0
 
virtual void Initialise ()
 
virtual void SetPhotonEvaporation (G4VEvaporationChannel *ptr)
 
G4VEvaporationChannelGetPhotonEvaporation ()
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporation
G4VEvaporationChannelthePhotonEvaporation
 
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 44 of file G4InuclEvaporation.hh.

Constructor & Destructor Documentation

◆ G4InuclEvaporation()

G4InuclEvaporation::G4InuclEvaporation ( )

Definition at line 72 of file G4InuclEvaporation.cc.

73 : verboseLevel(0), evaporator(new G4EvaporationInuclCollider) {}

◆ ~G4InuclEvaporation()

G4InuclEvaporation::~G4InuclEvaporation ( )

Definition at line 79 of file G4InuclEvaporation.cc.

79 {
80 delete evaporator;
81}

Member Function Documentation

◆ BreakItUp()

G4FragmentVector * G4InuclEvaporation::BreakItUp ( const G4Fragment theNucleus)
virtual

Implements G4VEvaporation.

Definition at line 100 of file G4InuclEvaporation.cc.

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

◆ setVerboseLevel()

void G4InuclEvaporation::setVerboseLevel ( const G4int  verbose)

Definition at line 96 of file G4InuclEvaporation.cc.

96 {
97 verboseLevel = verbose;
98}

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