Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4VCrossSectionSource.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id: G4VCrossSectionSource.cc,v 1.6 2010-03-12 15:45:18 gunter Exp $ //
27//
28
29#include "globals.hh"
30#include "G4SystemOfUnits.hh"
32#include "G4ios.hh"
35#include "G4KineticTrack.hh"
38#include "G4Proton.hh"
39#include "G4Neutron.hh"
40
42{ }
43
44
46{ }
47
48
50FindKeyParticle(const G4KineticTrack& trk1,const G4KineticTrack& trk2) const
51{
52 G4ParticleDefinition * result;
53
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}
73
75{
76 return (this == (G4VCrossSectionSource *) &right);
77}
78
79
81{
82 return (this != (G4VCrossSectionSource *) &right);
83}
84
85
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}
105
106
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}
131
132
134{
135 G4bool answer = false;
136 if (e >= eLow && e <= eHigh) answer = true;
137 return answer;
138}
139
141{
142 return 0.;
143}
144
145
147{
148 return DBL_MAX;
149}
150
152{
153 G4bool answer = false;
154 if (e >= LowLimit() && e <= HighLimit()) answer = true;
155 return answer;
156}
157
159 const G4KineticTrack& trk2) const
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}
172
173
175 G4double sigma, G4double eParam, G4double power) const
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) * std::pow(((e0 + eParam) / e), power);
183 result = std::max(0., value);
184 }
185 return result;
186}
187
189{
190 // Parameter from UrQMD
191 const G4double transversePionMass = 0.3 * GeV;
192 return transversePionMass;
193}
194
195
197{
198 // Parameter from UrQMD
199 const G4double minStringMass = 0.52 * GeV;
200 return minStringMass;
201}
202
203
204
std::vector< G4CrossSectionSourcePtr > G4CrossSectionVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
static G4Proton * Proton()
Definition: G4Proton.cc:93
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const
virtual G4double LowLimit() const
const G4ParticleDefinition * FindLightParticle(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual const G4CrossSectionVector * GetComponents() const =0
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const =0
virtual void PrintAll(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual void Print() const
G4bool operator!=(const G4VCrossSectionSource &right) const
G4double GetMinStringMass() const
virtual G4double HighLimit() const
G4double FcrossX(G4double e, G4double e0, G4double sigma, G4double eParam, G4double power) const
G4bool operator==(const G4VCrossSectionSource &right) const
G4double GetTransversePionMass() const
G4ParticleDefinition * FindKeyParticle(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual G4String Name() const =0
virtual G4bool IsValid(G4double e) const
#define DBL_MAX
Definition: templates.hh:83