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

#include <G4ChipsKaonMinusInelasticXS.hh>

Inheritance diagram for G4ChipsKaonMinusInelasticXS:
G4VCrossSectionDataSet

Public Member Functions

 G4ChipsKaonMinusInelasticXS ()
 
 ~G4ChipsKaonMinusInelasticXS ()
 
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 46 of file G4ChipsKaonMinusInelasticXS.hh.

Constructor & Destructor Documentation

G4ChipsKaonMinusInelasticXS::G4ChipsKaonMinusInelasticXS ( )

Definition at line 66 of file G4ChipsKaonMinusInelasticXS.cc.

67 {
68  lastLEN=0; // Pointer to lastArray of LowEn CS
69  lastHEN=0; // Pointer to lastArray of HighEn CS
70  lastN=0; // The last N of calculated nucleus
71  lastZ=0; // The last Z of calculated nucleus
72  lastP=0.; // Last used in CrossSection Momentum
73  lastTH=0.; // Last threshold momentum
74  lastCS=0.; // Last value of the Cross Section
75  lastI=0; // The last position in the DAMDB
76  LEN = new std::vector<G4double*>;
77  HEN = new std::vector<G4double*>;
78 }
G4VCrossSectionDataSet(const G4String &nam="")
Definition: inflate.h:41
G4ChipsKaonMinusInelasticXS::~G4ChipsKaonMinusInelasticXS ( )

Definition at line 80 of file G4ChipsKaonMinusInelasticXS.cc.

81 {
82  G4int lens=LEN->size();
83  for(G4int i=0; i<lens; ++i) delete[] (*LEN)[i];
84  delete LEN;
85 
86  G4int hens=HEN->size();
87  for(G4int i=0; i<hens; ++i) delete[] (*HEN)[i];
88  delete HEN;
89 }
int G4int
Definition: G4Types.hh:78
Definition: inflate.h:41

Member Function Documentation

static const char* G4ChipsKaonMinusInelasticXS::Default_Name ( )
inlinestatic
G4double G4ChipsKaonMinusInelasticXS::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 114 of file G4ChipsKaonMinusInelasticXS.cc.

References G4ThreadLocal, and python.hepunit::millibarn.

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

115 {
116  static G4ThreadLocal G4int j; // A#0f Z/N-records already tested in AMDB
117  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)
118  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)
119  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
120  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
121  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
122  // ***---*** End of the mandatory Static Definitions of the Associative Memory ***---***
123 
124  G4bool in=false; // By default the isotope must be found in the AMDB
125  if(tgN!=lastN || tgZ!=lastZ) // The nucleus was not the last used isotope
126  {
127  in = false; // By default the isotope haven't be found in AMDB
128  lastP = 0.; // New momentum history (nothing to compare with)
129  lastN = tgN; // The last N of the calculated nucleus
130  lastZ = tgZ; // The last Z of the calculated nucleus
131  lastI = colN.size(); // Size of the Associative Memory DB in the heap
132  j = 0; // A#0f records found in DB for this projectile
133  if(lastI) for(G4int i=0; i<lastI; i++) // AMDB exists, try to find the (Z,N) isotope
134  {
135  if(colN[i]==tgN && colZ[i]==tgZ) // Try the record "i" in the AMDB
136  {
137  lastI=i; // Remember the index for future fast/last use
138  lastTH =colTH[i]; // The last THreshold (A-dependent)
139  if(pMom<=lastTH)
140  {
141  return 0.; // Energy is below the Threshold value
142  }
143  lastP =colP [i]; // Last Momentum (A-dependent)
144  lastCS =colCS[i]; // Last CrossSect (A-dependent)
145  in = true; // This is the case when the isotop is found in DB
146  // Momentum pMom is in IU ! @@ Units
147  lastCS=CalculateCrossSection(-1,j,-321,lastZ,lastN,pMom); // read & update
148  if(lastCS<=0. && pMom>lastTH) // Correct the threshold (@@ No intermediate Zeros)
149  {
150  lastCS=0.;
151  lastTH=pMom;
152  }
153  break; // Go out of the LOOP
154  }
155  j++; // Increment a#0f records found in DB
156  }
157  if(!in) // This isotope has not been calculated previously
158  {
159  //!!The slave functions must provide cross-sections in millibarns (mb) !! (not in IU)
160  lastCS=CalculateCrossSection(0,j,-321,lastZ,lastN,pMom); //calculate & create
161  //if(lastCS>0.) // It means that the AMBD was initialized
162  //{
163 
164  // lastTH = ThresholdEnergy(tgZ, tgN); // The Threshold Energy which is now the last
165 
166  lastTH = 0; // WP - to be checked!!!
167  colN.push_back(tgN);
168  colZ.push_back(tgZ);
169  colP.push_back(pMom);
170  colTH.push_back(lastTH);
171  colCS.push_back(lastCS);
172  //} // M.K. Presence of H1 with high threshold breaks the syncronization
173  return lastCS*millibarn;
174  } // End of creation of the new set of parameters
175  else
176  {
177  colP[lastI]=pMom;
178  colCS[lastI]=lastCS;
179  }
180  } // End of parameters udate
181  else if(pMom<=lastTH)
182  {
183  return 0.; // Momentum is below the Threshold Value -> CS=0
184  }
185  else // It is the last used -> use the current tables
186  {
187  lastCS=CalculateCrossSection(1,j,-321,lastZ,lastN,pMom); // Only read and UpdateDB
188  lastP=pMom;
189  }
190  return lastCS*millibarn;
191 }
#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 G4ChipsKaonMinusInelasticXS::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 103 of file G4ChipsKaonMinusInelasticXS.cc.

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

107 {
108  G4double pMom=Pt->GetTotalMomentum();
109  G4int tgN = A - tgZ;
110 
111  return GetChipsCrossSection(pMom, tgZ, tgN, -321);
112 }
int G4int
Definition: G4Types.hh:78
G4double GetTotalMomentum() const
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
double G4double
Definition: G4Types.hh:76
G4bool G4ChipsKaonMinusInelasticXS::IsIsoApplicable ( const G4DynamicParticle Pt,
G4int  Z,
G4int  A,
const G4Element elm,
const G4Material mat 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 91 of file G4ChipsKaonMinusInelasticXS.cc.

References G4DynamicParticle::GetDefinition(), and G4KaonMinus::KaonMinus().

94 {
95  G4ParticleDefinition* particle = Pt->GetDefinition();
96  if (particle == G4KaonMinus::KaonMinus() ) return true;
97  return false;
98 }
G4ParticleDefinition * GetDefinition() const
static G4KaonMinus * KaonMinus()
Definition: G4KaonMinus.cc:113

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