Geant4  10.02.p03
G4XAnnihilationChannel Class Reference

#include <G4XAnnihilationChannel.hh>

Inheritance diagram for G4XAnnihilationChannel:
Collaboration 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 G4CrossSectionVectorGetComponents () const
 
virtual G4bool IsValid (G4double e) const
 
virtual G4String Name () const
 
- Public Member Functions inherited from G4VCrossSectionSource
 G4VCrossSectionSource ()
 
virtual ~G4VCrossSectionSource ()
 
G4bool operator== (const G4VCrossSectionSource &right) const
 
G4bool operator!= (const G4VCrossSectionSource &right) const
 
virtual void Print () const
 
virtual void PrintAll (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
virtual G4double HighLimit () const
 
virtual G4double LowLimit () const
 

Private Member Functions

 G4XAnnihilationChannel (const G4XAnnihilationChannel &right)
 
const G4XAnnihilationChanneloperator= (const G4XAnnihilationChannel &right)
 
G4double Branch (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4double VariableWidth (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4double VariablePartialWidth (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4double NormalizedClebsch (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 

Private Attributes

G4double lowLimit
 
G4double highLimit
 
G4Clebsch clebsch
 
G4ResonanceNames theNames
 
G4PhysicsVectorwidthTable
 
G4PhysicsVectorpartWidthTable
 
const G4ParticleDefinitionresonance
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionSource
G4bool InLimits (G4double e, G4double eLow, G4double eHigh) const
 
const G4ParticleDefinitionFindLightParticle (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4double FcrossX (G4double e, G4double e0, G4double sigma, G4double eParam, G4double power) const
 
const G4ParticleDefinitionFindKeyParticle (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 

Detailed Description

Definition at line 46 of file G4XAnnihilationChannel.hh.

Constructor & Destructor Documentation

◆ G4XAnnihilationChannel() [1/3]

G4XAnnihilationChannel::G4XAnnihilationChannel ( )

Definition at line 37 of file G4XAnnihilationChannel.cc.

37  : resonance(0)
38 {
39  // As a first approximation the model is assumed to be valid over
40  // the entire energy range
41  lowLimit = 0.;
43  widthTable = 0;
44  partWidthTable = 0;
45 }
G4PhysicsVector * partWidthTable
const G4ParticleDefinition * resonance
#define DBL_MAX
Definition: templates.hh:83
Here is the caller graph for this function:

◆ G4XAnnihilationChannel() [2/3]

G4XAnnihilationChannel::G4XAnnihilationChannel ( const G4ParticleDefinition resDefinition,
const G4ResonanceWidth resWidths,
const G4ResonancePartialWidth resPartWidths,
const G4String partWidthLabel 
)

Definition at line 47 of file G4XAnnihilationChannel.cc.

51  : resonance(resDefinition)
52 {
53  // Get the tabulated mass-dependent widths for the resonance
54  G4String resName = resonance->GetParticleName();
55  // cout << "HPW "<<resName<<endl;
56  G4String shortName = theNames.ShortName(resName);
57  // cout << "HPW "<<shortName<<endl;
58  // cout << "HPW "<<partWidthLabel<<endl;
59 
60  widthTable = resWidths.MassDependentWidth(shortName);
61  partWidthTable = resPartWidths.MassDependentWidth(partWidthLabel);
62 
63  // As a first approximation the model is assumed to be valid over
64  // the entire energy range
65  lowLimit = 0.;
67 }
virtual G4PhysicsVector * MassDependentWidth(const G4String &name) const =0
virtual G4PhysicsVector * MassDependentWidth(const G4String &name) const =0
const G4String & GetParticleName() const
G4PhysicsVector * partWidthTable
const G4ParticleDefinition * resonance
const G4String ShortName(const G4String &name)
#define DBL_MAX
Definition: templates.hh:83
Here is the call graph for this function:

◆ ~G4XAnnihilationChannel()

G4XAnnihilationChannel::~G4XAnnihilationChannel ( )
virtual

Definition at line 70 of file G4XAnnihilationChannel.cc.

71 {
72  if (widthTable) delete widthTable;
73  widthTable = 0;
74  if (partWidthTable) delete partWidthTable;
75  partWidthTable = 0;
76  }
G4PhysicsVector * partWidthTable

◆ G4XAnnihilationChannel() [3/3]

G4XAnnihilationChannel::G4XAnnihilationChannel ( const G4XAnnihilationChannel right)
private

Member Function Documentation

◆ Branch()

G4double G4XAnnihilationChannel::Branch ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
private

Definition at line 152 of file G4XAnnihilationChannel.cc.

154 {
155  G4double w=VariableWidth(trk1,trk2);
156  if(w==0) return 0;
157  return VariablePartialWidth(trk1,trk2) / VariableWidth(trk1,trk2);
158 }
G4double VariableWidth(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4double VariablePartialWidth(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CrossSection()

G4double G4XAnnihilationChannel::CrossSection ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
virtual

Implements G4VCrossSectionSource.

Definition at line 91 of file G4XAnnihilationChannel.cc.

93 {
94  G4double sigma = 0.;
95  G4double eCM = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
96 
97  const G4ParticleDefinition* def1 = trk1.GetDefinition();
98  const G4ParticleDefinition* def2 = trk2.GetDefinition();
99 
100  G4int J1 = def1->GetPDGiSpin();
101  G4int J2 = def2->GetPDGiSpin();
102  G4double m_1 = def1->GetPDGMass();
103  G4double m_2 = def2->GetPDGMass();
104 
105  G4int JRes = resonance->GetPDGiSpin();
106  G4double mRes = resonance->GetPDGMass();
107 
108  G4double branch = Branch(trk1,trk2);
109  G4double width = VariableWidth(trk1,trk2);
110  G4double cleb = NormalizedClebsch(trk1,trk2);
111 
112  G4double S = eCM * eCM;
113  if (S == 0.) throw G4HadronicException(__FILE__, __LINE__, "G4XAnnihilationChannel::CrossSection - eCM = 0");
114 
115  G4double pCM = std::sqrt((S-(m_1+m_2)*(m_1+m_2))*(S-(m_1-m_2)*(m_1-m_2))/(4.*S));
116 
117  sigma = ( (JRes + 1.) / ( (J1 + 1) * (J2 + 1) )
118  * pi / (pCM * pCM) * branch * width * width /
119  ( (eCM - mRes) * (eCM - mRes) + width * width / 4.0) * cleb * hbarc_squared);
120 
121 // G4cout << "SS " << branch<<" "<<sigma<<" "
122 // << J1 <<" "
123 // <<J2<<" "
124 // <<m1<<" "
125 // <<m2<<" "
126 // <<JRes<<" "
127 // <<mRes<<" "
128 // <<wRes<<" "
129 // <<width<<" "
130 // <<cleb<<" "
131 // <<G4endl;
132  return sigma;
133 }
const G4ParticleDefinition * GetDefinition() const
float hbarc_squared
Definition: hepunit.py:266
double S(double temp)
G4double VariableWidth(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4double NormalizedClebsch(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
#define width
int G4int
Definition: G4Types.hh:78
G4double Branch(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
const G4ParticleDefinition * resonance
static const double pi
Definition: G4SIunits.hh:74
double G4double
Definition: G4Types.hh:76
const G4LorentzVector & Get4Momentum() const
Here is the call graph for this function:

◆ GetComponents()

virtual const G4CrossSectionVector* G4XAnnihilationChannel::GetComponents ( ) const
inlinevirtual

Implements G4VCrossSectionSource.

Definition at line 64 of file G4XAnnihilationChannel.hh.

64 { return 0; }
Here is the call graph for this function:

◆ IsValid()

G4bool G4XAnnihilationChannel::IsValid ( G4double  e) const
virtual

Reimplemented from G4VCrossSectionSource.

Definition at line 144 of file G4XAnnihilationChannel.cc.

145 {
146  G4bool answer = InLimits(e,lowLimit,highLimit);
147 
148  return answer;
149 }
bool G4bool
Definition: G4Types.hh:79
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Name()

G4String G4XAnnihilationChannel::Name ( ) const
virtual

Implements G4VCrossSectionSource.

Definition at line 136 of file G4XAnnihilationChannel.cc.

137 {
138  G4String name("XAnnihilationChannelCrossSection");
139  return name;
140 }
G4String name
Definition: TRTMaterials.hh:40
Here is the caller graph for this function:

◆ NormalizedClebsch()

G4double G4XAnnihilationChannel::NormalizedClebsch ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
private

Definition at line 199 of file G4XAnnihilationChannel.cc.

201 {
202  G4double cleb = 0.;
203  const G4ParticleDefinition* def1 = trk1.GetDefinition();
204  const G4ParticleDefinition* def2 = trk2.GetDefinition();
205 
206  G4int iso31 = def1->GetPDGiIsospin3();
207  G4int iso32 = def2->GetPDGiIsospin3();
208  G4int iso3 = iso31 + iso32;
209  G4int iso1 = def1->GetPDGiIsospin();
210  G4int iso2 = def2->GetPDGiIsospin();
211 
212  G4int isoRes = resonance->GetPDGiIsospin();
213 
214  if (isoRes < iso3) return 0.;
215  if ((iso1*iso2) == 0) return 1.;
216 
217  cleb = clebsch.NormalizedClebschGordan(isoRes,iso3,iso1,iso2,iso31,iso32);
218 
219  // Special case: particle-antiparticle, charge-conjugated states have the same weight
220  G4String type1 = def1->GetParticleType();
221  G4String type2 = def2->GetParticleType();
222  G4int anti = def1->GetPDGEncoding() * def2->GetPDGEncoding();
224  if ( ((type1 == "baryon" && type2 == "baryon") ||(type1 == "meson" && type2 == "meson")) &&
225  anti < 0 && strangeness == 0)
226  {
227  if (def1->GetPDGEncoding() != -(def2->GetPDGEncoding())) cleb = 0.5 * cleb;
228  }
229 
230  return cleb;
231 }
const G4ParticleDefinition * GetDefinition() const
G4int GetQuarkContent(G4int flavor) const
const G4String & GetParticleType() const
int G4int
Definition: G4Types.hh:78
static G4double NormalizedClebschGordan(G4int twoJ, G4int twom, G4int twoJ1, G4int twoJ2, G4int twom1, G4int twom2)
Definition: G4Clebsch.cc:380
const G4ParticleDefinition * resonance
G4int GetAntiQuarkContent(G4int flavor) const
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator!=()

G4bool G4XAnnihilationChannel::operator!= ( const G4XAnnihilationChannel right) const

Definition at line 85 of file G4XAnnihilationChannel.cc.

86 {
87  return (this != (G4XAnnihilationChannel *) &right);
88 }

◆ operator=()

const G4XAnnihilationChannel& G4XAnnihilationChannel::operator= ( const G4XAnnihilationChannel right)
private
Here is the caller graph for this function:

◆ operator==()

G4bool G4XAnnihilationChannel::operator== ( const G4XAnnihilationChannel right) const

Definition at line 79 of file G4XAnnihilationChannel.cc.

80 {
81  return (this == (G4XAnnihilationChannel *) &right);
82 }

◆ VariablePartialWidth()

G4double G4XAnnihilationChannel::VariablePartialWidth ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
private

Definition at line 176 of file G4XAnnihilationChannel.cc.

178 {
179  // Calculate mass dependent partial width of resonance,
180  // based on UrQMD tabulations
181 
182  G4double width(0);
183 
184  if (partWidthTable != 0)
185  {
186  G4double sqrtS = 0;
187  G4bool dummy = false;
188  sqrtS = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
189  width = partWidthTable->GetValue(sqrtS,dummy);
190  }
191  else
192  {
194  }
195  return width;
196 }
#define width
G4PhysicsVector * partWidthTable
bool G4bool
Definition: G4Types.hh:79
const G4ParticleDefinition * resonance
G4double GetPDGWidth() const
G4double GetValue(G4double theEnergy, G4bool &isOutRange) const
double G4double
Definition: G4Types.hh:76
const G4LorentzVector & Get4Momentum() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ VariableWidth()

G4double G4XAnnihilationChannel::VariableWidth ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
private

Definition at line 160 of file G4XAnnihilationChannel.cc.

162 {
163  // actual production width of resonance, depending on available energy.
164 
166  G4bool dummy = false;
167  G4double sqrtS = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
168  if (widthTable != 0)
169  {
170  width = widthTable->GetValue(sqrtS,dummy);
171  }
172  return width;
173 }
#define width
bool G4bool
Definition: G4Types.hh:79
const G4ParticleDefinition * resonance
G4double GetPDGWidth() const
G4double GetValue(G4double theEnergy, G4bool &isOutRange) const
double G4double
Definition: G4Types.hh:76
const G4LorentzVector & Get4Momentum() const
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ clebsch

G4Clebsch G4XAnnihilationChannel::clebsch
private

Definition at line 93 of file G4XAnnihilationChannel.hh.

◆ highLimit

G4double G4XAnnihilationChannel::highLimit
private

Definition at line 91 of file G4XAnnihilationChannel.hh.

◆ lowLimit

G4double G4XAnnihilationChannel::lowLimit
private

Definition at line 90 of file G4XAnnihilationChannel.hh.

◆ partWidthTable

G4PhysicsVector* G4XAnnihilationChannel::partWidthTable
private

Definition at line 98 of file G4XAnnihilationChannel.hh.

◆ resonance

const G4ParticleDefinition* G4XAnnihilationChannel::resonance
private

Definition at line 101 of file G4XAnnihilationChannel.hh.

◆ theNames

G4ResonanceNames G4XAnnihilationChannel::theNames
private

Definition at line 94 of file G4XAnnihilationChannel.hh.

◆ widthTable

G4PhysicsVector* G4XAnnihilationChannel::widthTable
private

Definition at line 97 of file G4XAnnihilationChannel.hh.


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