#include <G4XAnnihilationChannel.hh>
Inheritance diagram for G4XAnnihilationChannel:
Public Member Functions | |
G4XAnnihilationChannel () | |
G4XAnnihilationChannel (const G4ParticleDefinition *resDefinition, const G4ResonanceWidth &resWidths, const G4ResonancePartialWidth &resPartWidths, const G4String &partWidthLabel) | |
virtual | ~G4XAnnihilationChannel () |
G4bool | operator== (const G4XAnnihilationChannel &right) const |
G4bool | operator!= (const G4XAnnihilationChannel &right) const |
virtual G4double | CrossSection (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const |
virtual const G4CrossSectionVector * | GetComponents () const |
virtual G4bool | IsValid (G4double e) const |
virtual G4String | Name () const |
Definition at line 46 of file G4XAnnihilationChannel.hh.
G4XAnnihilationChannel::G4XAnnihilationChannel | ( | ) |
Definition at line 37 of file G4XAnnihilationChannel.cc.
References DBL_MAX.
00037 : resonance(0) 00038 { 00039 // As a first approximation the model is assumed to be valid over 00040 // the entire energy range 00041 lowLimit = 0.; 00042 highLimit = DBL_MAX; 00043 widthTable = 0; 00044 partWidthTable = 0; 00045 }
G4XAnnihilationChannel::G4XAnnihilationChannel | ( | const G4ParticleDefinition * | resDefinition, | |
const G4ResonanceWidth & | resWidths, | |||
const G4ResonancePartialWidth & | resPartWidths, | |||
const G4String & | partWidthLabel | |||
) |
Definition at line 47 of file G4XAnnihilationChannel.cc.
References DBL_MAX, G4ParticleDefinition::GetParticleName(), G4ResonancePartialWidth::MassDependentWidth(), G4ResonanceWidth::MassDependentWidth(), and G4ResonanceNames::ShortName().
00051 : resonance(resDefinition) 00052 { 00053 // Get the tabulated mass-dependent widths for the resonance 00054 G4String resName = resonance->GetParticleName(); 00055 // cout << "HPW "<<resName<<endl; 00056 G4String shortName = theNames.ShortName(resName); 00057 // cout << "HPW "<<shortName<<endl; 00058 // cout << "HPW "<<partWidthLabel<<endl; 00059 00060 widthTable = resWidths.MassDependentWidth(shortName); 00061 partWidthTable = resPartWidths.MassDependentWidth(partWidthLabel); 00062 00063 // As a first approximation the model is assumed to be valid over 00064 // the entire energy range 00065 lowLimit = 0.; 00066 highLimit = DBL_MAX; 00067 }
G4XAnnihilationChannel::~G4XAnnihilationChannel | ( | ) | [virtual] |
Definition at line 70 of file G4XAnnihilationChannel.cc.
00071 { 00072 if (widthTable) delete widthTable; 00073 widthTable = 0; 00074 if (partWidthTable) delete partWidthTable; 00075 partWidthTable = 0; 00076 }
G4double G4XAnnihilationChannel::CrossSection | ( | const G4KineticTrack & | trk1, | |
const G4KineticTrack & | trk2 | |||
) | const [virtual] |
Implements G4VCrossSectionSource.
Definition at line 91 of file G4XAnnihilationChannel.cc.
References G4KineticTrack::Get4Momentum(), G4KineticTrack::GetDefinition(), G4ParticleDefinition::GetPDGiSpin(), G4ParticleDefinition::GetPDGMass(), and G4INCL::Math::pi.
00093 { 00094 G4double sigma = 0.; 00095 G4double eCM = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag(); 00096 00097 G4ParticleDefinition* def1 = trk1.GetDefinition(); 00098 G4ParticleDefinition* def2 = trk2.GetDefinition(); 00099 00100 G4int J1 = def1->GetPDGiSpin(); 00101 G4int J2 = def2->GetPDGiSpin(); 00102 G4double m_1 = def1->GetPDGMass(); 00103 G4double m_2 = def2->GetPDGMass(); 00104 00105 G4int JRes = resonance->GetPDGiSpin(); 00106 G4double mRes = resonance->GetPDGMass(); 00107 00108 G4double branch = Branch(trk1,trk2); 00109 G4double width = VariableWidth(trk1,trk2); 00110 G4double cleb = NormalizedClebsch(trk1,trk2); 00111 00112 G4double S = eCM * eCM; 00113 if (S == 0.) throw G4HadronicException(__FILE__, __LINE__, "G4XAnnihilationChannel::CrossSection - eCM = 0"); 00114 00115 G4double pCM = std::sqrt((S-(m_1+m_2)*(m_1+m_2))*(S-(m_1-m_2)*(m_1-m_2))/(4.*S)); 00116 00117 sigma = ( (JRes + 1.) / ( (J1 + 1) * (J2 + 1) ) 00118 * pi / (pCM * pCM) * branch * width * width / 00119 ( (eCM - mRes) * (eCM - mRes) + width * width / 4.0) * cleb * hbarc_squared); 00120 00121 // G4cout << "SS " << branch<<" "<<sigma<<" " 00122 // << J1 <<" " 00123 // <<J2<<" " 00124 // <<m1<<" " 00125 // <<m2<<" " 00126 // <<JRes<<" " 00127 // <<mRes<<" " 00128 // <<wRes<<" " 00129 // <<width<<" " 00130 // <<cleb<<" " 00131 // <<G4endl; 00132 return sigma; 00133 }
virtual const G4CrossSectionVector* G4XAnnihilationChannel::GetComponents | ( | ) | const [inline, virtual] |
Reimplemented from G4VCrossSectionSource.
Definition at line 144 of file G4XAnnihilationChannel.cc.
References G4VCrossSectionSource::InLimits().
G4String G4XAnnihilationChannel::Name | ( | ) | const [virtual] |
Implements G4VCrossSectionSource.
Definition at line 136 of file G4XAnnihilationChannel.cc.
00137 { 00138 G4String name("XAnnihilationChannelCrossSection"); 00139 return name; 00140 }
G4bool G4XAnnihilationChannel::operator!= | ( | const G4XAnnihilationChannel & | right | ) | const |
Definition at line 85 of file G4XAnnihilationChannel.cc.
00086 { 00087 return (this != (G4XAnnihilationChannel *) &right); 00088 }
G4bool G4XAnnihilationChannel::operator== | ( | const G4XAnnihilationChannel & | right | ) | const |
Definition at line 79 of file G4XAnnihilationChannel.cc.
00080 { 00081 return (this == (G4XAnnihilationChannel *) &right); 00082 }