Geant4  10.02.p03
G4ChipsKaonPlusElasticXS Class Reference

#include <G4ChipsKaonPlusElasticXS.hh>

Inheritance diagram for G4ChipsKaonPlusElasticXS:
Collaboration diagram for G4ChipsKaonPlusElasticXS:

Public Member Functions

 G4ChipsKaonPlusElasticXS ()
 
 ~G4ChipsKaonPlusElasticXS ()
 
virtual void CrossSectionDescription (std::ostream &) const
 
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)
 
G4double GetExchangeT (G4int tZ, G4int tN, G4int pPDG)
 
- 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 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 ()
 

Private Member Functions

G4double CalculateCrossSection (G4bool CS, G4int F, G4int I, G4int pPDG, G4int Z, G4int N, G4double pP)
 
G4double GetSlope (G4int tZ, G4int tN, G4int pPDG)
 
G4double GetHMaxT ()
 
G4double GetPTables (G4double lpP, G4double lPm, G4int PDG, G4int tZ, G4int tN)
 
G4double GetTabValues (G4double lp, G4int pPDG, G4int tgZ, G4int tgN)
 
G4double GetQ2max (G4int pPDG, G4int tgZ, G4int tgN, G4double pP)
 

Private Attributes

const G4int nPoints
 
const G4int nLast
 
G4double lPMin
 
G4double lPMax
 
G4double dlnP
 
G4bool onlyCS
 
G4double lastSIG
 
G4double lastLP
 
G4double lastTM
 
G4int lastN
 
G4int lastZ
 
G4double lastP
 
G4double lastTH
 
G4double lastCS
 
G4int lastI
 
G4double theSS
 
G4double theS1
 
G4double theB1
 
G4double theS2
 
G4double theB2
 
G4double theS3
 
G4double theB3
 
G4double theS4
 
G4double theB4
 
G4int lastTZ
 
G4int lastTN
 
G4double lastPIN
 
G4doublelastCST
 
G4doublelastPAR
 
G4doublelastSST
 
G4doublelastS1T
 
G4doublelastB1T
 
G4doublelastS2T
 
G4doublelastB2T
 
G4doublelastS3T
 
G4doublelastB3T
 
G4doublelastS4T
 
G4doublelastB4T
 
std::vector< G4double * > PAR
 
std::vector< G4double * > CST
 
std::vector< G4double * > SST
 
std::vector< G4double * > S1T
 
std::vector< G4double * > B1T
 
std::vector< G4double * > S2T
 
std::vector< G4double * > B2T
 
std::vector< G4double * > S3T
 
std::vector< G4double * > B3T
 
std::vector< G4double * > S4T
 
std::vector< G4double * > B4T
 
std::vector< G4intcolN
 
std::vector< G4intcolZ
 
std::vector< G4doublecolP
 
std::vector< G4doublecolTH
 
std::vector< G4doublecolCS
 
std::vector< G4doublePIN
 

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 G4ChipsKaonPlusElasticXS.hh.

Constructor & Destructor Documentation

◆ G4ChipsKaonPlusElasticXS()

G4ChipsKaonPlusElasticXS::G4ChipsKaonPlusElasticXS ( )

Definition at line 77 of file G4ChipsKaonPlusElasticXS.cc.

78 {
79  G4AutoLock l(&initM);
80  mK = G4KaonPlus::KaonPlus()->GetPDGMass()*.001;// MeV to GeV
81  mK2 = mK*mK;
82  l.unlock();
83  lPMin=-8.; //Min tabulatedLogarithmMomentum/D
84  lPMax= 8.; //Max tabulatedLogarithmMomentum/D
85  dlnP=(lPMax-lPMin)/nLast;// LogStep inTable /D
86  onlyCS=true;//Flag toCalculOnlyCS(not Si/Bi)/L
87  lastSIG=0.; //Last calculated cross section /L
88  lastLP=-10.;//LastLog(mom_of IncidentHadron)/L
89  lastTM=0.; //Last t_maximum /L
90  theSS=0.; //TheLastSqSlope of 1st difr.Max/L
91  theS1=0.; //TheLastMantissa of 1st difrMax/L
92  theB1=0.; //TheLastSlope of 1st difructMax/L
93  theS2=0.; //TheLastMantissa of 2nd difrMax/L
94  theB2=0.; //TheLastSlope of 2nd difructMax/L
95  theS3=0.; //TheLastMantissa of 3d difr.Max/L
96  theB3=0.; //TheLastSlope of 3d difruct.Max/L
97  theS4=0.; //TheLastMantissa of 4th difrMax/L
98  theB4=0.; //TheLastSlope of 4th difructMax/L
99  lastTZ=0; // Last atomic number of theTarget
100  lastTN=0; // Last # of neutrons in theTarget
101  lastPIN=0.;// Last initialized max momentum
102  lastCST=0; // Elastic cross-section table
103  lastPAR=0; // ParametersForFunctionCalculation
104  lastSST=0; // E-dep ofSqardSlope of 1st difMax
105  lastS1T=0; // E-dep of mantissa of 1st dif.Max
106  lastB1T=0; // E-dep of the slope of 1st difMax
107  lastS2T=0; // E-dep of mantissa of 2nd difrMax
108  lastB2T=0; // E-dep of the slope of 2nd difMax
109  lastS3T=0; // E-dep of mantissa of 3d difr.Max
110  lastB3T=0; // E-dep of the slope of 3d difrMax
111  lastS4T=0; // E-dep of mantissa of 4th difrMax
112  lastB4T=0; // E-dep of the slope of 4th difMax
113  lastN=0; // The last N of calculated nucleus
114  lastZ=0; // The last Z of calculated nucleus
115  lastP=0.; // LastUsed inCrossSection Momentum
116  lastTH=0.; // Last threshold momentum
117  lastCS=0.; // Last value of the Cross Section
118  lastI=0; // The last position in the DAMDB
119 }
G4VCrossSectionDataSet(const G4String &nam="")
static const char * Default_Name()
static G4KaonPlus * KaonPlus()
Definition: G4KaonPlus.cc:113
Here is the call graph for this function:

◆ ~G4ChipsKaonPlusElasticXS()

G4ChipsKaonPlusElasticXS::~G4ChipsKaonPlusElasticXS ( )

Definition at line 121 of file G4ChipsKaonPlusElasticXS.cc.

122 {
123  std::vector<G4double*>::iterator pos;
124  for (pos=CST.begin(); pos<CST.end(); pos++)
125  { delete [] *pos; }
126  CST.clear();
127  for (pos=PAR.begin(); pos<PAR.end(); pos++)
128  { delete [] *pos; }
129  PAR.clear();
130  for (pos=SST.begin(); pos<SST.end(); pos++)
131  { delete [] *pos; }
132  SST.clear();
133  for (pos=S1T.begin(); pos<S1T.end(); pos++)
134  { delete [] *pos; }
135  S1T.clear();
136  for (pos=B1T.begin(); pos<B1T.end(); pos++)
137  { delete [] *pos; }
138  B1T.clear();
139  for (pos=S2T.begin(); pos<S2T.end(); pos++)
140  { delete [] *pos; }
141  S2T.clear();
142  for (pos=B2T.begin(); pos<B2T.end(); pos++)
143  { delete [] *pos; }
144  B2T.clear();
145  for (pos=S3T.begin(); pos<S3T.end(); pos++)
146  { delete [] *pos; }
147  S3T.clear();
148  for (pos=B3T.begin(); pos<B3T.end(); pos++)
149  { delete [] *pos; }
150  B3T.clear();
151  for (pos=S4T.begin(); pos<S4T.end(); pos++)
152  { delete [] *pos; }
153  S4T.clear();
154  for (pos=B4T.begin(); pos<B4T.end(); pos++)
155  { delete [] *pos; }
156  B4T.clear();
157 }
std::vector< G4double * > SST
std::vector< G4double * > S1T
std::vector< G4double * > B2T
std::vector< G4double * > S4T
std::vector< G4double * > B1T
std::vector< G4double * > CST
std::vector< G4double * > B4T
std::vector< G4double * > B3T
std::vector< G4double * > S2T
std::vector< G4double * > S3T
std::vector< G4double * > PAR
static const G4double pos

Member Function Documentation

◆ CalculateCrossSection()

G4double G4ChipsKaonPlusElasticXS::CalculateCrossSection ( G4bool  CS,
G4int  F,
G4int  I,
G4int  pPDG,
G4int  Z,
G4int  N,
G4double  pP 
)
private

Definition at line 258 of file G4ChipsKaonPlusElasticXS.cc.

260 {
261  G4double pMom=pIU/GeV; // All calculations are in GeV
262  onlyCS=CS; // Flag to calculate only CS (not Si/Bi)
263  lastLP=std::log(pMom); // Make a logarithm of the momentum for calculation
264  if(F) // This isotope was found in AMDB =>RETRIEVE/UPDATE
265  {
266  if(F<0) // the AMDB must be loded
267  {
268  lastPIN = PIN[I]; // Max log(P) initialised for this table set
269  lastPAR = PAR[I]; // Pointer to the parameter set
270  lastCST = CST[I]; // Pointer to the total sross-section table
271  lastSST = SST[I]; // Pointer to the first squared slope
272  lastS1T = S1T[I]; // Pointer to the first mantissa
273  lastB1T = B1T[I]; // Pointer to the first slope
274  lastS2T = S2T[I]; // Pointer to the second mantissa
275  lastB2T = B2T[I]; // Pointer to the second slope
276  lastS3T = S3T[I]; // Pointer to the third mantissa
277  lastB3T = B3T[I]; // Pointer to the rhird slope
278  lastS4T = S4T[I]; // Pointer to the 4-th mantissa
279  lastB4T = B4T[I]; // Pointer to the 4-th slope
280  }
281  if(lastLP>lastPIN && lastLP<lPMax)
282  {
283  lastPIN=GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);// Can update upper logP-Limit in tabs
284  PIN[I]=lastPIN; // Remember the new P-Limit of the tables
285  }
286  }
287  else // This isotope wasn't initialized => CREATE
288  {
289  lastPAR = new G4double[nPoints]; // Allocate memory for parameters of CS function
290  lastPAR[nLast]=0; // Initialization for VALGRIND
291  lastCST = new G4double[nPoints]; // Allocate memory for Tabulated CS function
292  lastSST = new G4double[nPoints]; // Allocate memory for Tabulated first sqaredSlope
293  lastS1T = new G4double[nPoints]; // Allocate memory for Tabulated first mantissa
294  lastB1T = new G4double[nPoints]; // Allocate memory for Tabulated first slope
295  lastS2T = new G4double[nPoints]; // Allocate memory for Tabulated second mantissa
296  lastB2T = new G4double[nPoints]; // Allocate memory for Tabulated second slope
297  lastS3T = new G4double[nPoints]; // Allocate memory for Tabulated third mantissa
298  lastB3T = new G4double[nPoints]; // Allocate memory for Tabulated third slope
299  lastS4T = new G4double[nPoints]; // Allocate memory for Tabulated 4-th mantissa
300  lastB4T = new G4double[nPoints]; // Allocate memory for Tabulated 4-th slope
301  lastPIN = GetPTables(lastLP,lPMin,PDG,tgZ,tgN); // Returns the new P-limit for tables
302  PIN.push_back(lastPIN); // Fill parameters of CS function to AMDB
303  PAR.push_back(lastPAR); // Fill parameters of CS function to AMDB
304  CST.push_back(lastCST); // Fill Tabulated CS function to AMDB
305  SST.push_back(lastSST); // Fill Tabulated first sq.slope to AMDB
306  S1T.push_back(lastS1T); // Fill Tabulated first mantissa to AMDB
307  B1T.push_back(lastB1T); // Fill Tabulated first slope to AMDB
308  S2T.push_back(lastS2T); // Fill Tabulated second mantissa to AMDB
309  B2T.push_back(lastB2T); // Fill Tabulated second slope to AMDB
310  S3T.push_back(lastS3T); // Fill Tabulated third mantissa to AMDB
311  B3T.push_back(lastB3T); // Fill Tabulated third slope to AMDB
312  S4T.push_back(lastS4T); // Fill Tabulated 4-th mantissa to AMDB
313  B4T.push_back(lastB4T); // Fill Tabulated 4-th slope to AMDB
314  } // End of creation/update of the new set of parameters and tables
315  // =----------= NOW Update (if necessary) and Calculate the Cross Section =----------=
316  if(lastLP>lastPIN && lastLP<lPMax)
317  {
318  lastPIN = GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);
319  }
320  if(!onlyCS) lastTM=GetQ2max(PDG, tgZ, tgN, pMom); // Calculate (-t)_max=Q2_max (GeV2)
321  if(lastLP>lPMin && lastLP<=lastPIN) // Linear fit is made using precalculated tables
322  {
323  if(lastLP==lastPIN)
324  {
325  G4double shift=(lastLP-lPMin)/dlnP+.000001; // Log distance from lPMin
326  G4int blast=static_cast<int>(shift); // this is a bin number of the lower edge (0)
327  if(blast<0 || blast>=nLast) G4cout<<"G4QKPElCS::CCS:b="<<blast<<",n="<<nLast<<G4endl;
328  lastSIG = lastCST[blast];
329  if(!onlyCS) // Skip the differential cross-section parameters
330  {
331  theSS = lastSST[blast];
332  theS1 = lastS1T[blast];
333  theB1 = lastB1T[blast];
334  theS2 = lastS2T[blast];
335  theB2 = lastB2T[blast];
336  theS3 = lastS3T[blast];
337  theB3 = lastB3T[blast];
338  theS4 = lastS4T[blast];
339  theB4 = lastB4T[blast];
340  }
341  }
342  else
343  {
344  G4double shift=(lastLP-lPMin)/dlnP; // a shift from the beginning of the table
345  G4int blast=static_cast<int>(shift); // the lower bin number
346  if(blast<0) blast=0;
347  if(blast>=nLast) blast=nLast-1; // low edge of the last bin
348  shift-=blast; // step inside the unit bin
349  G4int lastL=blast+1; // the upper bin number
350  G4double SIGL=lastCST[blast]; // the basic value of the cross-section
351  lastSIG= SIGL+shift*(lastCST[lastL]-SIGL); // calculated total elastic cross-section
352  if(!onlyCS) // Skip the differential cross-section parameters
353  {
354  G4double SSTL=lastSST[blast]; // the low bin of the first squared slope
355  theSS=SSTL+shift*(lastSST[lastL]-SSTL); // the basic value of the first sq.slope
356  G4double S1TL=lastS1T[blast]; // the low bin of the first mantissa
357  theS1=S1TL+shift*(lastS1T[lastL]-S1TL); // the basic value of the first mantissa
358  G4double B1TL=lastB1T[blast]; // the low bin of the first slope
359  theB1=B1TL+shift*(lastB1T[lastL]-B1TL); // the basic value of the first slope
360  G4double S2TL=lastS2T[blast]; // the low bin of the second mantissa
361  theS2=S2TL+shift*(lastS2T[lastL]-S2TL); // the basic value of the second mantissa
362  G4double B2TL=lastB2T[blast]; // the low bin of the second slope
363  theB2=B2TL+shift*(lastB2T[lastL]-B2TL); // the basic value of the second slope
364  G4double S3TL=lastS3T[blast]; // the low bin of the third mantissa
365  theS3=S3TL+shift*(lastS3T[lastL]-S3TL); // the basic value of the third mantissa
366  G4double B3TL=lastB3T[blast]; // the low bin of the third slope
367  theB3=B3TL+shift*(lastB3T[lastL]-B3TL); // the basic value of the third slope
368  G4double S4TL=lastS4T[blast]; // the low bin of the 4-th mantissa
369  theS4=S4TL+shift*(lastS4T[lastL]-S4TL); // the basic value of the 4-th mantissa
370  G4double B4TL=lastB4T[blast]; // the low bin of the 4-th slope
371  theB4=B4TL+shift*(lastB4T[lastL]-B4TL); // the basic value of the 4-th slope
372  }
373  }
374  }
375  else lastSIG=GetTabValues(lastLP, PDG, tgZ, tgN); // Direct calculation beyond the table
376  if(lastSIG<0.) lastSIG = 0.; // @@ a Warning print can be added
377  return lastSIG;
378 }
std::vector< G4double * > SST
G4double GetPTables(G4double lpP, G4double lPm, G4int PDG, G4int tZ, G4int tN)
std::vector< G4double * > S1T
int G4int
Definition: G4Types.hh:78
std::vector< G4double * > B2T
std::vector< G4double * > S4T
G4double GetQ2max(G4int pPDG, G4int tgZ, G4int tgN, G4double pP)
std::vector< G4double * > B1T
G4GLOB_DLL std::ostream G4cout
std::vector< G4double * > CST
std::vector< G4double * > B4T
std::vector< G4double * > B3T
static const double GeV
Definition: G4SIunits.hh:214
std::vector< G4double * > S2T
#define G4endl
Definition: G4ios.hh:61
G4double GetTabValues(G4double lp, G4int pPDG, G4int tgZ, G4int tgN)
std::vector< G4double * > S3T
double G4double
Definition: G4Types.hh:76
std::vector< G4double * > PAR
Here is the call graph for this function:
Here is the caller graph for this function:

◆ CrossSectionDescription()

void G4ChipsKaonPlusElasticXS::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 160 of file G4ChipsKaonPlusElasticXS.cc.

161 {
162  outFile << "G4ChipsKaonPlusElasticXS provides the elastic cross\n"
163  << "section for K+ nucleus scattering as a function of incident\n"
164  << "momentum. The cross section is calculated using M. Kossov's\n"
165  << "CHIPS parameterization of cross section data.\n";
166 }
Here is the caller graph for this function:

◆ Default_Name()

static const char* G4ChipsKaonPlusElasticXS::Default_Name ( )
inlinestatic

Definition at line 54 of file G4ChipsKaonPlusElasticXS.hh.

54 {return "ChipsKaonPlusElasticXS";}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetChipsCrossSection()

G4double G4ChipsKaonPlusElasticXS::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 189 of file G4ChipsKaonPlusElasticXS.cc.

190 {
191 
192  G4bool fCS = false;
193  G4double pEn=pMom;
194  onlyCS=fCS;
195 
196  G4bool in=false; // By default the isotope must be found in the AMDB
197  lastP = 0.; // New momentum history (nothing to compare with)
198  lastN = tgN; // The last N of the calculated nucleus
199  lastZ = tgZ; // The last Z of the calculated nucleus
200  lastI = colN.size(); // Size of the Associative Memory DB in the heap
201  if(lastI) for(G4int i=0; i<lastI; i++) // Loop over proj/tgZ/tgN lines of DB
202  { // The nucleus with projPDG is found in AMDB
203  if(colN[i]==tgN && colZ[i]==tgZ) // Isotope is foind in AMDB
204  {
205  lastI=i;
206  lastTH =colTH[i]; // Last THreshold (A-dependent)
207  if(pEn<=lastTH)
208  {
209  return 0.; // Energy is below the Threshold value
210  }
211  lastP =colP [i]; // Last Momentum (A-dependent)
212  lastCS =colCS[i]; // Last CrossSect (A-dependent)
213  // if(std::fabs(lastP/pMom-1.)<tolerance) //VI (do not use tolerance)
214  if(lastP == pMom) // Do not recalculate
215  {
216  CalculateCrossSection(fCS,-1,i,321,lastZ,lastN,pMom); // Update param's only
217  return lastCS*millibarn; // Use theLastCS
218  }
219  in = true; // This is the case when the isotop is found in DB
220  // Momentum pMom is in IU ! @@ Units
221  lastCS=CalculateCrossSection(fCS,-1,i,321,lastZ,lastN,pMom); // read & update
222  if(lastCS<=0. && pEn>lastTH) // Correct the threshold
223  {
224  lastTH=pEn;
225  }
226  break; // Go out of the LOOP with found lastI
227  }
228  } // End of attampt to find the nucleus in DB
229  if(!in) // This nucleus has not been calculated previously
230  {
232  lastCS=CalculateCrossSection(fCS,0,lastI,321,lastZ,lastN,pMom);//calculate&create
233  if(lastCS<=0.)
234  {
235  lastTH = 0; //ThresholdEnergy(tgZ, tgN); // The Threshold Energy which is now the last
236  if(pEn>lastTH)
237  {
238  lastTH=pEn;
239  }
240  }
241  colN.push_back(tgN);
242  colZ.push_back(tgZ);
243  colP.push_back(pMom);
244  colTH.push_back(lastTH);
245  colCS.push_back(lastCS);
246  return lastCS*millibarn;
247  } // End of creation of the new set of parameters
248  else
249  {
250  colP[lastI]=pMom;
251  colCS[lastI]=lastCS;
252  }
253  return lastCS*millibarn;
254 }
ifstream in
Definition: comparison.C:7
int G4int
Definition: G4Types.hh:78
G4double CalculateCrossSection(G4bool CS, G4int F, G4int I, G4int pPDG, G4int Z, G4int N, G4double pP)
bool G4bool
Definition: G4Types.hh:79
static const double millibarn
Definition: G4SIunits.hh:105
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetExchangeT()

G4double G4ChipsKaonPlusElasticXS::GetExchangeT ( G4int  tZ,
G4int  tN,
G4int  pPDG 
)

Definition at line 617 of file G4ChipsKaonPlusElasticXS.cc.

618 {
619  if(PDG!=321) G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetExT:PDG="<<PDG<<G4endl;
620  if(onlyCS) G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetExT: onlyCS=1"<<G4endl;
621  if(lastLP<-4.3) return lastTM*GeVSQ*G4UniformRand();// S-wave for p<14 MeV/c (kinE<.1MeV)
622  G4double q2=0.;
623  if(tgZ==1 && tgN==0) // ===> p+p=p+p
624  {
625  G4double E1=lastTM*theB1;
626  G4double R1=(1.-std::exp(-E1));
627  G4double E2=lastTM*theB2;
628  G4double R2=(1.-std::exp(-E2*E2*E2));
629  G4double E3=lastTM*theB3;
630  G4double R3=(1.-std::exp(-E3));
631  G4double I1=R1*theS1/theB1;
632  G4double I2=R2*theS2;
633  G4double I3=R3*theS3;
634  G4double I12=I1+I2;
635  G4double rand=(I12+I3)*G4UniformRand();
636  if (rand<I1 )
637  {
638  G4double ran=R1*G4UniformRand();
639  if(ran>1.) ran=1.;
640  q2=-std::log(1.-ran)/theB1;
641  }
642  else if(rand<I12)
643  {
644  G4double ran=R2*G4UniformRand();
645  if(ran>1.) ran=1.;
646  q2=-std::log(1.-ran);
647  if(q2<0.) q2=0.;
648  q2=std::pow(q2,third)/theB2;
649  }
650  else
651  {
652  G4double ran=R3*G4UniformRand();
653  if(ran>1.) ran=1.;
654  q2=-std::log(1.-ran)/theB3;
655  }
656  }
657  else
658  {
659  G4double a=tgZ+tgN;
660  G4double E1=lastTM*(theB1+lastTM*theSS);
661  G4double R1=(1.-std::exp(-E1));
662  G4double tss=theSS+theSS; // for future solution of quadratic equation (imediate check)
663  G4double tm2=lastTM*lastTM;
664  G4double E2=lastTM*tm2*theB2; // power 3 for lowA, 5 for HighA (1st)
665  if(a>6.5)E2*=tm2; // for heavy nuclei
666  G4double R2=(1.-std::exp(-E2));
667  G4double E3=lastTM*theB3;
668  if(a>6.5)E3*=tm2*tm2*tm2; // power 1 for lowA, 7 (2nd) for HighA
669  G4double R3=(1.-std::exp(-E3));
670  G4double E4=lastTM*theB4;
671  G4double R4=(1.-std::exp(-E4));
672  G4double I1=R1*theS1;
673  G4double I2=R2*theS2;
674  G4double I3=R3*theS3;
675  G4double I4=R4*theS4;
676  G4double I12=I1+I2;
677  G4double I13=I12+I3;
678  G4double rand=(I13+I4)*G4UniformRand();
679  if(rand<I1)
680  {
681  G4double ran=R1*G4UniformRand();
682  if(ran>1.) ran=1.;
683  q2=-std::log(1.-ran)/theB1;
684  if(std::fabs(tss)>1.e-7) q2=(std::sqrt(theB1*(theB1+(tss+tss)*q2))-theB1)/tss;
685  }
686  else if(rand<I12)
687  {
688  G4double ran=R2*G4UniformRand();
689  if(ran>1.) ran=1.;
690  q2=-std::log(1.-ran)/theB2;
691  if(q2<0.) q2=0.;
692  if(a<6.5) q2=std::pow(q2,third);
693  else q2=std::pow(q2,fifth);
694  }
695  else if(rand<I13)
696  {
697  G4double ran=R3*G4UniformRand();
698  if(ran>1.) ran=1.;
699  q2=-std::log(1.-ran)/theB3;
700  if(q2<0.) q2=0.;
701  if(a>6.5) q2=std::pow(q2,sevth);
702  }
703  else
704  {
705  G4double ran=R4*G4UniformRand();
706  if(ran>1.) ran=1.;
707  q2=-std::log(1.-ran)/theB4;
708  if(a<6.5) q2=lastTM-q2; // u reduced for lightA (starts from 0)
709  }
710  }
711  if(q2<0.) q2=0.;
712  if(!(q2>=-1.||q2<=1.)) G4cout<<"*NAN*G4QKaonPlusElasticCS::GetExchT: -t="<<q2<<G4endl;
713  if(q2>lastTM)
714  {
715  q2=lastTM;
716  }
717  return q2*GeVSQ;
718 }
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
static const G4double third
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetHMaxT()

G4double G4ChipsKaonPlusElasticXS::GetHMaxT ( )
private

Definition at line 739 of file G4ChipsKaonPlusElasticXS.cc.

740 {
741  return lastTM*HGeVSQ;
742 }
Here is the caller graph for this function:

◆ GetIsoCrossSection()

G4double G4ChipsKaonPlusElasticXS::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 178 of file G4ChipsKaonPlusElasticXS.cc.

182 {
183  G4double pMom=Pt->GetTotalMomentum();
184  G4int tgN = A - tgZ;
185 
186  return GetChipsCrossSection(pMom, tgZ, tgN, 321);
187 }
G4double GetTotalMomentum() const
int G4int
Definition: G4Types.hh:78
double A(double temperature)
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPTables()

G4double G4ChipsKaonPlusElasticXS::GetPTables ( G4double  lpP,
G4double  lPm,
G4int  PDG,
G4int  tZ,
G4int  tN 
)
private

Definition at line 381 of file G4ChipsKaonPlusElasticXS.cc.

383 {
384  if(PDG == 321)
385  {
386  // -- Total pp elastic cross section cs & s1/b1 (main), s2/b2 (tail1), s3/b3 (tail2) --
387  //p2=p*p;p3=p2*p;sp=sqrt(p);p2s=p2*sp;lp=log(p);dl1=lp-(3.=par(3));p4=p2*p2; p=|3-mom|
388  //CS=2.865/p2s/(1+.0022/p2s)+(18.9+.6461*dl1*dl1+9./p)/(1.+.425*lp)/(1.+.4276/p4);
389  // par(0) par(7) par(1) par(2) par(4) par(5) par(6)
390  //dl2=lp-5., s1=(74.+3.*dl2*dl2)/(1+3.4/p4/p)+(.2/p2+17.*p)/(p4+.001*sp),
391  // par(8) par(9) par(10) par(11) par(12)par(13) par(14)
392  // b1=8.*p**.055/(1.+3.64/p3); s2=5.e-5+4000./(p4+1500.*p); b2=.46+1.2e6/(p4+3.5e6/sp);
393  // par(15) par(16) par(17) par(18) par(19) par(20) par(21) par(22) par(23)
394  // s3=5.e-5+1.e10/(p4*p4+8.5e8*p2+1.e10); b3=1.1+3.4e6/(p4+6.8e6); ss=0.
395  // par(24) par(25) par(26) par(27) par(28) par(29) par(30) par(31)
396  //
397  if(lastPAR[nLast]!=pwd) // A unique flag to avoid the repeatable definition
398  {
399  if ( tgZ == 1 && tgN == 0 )
400  {
401  for (G4int ip=0; ip<n_kppel; ip++) lastPAR[ip]=kpp_el[ip]; // KPlus+P
402  }
403  else
404  {
405  G4double a=tgZ+tgN;
406  G4double sa=std::sqrt(a);
407  G4double ssa=std::sqrt(sa);
408  G4double asa=a*sa;
409  G4double a2=a*a;
410  G4double a3=a2*a;
411  G4double a4=a3*a;
412  G4double a5=a4*a;
413  G4double a6=a4*a2;
414  G4double a7=a6*a;
415  G4double a8=a7*a;
416  G4double a9=a8*a;
417  G4double a10=a5*a5;
418  G4double a12=a6*a6;
419  G4double a14=a7*a7;
420  G4double a16=a8*a8;
421  G4double a17=a16*a;
422  //G4double a20=a16*a4;
423  G4double a32=a16*a16;
424  // Reaction cross-section parameters (kpael_fit.f)
425  lastPAR[0]=.06*asa/(1.+a*(.01+.1/ssa)); // p1
426  lastPAR[1]=.75*asa/(1.+.009*a); // p2
427  lastPAR[2]=.9*asa*ssa/(1.+.03*a); // p3
428  lastPAR[3]=3.; // p4
429  lastPAR[4]=4.2; // p5
430  lastPAR[5]=0.; // p6 not used
431  lastPAR[6]=0.; // p7 not used
432  lastPAR[7]=0.; // p8 not used
433  lastPAR[8]=0.; // p9 not used
434  // @@ the differential cross-section is parameterized separately for A>6 & A<7
435  if(a<6.5)
436  {
437  G4double a28=a16*a12;
438  // The main pre-exponent (pel_sg)
439  lastPAR[ 9]=4000*a; // p1
440  lastPAR[10]=1.2e7*a8+380*a17; // p2
441  lastPAR[11]=.7/(1.+4.e-12*a16); // p3
442  lastPAR[12]=2.5/a8/(a4+1.e-16*a32); // p4
443  lastPAR[13]=.28*a; // p5
444  lastPAR[14]=1.2*a2+2.3; // p6
445  lastPAR[15]=3.8/a; // p7
446  // The main slope (pel_sl)
447  lastPAR[16]=.01/(1.+.0024*a5); // p1
448  lastPAR[17]=.2*a; // p2
449  lastPAR[18]=9.e-7/(1.+.035*a5); // p3
450  lastPAR[19]=(42.+2.7e-11*a16)/(1.+.14*a); // p4
451  // The main quadratic (pel_sh)
452  lastPAR[20]=2.25*a3; // p1
453  lastPAR[21]=18.; // p2
454  lastPAR[22]=2.4e-3*a8/(1.+2.6e-4*a7); // p3
455  lastPAR[23]=3.5e-36*a32*a8/(1.+5.e-15*a32/a); // p4
456  // The 1st max pre-exponent (pel_qq)
457  lastPAR[24]=1.e5/(a8+2.5e12/a16); // p1
458  lastPAR[25]=8.e7/(a12+1.e-27*a28*a28); // p2
459  lastPAR[26]=.0006*a3; // p3
460  // The 1st max slope (pel_qs)
461  lastPAR[27]=10.+4.e-8*a12*a; // p1
462  lastPAR[28]=.114; // p2
463  lastPAR[29]=.003; // p3
464  lastPAR[30]=2.e-23; // p4
465  // The effective pre-exponent (pel_ss)
466  lastPAR[31]=1./(1.+.0001*a8); // p1
467  lastPAR[32]=1.5e-4/(1.+5.e-6*a12); // p2
468  lastPAR[33]=.03; // p3
469  // The effective slope (pel_sb)
470  lastPAR[34]=a/2; // p1
471  lastPAR[35]=2.e-7*a4; // p2
472  lastPAR[36]=4.; // p3
473  lastPAR[37]=64./a3; // p4
474  // The gloria pre-exponent (pel_us)
475  lastPAR[38]=1.e8*std::exp(.32*asa); // p1
476  lastPAR[39]=20.*std::exp(.45*asa); // p2
477  lastPAR[40]=7.e3+2.4e6/a5; // p3
478  lastPAR[41]=2.5e5*std::exp(.085*a3); // p4
479  lastPAR[42]=2.5*a; // p5
480  // The gloria slope (pel_ub)
481  lastPAR[43]=920.+.03*a8*a3; // p1
482  lastPAR[44]=93.+.0023*a12; // p2
483  }
484  else
485  {
486  G4double p1a10=2.2e-28*a10;
487  G4double r4a16=6.e14/a16;
488  G4double s4a16=r4a16*r4a16;
489  // a24
490  // a36
491  // The main pre-exponent (peh_sg)
492  lastPAR[ 9]=4.5*std::pow(a,1.15); // p1
493  lastPAR[10]=.06*std::pow(a,.6); // p2
494  lastPAR[11]=.6*a/(1.+2.e15/a16); // p3
495  lastPAR[12]=.17/(a+9.e5/a3+1.5e33/a32); // p4
496  lastPAR[13]=(.001+7.e-11*a5)/(1.+4.4e-11*a5); // p5
497  lastPAR[14]=(p1a10*p1a10+2.e-29)/(1.+2.e-22*a12); // p6
498  // The main slope (peh_sl)
499  lastPAR[15]=400./a12+2.e-22*a9; // p1
500  lastPAR[16]=1.e-32*a12/(1.+5.e22/a14); // p2
501  lastPAR[17]=1000./a2+9.5*sa*ssa; // p3
502  lastPAR[18]=4.e-6*a*asa+1.e11/a16; // p4
503  lastPAR[19]=(120./a+.002*a2)/(1.+2.e14/a16); // p5
504  lastPAR[20]=9.+100./a; // p6
505  // The main quadratic (peh_sh)
506  lastPAR[21]=.002*a3+3.e7/a6; // p1
507  lastPAR[22]=7.e-15*a4*asa; // p2
508  lastPAR[23]=9000./a4; // p3
509  // The 1st max pre-exponent (peh_qq)
510  lastPAR[24]=.0011*asa/(1.+3.e34/a32/a4); // p1
511  lastPAR[25]=1.e-5*a2+2.e14/a16; // p2
512  lastPAR[26]=1.2e-11*a2/(1.+1.5e19/a12); // p3
513  lastPAR[27]=.016*asa/(1.+5.e16/a16); // p4
514  // The 1st max slope (peh_qs)
515  lastPAR[28]=.002*a4/(1.+7.e7/std::pow(a-6.83,14)); // p1
516  lastPAR[29]=2.e6/a6+7.2/std::pow(a,.11); // p2
517  lastPAR[30]=11.*a3/(1.+7.e23/a16/a8); // p3
518  lastPAR[31]=100./asa; // p4
519  // The 2nd max pre-exponent (peh_ss)
520  lastPAR[32]=(.1+4.4e-5*a2)/(1.+5.e5/a4); // p1
521  lastPAR[33]=3.5e-4*a2/(1.+1.e8/a8); // p2
522  lastPAR[34]=1.3+3.e5/a4; // p3
523  lastPAR[35]=500./(a2+50.)+3; // p4
524  lastPAR[36]=1.e-9/a+s4a16*s4a16; // p5
525  // The 2nd max slope (peh_sb)
526  lastPAR[37]=.4*asa+3.e-9*a6; // p1
527  lastPAR[38]=.0005*a5; // p2
528  lastPAR[39]=.002*a5; // p3
529  lastPAR[40]=10.; // p4
530  // The effective pre-exponent (peh_us)
531  lastPAR[41]=.05+.005*a; // p1
532  lastPAR[42]=7.e-8/sa; // p2
533  lastPAR[43]=.8*sa; // p3
534  lastPAR[44]=.02*sa; // p4
535  lastPAR[45]=1.e8/a3; // p5
536  lastPAR[46]=3.e32/(a32+1.e32); // p6
537  // The effective slope (peh_ub)
538  lastPAR[47]=24.; // p1
539  lastPAR[48]=20./sa; // p2
540  lastPAR[49]=7.e3*a/(sa+1.); // p3
541  lastPAR[50]=900.*sa/(1.+500./a3); // p4
542  }
543  // Parameter for lowEnergyNeutrons
544  lastPAR[51]=1.e15+2.e27/a4/(1.+2.e-18*a16);
545  }
546  lastPAR[nLast]=pwd;
547  // and initialize the zero element of the table
548  G4double lp=lPMin; // ln(momentum)
549  G4bool memCS=onlyCS; // ??
550  onlyCS=false;
551  lastCST[0]=GetTabValues(lp, PDG, tgZ, tgN); // Calculate AMDB tables
552  onlyCS=memCS;
553  lastSST[0]=theSS;
554  lastS1T[0]=theS1;
555  lastB1T[0]=theB1;
556  lastS2T[0]=theS2;
557  lastB2T[0]=theB2;
558  lastS3T[0]=theS3;
559  lastB3T[0]=theB3;
560  lastS4T[0]=theS4;
561  lastB4T[0]=theB4;
562  }
563  if(LP>ILP)
564  {
565  G4int ini = static_cast<int>((ILP-lPMin+.000001)/dlnP)+1; // already inited till this
566  if(ini<0) ini=0;
567  if(ini<nPoints)
568  {
569  G4int fin = static_cast<int>((LP-lPMin)/dlnP)+1; // final bin of initialization
570  if(fin>=nPoints) fin=nLast; // Limit of the tabular initialization
571  if(fin>=ini)
572  {
573  G4double lp=0.;
574  for(G4int ip=ini; ip<=fin; ip++) // Calculate tabular CS,S1,B1,S2,B2,S3,B3
575  {
576  lp=lPMin+ip*dlnP; // ln(momentum)
577  G4bool memCS=onlyCS;
578  onlyCS=false;
579  lastCST[ip]=GetTabValues(lp, PDG, tgZ, tgN); // Calculate AMDB tables (ret CS)
580  onlyCS=memCS;
581  lastSST[ip]=theSS;
582  lastS1T[ip]=theS1;
583  lastB1T[ip]=theB1;
584  lastS2T[ip]=theS2;
585  lastB2T[ip]=theB2;
586  lastS3T[ip]=theS3;
587  lastB3T[ip]=theB3;
588  lastS4T[ip]=theS4;
589  lastB4T[ip]=theB4;
590  }
591  return lp;
592  }
593  else G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
594  <<", Z="<<tgZ<<", N="<<tgN<<", i="<<ini<<" > fin="<<fin<<", LP="<<LP
595  <<" > ILP="<<ILP<<" nothing is done!"<<G4endl;
596  }
597  else G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
598  <<", Z="<<tgZ<<", N="<<tgN<<", i="<<ini<<">= max="<<nPoints<<", LP="<<LP
599  <<" > ILP="<<ILP<<", lPMax="<<lPMax<<" nothing is done!"<<G4endl;
600  }
601  }
602  else
603  {
604  // G4cout<<"*Error*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG<<", Z="<<tgZ
605  // <<", N="<<tgN<<", while it is defined only for PDG=321"<<G4endl;
606  // throw G4QException("G4ChipsKaonPlusElasticXS::GetPTables:onlyK+ is implemented");
608  ed << "PDG = " << PDG << ", Z = " << tgZ << ", N = " << tgN
609  << ", while it is defined only for PDG=321 (K+) " << G4endl;
610  G4Exception("G4ChipsKaonPlusElasticXS::GetPTables()", "HAD_CHPS_0000",
611  FatalException, ed);
612  }
613  return ILP;
614 }
TString fin
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
static const G4double a4
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
bool G4bool
Definition: G4Types.hh:79
static const G4double a3
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
G4double GetTabValues(G4double lp, G4int pPDG, G4int tgZ, G4int tgN)
static const G4double a5
double G4double
Definition: G4Types.hh:76
static const G4double a2
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetQ2max()

G4double G4ChipsKaonPlusElasticXS::GetQ2max ( G4int  pPDG,
G4int  tgZ,
G4int  tgN,
G4double  pP 
)
private

Definition at line 840 of file G4ChipsKaonPlusElasticXS.cc.

842 {
843  G4double pP2=pP*pP; // squared momentum of the projectile
844  if(tgZ || tgN>-1) // ---> pipA
845  {
846  G4double mt=G4ParticleTable::GetParticleTable()->GetIonTable()->GetIon(tgZ,tgZ+tgN,0)->GetPDGMass()*.001; // Target mass in GeV
847 
848  G4double dmt=mt+mt;
849  G4double mds=dmt*std::sqrt(pP2+mK2)+mK2+mt*mt; // Mondelstam mds
850  return dmt*dmt*pP2/mds;
851  }
852  else
853  {
855  ed << "PDG = " << PDG << ",Z = " << tgZ << ", N = " << tgN
856  << ", while it is defined only for p projectiles & Z_target>0" << G4endl;
857  G4Exception("G4ChipsKaonPlusElasticXS::GetQ2max()", "HAD_CHPS_0000",
858  FatalException, ed);
859  return 0;
860  }
861 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
G4IonTable * GetIonTable() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSlope()

G4double G4ChipsKaonPlusElasticXS::GetSlope ( G4int  tZ,
G4int  tN,
G4int  pPDG 
)
private

Definition at line 721 of file G4ChipsKaonPlusElasticXS.cc.

722 {
723  if(onlyCS)G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetSl:onlCS=true"<<G4endl;
724  if(lastLP<-4.3) return 0.; // S-wave for p<14 MeV/c (kinE<.1MeV)
725  if(PDG != 321)
726  {
728  ed << "PDG = " << PDG << ", Z = " << tgZ << ", N = " << tgN
729  << ", while it is defined only for PDG=321 (K+)" << G4endl;
730  G4Exception("G4ChipsKaonPlusElasticXS::GetSlope()", "HAD_CHPS_0000",
731  FatalException, ed);
732  }
733  if(theB1<0.) theB1=0.;
734  if(!(theB1>=-1.||theB1<=1.))G4cout<<"*NAN*G4QKaonPlusElCS::GetSlope:B1="<<theB1<<G4endl;
735  return theB1/GeVSQ;
736 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTabValues()

G4double G4ChipsKaonPlusElasticXS::GetTabValues ( G4double  lp,
G4int  pPDG,
G4int  tgZ,
G4int  tgN 
)
private

Definition at line 745 of file G4ChipsKaonPlusElasticXS.cc.

747 {
748  if(PDG!=321)G4cout<<"*Warning*G4ChipsKaonPlusElasticXS::GetTaV:PDG="<<PDG<<G4endl;
749  if(tgZ<0 || tgZ>92)
750  {
751  G4cout<<"*Warning*G4QKaonPlusElasticCS::GetTabV:(1-92)NoIsotopes for Z="<<tgZ<<G4endl;
752  return 0.;
753  }
754  G4int iZ=tgZ-1; // Z index
755  if(iZ<0)
756  {
757  iZ=0; // conversion of the neutron target to the proton target
758  tgZ=1;
759  tgN=0;
760  }
761  G4double p=std::exp(lp); // momentum
762  G4double sp=std::sqrt(p); // sqrt(p)
763  G4double p2=p*p;
764  G4double p3=p2*p;
765  G4double p4=p3*p;
766  if ( tgZ == 1 && tgN == 0 ) // KaonPlus+P
767  {
768  G4double dl2=lp-lastPAR[11];
769  theSS=lastPAR[34];
770  theS1=(lastPAR[12]+lastPAR[13]*dl2*dl2)/(1.+lastPAR[14]/p4/p)+
771  (lastPAR[15]/p2+lastPAR[16]*p)/(p4+lastPAR[17]*sp);
772  theB1=lastPAR[18]*std::pow(p,lastPAR[19])/(1.+lastPAR[20]/p3);
773  theS2=lastPAR[21]+lastPAR[22]/(p4+lastPAR[23]*p);
774  theB2=lastPAR[24]+lastPAR[25]/(p4+lastPAR[26]/sp);
775  theS3=lastPAR[27]+lastPAR[28]/(p4*p4+lastPAR[29]*p2+lastPAR[30]);
776  theB3=lastPAR[31]+lastPAR[32]/(p4+lastPAR[33]);
777  theS4=0.;
778  theB4=0.;
779  // Returns the total elastic pim-p cross-section (to avoid spoiling lastSIG)
780  G4double dp=lp-lastPAR[4];
781 //G4cout<<"lastPAR[8] "<<lastPAR[8]<<" lastPAR[9] "<<lastPAR[9]<<" lastPAR[10] "<<lastPAR[10]<<G4endl;
782  return lastPAR[0]/(lastPAR[2]+sqr(p-lastPAR[1]))+(lastPAR[3]*dp*dp+lastPAR[5])/
783  (1.-lastPAR[6]/sp+lastPAR[7]/p4)
784  +lastPAR[8]/(sqr(p-lastPAR[9])+lastPAR[10]); // Uzhi
785 
786  }
787  else
788  {
789  G4double p5=p4*p;
790  G4double p6=p5*p;
791  G4double p8=p6*p2;
792  G4double p10=p8*p2;
793  G4double p12=p10*p2;
794  G4double p16=p8*p8;
795  //G4double p24=p16*p8;
796  G4double dl=lp-5.;
797  G4double a=tgZ+tgN;
798  G4double pah=std::pow(p,a/2);
799  G4double pa=pah*pah;
800  G4double pa2=pa*pa;
801  if(a<6.5)
802  {
803  theS1=lastPAR[9]/(1.+lastPAR[10]*p4*pa)+lastPAR[11]/(p4+lastPAR[12]*p4/pa2)+
804  (lastPAR[13]*dl*dl+lastPAR[14])/(1.+lastPAR[15]/p2);
805  theB1=(lastPAR[16]+lastPAR[17]*p2)/(p4+lastPAR[18]/pah)+lastPAR[19];
806  theSS=lastPAR[20]/(1.+lastPAR[21]/p2)+lastPAR[22]/(p6/pa+lastPAR[23]/p16);
807  theS2=lastPAR[24]/(pa/p2+lastPAR[25]/p4)+lastPAR[26];
808  theB2=lastPAR[27]*std::pow(p,lastPAR[28])+lastPAR[29]/(p8+lastPAR[30]/p16);
809  theS3=lastPAR[31]/(pa*p+lastPAR[32]/pa)+lastPAR[33];
810  theB3=lastPAR[34]/(p3+lastPAR[35]/p6)+lastPAR[36]/(1.+lastPAR[37]/p2);
811  theS4=p2*(pah*lastPAR[38]*std::exp(-pah*lastPAR[39])+
812  lastPAR[40]/(1.+lastPAR[41]*std::pow(p,lastPAR[42])));
813  theB4=lastPAR[43]*pa/p2/(1.+pa*lastPAR[44]);
814  }
815  else
816  {
817  theS1=lastPAR[9]/(1.+lastPAR[10]/p4)+lastPAR[11]/(p4+lastPAR[12]/p2)+
818  lastPAR[13]/(p5+lastPAR[14]/p16);
819  theB1=(lastPAR[15]/p8+lastPAR[19])/(p+lastPAR[16]/std::pow(p,lastPAR[20]))+
820  lastPAR[17]/(1.+lastPAR[18]/p4);
821  theSS=lastPAR[21]/(p4/std::pow(p,lastPAR[23])+lastPAR[22]/p4);
822  theS2=lastPAR[24]/p4/(std::pow(p,lastPAR[25])+lastPAR[26]/p12)+lastPAR[27];
823  theB2=lastPAR[28]/std::pow(p,lastPAR[29])+lastPAR[30]/std::pow(p,lastPAR[31]);
824  theS3=lastPAR[32]/std::pow(p,lastPAR[35])/(1.+lastPAR[36]/p12)+
825  lastPAR[33]/(1.+lastPAR[34]/p6);
826  theB3=lastPAR[37]/p8+lastPAR[38]/p2+lastPAR[39]/(1.+lastPAR[40]/p8);
827  theS4=(lastPAR[41]/p4+lastPAR[46]/p)/(1.+lastPAR[42]/p10)+
828  (lastPAR[43]+lastPAR[44]*dl*dl)/(1.+lastPAR[45]/p12);
829  theB4=lastPAR[47]/(1.+lastPAR[48]/p)+lastPAR[49]*p4/(1.+lastPAR[50]*p5);
830  }
831  // Returns the total elastic (n/p)A cross-section (to avoid spoiling lastSIG)
832  G4double dlp=lp-lastPAR[4]; // ax
833  // p1 p2 p3 p4
834  return (lastPAR[0]*dlp*dlp+lastPAR[1]+lastPAR[2]/p2)/(1.+lastPAR[3]/p2/sp);
835  }
836  return 0.;
837 } // End of GetTableValues
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsIsoApplicable()

G4bool G4ChipsKaonPlusElasticXS::IsIsoApplicable ( const G4DynamicParticle Pt,
G4int  Z,
G4int  A,
const G4Element elm,
const G4Material mat 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 169 of file G4ChipsKaonPlusElasticXS.cc.

172 {
173  return true;
174 }
Here is the caller graph for this function:

Member Data Documentation

◆ B1T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::B1T
private

Definition at line 131 of file G4ChipsKaonPlusElasticXS.hh.

◆ B2T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::B2T
private

Definition at line 133 of file G4ChipsKaonPlusElasticXS.hh.

◆ B3T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::B3T
private

Definition at line 135 of file G4ChipsKaonPlusElasticXS.hh.

◆ B4T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::B4T
private

Definition at line 137 of file G4ChipsKaonPlusElasticXS.hh.

◆ colCS

std::vector<G4double> G4ChipsKaonPlusElasticXS::colCS
private

Definition at line 143 of file G4ChipsKaonPlusElasticXS.hh.

◆ colN

std::vector<G4int> G4ChipsKaonPlusElasticXS::colN
private

Definition at line 139 of file G4ChipsKaonPlusElasticXS.hh.

◆ colP

std::vector<G4double> G4ChipsKaonPlusElasticXS::colP
private

Definition at line 141 of file G4ChipsKaonPlusElasticXS.hh.

◆ colTH

std::vector<G4double> G4ChipsKaonPlusElasticXS::colTH
private

Definition at line 142 of file G4ChipsKaonPlusElasticXS.hh.

◆ colZ

std::vector<G4int> G4ChipsKaonPlusElasticXS::colZ
private

Definition at line 140 of file G4ChipsKaonPlusElasticXS.hh.

◆ CST

std::vector<G4double*> G4ChipsKaonPlusElasticXS::CST
private

Definition at line 128 of file G4ChipsKaonPlusElasticXS.hh.

◆ dlnP

G4double G4ChipsKaonPlusElasticXS::dlnP
private

Definition at line 90 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastB1T

G4double* G4ChipsKaonPlusElasticXS::lastB1T
private

Definition at line 119 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastB2T

G4double* G4ChipsKaonPlusElasticXS::lastB2T
private

Definition at line 121 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastB3T

G4double* G4ChipsKaonPlusElasticXS::lastB3T
private

Definition at line 123 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastB4T

G4double* G4ChipsKaonPlusElasticXS::lastB4T
private

Definition at line 125 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastCS

G4double G4ChipsKaonPlusElasticXS::lastCS
private

Definition at line 100 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastCST

G4double* G4ChipsKaonPlusElasticXS::lastCST
private

Definition at line 115 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastI

G4int G4ChipsKaonPlusElasticXS::lastI
private

Definition at line 101 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastLP

G4double G4ChipsKaonPlusElasticXS::lastLP
private

Definition at line 94 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastN

G4int G4ChipsKaonPlusElasticXS::lastN
private

Definition at line 96 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastP

G4double G4ChipsKaonPlusElasticXS::lastP
private

Definition at line 98 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastPAR

G4double* G4ChipsKaonPlusElasticXS::lastPAR
private

Definition at line 116 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastPIN

G4double G4ChipsKaonPlusElasticXS::lastPIN
private

Definition at line 114 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastS1T

G4double* G4ChipsKaonPlusElasticXS::lastS1T
private

Definition at line 118 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastS2T

G4double* G4ChipsKaonPlusElasticXS::lastS2T
private

Definition at line 120 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastS3T

G4double* G4ChipsKaonPlusElasticXS::lastS3T
private

Definition at line 122 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastS4T

G4double* G4ChipsKaonPlusElasticXS::lastS4T
private

Definition at line 124 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastSIG

G4double G4ChipsKaonPlusElasticXS::lastSIG
private

Definition at line 93 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastSST

G4double* G4ChipsKaonPlusElasticXS::lastSST
private

Definition at line 117 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastTH

G4double G4ChipsKaonPlusElasticXS::lastTH
private

Definition at line 99 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastTM

G4double G4ChipsKaonPlusElasticXS::lastTM
private

Definition at line 95 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastTN

G4int G4ChipsKaonPlusElasticXS::lastTN
private

Definition at line 113 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastTZ

G4int G4ChipsKaonPlusElasticXS::lastTZ
private

Definition at line 112 of file G4ChipsKaonPlusElasticXS.hh.

◆ lastZ

G4int G4ChipsKaonPlusElasticXS::lastZ
private

Definition at line 97 of file G4ChipsKaonPlusElasticXS.hh.

◆ lPMax

G4double G4ChipsKaonPlusElasticXS::lPMax
private

Definition at line 89 of file G4ChipsKaonPlusElasticXS.hh.

◆ lPMin

G4double G4ChipsKaonPlusElasticXS::lPMin
private

Definition at line 88 of file G4ChipsKaonPlusElasticXS.hh.

◆ nLast

const G4int G4ChipsKaonPlusElasticXS::nLast
private

Definition at line 87 of file G4ChipsKaonPlusElasticXS.hh.

◆ nPoints

const G4int G4ChipsKaonPlusElasticXS::nPoints
private

Definition at line 86 of file G4ChipsKaonPlusElasticXS.hh.

◆ onlyCS

G4bool G4ChipsKaonPlusElasticXS::onlyCS
private

Definition at line 92 of file G4ChipsKaonPlusElasticXS.hh.

◆ PAR

std::vector<G4double*> G4ChipsKaonPlusElasticXS::PAR
private

Definition at line 127 of file G4ChipsKaonPlusElasticXS.hh.

◆ PIN

std::vector<G4double> G4ChipsKaonPlusElasticXS::PIN
private

Definition at line 145 of file G4ChipsKaonPlusElasticXS.hh.

◆ S1T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::S1T
private

Definition at line 130 of file G4ChipsKaonPlusElasticXS.hh.

◆ S2T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::S2T
private

Definition at line 132 of file G4ChipsKaonPlusElasticXS.hh.

◆ S3T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::S3T
private

Definition at line 134 of file G4ChipsKaonPlusElasticXS.hh.

◆ S4T

std::vector<G4double*> G4ChipsKaonPlusElasticXS::S4T
private

Definition at line 136 of file G4ChipsKaonPlusElasticXS.hh.

◆ SST

std::vector<G4double*> G4ChipsKaonPlusElasticXS::SST
private

Definition at line 129 of file G4ChipsKaonPlusElasticXS.hh.

◆ theB1

G4double G4ChipsKaonPlusElasticXS::theB1
private

Definition at line 104 of file G4ChipsKaonPlusElasticXS.hh.

◆ theB2

G4double G4ChipsKaonPlusElasticXS::theB2
private

Definition at line 106 of file G4ChipsKaonPlusElasticXS.hh.

◆ theB3

G4double G4ChipsKaonPlusElasticXS::theB3
private

Definition at line 108 of file G4ChipsKaonPlusElasticXS.hh.

◆ theB4

G4double G4ChipsKaonPlusElasticXS::theB4
private

Definition at line 110 of file G4ChipsKaonPlusElasticXS.hh.

◆ theS1

G4double G4ChipsKaonPlusElasticXS::theS1
private

Definition at line 103 of file G4ChipsKaonPlusElasticXS.hh.

◆ theS2

G4double G4ChipsKaonPlusElasticXS::theS2
private

Definition at line 105 of file G4ChipsKaonPlusElasticXS.hh.

◆ theS3

G4double G4ChipsKaonPlusElasticXS::theS3
private

Definition at line 107 of file G4ChipsKaonPlusElasticXS.hh.

◆ theS4

G4double G4ChipsKaonPlusElasticXS::theS4
private

Definition at line 109 of file G4ChipsKaonPlusElasticXS.hh.

◆ theSS

G4double G4ChipsKaonPlusElasticXS::theSS
private

Definition at line 102 of file G4ChipsKaonPlusElasticXS.hh.


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