Geant4  10.02.p03
G4ITDecay Class Reference

#include <G4ITDecay.hh>

Inheritance diagram for G4ITDecay:
Collaboration diagram for G4ITDecay:

Public Member Functions

 G4ITDecay (const G4ParticleDefinition *theParentNucleus, const G4double &theBR, const G4double &Qvalue, const G4double &excitation)
 
virtual ~G4ITDecay ()
 
virtual G4DecayProductsDecayIt (G4double)
 
virtual void DumpNuclearInfo ()
 
void SetARM (G4bool onoff)
 
- Public Member Functions inherited from G4NuclearDecay
 G4NuclearDecay (const G4String &channelName, const G4RadioactiveDecayMode &mode, const G4double &excitation)
 
virtual ~G4NuclearDecay ()
 
G4RadioactiveDecayMode GetDecayMode ()
 
G4double GetDaughterExcitation ()
 
G4ParticleDefinitionGetDaughterNucleus ()
 
void SetHLThreshold (G4double HLT)
 
G4double GetHLThreshold ()
 
- Public Member Functions inherited from G4VDecayChannel
 G4VDecayChannel (const G4String &aName, G4int Verbose=1)
 
 G4VDecayChannel (const G4String &aName, const G4String &theParentName, G4double theBR, G4int theNumberOfDaughters, const G4String &theDaughterName1, const G4String &theDaughterName2="", const G4String &theDaughterName3="", const G4String &theDaughterName4="")
 
virtual ~G4VDecayChannel ()
 
G4int operator== (const G4VDecayChannel &right) const
 
G4int operator!= (const G4VDecayChannel &right) const
 
G4int operator< (const G4VDecayChannel &right) const
 
const G4StringGetKinematicsName () const
 
G4double GetBR () const
 
G4int GetNumberOfDaughters () const
 
G4ParticleDefinitionGetParent ()
 
G4ParticleDefinitionGetDaughter (G4int anIndex)
 
G4int GetAngularMomentum ()
 
const G4StringGetParentName () const
 
const G4StringGetDaughterName (G4int anIndex) const
 
G4double GetParentMass () const
 
G4double GetDaughterMass (G4int anIndex) const
 
void SetParent (const G4ParticleDefinition *particle_type)
 
void SetParent (const G4String &particle_name)
 
void SetBR (G4double value)
 
void SetNumberOfDaughters (G4int value)
 
void SetDaughter (G4int anIndex, const G4ParticleDefinition *particle_type)
 
void SetDaughter (G4int anIndex, const G4String &particle_name)
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
void DumpInfo ()
 
G4double GetRangeMass () const
 
void SetRangeMass (G4double val)
 
virtual G4bool IsOKWithParentMass (G4double parentMass)
 
void SetPolarization (const G4ThreeVector &)
 
const G4ThreeVectorGetPolarization () const
 

Private Attributes

const G4double transitionQ
 
G4int parentZ
 
G4int parentA
 
G4bool applyARM
 

Additional Inherited Members

- Protected Member Functions inherited from G4VDecayChannel
void ClearDaughtersName ()
 
void CheckAndFillDaughters ()
 
void CheckAndFillParent ()
 
 G4VDecayChannel ()
 
 G4VDecayChannel (const G4VDecayChannel &)
 
G4VDecayChanneloperator= (const G4VDecayChannel &)
 
G4double DynamicalMass (G4double massPDG, G4double width, G4double maxDev=+1.) const
 
- Protected Attributes inherited from G4NuclearDecay
const G4RadioactiveDecayMode theMode
 
- Protected Attributes inherited from G4VDecayChannel
G4String kinematics_name
 
G4double rbranch
 
G4int numberOfDaughters
 
G4Stringparent_name
 
G4String ** daughters_name
 
G4double rangeMass
 
G4ThreeVector parent_polarization
 
G4ParticleTableparticletable
 
G4int verboseLevel
 
G4ParticleDefinitionG4MT_parent
 
G4ParticleDefinition ** G4MT_daughters
 
G4double G4MT_parent_mass
 
G4doubleG4MT_daughters_mass
 
G4doubleG4MT_daughters_width
 
G4Mutex daughtersMutex
 
G4Mutex parentMutex
 
- Static Protected Attributes inherited from G4VDecayChannel
static const G4String noName = " "
 

Detailed Description

Definition at line 46 of file G4ITDecay.hh.

Constructor & Destructor Documentation

◆ G4ITDecay()

G4ITDecay::G4ITDecay ( const G4ParticleDefinition theParentNucleus,
const G4double theBR,
const G4double Qvalue,
const G4double excitation 
)

Definition at line 50 of file G4ITDecay.cc.

53  : G4NuclearDecay("IT decay", IT, excitationE), transitionQ(Qvalue),
54  applyARM(true)
55 {
56  SetParent(theParentNucleus); // Store name of parent nucleus, delete G4MT_parent
57  SetBR(branch);
58 
59  parentZ = theParentNucleus->GetAtomicNumber();
60  parentA = theParentNucleus->GetAtomicMass();
61 
63  G4IonTable* theIonTable =
65  SetDaughter(0, theIonTable->GetIon(parentZ, parentA, excitationE) );
66 }
void SetBR(G4double value)
G4int parentA
Definition: G4ITDecay.hh:64
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
const G4double transitionQ
Definition: G4ITDecay.hh:62
G4IonTable * GetIonTable() const
void SetNumberOfDaughters(G4int value)
G4bool applyARM
Definition: G4ITDecay.hh:65
G4int GetAtomicNumber() const
static G4ParticleTable * GetParticleTable()
G4NuclearDecay(const G4String &channelName, const G4RadioactiveDecayMode &mode, const G4double &excitation)
void SetParent(const G4ParticleDefinition *particle_type)
void SetDaughter(G4int anIndex, const G4ParticleDefinition *particle_type)
G4int GetAtomicMass() const
G4int parentZ
Definition: G4ITDecay.hh:63
Here is the call graph for this function:

◆ ~G4ITDecay()

G4ITDecay::~G4ITDecay ( )
virtual

Definition at line 69 of file G4ITDecay.cc.

70 {}

Member Function Documentation

◆ DecayIt()

G4DecayProducts * G4ITDecay::DecayIt ( G4double  )
virtual

Implements G4VDecayChannel.

Definition at line 73 of file G4ITDecay.cc.

74 {
75  // Fill G4MT_parent with theParentNucleus (stored by SetParent in ctor)
77 
78  // Set up final state
79  // parentParticle is set at rest here because boost with correct momentum
80  // is done later
82  G4ThreeVector(0.,0.,0.) );
83  G4DynamicParticle parentParticle(G4MT_parent, atRest);
84  G4DecayProducts* products = new G4DecayProducts(parentParticle);
85 
86  // Let G4PhotonEvaporation do the decay
88  photoEvap->RDMForced(true);
89  photoEvap->SetICM(true);
90 
91  G4Fragment* nucleus = new G4Fragment(parentA, parentZ, atRest);
92  G4Fragment* eOrGamma = photoEvap->EmittedFragment(nucleus);
93 
94  // Daughter nuclide is returned in nucleus pointer
95  G4double finalDaughterExcitation = nucleus->GetExcitationEnergy();
96  if (finalDaughterExcitation < 1*keV) finalDaughterExcitation = 0.0;
97  G4LorentzVector daughterMomentum = nucleus->GetMomentum();
98  G4IonTable* theIonTable =
100  G4ParticleDefinition* daughterIon =
101  theIonTable->GetIon(parentZ, parentA, finalDaughterExcitation);
102  G4DynamicParticle* dynDaughter = new G4DynamicParticle(daughterIon,
103  daughterMomentum);
104  delete nucleus;
105 
106  if (eOrGamma) {
107  G4DynamicParticle* eOrGammaDyn =
109  eOrGamma->GetMomentum() );
110  eOrGammaDyn->SetProperTime(eOrGamma->GetCreationTime() );
111  products->PushProducts(eOrGammaDyn);
112  delete eOrGamma;
113 
114  // Now do atomic relaxation
115  if (applyARM) {
116  G4int shellIndex = photoEvap->GetVacantShellNumber();
117  if (shellIndex > -1) {
118  G4VAtomDeexcitation* atomDeex =
120  if (atomDeex->IsFluoActive() && parentZ > 5 && parentZ < 100) {
122  if (shellIndex >= nShells) shellIndex = nShells;
124  const G4AtomicShell* shell = atomDeex->GetAtomicShell(parentZ, as);
125  std::vector<G4DynamicParticle*> armProducts;
126 
127  // VI, SI
128  // Allows fixing of Bugzilla 1727
129  //const G4double deexLimit = 0.1*keV;
130  G4double deexLimit = 0.1*keV;
131  if (G4EmParameters::Instance()->DeexcitationIgnoreCut()) deexLimit =0.;
132  //
133 
134  atomDeex->GenerateParticles(&armProducts, shell, parentZ, deexLimit,
135  deexLimit);
136  G4double productEnergy = 0.;
137  for (G4int i = 0; i < G4int(armProducts.size()); i++)
138  productEnergy += armProducts[i]->GetKineticEnergy();
139 
140  G4double deficit = shell->BindingEnergy() - productEnergy;
141  if (deficit > 0.0) {
142  // Add a dummy electron to make up extra energy
143  G4double cosTh = 1.-2.*G4UniformRand();
144  G4double sinTh = std::sqrt(1.- cosTh*cosTh);
145  G4double phi = twopi*G4UniformRand();
146 
147  G4ThreeVector electronDirection(sinTh*std::sin(phi),
148  sinTh*std::cos(phi), cosTh);
149  G4DynamicParticle* extra =
150  new G4DynamicParticle(G4Electron::Electron(), electronDirection,
151  deficit);
152  armProducts.push_back(extra);
153  }
154 
155  G4int nArm = armProducts.size();
156  if (nArm > 0) {
157  G4ThreeVector bst = dynDaughter->Get4Momentum().boostVector();
158  for (G4int i = 0; i < nArm; ++i) {
159  G4DynamicParticle* dp = armProducts[i];
160  G4LorentzVector lv = dp->Get4Momentum().boost(bst);
161  dp->Set4Momentum(lv);
162  products->PushProducts(dp);
163  }
164  }
165  }
166  }
167  } // if ARM on
168  } // eOrGamma
169 
170  products->PushProducts(dynDaughter);
171 
172  // Energy conservation check
173  /*
174  G4int newSize = products->entries();
175  G4DynamicParticle* temp = 0;
176  G4double KEsum = 0.0;
177  for (G4int i = 0; i < newSize; i++) {
178  temp = products->operator[](i);
179  KEsum += temp->GetKineticEnergy();
180  }
181  G4double eCons = G4MT_parent->GetPDGMass() - dynDaughter->GetMass() - KEsum;
182  G4cout << " IT check: Ediff (keV) = " << eCons/keV << G4endl;
183  */
184  delete photoEvap;
185 
186  return products;
187 }
virtual void SetICM(G4bool)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:273
static G4LossTableManager * Instance()
G4int parentA
Definition: G4ITDecay.hh:64
CLHEP::Hep3Vector G4ThreeVector
virtual void RDMForced(G4bool)
G4int PushProducts(G4DynamicParticle *aParticle)
G4ParticleDefinition * G4MT_parent
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
int G4int
Definition: G4Types.hh:78
const G4ParticleDefinition * GetParticleDefinition() const
Definition: G4Fragment.hh:410
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
#define G4UniformRand()
Definition: Randomize.hh:97
G4IonTable * GetIonTable() const
HepLorentzVector & boost(double, double, double)
G4int GetVacantShellNumber() const
static const double twopi
Definition: G4SIunits.hh:75
G4bool applyARM
Definition: G4ITDecay.hh:65
void Set4Momentum(const G4LorentzVector &momentum)
static G4ParticleTable * GetParticleTable()
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:289
void GenerateParticles(std::vector< G4DynamicParticle *> *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
Hep3Vector boostVector() const
static G4EmParameters * Instance()
G4LorentzVector Get4Momentum() const
static G4Electron * Electron()
Definition: G4Electron.cc:94
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
G4VAtomDeexcitation * AtomDeexcitation()
static const double keV
Definition: G4SIunits.hh:213
double G4double
Definition: G4Types.hh:76
G4double BindingEnergy() const
void SetProperTime(G4double)
G4double GetCreationTime() const
Definition: G4Fragment.hh:420
G4AtomicShellEnumerator
G4int parentZ
Definition: G4ITDecay.hh:63
static G4int GetNumberOfShells(G4int Z)
Here is the call graph for this function:

◆ DumpNuclearInfo()

void G4ITDecay::DumpNuclearInfo ( )
virtual

Implements G4NuclearDecay.

Definition at line 190 of file G4ITDecay.cc.

191 {
192  G4cout << " G4ITDecay for parent nucleus " << GetParentName() << G4endl;
193  G4cout << " decays to " << GetDaughterName(0)
194  << " + gammas (or electrons), with branching ratio " << GetBR()
195  << "% and Q value " << transitionQ << G4endl;
196 }
const G4String & GetParentName() const
const G4double transitionQ
Definition: G4ITDecay.hh:62
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4String & GetDaughterName(G4int anIndex) const
G4double GetBR() const
Here is the call graph for this function:

◆ SetARM()

void G4ITDecay::SetARM ( G4bool  onoff)
inline

Definition at line 59 of file G4ITDecay.hh.

59 {applyARM = onoff;}
G4bool applyARM
Definition: G4ITDecay.hh:65
Here is the caller graph for this function:

Member Data Documentation

◆ applyARM

G4bool G4ITDecay::applyARM
private

Definition at line 65 of file G4ITDecay.hh.

◆ parentA

G4int G4ITDecay::parentA
private

Definition at line 64 of file G4ITDecay.hh.

◆ parentZ

G4int G4ITDecay::parentZ
private

Definition at line 63 of file G4ITDecay.hh.

◆ transitionQ

const G4double G4ITDecay::transitionQ
private

Definition at line 62 of file G4ITDecay.hh.


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