Geant4-11
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
G4XAnnihilationChannel Class Reference

#include <G4XAnnihilationChannel.hh>

Inheritance diagram for G4XAnnihilationChannel:
G4VCrossSectionSource

Public Member Functions

virtual G4double CrossSection (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
 G4XAnnihilationChannel ()
 
 G4XAnnihilationChannel (const G4ParticleDefinition *resDefinition, const G4ResonanceWidth &resWidths, const G4ResonancePartialWidth &resPartWidths, const G4String &partWidthLabel)
 
virtual const G4CrossSectionVectorGetComponents () const
 
virtual G4double HighLimit () const
 
virtual G4bool IsValid (G4double e) const
 
virtual G4double LowLimit () const
 
virtual G4String Name () const
 
G4bool operator!= (const G4VCrossSectionSource &right) const
 
G4bool operator!= (const G4XAnnihilationChannel &right) const
 
G4bool operator== (const G4VCrossSectionSource &right) const
 
G4bool operator== (const G4XAnnihilationChannel &right) const
 
virtual void Print () const
 
virtual void PrintAll (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
virtual ~G4XAnnihilationChannel ()
 

Protected Member Functions

G4double FcrossX (G4double e, G4double e0, G4double sigma, G4double eParam, G4double power) const
 
const G4ParticleDefinitionFindKeyParticle (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
const G4ParticleDefinitionFindLightParticle (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4bool InLimits (G4double e, G4double eLow, G4double eHigh) const
 

Private Member Functions

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

Private Attributes

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

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;
45}
const G4ParticleDefinition * resonance
G4PhysicsVector * partWidthTable
#define DBL_MAX
Definition: templates.hh:62

References DBL_MAX, highLimit, lowLimit, partWidthTable, and widthTable.

◆ 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
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}
const G4String & GetParticleName() const
const G4String ShortName(const G4String &name)
virtual G4PhysicsVector * MassDependentWidth(const G4String &name) const =0
virtual G4PhysicsVector * MassDependentWidth(const G4String &name) const =0

References DBL_MAX, G4ParticleDefinition::GetParticleName(), highLimit, lowLimit, G4ResonancePartialWidth::MassDependentWidth(), G4ResonanceWidth::MassDependentWidth(), partWidthTable, resonance, G4ResonanceNames::ShortName(), theNames, and widthTable.

◆ ~G4XAnnihilationChannel()

G4XAnnihilationChannel::~G4XAnnihilationChannel ( )
virtual

Definition at line 70 of file G4XAnnihilationChannel.cc.

71{
72 if (widthTable) delete widthTable;
73 widthTable = 0;
76 }

References partWidthTable, and widthTable.

◆ 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}
double G4double
Definition: G4Types.hh:83
G4double VariablePartialWidth(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4double VariableWidth(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const

References VariablePartialWidth(), and VariableWidth().

Referenced by CrossSection().

◆ 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}
G4double S(G4double temp)
static constexpr double pi
Definition: G4SIunits.hh:55
int G4int
Definition: G4Types.hh:85
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double NormalizedClebsch(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4double Branch(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
float hbarc_squared
Definition: hepunit.py:265

References Branch(), G4KineticTrack::Get4Momentum(), G4KineticTrack::GetDefinition(), G4ParticleDefinition::GetPDGiSpin(), G4ParticleDefinition::GetPDGMass(), source.hepunit::hbarc_squared, NormalizedClebsch(), pi, resonance, S(), and VariableWidth().

◆ FcrossX()

G4double G4VCrossSectionSource::FcrossX ( G4double  e,
G4double  e0,
G4double  sigma,
G4double  eParam,
G4double  power 
) const
protectedinherited

Definition at line 174 of file G4VCrossSectionSource.cc.

176{
177 G4double result = 0.;
178
179 G4double denom = eParam*eParam + (e-e0)*(e-e0);
180 if (denom > 0.)
181 {
182 G4double value = (2.* eParam * sigma * (e-e0) / denom) * G4Pow::GetInstance()->powA(((e0 + eParam) / e), power);
183 result = std::max(0., value);
184 }
185 return result;
186}
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:230
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References G4Pow::GetInstance(), G4INCL::Math::max(), and G4Pow::powA().

◆ FindKeyParticle()

const G4ParticleDefinition * G4VCrossSectionSource::FindKeyParticle ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
protectedinherited

Definition at line 49 of file G4VCrossSectionSource.cc.

51{
52 const G4ParticleDefinition * result;
53
54 const G4ParticleDefinition * p1 = trk1.GetDefinition();
55 const G4ParticleDefinition * p2 = trk2.GetDefinition();
56
57 if( (p1==G4Proton::Proton() && p2==G4Proton::Proton() ) ||
58 (p1==G4Neutron::Neutron() && p2==G4Neutron::Neutron()) )
59 {
60 result = G4Proton::Proton();
61 }
62 else if( (p1==G4Neutron::Neutron() && p2==G4Proton::Proton()) ||
63 (p2==G4Neutron::Neutron() && p1==G4Proton::Proton()) )
64 {
65 result = G4Neutron::Neutron();
66 }
67 else
68 {
69 throw G4HadronicException(__FILE__, __LINE__, "G4VCrossSectionSource: unklnown particles in FindKeyParticle");
70 }
71 return result;
72}
static G4Neutron * Neutron()
Definition: G4Neutron.cc:103
static G4Proton * Proton()
Definition: G4Proton.cc:92

References G4KineticTrack::GetDefinition(), G4Neutron::Neutron(), and G4Proton::Proton().

Referenced by G4XNNElasticLowE::CrossSection(), and G4XNNTotalLowE::CrossSection().

◆ FindLightParticle()

const G4ParticleDefinition * G4VCrossSectionSource::FindLightParticle ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
protectedinherited

Definition at line 158 of file G4VCrossSectionSource.cc.

160{
161 G4double mass1 = trk1.GetDefinition()->GetPDGMass();
162 G4double mass2 = trk2.GetDefinition()->GetPDGMass();
163 if (mass1 < mass2)
164 {
165 return trk1.GetDefinition();
166 }
167 else
168 {
169 return trk2.GetDefinition();
170 }
171}

References G4KineticTrack::GetDefinition(), and G4ParticleDefinition::GetPDGMass().

Referenced by G4XMesonBaryonElastic::CrossSection().

◆ GetComponents()

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

Implements G4VCrossSectionSource.

Definition at line 64 of file G4XAnnihilationChannel.hh.

64{ return 0; }

◆ HighLimit()

G4double G4VCrossSectionSource::HighLimit ( ) const
virtualinherited

◆ InLimits()

G4bool G4VCrossSectionSource::InLimits ( G4double  e,
G4double  eLow,
G4double  eHigh 
) const
protectedinherited

Definition at line 133 of file G4VCrossSectionSource.cc.

134{
135 G4bool answer = false;
136 if (e >= eLow && e <= eHigh) answer = true;
137 return answer;
138}
bool G4bool
Definition: G4Types.hh:86

Referenced by IsValid(), G4XAqmElastic::IsValid(), G4XAqmTotal::IsValid(), G4XMesonBaryonElastic::IsValid(), G4XNNElasticLowE::IsValid(), G4XnpElasticLowE::IsValid(), G4XnpTotalLowE::IsValid(), G4XPDGElastic::IsValid(), and G4XPDGTotal::IsValid().

◆ 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}
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const

References highLimit, G4VCrossSectionSource::InLimits(), and lowLimit.

◆ LowLimit()

G4double G4VCrossSectionSource::LowLimit ( ) const
virtualinherited

Reimplemented in G4XPDGElastic, and G4XPDGTotal.

Definition at line 140 of file G4VCrossSectionSource.cc.

141{
142 return 0.;
143}

Referenced by G4CrossSectionPatch::CrossSection(), G4VCrossSectionSource::IsValid(), and G4CrossSectionPatch::Transition().

◆ 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}
const char * name(G4int ptype)

References G4InuclParticleNames::name().

◆ 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}
static G4double NormalizedClebschGordan(G4int twoJ, G4int twom, G4int twoJ1, G4int twoJ2, G4int twom1, G4int twom2)
Definition: G4Clebsch.cc:380
const G4String & GetParticleType() const
G4int GetQuarkContent(G4int flavor) const
G4int GetAntiQuarkContent(G4int flavor) const

References clebsch, G4ParticleDefinition::GetAntiQuarkContent(), G4KineticTrack::GetDefinition(), G4ParticleDefinition::GetParticleType(), G4ParticleDefinition::GetPDGEncoding(), G4ParticleDefinition::GetPDGiIsospin(), G4ParticleDefinition::GetPDGiIsospin3(), G4ParticleDefinition::GetQuarkContent(), G4Clebsch::NormalizedClebschGordan(), and resonance.

Referenced by CrossSection().

◆ operator!=() [1/2]

G4bool G4VCrossSectionSource::operator!= ( const G4VCrossSectionSource right) const
inherited

Definition at line 80 of file G4VCrossSectionSource.cc.

81{
82 return (this != (G4VCrossSectionSource *) &right);
83}

◆ operator!=() [2/2]

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

◆ operator==() [1/2]

G4bool G4VCrossSectionSource::operator== ( const G4VCrossSectionSource right) const
inherited

Definition at line 74 of file G4VCrossSectionSource.cc.

75{
76 return (this == (G4VCrossSectionSource *) &right);
77}

◆ operator==() [2/2]

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

Definition at line 79 of file G4XAnnihilationChannel.cc.

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

◆ Print()

void G4VCrossSectionSource::Print ( ) const
virtualinherited

Reimplemented in G4XNNElasticLowE, G4XnpElasticLowE, and G4XnpTotalLowE.

Definition at line 86 of file G4VCrossSectionSource.cc.

87{
88 G4int nComponents = 0;
89 const G4CrossSectionVector* components = GetComponents();
90 if (components)
91 {
92 nComponents = components->size();
93 }
94 G4cout << "---- " << this->Name() << " ---- has " << nComponents << " components" <<G4endl;
95 G4int i;
96 for (i=0; i<nComponents; i++)
97 {
98 G4cout << "-" << this->Name() << " - Component " << i << ": " <<G4endl;
99
100 G4CrossSectionSourcePtr componentPtr = (*components)[i];
101 G4VCrossSectionSource* component = componentPtr();
102 component->Print();
103 }
104}
std::vector< G4CrossSectionSourcePtr > G4CrossSectionVector
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
virtual const G4CrossSectionVector * GetComponents() const =0
virtual void Print() const
virtual G4String Name() const =0

References G4cout, G4endl, G4VCrossSectionSource::GetComponents(), G4VCrossSectionSource::Name(), and G4VCrossSectionSource::Print().

Referenced by G4VCollision::Print(), G4VCrossSectionSource::Print(), G4XNNElasticLowE::Print(), G4XnpElasticLowE::Print(), and G4XnpTotalLowE::Print().

◆ PrintAll()

void G4VCrossSectionSource::PrintAll ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
virtualinherited

Definition at line 107 of file G4VCrossSectionSource.cc.

108{
109 G4double sqrtS = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
110 G4double sigma = CrossSection(trk1,trk2) / millibarn;
111 G4cout << "---- " << Name() << ": "
112 << "Ecm = " << sqrtS / GeV << " GeV - "
113 << " Cross section = " << sigma << " mb "
114 << G4endl;
115
116 G4int nComponents = 0;
117 const G4CrossSectionVector* components = GetComponents();
118 if (components != 0)
119 {
120 nComponents = components->size();
121 }
122 G4int i;
123 for (i=0; i<nComponents; i++)
124 {
125 G4cout << "* Component " << i << ": ";
126 G4CrossSectionSourcePtr componentPtr = (*components)[i];
127 G4VCrossSectionSource* component = componentPtr();
128 component->PrintAll(trk1,trk2);
129 }
130}
static constexpr double millibarn
Definition: G4SIunits.hh:86
static constexpr double GeV
Definition: G4SIunits.hh:203
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const =0
virtual void PrintAll(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const

References G4VCrossSectionSource::CrossSection(), G4cout, G4endl, G4KineticTrack::Get4Momentum(), G4VCrossSectionSource::GetComponents(), GeV, millibarn, G4VCrossSectionSource::Name(), and G4VCrossSectionSource::PrintAll().

Referenced by G4VCrossSectionSource::PrintAll().

◆ 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 {
193 width = resonance->GetPDGWidth();
194 }
195 return width;
196}
G4double GetPDGWidth() const
G4double GetValue(const G4double energy, G4bool &isOutRange) const

References G4KineticTrack::Get4Momentum(), G4ParticleDefinition::GetPDGWidth(), G4PhysicsVector::GetValue(), partWidthTable, and resonance.

Referenced by Branch().

◆ 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
165 G4double width = resonance->GetPDGWidth();
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}

References G4KineticTrack::Get4Momentum(), G4ParticleDefinition::GetPDGWidth(), G4PhysicsVector::GetValue(), resonance, and widthTable.

Referenced by Branch(), and CrossSection().

Field Documentation

◆ clebsch

G4Clebsch G4XAnnihilationChannel::clebsch
private

Definition at line 93 of file G4XAnnihilationChannel.hh.

Referenced by NormalizedClebsch().

◆ highLimit

G4double G4XAnnihilationChannel::highLimit
private

Definition at line 91 of file G4XAnnihilationChannel.hh.

Referenced by G4XAnnihilationChannel(), and IsValid().

◆ lowLimit

G4double G4XAnnihilationChannel::lowLimit
private

Definition at line 90 of file G4XAnnihilationChannel.hh.

Referenced by G4XAnnihilationChannel(), and IsValid().

◆ partWidthTable

G4PhysicsVector* G4XAnnihilationChannel::partWidthTable
private

◆ resonance

const G4ParticleDefinition* G4XAnnihilationChannel::resonance
private

◆ theNames

G4ResonanceNames G4XAnnihilationChannel::theNames
private

Definition at line 94 of file G4XAnnihilationChannel.hh.

Referenced by G4XAnnihilationChannel().

◆ widthTable

G4PhysicsVector* G4XAnnihilationChannel::widthTable
private

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