#include <G4InuclEvaporation.hh>
Inheritance diagram for G4InuclEvaporation:
Public Member Functions | |
G4InuclEvaporation () | |
~G4InuclEvaporation () | |
G4FragmentVector * | BreakItUp (const G4Fragment &theNucleus) |
void | setVerboseLevel (const G4int verbose) |
Definition at line 44 of file G4InuclEvaporation.hh.
G4InuclEvaporation::G4InuclEvaporation | ( | ) |
Definition at line 72 of file G4InuclEvaporation.cc.
00073 : verboseLevel(0), evaporator(new G4EvaporationInuclCollider) {}
G4InuclEvaporation::~G4InuclEvaporation | ( | ) |
G4FragmentVector * G4InuclEvaporation::BreakItUp | ( | const G4Fragment & | theNucleus | ) | [virtual] |
Implements G4VEvaporation.
Definition at line 100 of file G4InuclEvaporation.cc.
References G4EvaporationInuclCollider::collide(), G4cout, G4endl, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4Fragment::GetMomentum(), G4NucleiProperties::GetNuclearMass(), G4CollisionOutput::getOutgoingNuclei(), G4CollisionOutput::getOutgoingParticles(), G4Fragment::GetZ_asInt(), and G4InuclNuclei::setExitationEnergy().
00100 { 00101 G4FragmentVector* theResult = new G4FragmentVector; 00102 00103 if (theNucleus.GetExcitationEnergy() <= 0.0) { // Check that Excitation Energy > 0 00104 theResult->push_back(new G4Fragment(theNucleus)); 00105 return theResult; 00106 } 00107 00108 G4int A = theNucleus.GetA_asInt(); 00109 G4int Z = theNucleus.GetZ_asInt(); 00110 G4double mTar = G4NucleiProperties::GetNuclearMass(A, Z); // Mass of the target nucleus 00111 00112 G4ThreeVector momentum = theNucleus.GetMomentum().vect(); 00113 G4double exitationE = theNucleus.GetExcitationEnergy(); 00114 00115 G4double mass = mTar; 00116 G4ThreeVector boostToLab( momentum/mass ); 00117 00118 if ( verboseLevel > 2 ) 00119 G4cout << " G4InuclEvaporation : initial kinematics : boostToLab vector = " << boostToLab << G4endl 00120 << " excitation energy : " << exitationE << G4endl; 00121 00122 if (verboseLevel > 2) { 00123 G4cout << "G4InuclEvaporation::BreakItUp >>> A: " << A << " Z: " << Z 00124 << " exitation E: " << exitationE << " mass: " << mTar/GeV << " GeV" 00125 << G4endl; 00126 }; 00127 00128 G4InuclNuclei* nucleus = new G4InuclNuclei(A, Z); 00129 nucleus->setExitationEnergy(exitationE); 00130 00131 G4CollisionOutput output; 00132 evaporator->collide(0, nucleus, output); 00133 00134 const std::vector<G4InuclNuclei>& outgoingNuclei = output.getOutgoingNuclei(); 00135 const std::vector<G4InuclElementaryParticle>& particles = output.getOutgoingParticles(); 00136 00137 G4double eTot=0.0; 00138 G4int i=1; 00139 00140 if (!particles.empty()) { 00141 G4int outgoingType; 00142 particleIterator ipart = particles.begin(); 00143 for (; ipart != particles.end(); ipart++) { 00144 outgoingType = ipart->type(); 00145 00146 if (verboseLevel > 2) { 00147 G4cout << "Evaporated particle: " << i << " of type: " 00148 << outgoingType << G4endl; 00149 i++; 00150 } 00151 00152 eTot += ipart->getEnergy(); 00153 00154 G4LorentzVector vlab = ipart->getMomentum().boost(boostToLab); 00155 00156 theResult->push_back( new G4Fragment(vlab, ipart->getDefinition()) ); 00157 } 00158 } 00159 00160 // G4cout << "# fragments " << output.getOutgoingNuclei().size() << G4endl; 00161 if (!outgoingNuclei.empty()) { 00162 nucleiIterator ifrag = outgoingNuclei.begin(); 00163 for (i=1; ifrag != outgoingNuclei.end(); ifrag++) { 00164 if (verboseLevel > 2) { 00165 G4cout << " Nuclei fragment: " << i << G4endl; i++; 00166 } 00167 00168 eTot += ifrag->getEnergy(); 00169 00170 G4LorentzVector vlab = ifrag->getMomentum().boost(boostToLab); 00171 00172 G4int fragA = ifrag->getA(); 00173 G4int fragZ = ifrag->getZ(); 00174 if (verboseLevel > 2) { 00175 G4cout << "boosted v" << vlab << G4endl; 00176 } 00177 theResult->push_back( new G4Fragment(fragA, fragZ, vlab) ); 00178 } 00179 } 00180 00181 //G4cout << ">>>> G4InuclEvaporation::BreakItUp end " << G4endl; 00182 return theResult; 00183 }
void G4InuclEvaporation::setVerboseLevel | ( | const G4int | verbose | ) |