Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions
G4VXResonance Class Reference

#include <G4VXResonance.hh>

Inheritance diagram for G4VXResonance:
G4VCrossSectionSource G4XResonance

Public Member Functions

 G4VXResonance ()
 
virtual ~G4VXResonance ()
 
G4bool operator== (const G4VXResonance &right) const
 
G4bool operator!= (const G4VXResonance &right) const
 
- Public Member Functions inherited from G4VCrossSectionSource
 G4VCrossSectionSource ()
 
virtual ~G4VCrossSectionSource ()
 
G4bool operator== (const G4VCrossSectionSource &right) const
 
G4bool operator!= (const G4VCrossSectionSource &right) const
 
virtual G4double CrossSection (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const =0
 
virtual const
G4CrossSectionVector
GetComponents () const =0
 
virtual G4String Name () const =0
 
virtual void Print () const
 
virtual void PrintAll (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
virtual G4bool IsValid (G4double e) const
 
virtual G4double HighLimit () const
 
virtual G4double LowLimit () const
 

Protected Member Functions

 G4VXResonance (const G4VXResonance &right)
 
G4VXResonanceoperator= (const G4VXResonance &right)
 
G4double DegeneracyFactor (const G4KineticTrack &trk1, const G4KineticTrack &trk2, G4double iSpinOut1, G4double iSpinOut2) const
 
G4double DetailedBalance (const G4KineticTrack &trk1, const G4KineticTrack &trk2, G4int isoOut1, G4int isoOut2, G4double iSpinOut1, G4double iSpinOut2, G4double mOut1, G4double mOut2) const
 
G4double IsospinCorrection (const G4KineticTrack &trk1, const G4KineticTrack &trk2, G4int isoOut1, G4int isoOut2, G4double iSpinOut1, G4double iSpinOut2) const
 
- 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
 
G4ParticleDefinitionFindKeyParticle (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
G4double GetTransversePionMass () const
 
G4double GetMinStringMass () const
 

Detailed Description

Definition at line 54 of file G4VXResonance.hh.

Constructor & Destructor Documentation

G4VXResonance::G4VXResonance ( )

Definition at line 50 of file G4VXResonance.cc.

51 { }
G4VXResonance::~G4VXResonance ( )
virtual

Definition at line 54 of file G4VXResonance.cc.

55 { }
G4VXResonance::G4VXResonance ( const G4VXResonance right)
protected

Member Function Documentation

G4double G4VXResonance::DegeneracyFactor ( const G4KineticTrack trk1,
const G4KineticTrack trk2,
G4double  iSpinOut1,
G4double  iSpinOut2 
) const
protected

Definition at line 186 of file G4VXResonance.cc.

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

Referenced by DetailedBalance(), and IsospinCorrection().

189 {
190  G4double value = 0.;
191 
192  G4ParticleDefinition* in1 = trk1.GetDefinition();
193  G4ParticleDefinition* in2 = trk2.GetDefinition();
194 
195  G4double sIn1 = in1->GetPDGiSpin() + 1.;
196  G4double sIn2 = in2->GetPDGiSpin() + 1.;
197 
198  G4double denom = sIn1 * sIn2;
199  if (denom > 0.)
200  {
201  value = (iSpinOut1+1) * (iSpinOut2+1) / denom;
202  }
203  return value;
204 }
G4ParticleDefinition * GetDefinition() const
const XML_Char int const XML_Char * value
double G4double
Definition: G4Types.hh:76
G4double G4VXResonance::DetailedBalance ( const G4KineticTrack trk1,
const G4KineticTrack trk2,
G4int  isoOut1,
G4int  isoOut2,
G4double  iSpinOut1,
G4double  iSpinOut2,
G4double  mOut1,
G4double  mOut2 
) const
protected

Definition at line 124 of file G4VXResonance.cc.

References DegeneracyFactor(), G4KineticTrack::Get4Momentum(), G4KineticTrack::GetDefinition(), G4ParticleDefinition::GetPDGiIsospin(), G4ParticleDefinition::GetPDGiIsospin3(), G4ParticleDefinition::GetPDGMass(), G4DetailedBalancePhaseSpaceIntegral::GetPhaseSpaceIntegral(), G4ParticleDefinition::IsShortLived(), and G4Clebsch::Weight().

Referenced by G4XResonance::CrossSection().

129 {
130  // To handle the cases when resonances are involved the modified
131  // detailed balance of P. Danielewicz and G.F. Bertsch, Nucl. Phys. A533(1991) 712
132  // is used; in other words, the width of the resonances are folded to get the
133  // mean square of the final state momentum.
134 
135  G4ParticleDefinition* in1 = trk1.GetDefinition();
136  G4ParticleDefinition* in2 = trk2.GetDefinition();
137  if(in1->IsShortLived() && in2->IsShortLived())
138  {
139  throw G4HadronicException(__FILE__, __LINE__, "Detailed balance for resonance scattering still on the schedule.");
140  }
141 
142  G4double result = 0.;
143 
144  G4int isoIn1 = in1->GetPDGiIsospin();
145  G4int iso3In1 = in1->GetPDGiIsospin3();
146  G4int isoIn2 = in2->GetPDGiIsospin();
147  G4int iso3In2 = in2->GetPDGiIsospin3();
148  G4double weight = clebsch.Weight(isoIn1, iso3In1, isoIn2, iso3In2, isoOut1, isoOut2);
149 
150  if (weight > 00001)
151  {
152  // adding spin counting here ...... does not look quite consistent, but is correct anyway.
153  // revisit in the next design iteration @@
154  G4double degeneracy = DegeneracyFactor(trk1,trk2,iSpinOut1,iSpinOut2);
155  G4double factor = degeneracy * weight;
156 
157  // now the phase-space
158  G4double S = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag2();
159  G4double m_1 = in1->GetPDGMass();
160  G4double m_2 = in2->GetPDGMass();
161 
162  // on-shell
163  G4double pinitial2 = (S - (m_1+m_2) * (m_1+m_2)) * (S - (m_1-m_2) * (m_1-m_2)) / (4.0*S);
164  G4double pfinal2 = (S - (mOut1+mOut2) * (mOut1+mOut2)) * (S - ( mOut1-mOut2) * (mOut1-mOut2)) / (4.0*S);
165  G4double relativeMomsquared = pfinal2/pinitial2;
166 
167  // resonance-nucleon scattering - inverse channel
168  if(in1->IsShortLived())
169  {
171  relativeMomsquared = 1./theI.GetPhaseSpaceIntegral(std::sqrt(S));
172  }
173  else if(in2->IsShortLived())
174  {
176  relativeMomsquared = 1./theI.GetPhaseSpaceIntegral(std::sqrt(S));
177  }
178 
179  result = factor * relativeMomsquared;
180  }
181 
182  return result;
183 }
G4double DegeneracyFactor(const G4KineticTrack &trk1, const G4KineticTrack &trk2, G4double iSpinOut1, G4double iSpinOut2) const
int G4int
Definition: G4Types.hh:78
G4ParticleDefinition * GetDefinition() const
G4double GetPDGMass() const
G4double Weight(G4int isoIn1, G4int iso3In1, G4int isoIn2, G4int iso3In2, G4int isoOut1, G4int isoOut2) const
Definition: G4Clebsch.cc:73
double G4double
Definition: G4Types.hh:76
const G4LorentzVector & Get4Momentum() const
G4double G4VXResonance::IsospinCorrection ( const G4KineticTrack trk1,
const G4KineticTrack trk2,
G4int  isoOut1,
G4int  isoOut2,
G4double  iSpinOut1,
G4double  iSpinOut2 
) const
protected

Definition at line 70 of file G4VXResonance.cc.

References DBL_MIN, DegeneracyFactor(), G4lrint(), G4Clebsch::GenerateIso3(), G4KineticTrack::GetDefinition(), G4ParticleDefinition::GetPDGiIsospin(), G4ParticleDefinition::GetPDGiIsospin3(), G4ParticleDefinition::GetPDGiSpin(), G4ParticleDefinition::IsShortLived(), G4Proton::ProtonDefinition(), and G4Clebsch::Weight().

Referenced by G4XResonance::CrossSection().

74 {
75  G4double result = 0.;
76 
77  G4ParticleDefinition* in1 = trk1.GetDefinition();
78  G4ParticleDefinition* in2 = trk2.GetDefinition();
79 
80  G4int isoIn1 = in1->GetPDGiIsospin();
81  G4int iso3In1 = in1->GetPDGiIsospin3();
82  G4int isoIn2 = in2->GetPDGiIsospin();
83  G4int iso3In2 = in2->GetPDGiIsospin3();
84 
87 
88  G4double pWeight = clebsch.Weight(isoProton,iso3Proton, isoProton,iso3Proton, isoOut1,isoOut2);
89  if (pWeight == 0.) throw G4HadronicException(__FILE__, __LINE__, "G4VXResonance::IsospinCorrection, no resonances - pWeight is zero");
90 
91  if (in1->IsShortLived() || in2->IsShortLived())
92  {
93  // Resonances in the initial state
94  G4int iSpinProton = G4Proton::ProtonDefinition()->GetPDGiSpin();
95  G4double degeneracyFactor = DegeneracyFactor(trk1,trk2,iSpinProton,iSpinProton);
96 
97  G4double factor = degeneracyFactor * pWeight;
98  if (factor > DBL_MIN)
99  {
100  // Randomly select the Isospin3 of the initial state resonances
101  std::vector<G4double> iso = clebsch.GenerateIso3(isoIn1,iso3In1,
102  isoIn2,iso3In2,
103  isoProton,isoProton);
104  G4int isoA = G4lrint(iso[0]);
105  G4int isoB = G4lrint(iso[1]);
106  G4double rWeight = clebsch.Weight(isoProton,isoA,
107  isoProton,isoB,
108  isoOut1,isoOut2);
109  result = rWeight / pWeight;
110  }
111  }
112  else
113  {
114  G4double weight = clebsch.Weight(isoIn1,iso3In1, isoIn2,iso3In2, isoOut1,isoOut2);
115  result = weight / pWeight;
116  }
117 
118  return result;
119 }
static G4Proton * ProtonDefinition()
Definition: G4Proton.cc:88
G4double DegeneracyFactor(const G4KineticTrack &trk1, const G4KineticTrack &trk2, G4double iSpinOut1, G4double iSpinOut2) const
int G4int
Definition: G4Types.hh:78
G4ParticleDefinition * GetDefinition() const
std::vector< G4double > GenerateIso3(G4int isoIn1, G4int iso3In1, G4int isoIn2, G4int iso3In2, G4int isoOut1, G4int isoOut2) const
Definition: G4Clebsch.cc:292
int G4lrint(double ad)
Definition: templates.hh:163
#define DBL_MIN
Definition: templates.hh:75
G4double Weight(G4int isoIn1, G4int iso3In1, G4int isoIn2, G4int iso3In2, G4int isoOut1, G4int isoOut2) const
Definition: G4Clebsch.cc:73
double G4double
Definition: G4Types.hh:76
G4bool G4VXResonance::operator!= ( const G4VXResonance right) const

Definition at line 64 of file G4VXResonance.cc.

65 {
66  return (this != (G4VXResonance *) &right);
67 }
G4VXResonance& G4VXResonance::operator= ( const G4VXResonance right)
protected
G4bool G4VXResonance::operator== ( const G4VXResonance right) const

Definition at line 58 of file G4VXResonance.cc.

59 {
60  return (this == (G4VXResonance *) &right);
61 }

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