G4XAnnihilationChannel Class Reference

#include <G4XAnnihilationChannel.hh>

Inheritance diagram for G4XAnnihilationChannel:

G4VCrossSectionSource

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 G4CrossSectionVectorGetComponents () const
virtual G4bool IsValid (G4double e) const
virtual G4String Name () const

Detailed Description

Definition at line 46 of file G4XAnnihilationChannel.hh.


Constructor & Destructor Documentation

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  }


Member Function Documentation

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]

Implements G4VCrossSectionSource.

Definition at line 64 of file G4XAnnihilationChannel.hh.

00064 { return 0; }

G4bool G4XAnnihilationChannel::IsValid ( G4double  e  )  const [virtual]

Reimplemented from G4VCrossSectionSource.

Definition at line 144 of file G4XAnnihilationChannel.cc.

References G4VCrossSectionSource::InLimits().

00145 {
00146   G4bool answer = InLimits(e,lowLimit,highLimit);
00147 
00148   return answer;
00149 }

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 }


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