G4InuclEvaporation Class Reference

#include <G4InuclEvaporation.hh>

Inheritance diagram for G4InuclEvaporation:

G4VEvaporation

Public Member Functions

 G4InuclEvaporation ()
 ~G4InuclEvaporation ()
G4FragmentVectorBreakItUp (const G4Fragment &theNucleus)
void setVerboseLevel (const G4int verbose)

Detailed Description

Definition at line 44 of file G4InuclEvaporation.hh.


Constructor & Destructor Documentation

G4InuclEvaporation::G4InuclEvaporation (  ) 

Definition at line 72 of file G4InuclEvaporation.cc.

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

G4InuclEvaporation::~G4InuclEvaporation (  ) 

Definition at line 79 of file G4InuclEvaporation.cc.

00079                                         {
00080   delete evaporator;
00081 }


Member Function Documentation

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  ) 

Definition at line 96 of file G4InuclEvaporation.cc.

00096                                                               {
00097   verboseLevel = verbose;
00098 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:17 2013 for Geant4 by  doxygen 1.4.7