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

#include <G4ChipsKaonPlusInelasticXS.hh>

Inheritance diagram for G4ChipsKaonPlusInelasticXS:
G4VCrossSectionDataSet

Public Member Functions

 G4ChipsKaonPlusInelasticXS ()
 
 ~G4ChipsKaonPlusInelasticXS ()
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *Pt, G4int Z, G4int A, const G4Element *elm, const G4Material *mat)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int tgZ, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
virtual G4double GetChipsCrossSection (G4double momentum, G4int Z, G4int N, G4int pdg)
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
virtual G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual void CrossSectionDescription (std::ostream &) const
 
virtual G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Static Public Member Functions

static const char * Default_Name ()
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionDataSet
void SetName (const G4String &)
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 

Detailed Description

Definition at line 47 of file G4ChipsKaonPlusInelasticXS.hh.

Constructor & Destructor Documentation

G4ChipsKaonPlusInelasticXS::G4ChipsKaonPlusInelasticXS ( )

Definition at line 75 of file G4ChipsKaonPlusInelasticXS.cc.

References G4ParticleDefinition::GetPDGMass(), G4KaonPlus::KaonPlus(), G4PionPlus::PionPlus(), G4Proton::Proton(), and G4TemplateAutoLock< M, L, U >::unlock().

76 {
77  G4AutoLock l(&initM);
78  prM = G4Proton::Proton()->GetPDGMass(); // Proton mass in MeV
79  piM = G4PionPlus::PionPlus()->GetPDGMass()+.1; // Pion mass in MeV+Safety (WP)??
80  pM = G4KaonPlus::KaonPlus()->GetPDGMass(); // Projectile mass in MeV
81  tpM = pM+pM; // Doubled projectile mass (MeV)
82  l.unlock();
83  // Initialization of the
84  lastLEN=0; // Pointer to the lastArray of LowEn CS
85  lastHEN=0; // Pointer to the lastArray of HighEn CS
86  lastN=0; // The last N of calculated nucleus
87  lastZ=0; // The last Z of calculated nucleus
88  lastP=0.; // Last used in cross section Momentum
89  lastTH=0.; // Last threshold momentum
90  lastCS=0.; // Last value of the Cross Section
91  lastI=0; // The last position in the DAMDB
92  LEN = new std::vector<G4double*>;
93  HEN = new std::vector<G4double*>;
94 }
G4VCrossSectionDataSet(const G4String &nam="")
Definition: inflate.h:41
static G4Proton * Proton()
Definition: G4Proton.cc:93
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
G4double GetPDGMass() const
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
G4ChipsKaonPlusInelasticXS::~G4ChipsKaonPlusInelasticXS ( )

Definition at line 96 of file G4ChipsKaonPlusInelasticXS.cc.

97 {
98  G4int lens=LEN->size();
99  for(G4int i=0; i<lens; ++i) delete[] (*LEN)[i];
100  delete LEN;
101 
102  G4int hens=HEN->size();
103  for(G4int i=0; i<hens; ++i) delete[] (*HEN)[i];
104  delete HEN;
105 }
int G4int
Definition: G4Types.hh:78
Definition: inflate.h:41

Member Function Documentation

static const char* G4ChipsKaonPlusInelasticXS::Default_Name ( )
inlinestatic
G4double G4ChipsKaonPlusInelasticXS::GetChipsCrossSection ( G4double  momentum,
G4int  Z,
G4int  N,
G4int  pdg 
)
virtual

!The slave functions must provide cross-sections in millibarns (mb) !! (not in IU)

Definition at line 131 of file G4ChipsKaonPlusInelasticXS.cc.

References G4ThreadLocal, and python.hepunit::millibarn.

Referenced by G4ChipsKaonZeroInelasticXS::GetChipsCrossSection(), and GetIsoCrossSection().

132 {
133  static G4ThreadLocal G4int j; // A#0f Z/N-records already tested in AMDB
134  static G4ThreadLocal std::vector <G4int> *colN_G4MT_TLS_ = 0 ; if (!colN_G4MT_TLS_) colN_G4MT_TLS_ = new std::vector <G4int> ; std::vector <G4int> &colN = *colN_G4MT_TLS_; // Vector of N for calculated nuclei (isotops)
135  static G4ThreadLocal std::vector <G4int> *colZ_G4MT_TLS_ = 0 ; if (!colZ_G4MT_TLS_) colZ_G4MT_TLS_ = new std::vector <G4int> ; std::vector <G4int> &colZ = *colZ_G4MT_TLS_; // Vector of Z for calculated nuclei (isotops)
136  static G4ThreadLocal std::vector <G4double> *colP_G4MT_TLS_ = 0 ; if (!colP_G4MT_TLS_) colP_G4MT_TLS_ = new std::vector <G4double> ; std::vector <G4double> &colP = *colP_G4MT_TLS_; // Vector of last momenta for the reaction
137  static G4ThreadLocal std::vector <G4double> *colTH_G4MT_TLS_ = 0 ; if (!colTH_G4MT_TLS_) colTH_G4MT_TLS_ = new std::vector <G4double> ; std::vector <G4double> &colTH = *colTH_G4MT_TLS_; // Vector of energy thresholds for the reaction
138  static G4ThreadLocal std::vector <G4double> *colCS_G4MT_TLS_ = 0 ; if (!colCS_G4MT_TLS_) colCS_G4MT_TLS_ = new std::vector <G4double> ; std::vector <G4double> &colCS = *colCS_G4MT_TLS_; // Vector of last cross sections for the reaction
139  // ***---*** End of the mandatory Static Definitions of the Associative Memory ***---***
140 
141  G4bool in=false; // By default the isotope must be found in the AMDB
142  if(tgN!=lastN || tgZ!=lastZ) // The nucleus was not the last used isotope
143  {
144  in = false; // By default the isotope haven't be found in AMDB
145  lastP = 0.; // New momentum history (nothing to compare with)
146  lastN = tgN; // The last N of the calculated nucleus
147  lastZ = tgZ; // The last Z of the calculated nucleus
148  lastI = colN.size(); // Size of the Associative Memory DB in the heap
149  j = 0; // A#0f records found in DB for this projectile
150 
151  if(lastI) for(G4int i=0; i<lastI; i++) // AMDB exists, try to find the (Z,N) isotope
152  {
153  if(colN[i]==tgN && colZ[i]==tgZ) // Try the record "i" in the AMDB
154  {
155  lastI=i; // Remember the index for future fast/last use
156  lastTH =colTH[i]; // The last THreshold (A-dependent)
157 
158  if(pMom<=lastTH)
159  {
160  return 0.; // Energy is below the Threshold value
161  }
162  lastP =colP [i]; // Last Momentum (A-dependent)
163  lastCS =colCS[i]; // Last CrossSect (A-dependent)
164  in = true; // This is the case when the isotop is found in DB
165  // Momentum pMom is in IU ! @@ Units
166  lastCS=CalculateCrossSection(-1,j,321,lastZ,lastN,pMom); // read & update
167 
168  if(lastCS<=0. && pMom>lastTH) // Correct the threshold (@@ No intermediate Zeros)
169  {
170  lastCS=0.;
171  lastTH=pMom;
172  }
173  break; // Go out of the LOOP
174  }
175  j++; // Increment a#0f records found in DB
176  }
177  if(!in) // This isotope has not been calculated previously
178  {
179  //!!The slave functions must provide cross-sections in millibarns (mb) !! (not in IU)
180  lastCS=CalculateCrossSection(0,j,321,lastZ,lastN,pMom); //calculate & create
181 
182  //if(lastCS>0.) // It means that the AMBD was initialized
183  //{
184 
185  lastTH = 0; //ThresholdEnergy(tgZ, tgN); // The Threshold Energy which is now the last
186  colN.push_back(tgN);
187  colZ.push_back(tgZ);
188  colP.push_back(pMom);
189  colTH.push_back(lastTH);
190  colCS.push_back(lastCS);
191  //} // M.K. Presence of H1 with high threshold breaks the syncronization
192  return lastCS*millibarn;
193  } // End of creation of the new set of parameters
194  else
195  {
196  colP[lastI]=pMom;
197  colCS[lastI]=lastCS;
198  }
199  } // End of parameters udate
200  else if(pMom<=lastTH)
201  {
202  return 0.; // Momentum is below the Threshold Value -> CS=0
203  }
204  else // It is the last used -> use the current tables
205  {
206  lastCS=CalculateCrossSection(1,j,321,lastZ,lastN,pMom); // Only read and UpdateDB
207  lastP=pMom;
208  }
209  return lastCS*millibarn;
210 }
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
int millibarn
Definition: hepunit.py:40
bool G4bool
Definition: G4Types.hh:79
G4double G4ChipsKaonPlusInelasticXS::GetIsoCrossSection ( const G4DynamicParticle Pt,
G4int  tgZ,
G4int  A,
const G4Isotope iso = 0,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 120 of file G4ChipsKaonPlusInelasticXS.cc.

References GetChipsCrossSection(), and G4DynamicParticle::GetTotalMomentum().

124 {
125  G4double pMom=Pt->GetTotalMomentum();
126  G4int tgN = A - tgZ;
127 
128  return GetChipsCrossSection(pMom, tgZ, tgN, 321);
129 }
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
int G4int
Definition: G4Types.hh:78
G4double GetTotalMomentum() const
double G4double
Definition: G4Types.hh:76
G4bool G4ChipsKaonPlusInelasticXS::IsIsoApplicable ( const G4DynamicParticle Pt,
G4int  Z,
G4int  A,
const G4Element elm,
const G4Material mat 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 108 of file G4ChipsKaonPlusInelasticXS.cc.

References G4DynamicParticle::GetDefinition(), and G4KaonPlus::KaonPlus().

111 {
112  G4ParticleDefinition* particle = Pt->GetDefinition();
113  if (particle == G4KaonPlus::KaonPlus() ) return true;
114  return false;
115 }
G4ParticleDefinition * GetDefinition() const
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113

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