G4VGammaDeexcitation Class Reference

#include <G4VGammaDeexcitation.hh>

Inheritance diagram for G4VGammaDeexcitation:

G4ContinuumGammaDeexcitation G4DiscreteGammaDeexcitation

Public Member Functions

 G4VGammaDeexcitation ()
virtual ~G4VGammaDeexcitation ()
virtual G4VGammaTransitionCreateTransition ()=0
virtual G4bool CanDoTransition ()=0
G4FragmentVectorDoTransition ()
G4FragmentVectorDoChain ()
G4FragmentGenerateGamma ()
G4FragmentGetNucleus ()
void SetNucleus (G4Fragment *nucleus)
void SetVerboseLevel (G4int verbose)
void Initialize ()
void SetEO (G4ElectronOccupancy eo)
void SetVaccantSN (G4int val)
G4ElectronOccupancy GetEO ()
G4int GetVacantSN ()
void SetTimeLimit (G4double value)

Protected Member Functions

void Update ()

Protected Attributes

G4VGammaTransition_transition
G4int _verbose

Detailed Description

Definition at line 72 of file G4VGammaDeexcitation.hh.


Constructor & Destructor Documentation

G4VGammaDeexcitation::G4VGammaDeexcitation (  ) 

Definition at line 76 of file G4VGammaDeexcitation.cc.

References DBL_MAX.

00076                                           : _transition(0), _verbose(0),
00077                                               _electronO (0), _vSN(-1)
00078 { 
00079   _nucleus = 0;
00080   fTimeLimit = DBL_MAX;
00081 }

G4VGammaDeexcitation::~G4VGammaDeexcitation (  )  [virtual]

Definition at line 83 of file G4VGammaDeexcitation.cc.

References _transition.

00084 { 
00085   if (_transition != 0) { delete _transition; }
00086 }


Member Function Documentation

virtual G4bool G4VGammaDeexcitation::CanDoTransition (  )  [pure virtual]

Implemented in G4ContinuumGammaDeexcitation, and G4DiscreteGammaDeexcitation.

Referenced by DoChain(), DoTransition(), and G4PhotonEvaporation::EmittedFragment().

virtual G4VGammaTransition* G4VGammaDeexcitation::CreateTransition (  )  [pure virtual]

Implemented in G4ContinuumGammaDeexcitation, and G4DiscreteGammaDeexcitation.

Referenced by Initialize(), and Update().

G4FragmentVector * G4VGammaDeexcitation::DoChain (  ) 

Definition at line 106 of file G4VGammaDeexcitation.cc.

References _transition, _verbose, CanDoTransition(), G4cout, G4endl, GenerateGamma(), G4Fragment::GetExcitationEnergy(), Initialize(), G4VGammaTransition::SetEnergyFrom(), and Update().

Referenced by G4PhotonEvaporation::BreakItUp(), and G4PhotonEvaporation::BreakUpFragment().

00107 {
00108   if (_verbose > 1) { G4cout << "G4VGammaDeexcitation::DoChain" << G4endl; }
00109   const G4double tolerance = CLHEP::keV;
00110 
00111   Initialize();
00112   G4FragmentVector* products = new G4FragmentVector();
00113   
00114   while (CanDoTransition())
00115     {      
00116       _transition->SetEnergyFrom(_nucleus->GetExcitationEnergy());
00117       G4Fragment* gamma = GenerateGamma();
00118       if (gamma != 0) 
00119         {
00120           products->push_back(gamma);
00121           //G4cout << "Eex(keV)= " << _nucleus->GetExcitationEnergy()/keV << G4endl;
00122           if(_nucleus->GetExcitationEnergy() <= tolerance) { break; }
00123           Update();
00124         }
00125     } 
00126   
00127   if (_verbose > 1) {
00128     G4cout << "G4VGammaDeexcitation::DoChain - Transition deleted, end of chain " << G4endl;
00129   }
00130   
00131   return products;
00132 }

G4FragmentVector * G4VGammaDeexcitation::DoTransition (  ) 

Definition at line 88 of file G4VGammaDeexcitation.cc.

References _verbose, CanDoTransition(), G4cout, G4endl, GenerateGamma(), and Initialize().

Referenced by G4PhotonEvaporation::BreakUp().

00089 {
00090   Initialize();
00091   G4FragmentVector* products = new G4FragmentVector();
00092  
00093   if (CanDoTransition())
00094     {
00095       G4Fragment* gamma = GenerateGamma();
00096       if (gamma != 0) { products->push_back(gamma); }
00097     }
00098  
00099   if (_verbose > 1) {
00100     G4cout << "G4VGammaDeexcitation::DoTransition - Transition deleted " << G4endl;
00101   }
00102  
00103   return products;
00104 }

G4Fragment * G4VGammaDeexcitation::GenerateGamma (  ) 

Definition at line 134 of file G4VGammaDeexcitation.cc.

References _transition, _verbose, G4Electron::Electron(), G4cout, G4endl, G4UniformRand, G4Gamma::Gamma(), G4DiscreteGammaTransition::GetBondEnergy(), G4Fragment::GetCreationTime(), G4Fragment::GetExcitationEnergy(), G4VGammaTransition::GetGammaCreationTime(), G4VGammaTransition::GetGammaEnergy(), G4Fragment::GetGroundStateMass(), G4DiscreteGammaTransition::GetICM(), G4Fragment::GetMomentum(), G4DiscreteGammaTransition::GetOrbitNumber(), G4ParticleDefinition::GetPDGMass(), G4DiscreteGammaTransition::IsAGamma(), G4ElectronOccupancy::RemoveElectron(), G4VGammaTransition::SelectGamma(), G4Fragment::SetCreationTime(), and G4Fragment::SetMomentum().

Referenced by DoChain(), DoTransition(), and G4PhotonEvaporation::EmittedFragment().

00135 {
00136   // 23/04/10 V.Ivanchenko rewrite complitely
00137   G4double eGamma = 0.;
00138   
00139   if (_transition) {
00140     _transition->SelectGamma();  // it can be conversion electron too
00141     eGamma = _transition->GetGammaEnergy(); 
00142     //G4cout << "G4VGammaDeexcitation::GenerateGamma - Egam(MeV)= " 
00143     //     << eGamma << G4endl; 
00144     if(eGamma <= 0.0) { return 0; }
00145   } else { return 0; }
00146 
00147   G4double excitation = _nucleus->GetExcitationEnergy() - eGamma;
00148   if(excitation < 0.0) { excitation = 0.0; } 
00149   if (_verbose > 1) 
00150     {
00151       G4cout << "G4VGammaDeexcitation::GenerateGamma - Edeexc(MeV)= " << eGamma 
00152              << " ** left Eexc(MeV)= " << excitation
00153              << G4endl;
00154     }
00155 
00156   G4double gammaTime = _transition->GetGammaCreationTime();
00157   
00158   // Do complete Lorentz computation 
00159   G4LorentzVector lv = _nucleus->GetMomentum();
00160   G4double Mass = _nucleus->GetGroundStateMass() + excitation;
00161 
00162   // select secondary
00163   G4ParticleDefinition* gamma = G4Gamma::Gamma();
00164 
00165   G4DiscreteGammaTransition* dtransition = 
00166     dynamic_cast <G4DiscreteGammaTransition*> (_transition);
00167 
00168   G4bool eTransition = false;
00169   if (dtransition && !( dtransition->IsAGamma()) ) {
00170     eTransition = true; 
00171     gamma = G4Electron::Electron(); 
00172     _vSN = dtransition->GetOrbitNumber();   
00173     _electronO.RemoveElectron(_vSN);
00174     lv += G4LorentzVector(0.0,0.0,0.0,CLHEP::electron_mass_c2 - dtransition->GetBondEnergy());
00175   }
00176 
00177   G4double cosTheta = 1. - 2. * G4UniformRand(); 
00178   G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta);
00179   G4double phi = twopi * G4UniformRand();
00180 
00181   G4double eMass = gamma->GetPDGMass();
00182   G4LorentzVector Gamma4P;
00183 
00184   //G4cout << "Egamma= " << eGamma << " Mass= " << eMass << " t= " << gammaTime
00185   //     << " tlim= " << fTimeLimit << G4endl;
00186 
00187   if(gammaTime > fTimeLimit) {
00188     // shortcut for long lived levels
00189     // not correct position of stopping ion gamma emission
00190     // 4-momentum balance is breaked
00191     G4double e = eGamma + eMass;
00192     G4double mom = std::sqrt(eGamma*(eGamma + 2*eMass));
00193     Gamma4P.set(mom * sinTheta * std::cos(phi),
00194                 mom * sinTheta * std::sin(phi),
00195                 mom * cosTheta, e); 
00196     lv -= Gamma4P;
00197     e = lv.e();
00198     if(e < Mass) { e = Mass; }
00199     mom = std::sqrt((e - Mass)*(e + Mass));
00200     G4ThreeVector v = lv.vect().unit();
00201     lv.set(mom*v.x(), mom*v.y(), mom*v.z(), e); 
00202 
00203   } else {
00204     // 2-body decay in rest frame
00205     G4double Ecm       = lv.mag();
00206     G4ThreeVector bst  = lv.boostVector();
00207 
00208     G4double GammaEnergy = 0.5*((Ecm - Mass)*(Ecm + Mass) + eMass*eMass)/Ecm;
00209     if(GammaEnergy <= eMass) { return 0; }
00210 
00211     G4double mom = std::sqrt((GammaEnergy - eMass)*(GammaEnergy + eMass));
00212     Gamma4P.set(mom * sinTheta * std::cos(phi),
00213                 mom * sinTheta * std::sin(phi),
00214                 mom * cosTheta,
00215                 GammaEnergy);
00216 
00217     Gamma4P.boost(bst);  
00218     lv -= Gamma4P;
00219   }
00220 
00221   // modified primary fragment 
00222   gammaTime += _nucleus->GetCreationTime();
00223 
00224   _nucleus->SetMomentum(lv);
00225   _nucleus->SetCreationTime(gammaTime);
00226 
00227   // e- is not produced
00228   if(eTransition && !dtransition->GetICM()) { return 0; }
00229 
00230   // gamma or e- are produced
00231   G4Fragment * thePhoton = new G4Fragment(Gamma4P,gamma);
00232   thePhoton->SetCreationTime(gammaTime);
00233 
00234   //G4cout << "G4VGammaDeexcitation::GenerateGamma : " << thePhoton << G4endl;
00235   //G4cout << "       Left nucleus: " << _nucleus << G4endl;
00236   return thePhoton;
00237 }

G4ElectronOccupancy G4VGammaDeexcitation::GetEO (  )  [inline]

Definition at line 102 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::BreakItUp(), G4PhotonEvaporation::BreakUp(), and G4PhotonEvaporation::BreakUpFragment().

00102 { return _electronO; };    

G4Fragment * G4VGammaDeexcitation::GetNucleus (  )  [inline]

Definition at line 128 of file G4VGammaDeexcitation.hh.

Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaDeexcitation::CanDoTransition(), G4DiscreteGammaDeexcitation::CreateTransition(), and G4ContinuumGammaDeexcitation::CreateTransition().

00129 {
00130   return _nucleus; 
00131 }

G4int G4VGammaDeexcitation::GetVacantSN (  )  [inline]

Definition at line 103 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::BreakItUp(), G4PhotonEvaporation::BreakUp(), and G4PhotonEvaporation::BreakUpFragment().

00103 {return _vSN;};

void G4VGammaDeexcitation::Initialize (  )  [inline]

Definition at line 143 of file G4VGammaDeexcitation.hh.

References _transition, CreateTransition(), G4Fragment::GetExcitationEnergy(), and G4VGammaTransition::SetEnergyFrom().

Referenced by DoChain(), DoTransition(), and G4PhotonEvaporation::EmittedFragment().

00144 {
00145   if (_transition != 0) { delete _transition; }
00146   _transition = CreateTransition();
00147   if (_transition != 0) {
00148     _transition->SetEnergyFrom(_nucleus->GetExcitationEnergy());
00149   }
00150 }

void G4VGammaDeexcitation::SetEO ( G4ElectronOccupancy  eo  )  [inline]

Definition at line 99 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::SetEOccupancy().

00099 { _electronO = eo; };

void G4VGammaDeexcitation::SetNucleus ( G4Fragment nucleus  )  [inline]

Definition at line 133 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::BreakItUp(), G4PhotonEvaporation::BreakUp(), G4PhotonEvaporation::BreakUpFragment(), and G4PhotonEvaporation::EmittedFragment().

00134 {
00135   _nucleus = nucleus;
00136 }

void G4VGammaDeexcitation::SetTimeLimit ( G4double  value  )  [inline]

Definition at line 105 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::G4PhotonEvaporation(), and G4PhotonEvaporation::SetTimeLimit().

00105 { fTimeLimit = value; }

void G4VGammaDeexcitation::SetVaccantSN ( G4int  val  )  [inline]

Definition at line 100 of file G4VGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::BreakItUp(), G4PhotonEvaporation::BreakUp(), and G4PhotonEvaporation::BreakUpFragment().

00100 { _vSN = val;};

void G4VGammaDeexcitation::SetVerboseLevel ( G4int  verbose  )  [inline]

Definition at line 138 of file G4VGammaDeexcitation.hh.

References _verbose.

Referenced by G4PhotonEvaporation::SetVerboseLevel().

00139 {
00140   _verbose = verbose;
00141 }

void G4VGammaDeexcitation::Update (  )  [protected]

Definition at line 239 of file G4VGammaDeexcitation.cc.

References _transition, _verbose, CreateTransition(), G4cout, G4endl, G4Fragment::GetExcitationEnergy(), and G4VGammaTransition::SetEnergyFrom().

Referenced by DoChain().

00240 {
00241   if (_transition !=  0) 
00242     { 
00243       delete _transition;
00244       _transition = 0;
00245       if (_verbose > 1) {
00246         G4cout << "G4VGammaDeexcitation::Update - Transition deleted " << G4endl;
00247       }
00248     }
00249   
00250   _transition = CreateTransition();
00251   if (_transition != 0) 
00252     {
00253       _transition->SetEnergyFrom(_nucleus->GetExcitationEnergy());
00254       // if ( _vSN != -1) (dynamic_cast <G4DiscreteGammaTransition*> (_transition))->SetICM(false);
00255       // the above line is commented out for bug fix #952. It was intruduced for reason that
00256       // the k-shell electron is most likely one to be kicked out and there is no time for 
00257       // the atom to deexcite before the next IC. But this limitation is causing other problems as 
00258       // reported in #952
00259     }
00260   
00261   return;
00262 }


Field Documentation

G4VGammaTransition* G4VGammaDeexcitation::_transition [protected]

Definition at line 111 of file G4VGammaDeexcitation.hh.

Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaDeexcitation::CanDoTransition(), DoChain(), GenerateGamma(), Initialize(), Update(), and ~G4VGammaDeexcitation().

G4int G4VGammaDeexcitation::_verbose [protected]

Definition at line 112 of file G4VGammaDeexcitation.hh.

Referenced by G4DiscreteGammaDeexcitation::CanDoTransition(), G4ContinuumGammaDeexcitation::CanDoTransition(), G4DiscreteGammaDeexcitation::CreateTransition(), G4ContinuumGammaDeexcitation::CreateTransition(), DoChain(), DoTransition(), GenerateGamma(), SetVerboseLevel(), and Update().


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