G4DiscreteGammaDeexcitation Class Reference

#include <G4DiscreteGammaDeexcitation.hh>

Inheritance diagram for G4DiscreteGammaDeexcitation:

G4VGammaDeexcitation

Public Member Functions

 G4DiscreteGammaDeexcitation ()
virtual ~G4DiscreteGammaDeexcitation ()
virtual G4VGammaTransitionCreateTransition ()
virtual G4bool CanDoTransition ()
void SetICM (G4bool hl)
void SetRDM (G4bool hl)
void SetHL (G4double hl)

Detailed Description

Definition at line 68 of file G4DiscreteGammaDeexcitation.hh.


Constructor & Destructor Documentation

G4DiscreteGammaDeexcitation::G4DiscreteGammaDeexcitation (  ) 

Definition at line 67 of file G4DiscreteGammaDeexcitation.cc.

00067                                                         : 
00068   _nucleusZ(0), _nucleusA(0), _max_hl(1e-6*second), _icm(false),
00069   _rdm(false), _levelManager(0)
00070 {
00071   _tolerance = CLHEP::keV;
00072 }

G4DiscreteGammaDeexcitation::~G4DiscreteGammaDeexcitation (  )  [virtual]

Definition at line 74 of file G4DiscreteGammaDeexcitation.cc.

00075 {}


Member Function Documentation

G4bool G4DiscreteGammaDeexcitation::CanDoTransition (  )  [virtual]

Implements G4VGammaDeexcitation.

Definition at line 129 of file G4DiscreteGammaDeexcitation.cc.

References G4VGammaDeexcitation::_transition, G4VGammaDeexcitation::_verbose, G4cout, G4endl, G4Fragment::GetExcitationEnergy(), G4VGammaDeexcitation::GetNucleus(), G4NuclearLevel::HalfLife(), G4NuclearLevelManager::MaxLevelEnergy(), G4NuclearLevelManager::MinLevelEnergy(), and G4NuclearLevelManager::NearestLevel().

00130 {
00131 
00132   G4bool canDo = true;
00133     
00134   if (_transition == 0) {
00135     canDo = false;
00136     
00137     if (_verbose > 0)
00138       G4cout 
00139         << "G4DiscreteGammaDeexcitation::CanDoTransition - Null transition " 
00140         << G4endl;
00141   } 
00142   if (canDo)  {
00143         //remove the   _nucleusZ>98 limit L. Desorgher Sept. 2011
00144     //if (_nucleusZ<2 || _nucleusA<3 || _nucleusZ>98)
00145          if (_nucleusZ<2 || _nucleusA<3 )
00146       {
00147         canDo = false;
00148         if (_verbose > 0) 
00149           G4cout 
00150             << "G4DiscreteGammaDeexcitation::CanDoTransition - n/p/H/>Cf"
00151             << G4endl;
00152       }
00153   }
00154 
00155   G4Fragment* nucleus = GetNucleus();
00156   G4double excitation = nucleus->GetExcitationEnergy();
00157   //G4cout << "G4DiscreteGammaDeexcitation::CanDoTransition: " << nucleus << G4endl;
00158 
00159   if (canDo) {
00160     if (excitation <= _tolerance) {
00161       canDo = false;
00162       if (_verbose > 0) {
00163         G4cout 
00164           << "G4DiscreteGammaDeexcitation::CanDoTransition -  Excitation <= 0" 
00165           << excitation << "  " << excitation - _tolerance
00166           << G4endl;
00167       }
00168     } else { 
00169       if (excitation > _levelManager->MaxLevelEnergy() + _tolerance) { canDo = false; }
00170       //if (excitation < _levelManager->MinLevelEnergy() - _tolerance) canDo = false;  
00171       // The following is a protection to avoid looping in case of elements with very low
00172       // ensdf levels
00173       //if (excitation < _levelManager->MinLevelEnergy() * 0.9) canDo = false;  
00174   
00175       if (_verbose > 0) {
00176         G4cout << "G4DiscreteGammaDeexcitation::CanDoTransition -  Excitation " 
00177                << excitation << ", Min-Max are " 
00178                << _levelManager->MinLevelEnergy() << " "
00179                << _levelManager->MaxLevelEnergy() << G4endl;
00180       }
00181     }
00182   }
00183   
00184   if (canDo) {
00185     const G4NuclearLevel* level = _levelManager->NearestLevel(excitation);  
00186     if (!level) { 
00187       canDo = false; 
00188  
00189     } else {
00190       if (level->HalfLife() > _max_hl && !_rdm ) { canDo = false; }
00191       
00192       if (_verbose > 0) {
00193         G4cout << "G4DiscreteGammaDeexcitation::CanDoTransition -  Halflife " 
00194                << level->HalfLife() << ", Calling from RDM " 
00195                << (_rdm ? " True " : " False ")  << ", Max-HL = " <<  _max_hl 
00196                << G4endl;
00197       }
00198     }
00199   }
00200   if (_verbose > 0) {
00201     G4cout <<"G4DiscreteGammaDeexcitation::CanDoTransition - CanDo: " 
00202            <<  (canDo ? " True " : " False ")  << G4endl; 
00203   }
00204   
00205   return canDo;
00206       
00207 }

G4VGammaTransition * G4DiscreteGammaDeexcitation::CreateTransition (  )  [virtual]

Implements G4VGammaDeexcitation.

Definition at line 77 of file G4DiscreteGammaDeexcitation.cc.

References G4VGammaDeexcitation::_verbose, G4NuclearLevel::Energy(), G4cout, G4endl, G4Fragment::GetA_asInt(), G4Fragment::GetExcitationEnergy(), G4NuclearLevelStore::GetInstance(), G4NuclearLevelStore::GetManager(), G4VGammaDeexcitation::GetNucleus(), G4Fragment::GetZ_asInt(), G4NuclearLevelManager::IsValid(), G4NuclearLevelManager::NearestLevel(), and G4DiscreteGammaTransition::SetICM().

00078 {
00079   G4Fragment* nucleus = GetNucleus();
00080   G4int A = nucleus->GetA_asInt();
00081   G4int Z = nucleus->GetZ_asInt();
00082   //  _verbose =2;
00083   //  G4cout << "G4DiscreteGammaDeexcitation::CreateTransition: " << nucleus << G4endl;
00084   if (_nucleusA != A || _nucleusZ != Z) 
00085     {
00086       _nucleusA = A;
00087       _nucleusZ = Z;
00088       _levelManager = G4NuclearLevelStore::GetInstance()->GetManager(Z,A);
00089     }
00090 
00091   if (_levelManager->IsValid()) 
00092     { 
00093       if (_verbose > 1)
00094         {
00095           G4cout 
00096             << "G4DiscreteGammaDeexcitation::CreateTransition - (A,Z) is valid " 
00097             << G4endl;
00098         }
00099         
00100       G4double excitation = nucleus->GetExcitationEnergy();
00101       const G4NuclearLevel* level =_levelManager->NearestLevel(excitation);
00102         
00103       if (level != 0)  
00104         { 
00105           if (_verbose > 0) {
00106             G4cout 
00107               << "G4DiscreteGammaDeexcitation::CreateTransition - Created from level energy " 
00108               << level->Energy() << ", excitation is " 
00109               << excitation << G4endl;
00110           }
00111           G4DiscreteGammaTransition* dtransit = new G4DiscreteGammaTransition(*level,Z,A);
00112           dtransit->SetICM(_icm);  
00113           return dtransit;
00114         }
00115       else 
00116         { 
00117           if (_verbose > 0) {
00118             G4cout 
00119               << "G4DiscreteGammaDeexcitation::CreateTransition - No transition created from "
00120               << excitation << " within tolerance " << _tolerance << G4endl;
00121           }
00122           return 0; 
00123         }
00124     }
00125   return 0;
00126 }

void G4DiscreteGammaDeexcitation::SetHL ( G4double  hl  )  [inline]

Definition at line 89 of file G4DiscreteGammaDeexcitation.hh.

00089 { _max_hl = hl; };

void G4DiscreteGammaDeexcitation::SetICM ( G4bool  hl  )  [inline]

Definition at line 85 of file G4DiscreteGammaDeexcitation.hh.

Referenced by G4PhotonEvaporation::G4PhotonEvaporation().

00085 { _icm = hl; };

void G4DiscreteGammaDeexcitation::SetRDM ( G4bool  hl  )  [inline]

Definition at line 87 of file G4DiscreteGammaDeexcitation.hh.

00087 { _rdm = hl; };


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