#include <G4GEMChannel.hh>
Inheritance diagram for G4GEMChannel:
Public Member Functions | |
G4GEMChannel (const G4int theA, const G4int theZ, const G4String &aName, G4GEMProbability *aEmissionStrategy, G4VCoulombBarrier *aCoulombBarrier) | |
virtual | ~G4GEMChannel () |
virtual G4double | GetEmissionProbability (G4Fragment *theNucleus) |
virtual G4FragmentVector * | BreakUp (const G4Fragment &theNucleus) |
void | SetLevelDensityParameter (G4VLevelDensityParameter *aLevelDensity) |
G4double | GetMaximalKineticEnergy (void) const |
Definition at line 49 of file G4GEMChannel.hh.
G4GEMChannel::G4GEMChannel | ( | const G4int | theA, | |
const G4int | theZ, | |||
const G4String & | aName, | |||
G4GEMProbability * | aEmissionStrategy, | |||
G4VCoulombBarrier * | aCoulombBarrier | |||
) |
Definition at line 44 of file G4GEMChannel.cc.
References G4Pow::GetInstance(), and G4NucleiProperties::GetNuclearMass().
00046 : 00047 G4VEvaporationChannel(aName), 00048 A(theA), 00049 Z(theZ), 00050 theEvaporationProbabilityPtr(aEmissionStrategy), 00051 theCoulombBarrierPtr(aCoulombBarrier), 00052 EmissionProbability(0.0), 00053 MaximalKineticEnergy(-CLHEP::GeV) 00054 { 00055 theLevelDensityPtr = new G4EvaporationLevelDensityParameter; 00056 MyOwnLevelDensity = true; 00057 EvaporatedMass = G4NucleiProperties::GetNuclearMass(A, Z); 00058 ResidualMass = CoulombBarrier = 0.0; 00059 fG4pow = G4Pow::GetInstance(); 00060 ResidualZ = ResidualA = 0; 00061 }
G4GEMChannel::~G4GEMChannel | ( | ) | [virtual] |
G4FragmentVector * G4GEMChannel::BreakUp | ( | const G4Fragment & | theNucleus | ) | [virtual] |
Implements G4VEvaporationChannel.
Definition at line 135 of file G4GEMChannel.cc.
References G4Fragment::GetExcitationEnergy(), G4Fragment::GetGroundStateMass(), and G4Fragment::GetMomentum().
00136 { 00137 G4double EvaporatedKineticEnergy = CalcKineticEnergy(theNucleus); 00138 G4double EvaporatedEnergy = EvaporatedKineticEnergy + EvaporatedMass; 00139 00140 G4ThreeVector momentum(IsotropicVector(std::sqrt(EvaporatedKineticEnergy* 00141 (EvaporatedKineticEnergy+2.0*EvaporatedMass)))); 00142 00143 momentum.rotateUz(theNucleus.GetMomentum().vect().unit()); 00144 00145 G4LorentzVector EvaporatedMomentum(momentum,EvaporatedEnergy); 00146 EvaporatedMomentum.boost(theNucleus.GetMomentum().boostVector()); 00147 G4Fragment * EvaporatedFragment = new G4Fragment(A,Z,EvaporatedMomentum); 00148 // ** And now the residual nucleus ** 00149 G4double theExEnergy = theNucleus.GetExcitationEnergy(); 00150 G4double theMass = theNucleus.GetGroundStateMass(); 00151 G4double ResidualEnergy = 00152 theMass + (theExEnergy - EvaporatedKineticEnergy) - EvaporatedMass; 00153 00154 G4LorentzVector ResidualMomentum(-momentum,ResidualEnergy); 00155 ResidualMomentum.boost(theNucleus.GetMomentum().boostVector()); 00156 00157 G4Fragment * ResidualFragment = new G4Fragment( ResidualA, ResidualZ, ResidualMomentum ); 00158 00159 G4FragmentVector * theResult = new G4FragmentVector; 00160 00161 theResult->push_back(EvaporatedFragment); 00162 theResult->push_back(ResidualFragment); 00163 return theResult; 00164 }
G4double G4GEMChannel::GetEmissionProbability | ( | G4Fragment * | theNucleus | ) | [virtual] |
Implements G4VEvaporationChannel.
Definition at line 68 of file G4GEMChannel.cc.
References G4GEMProbability::EmissionProbability(), G4Fragment::GetA_asInt(), G4VCoulombBarrier::GetCoulombBarrier(), G4Fragment::GetExcitationEnergy(), G4Fragment::GetGroundStateMass(), G4PairingCorrection::GetInstance(), G4NucleiProperties::GetNuclearMass(), G4PairingCorrection::GetPairingCorrection(), and G4Fragment::GetZ_asInt().
00069 { 00070 G4int anA = fragment->GetA_asInt(); 00071 G4int aZ = fragment->GetZ_asInt(); 00072 ResidualA = anA - A; 00073 ResidualZ = aZ - Z; 00074 //G4cout << "G4GEMChannel::Initialize: Z= " << aZ << " A= " << anA 00075 // << " Zres= " << ResidualZ << " Ares= " << ResidualA << G4endl; 00076 00077 // We only take into account channels which are physically allowed 00078 if (ResidualA <= 0 || ResidualZ <= 0 || ResidualA < ResidualZ || 00079 (ResidualA == ResidualZ && ResidualA > 1)) 00080 { 00081 CoulombBarrier = 0.0; 00082 MaximalKineticEnergy = -CLHEP::GeV; 00083 EmissionProbability = 0.0; 00084 } 00085 else 00086 { 00087 // Effective excitation energy 00088 // JMQ 071009: pairing in ExEnergy should be the one of parent compound nucleus 00089 // FIXED the bug causing reported crash by VI (negative Probabilities 00090 // due to inconsistency in Coulomb barrier calculation (CoulombBarrier and -Beta 00091 // param for protons must be the same) 00092 // G4double ExEnergy = fragment.GetExcitationEnergy() - 00093 // G4PairingCorrection::GetInstance()->GetPairingCorrection(ResidualA,ResidualZ); 00094 G4double ExEnergy = fragment->GetExcitationEnergy() - 00095 G4PairingCorrection::GetInstance()->GetPairingCorrection(anA,aZ); 00096 00097 //G4cout << "Eexc(MeV)= " << ExEnergy/MeV << G4endl; 00098 00099 if( ExEnergy <= 0.0) { 00100 CoulombBarrier = 0.0; 00101 MaximalKineticEnergy = -1000.0*MeV; 00102 EmissionProbability = 0.0; 00103 00104 } else { 00105 00106 ResidualMass = G4NucleiProperties::GetNuclearMass(ResidualA, ResidualZ); 00107 00108 // Coulomb Barrier calculation 00109 CoulombBarrier = theCoulombBarrierPtr->GetCoulombBarrier(ResidualA,ResidualZ,ExEnergy); 00110 //G4cout << "CBarrier(MeV)= " << CoulombBarrier/MeV << G4endl; 00111 00112 //Maximal kinetic energy (JMQ : at the Coulomb barrier) 00113 MaximalKineticEnergy = 00114 CalcMaximalKineticEnergy(fragment->GetGroundStateMass()+ExEnergy); 00115 //G4cout << "MaxE(MeV)= " << MaximalKineticEnergy/MeV << G4endl; 00116 00117 // Emission probability 00118 if (MaximalKineticEnergy <= 0.0) 00119 { 00120 EmissionProbability = 0.0; 00121 } 00122 else 00123 { 00124 // Total emission probability for this channel 00125 EmissionProbability = 00126 theEvaporationProbabilityPtr->EmissionProbability(*fragment, 00127 MaximalKineticEnergy); 00128 } 00129 } 00130 } 00131 //G4cout << "Prob= " << EmissionProbability << G4endl; 00132 return EmissionProbability; 00133 }
G4double G4GEMChannel::GetMaximalKineticEnergy | ( | void | ) | const [inline] |
void G4GEMChannel::SetLevelDensityParameter | ( | G4VLevelDensityParameter * | aLevelDensity | ) | [inline] |
Definition at line 64 of file G4GEMChannel.hh.
00065 { 00066 if (MyOwnLevelDensity) { delete theLevelDensityPtr; } 00067 theLevelDensityPtr = aLevelDensity; 00068 MyOwnLevelDensity = false; 00069 }