Geant4-11
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
G4XnpElastic Class Reference

#include <G4XnpElastic.hh>

Inheritance diagram for G4XnpElastic:
G4CrossSectionPatch G4VCrossSectionSource

Public Member Functions

virtual G4double CrossSection (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
 G4XnpElastic ()
 
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 G4CrossSectionPatch &right) const
 
G4bool operator!= (const G4VCrossSectionSource &right) const
 
G4bool operator!= (const G4XnpElastic &right) const
 
G4bool operator== (const G4CrossSectionPatch &right) const
 
G4bool operator== (const G4VCrossSectionSource &right) const
 
G4bool operator== (const G4XnpElastic &right) const
 
virtual void Print () const
 
virtual void PrintAll (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
 
virtual ~G4XnpElastic ()
 

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
 
G4double Transition (const G4KineticTrack &trk1, const G4KineticTrack &trk2, const G4VCrossSectionSource *comp1, const G4VCrossSectionSource *comp2) const
 
G4double Transition (G4double ecm, G4double sigma1, G4double sigma2, G4double e1, G4double e2) const
 

Private Member Functions

 G4XnpElastic (const G4XnpElastic &right)
 
const G4XnpElasticoperator= (const G4XnpElastic &right)
 

Private Attributes

G4CrossSectionVectorcomponents
 

Detailed Description

Definition at line 50 of file G4XnpElastic.hh.

Constructor & Destructor Documentation

◆ G4XnpElastic() [1/2]

G4XnpElastic::G4XnpElastic ( )

Definition at line 53 of file G4XnpElastic.cc.

54{
56
57 G4VCrossSectionSource* xnpElasticLowE = new G4XnpElasticLowE;
58 components->push_back(xnpElasticLowE);
59
60// G4ParticleDefinition* proton = G4Proton::ProtonDefinition();
61// G4ParticleDefinition* neutron = G4Neutron::NeutronDefinition();
62 G4VCrossSectionSource* xnpElasticHighE = new G4XPDGElastic;
63 components->push_back(xnpElasticHighE);
64}
std::vector< G4CrossSectionSourcePtr > G4CrossSectionVector
G4CrossSectionVector * components
Definition: G4XnpElastic.hh:75

References components.

◆ ~G4XnpElastic()

G4XnpElastic::~G4XnpElastic ( )
virtual

Definition at line 67 of file G4XnpElastic.cc.

68{
69 if (components != 0)
70 {
71 G4int nComponents = this->GetComponents()->size();
72 G4int i;
73 for (i=0; i<nComponents; i++)
74 {
75 G4CrossSectionSourcePtr componentPtr = (*components)[i];
76 G4VCrossSectionSource* component = componentPtr();
77 delete component;
78 component = 0;
79 componentPtr = 0;
80 }
81 }
82 delete components;
83 components = 0;
84}
int G4int
Definition: G4Types.hh:85
virtual const G4CrossSectionVector * GetComponents() const
Definition: G4XnpElastic.hh:62

References components, and GetComponents().

◆ G4XnpElastic() [2/2]

G4XnpElastic::G4XnpElastic ( const G4XnpElastic right)
private

Member Function Documentation

◆ CrossSection()

G4double G4CrossSectionPatch::CrossSection ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const
virtualinherited

Implements G4VCrossSectionSource.

Definition at line 68 of file G4CrossSectionPatch.cc.

70{
71 // The cross section is provided by one of the components, according to their energy
72 // validity range
73
74 G4double crossSection = 0.;
75 G4double ecm = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
76
77 const G4CrossSectionVector* components = GetComponents();
78 if (components != 0)
79 {
80 G4int nComponents = this->GetComponents()->size();
81// G4int nValid = 0;
82
83 G4int i;
84 for (i=0; i<nComponents; i++)
85 {
86 G4CrossSectionSourcePtr componentPtr = (*components)[i];
87 G4VCrossSectionSource* component = componentPtr();
88 if (component->IsValid(ecm))
89 {
90 crossSection = component->CrossSection(trk1,trk2);
91 }
92 else if (i < (nComponents - 1) )
93 {
94 G4CrossSectionSourcePtr nextPtr = (*components)[i+1];
95 G4VCrossSectionSource* next = nextPtr();
96 if (ecm > component->HighLimit() && ecm < next->LowLimit())
97 {
98 // Merge cross-sections in transition region between two validity ranges
99 crossSection = Transition(trk1,trk2,component,next);
100 }
101 }
102 }
103 }
104
105 return crossSection;
106}
double G4double
Definition: G4Types.hh:83
G4double Transition(const G4KineticTrack &trk1, const G4KineticTrack &trk2, const G4VCrossSectionSource *comp1, const G4VCrossSectionSource *comp2) const
virtual const G4CrossSectionVector * GetComponents() const =0
const G4LorentzVector & Get4Momentum() const
virtual G4double LowLimit() const
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const =0
virtual G4double HighLimit() const
virtual G4bool IsValid(G4double e) const

References G4VCrossSectionSource::CrossSection(), G4KineticTrack::Get4Momentum(), G4CrossSectionPatch::GetComponents(), G4VCrossSectionSource::HighLimit(), G4VCrossSectionSource::IsValid(), G4VCrossSectionSource::LowLimit(), and G4CrossSectionPatch::Transition().

◆ 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}
const G4ParticleDefinition * GetDefinition() const
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 * G4XnpElastic::GetComponents ( ) const
inlinevirtual

Implements G4CrossSectionPatch.

Definition at line 62 of file G4XnpElastic.hh.

62{ return components; }

References components.

Referenced by ~G4XnpElastic().

◆ HighLimit()

G4double G4VCrossSectionSource::HighLimit ( ) const
virtualinherited

◆ InLimits()

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

◆ IsValid()

G4bool G4CrossSectionPatch::IsValid ( G4double  e) const
virtualinherited

Reimplemented from G4VCrossSectionSource.

Definition at line 109 of file G4CrossSectionPatch.cc.

110{
111 // The Patch is valid if any of its components are valid
112 G4bool answer = false;
113 const G4CrossSectionVector* components = GetComponents();
114 if (components != 0)
115 {
116 G4int n = components->size();
117 G4int i;
118 for (i=0; i<n; i++)
119 {
120 G4CrossSectionSourcePtr componentPtr = (*components)[i];
121 G4VCrossSectionSource* component = componentPtr();
122 if (component->IsValid(e))
123 {
124 answer = true;
125 break;
126 }
127 }
128 }
129 return answer;
130}

References G4CrossSectionPatch::GetComponents(), G4VCrossSectionSource::IsValid(), and CLHEP::detail::n.

◆ 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 G4XnpElastic::Name ( ) const
virtual

Implements G4VCrossSectionSource.

Definition at line 99 of file G4XnpElastic.cc.

100{
101 G4String name("npElastic");
102 return name;
103}
const char * name(G4int ptype)

References G4InuclParticleNames::name().

◆ operator!=() [1/3]

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

Definition at line 62 of file G4CrossSectionPatch.cc.

63{
64 return (this != (G4CrossSectionPatch*) &right);
65}

◆ operator!=() [2/3]

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

Definition at line 80 of file G4VCrossSectionSource.cc.

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

◆ operator!=() [3/3]

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

Definition at line 93 of file G4XnpElastic.cc.

94{
95 return (this != (G4XnpElastic*) &right);
96}

◆ operator=()

const G4XnpElastic & G4XnpElastic::operator= ( const G4XnpElastic right)
private

◆ operator==() [1/3]

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

Definition at line 56 of file G4CrossSectionPatch.cc.

57{
58 return (this == (G4CrossSectionPatch*) &right);
59}

◆ operator==() [2/3]

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

Definition at line 74 of file G4VCrossSectionSource.cc.

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

◆ operator==() [3/3]

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

Definition at line 87 of file G4XnpElastic.cc.

88{
89 return (this == (G4XnpElastic*) &right);
90}

◆ 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}
#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 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().

◆ Transition() [1/2]

G4double G4CrossSectionPatch::Transition ( const G4KineticTrack trk1,
const G4KineticTrack trk2,
const G4VCrossSectionSource comp1,
const G4VCrossSectionSource comp2 
) const
protectedinherited

Definition at line 133 of file G4CrossSectionPatch.cc.

136{
137 //Merge two cross sections in the transition region between their validity ranges
138
139 G4double crossSection = 0.;
140
141 G4double ecm = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
142 G4double sigma1 = comp1->CrossSection(trk1,trk2);
143 G4double sigma2 = comp2->CrossSection(trk1,trk2);
144 G4double denom = comp2->LowLimit() - comp1->HighLimit();
145 G4double diff = ecm - comp1->HighLimit();
146 if (denom > 0. && diff > 0.)
147 {
148 G4double ratio = diff / denom;
149 crossSection = (1.- ratio) * sigma1 + ratio * sigma2;
150 }
151
152 return crossSection;
153}

References G4VCrossSectionSource::CrossSection(), G4KineticTrack::Get4Momentum(), G4VCrossSectionSource::HighLimit(), and G4VCrossSectionSource::LowLimit().

Referenced by G4CrossSectionPatch::CrossSection().

◆ Transition() [2/2]

G4double G4CrossSectionPatch::Transition ( G4double  ecm,
G4double  sigma1,
G4double  sigma2,
G4double  e1,
G4double  e2 
) const
protectedinherited

Definition at line 156 of file G4CrossSectionPatch.cc.

159{
160 //Merge two cross sections in the transition region between their validity ranges
161
162 G4double crossSection = 0.;
163
164 G4double denom = e2 - e1;
165 G4double diff = ecm - e1;
166 if (denom > 0. && diff > 0.)
167 {
168 G4double ratio = diff / denom;
169 crossSection = (1.- ratio) * sigma1 + ratio * sigma2;
170 }
171
172 return crossSection;
173}
static const G4double e1[44]
static const G4double e2[44]

References e1, and e2.

Field Documentation

◆ components

G4CrossSectionVector* G4XnpElastic::components
private

Definition at line 75 of file G4XnpElastic.hh.

Referenced by G4XnpElastic(), GetComponents(), and ~G4XnpElastic().


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