Geant4  10.02.p03
G4ChipsPionPlusElasticXS Class Reference

#include <G4ChipsPionPlusElasticXS.hh>

Inheritance diagram for G4ChipsPionPlusElasticXS:
Collaboration diagram for G4ChipsPionPlusElasticXS:

Public Member Functions

 G4ChipsPionPlusElasticXS ()
 
 ~G4ChipsPionPlusElasticXS ()
 
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 G4ChipsPionPlusElasticXS.hh.

Constructor & Destructor Documentation

◆ G4ChipsPionPlusElasticXS()

G4ChipsPionPlusElasticXS::G4ChipsPionPlusElasticXS ( )

Definition at line 58 of file G4ChipsPionPlusElasticXS.cc.

59 {
60  lPMin=-8.; // Min tabulated logarithmMomentum(D)
61  lPMax= 8.; // Max tabulated logarithmMomentum(D)
62  dlnP=(lPMax-lPMin)/nLast;// LogStep inTheTable(D)
63  onlyCS=true;// Flag toCalcul OnlyCS(not Si/Bi)(L)
64  lastSIG=0.; // Last calculated cross section (L)
65  lastLP=-10.;// Last log(mom_of IncidentHadron)(L)
66  lastTM=0.; // Last t_maximum (L)
67  theSS=0.; // TheLastSqSlope of 1st difr.Max(L)
68  theS1=0.; // TheLastMantissa of 1st difr.Max(L)
69  theB1=0.; // TheLastSlope of 1st difruct.Max(L)
70  theS2=0.; // TheLastMantissa of 2nd difr.Max(L)
71  theB2=0.; // TheLastSlope of 2nd difruct.Max(L)
72  theS3=0.; // TheLastMantissa of 3d difr. Max(L)
73  theB3=0.; // TheLastSlope of 3d difruct. Max(L)
74  theS4=0.; // TheLastMantissa of 4th difr.Max(L)
75  theB4=0.; // TheLastSlope of 4th difruct.Max(L)
76  lastTZ=0; // Last atomic number of the target
77  lastTN=0; // Last # of neutrons in the target
78  lastPIN=0.; // Last initialized max momentum
79  lastCST=0; // Elastic cross-section table
80  lastPAR=0; // ParametersForFunctionalCalculation
81  lastSST=0; // E-dep of SqaredSlope of 1st difMax
82  lastS1T=0; // E-dep of mantissa of 1st dif.Max
83  lastB1T=0; // E-dep of the slope of 1st difMax
84  lastS2T=0; // E-dep of mantissa of 2nd difrMax
85  lastB2T=0; // E-dep of the slope of 2nd difMax
86  lastS3T=0; // E-dep of mantissa of 3d difr.Max
87  lastB3T=0; // E-dep of the slope of 3d difrMax
88  lastS4T=0; // E-dep of mantissa of 4th difrMax
89  lastB4T=0; // E-dep of the slope of 4th difMax
90  lastN=0; // The last N of calculated nucleus
91  lastZ=0; // The last Z of calculated nucleus
92  lastP=0.; // LastUsed in cross section Momentum
93  lastTH=0.; // Last threshold momentum
94  lastCS=0.; // Last value of the Cross Section
95  lastI=0; // The last position in the DAMDB
96 }
G4VCrossSectionDataSet(const G4String &nam="")
static const char * Default_Name()

◆ ~G4ChipsPionPlusElasticXS()

G4ChipsPionPlusElasticXS::~G4ChipsPionPlusElasticXS ( )

Definition at line 98 of file G4ChipsPionPlusElasticXS.cc.

99 {
100  std::vector<G4double*>::iterator pos;
101  for (pos=CST.begin(); pos<CST.end(); pos++)
102  { delete [] *pos; }
103  CST.clear();
104  for (pos=PAR.begin(); pos<PAR.end(); pos++)
105  { delete [] *pos; }
106  PAR.clear();
107  for (pos=SST.begin(); pos<SST.end(); pos++)
108  { delete [] *pos; }
109  SST.clear();
110  for (pos=S1T.begin(); pos<S1T.end(); pos++)
111  { delete [] *pos; }
112  S1T.clear();
113  for (pos=B1T.begin(); pos<B1T.end(); pos++)
114  { delete [] *pos; }
115  B1T.clear();
116  for (pos=S2T.begin(); pos<S2T.end(); pos++)
117  { delete [] *pos; }
118  S2T.clear();
119  for (pos=B2T.begin(); pos<B2T.end(); pos++)
120  { delete [] *pos; }
121  B2T.clear();
122  for (pos=S3T.begin(); pos<S3T.end(); pos++)
123  { delete [] *pos; }
124  S3T.clear();
125  for (pos=B3T.begin(); pos<B3T.end(); pos++)
126  { delete [] *pos; }
127  B3T.clear();
128  for (pos=S4T.begin(); pos<S4T.end(); pos++)
129  { delete [] *pos; }
130  S4T.clear();
131  for (pos=B4T.begin(); pos<B4T.end(); pos++)
132  { delete [] *pos; }
133  B4T.clear();
134 }
std::vector< G4double * > CST
std::vector< G4double * > B2T
std::vector< G4double * > PAR
std::vector< G4double * > S3T
std::vector< G4double * > S1T
std::vector< G4double * > B3T
std::vector< G4double * > S4T
std::vector< G4double * > B1T
std::vector< G4double * > B4T
std::vector< G4double * > S2T
std::vector< G4double * > SST
static const G4double pos

Member Function Documentation

◆ CalculateCrossSection()

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

Definition at line 234 of file G4ChipsPionPlusElasticXS.cc.

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

◆ CrossSectionDescription()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 137 of file G4ChipsPionPlusElasticXS.cc.

138 {
139  outFile << "G4ChipsPionPlusElasticXS provides the elastic cross\n"
140  << "section for pion+ nucleus scattering as a function of incident\n"
141  << "momentum. The cross section is calculated using M. Kossov's\n"
142  << "CHIPS parameterization of cross section data.\n";
143 }
Here is the caller graph for this function:

◆ Default_Name()

static const char* G4ChipsPionPlusElasticXS::Default_Name ( )
inlinestatic

Definition at line 54 of file G4ChipsPionPlusElasticXS.hh.

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

◆ GetChipsCrossSection()

G4double G4ChipsPionPlusElasticXS::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 166 of file G4ChipsPionPlusElasticXS.cc.

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

◆ GetExchangeT()

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

Definition at line 602 of file G4ChipsPionPlusElasticXS.cc.

603 {
604  static const G4double GeVSQ=gigaelectronvolt*gigaelectronvolt;
605  static const G4double third=1./3.;
606  static const G4double fifth=1./5.;
607  static const G4double sevth=1./7.;
608  if(PDG!= 211)G4cout<<"*Warning*G4ChipsPionPlusElasticXS::GetExT:PDG="<<PDG<<G4endl;
609  if(onlyCS)G4cout<<"*Warning*G4ChipsPionPlusElasticXS::GetExchanT:onlyCS=1"<<G4endl;
610  if(lastLP<-4.3) return lastTM*GeVSQ*G4UniformRand();// S-wave for p<14 MeV/c (kinE<.1MeV)
611  G4double q2=0.;
612  if(tgZ==1 && tgN==0) // ===> p+p=p+p
613  {
614  G4double E1=lastTM*theB1;
615  G4double R1=(1.-G4Exp(-E1));
616  G4double E2=lastTM*theB2;
617  G4double R2=(1.-G4Exp(-E2*E2*E2));
618  G4double E3=lastTM*theB3;
619  G4double R3=(1.-G4Exp(-E3));
620  G4double I1=R1*theS1/theB1;
621  G4double I2=R2*theS2;
622  G4double I3=R3*theS3;
623  G4double I12=I1+I2;
624  G4double rand=(I12+I3)*G4UniformRand();
625  if (rand<I1 )
626  {
627  G4double ran=R1*G4UniformRand();
628  if(ran>1.) ran=1.;
629  q2=-G4Log(1.-ran)/theB1;
630  }
631  else if(rand<I12)
632  {
633  G4double ran=R2*G4UniformRand();
634  if(ran>1.) ran=1.;
635  q2=-G4Log(1.-ran);
636  if(q2<0.) q2=0.;
637  q2=G4Pow::GetInstance()->powA(q2,third)/theB2;
638  }
639  else
640  {
641  G4double ran=R3*G4UniformRand();
642  if(ran>1.) ran=1.;
643  q2=-G4Log(1.-ran)/theB3;
644  }
645  }
646  else
647  {
648  G4double a=tgZ+tgN;
649  G4double E1=lastTM*(theB1+lastTM*theSS);
650  G4double R1=(1.-G4Exp(-E1));
651  G4double tss=theSS+theSS; // for future solution of quadratic equation (imediate check)
652  G4double tm2=lastTM*lastTM;
653  G4double E2=lastTM*tm2*theB2; // power 3 for lowA, 5 for HighA (1st)
654  if(a>6.5)E2*=tm2; // for heavy nuclei
655  G4double R2=(1.-G4Exp(-E2));
656  G4double E3=lastTM*theB3;
657  if(a>6.5)E3*=tm2*tm2*tm2; // power 1 for lowA, 7 (2nd) for HighA
658  G4double R3=(1.-G4Exp(-E3));
659  G4double E4=lastTM*theB4;
660  G4double R4=(1.-G4Exp(-E4));
661  G4double I1=R1*theS1;
662  G4double I2=R2*theS2;
663  G4double I3=R3*theS3;
664  G4double I4=R4*theS4;
665  G4double I12=I1+I2;
666  G4double I13=I12+I3;
667  G4double rand=(I13+I4)*G4UniformRand();
668  if(rand<I1)
669  {
670  G4double ran=R1*G4UniformRand();
671  if(ran>1.) ran=1.;
672  q2=-G4Log(1.-ran)/theB1;
673  if(std::fabs(tss)>1.e-7) q2=(std::sqrt(theB1*(theB1+(tss+tss)*q2))-theB1)/tss;
674  }
675  else if(rand<I12)
676  {
677  G4double ran=R2*G4UniformRand();
678  if(ran>1.) ran=1.;
679  q2=-G4Log(1.-ran)/theB2;
680  if(q2<0.) q2=0.;
681  if(a<6.5) q2=G4Pow::GetInstance()->powA(q2,third);
682  else q2=G4Pow::GetInstance()->powA(q2,fifth);
683  }
684  else if(rand<I13)
685  {
686  G4double ran=R3*G4UniformRand();
687  if(ran>1.) ran=1.;
688  q2=-G4Log(1.-ran)/theB3;
689  if(q2<0.) q2=0.;
690  if(a>6.5) q2=G4Pow::GetInstance()->powA(q2,sevth);
691  }
692  else
693  {
694  G4double ran=R4*G4UniformRand();
695  if(ran>1.) ran=1.;
696  q2=-G4Log(1.-ran)/theB4;
697  if(a<6.5) q2=lastTM-q2; // u reduced for lightA (starts from 0)
698  }
699  }
700  if(q2<0.) q2=0.;
701  if(!(q2>=-1.||q2<=1.)) G4cout<<"*NAN*G4QElasticCrossSect::GetExchangeT: -t="<<q2<<G4endl;
702  if(q2>lastTM)
703  {
704  q2=lastTM;
705  }
706  return q2*GeVSQ;
707 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
#define G4UniformRand()
Definition: Randomize.hh:97
G4GLOB_DLL std::ostream G4cout
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
static const double gigaelectronvolt
Definition: G4SIunits.hh:206
#define G4endl
Definition: G4ios.hh:61
static const G4double third
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetHMaxT()

G4double G4ChipsPionPlusElasticXS::GetHMaxT ( )
private

Definition at line 732 of file G4ChipsPionPlusElasticXS.cc.

733 {
734  static const G4double HGeVSQ=gigaelectronvolt*gigaelectronvolt/2.;
735  return lastTM*HGeVSQ;
736 }
static const double gigaelectronvolt
Definition: G4SIunits.hh:206
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ GetIsoCrossSection()

G4double G4ChipsPionPlusElasticXS::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 154 of file G4ChipsPionPlusElasticXS.cc.

159 {
160  G4double pMom=Pt->GetTotalMomentum();
161  G4int tgN = A - tgZ;
162 
163  return GetChipsCrossSection(pMom, tgZ, tgN, 211);
164 }
G4double GetTotalMomentum() const
virtual G4double GetChipsCrossSection(G4double momentum, G4int Z, G4int N, G4int pdg)
int G4int
Definition: G4Types.hh:78
double A(double temperature)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPTables()

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

Definition at line 357 of file G4ChipsPionPlusElasticXS.cc.

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

Definition at line 835 of file G4ChipsPionPlusElasticXS.cc.

837 {
838  static const G4double mPi= G4PionPlus::PionPlus()->GetPDGMass()*.001; // MeV to GeV
839  static const G4double mPi2= mPi*mPi;
840  G4double pP2=pP*pP; // squared momentum of the projectile
841  if(tgZ || tgN>-1) // ---> pipA
842  {
843  G4double mt=G4ParticleTable::GetParticleTable()->GetIonTable()->GetIon(tgZ,tgZ+tgN,0)->GetPDGMass()*.001; // Target mass in GeV
844  G4double dmt=mt+mt;
845  G4double mds=dmt*std::sqrt(pP2+mPi2)+mPi2+mt*mt; // Mondelstam mds
846  return dmt*dmt*pP2/mds;
847  }
848  else
849  {
851  ed << "PDG = " << PDG << ", Z = " << tgZ << ",N = " << tgN
852  << ", while it is defined only for p projectiles & Z_target>0" << G4endl;
853  G4Exception("G4ChipsPionPlusElasticXS::GetQ2max()", "HAD_CHPS_0000",
854  FatalException, ed);
855  return 0;
856  }
857 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
Definition: G4IonTable.cc:491
G4IonTable * GetIonTable() const
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
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 G4ChipsPionPlusElasticXS::GetSlope ( G4int  tZ,
G4int  tN,
G4int  pPDG 
)
private

Definition at line 710 of file G4ChipsPionPlusElasticXS.cc.

711 {
712  static const G4double GeVSQ=gigaelectronvolt*gigaelectronvolt;
713  if(onlyCS)G4cout<<"Warning*G4ChipsPionPlusElasticXS::GetSlope:onlyCS=true"<<G4endl;
714  if(lastLP<-4.3) return 0.; // S-wave for p<14 MeV/c (kinE<.1MeV)
715  if(PDG != 211)
716  {
717  // G4cout<<"*Error*G4ChipsPionPlusElasticXS::GetSlope: PDG="<<PDG<<", Z="<<tgZ
718  // <<", N="<<tgN<<", while it is defined only for PDG=211"<<G4endl;
719  // throw G4QException("G4ChipsPionPlusElasticXS::GetSlope: pipA are implemented");
721  ed << "PDG = " << PDG << ", Z = " << tgZ << ", N = " << tgN
722  << ", while it is defined only for PDG=211 (pi-)" << G4endl;
723  G4Exception("G4ChipsPionPlusElasticXS::GetSlope()", "HAD_CHPS_000",
724  FatalException, ed);
725  }
726  if(theB1<0.) theB1=0.;
727  if(!(theB1>=-1.||theB1<=1.))G4cout<<"*NAN*G4QElasticCrossSect::Getslope:"<<theB1<<G4endl;
728  return theB1/GeVSQ;
729 }
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
static const double gigaelectronvolt
Definition: G4SIunits.hh:206
#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:

◆ GetTabValues()

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

Definition at line 739 of file G4ChipsPionPlusElasticXS.cc.

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

◆ IsIsoApplicable()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 145 of file G4ChipsPionPlusElasticXS.cc.

148 {
149  return true;
150 }
Here is the caller graph for this function:

Member Data Documentation

◆ B1T

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

Definition at line 131 of file G4ChipsPionPlusElasticXS.hh.

◆ B2T

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

Definition at line 133 of file G4ChipsPionPlusElasticXS.hh.

◆ B3T

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

Definition at line 135 of file G4ChipsPionPlusElasticXS.hh.

◆ B4T

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

Definition at line 137 of file G4ChipsPionPlusElasticXS.hh.

◆ colCS

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

Definition at line 143 of file G4ChipsPionPlusElasticXS.hh.

◆ colN

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

Definition at line 139 of file G4ChipsPionPlusElasticXS.hh.

◆ colP

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

Definition at line 141 of file G4ChipsPionPlusElasticXS.hh.

◆ colTH

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

Definition at line 142 of file G4ChipsPionPlusElasticXS.hh.

◆ colZ

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

Definition at line 140 of file G4ChipsPionPlusElasticXS.hh.

◆ CST

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

Definition at line 128 of file G4ChipsPionPlusElasticXS.hh.

◆ dlnP

G4double G4ChipsPionPlusElasticXS::dlnP
private

Definition at line 90 of file G4ChipsPionPlusElasticXS.hh.

◆ lastB1T

G4double* G4ChipsPionPlusElasticXS::lastB1T
private

Definition at line 119 of file G4ChipsPionPlusElasticXS.hh.

◆ lastB2T

G4double* G4ChipsPionPlusElasticXS::lastB2T
private

Definition at line 121 of file G4ChipsPionPlusElasticXS.hh.

◆ lastB3T

G4double* G4ChipsPionPlusElasticXS::lastB3T
private

Definition at line 123 of file G4ChipsPionPlusElasticXS.hh.

◆ lastB4T

G4double* G4ChipsPionPlusElasticXS::lastB4T
private

Definition at line 125 of file G4ChipsPionPlusElasticXS.hh.

◆ lastCS

G4double G4ChipsPionPlusElasticXS::lastCS
private

Definition at line 100 of file G4ChipsPionPlusElasticXS.hh.

◆ lastCST

G4double* G4ChipsPionPlusElasticXS::lastCST
private

Definition at line 115 of file G4ChipsPionPlusElasticXS.hh.

◆ lastI

G4int G4ChipsPionPlusElasticXS::lastI
private

Definition at line 101 of file G4ChipsPionPlusElasticXS.hh.

◆ lastLP

G4double G4ChipsPionPlusElasticXS::lastLP
private

Definition at line 94 of file G4ChipsPionPlusElasticXS.hh.

◆ lastN

G4int G4ChipsPionPlusElasticXS::lastN
private

Definition at line 96 of file G4ChipsPionPlusElasticXS.hh.

◆ lastP

G4double G4ChipsPionPlusElasticXS::lastP
private

Definition at line 98 of file G4ChipsPionPlusElasticXS.hh.

◆ lastPAR

G4double* G4ChipsPionPlusElasticXS::lastPAR
private

Definition at line 116 of file G4ChipsPionPlusElasticXS.hh.

◆ lastPIN

G4double G4ChipsPionPlusElasticXS::lastPIN
private

Definition at line 114 of file G4ChipsPionPlusElasticXS.hh.

◆ lastS1T

G4double* G4ChipsPionPlusElasticXS::lastS1T
private

Definition at line 118 of file G4ChipsPionPlusElasticXS.hh.

◆ lastS2T

G4double* G4ChipsPionPlusElasticXS::lastS2T
private

Definition at line 120 of file G4ChipsPionPlusElasticXS.hh.

◆ lastS3T

G4double* G4ChipsPionPlusElasticXS::lastS3T
private

Definition at line 122 of file G4ChipsPionPlusElasticXS.hh.

◆ lastS4T

G4double* G4ChipsPionPlusElasticXS::lastS4T
private

Definition at line 124 of file G4ChipsPionPlusElasticXS.hh.

◆ lastSIG

G4double G4ChipsPionPlusElasticXS::lastSIG
private

Definition at line 93 of file G4ChipsPionPlusElasticXS.hh.

◆ lastSST

G4double* G4ChipsPionPlusElasticXS::lastSST
private

Definition at line 117 of file G4ChipsPionPlusElasticXS.hh.

◆ lastTH

G4double G4ChipsPionPlusElasticXS::lastTH
private

Definition at line 99 of file G4ChipsPionPlusElasticXS.hh.

◆ lastTM

G4double G4ChipsPionPlusElasticXS::lastTM
private

Definition at line 95 of file G4ChipsPionPlusElasticXS.hh.

◆ lastTN

G4int G4ChipsPionPlusElasticXS::lastTN
private

Definition at line 113 of file G4ChipsPionPlusElasticXS.hh.

◆ lastTZ

G4int G4ChipsPionPlusElasticXS::lastTZ
private

Definition at line 112 of file G4ChipsPionPlusElasticXS.hh.

◆ lastZ

G4int G4ChipsPionPlusElasticXS::lastZ
private

Definition at line 97 of file G4ChipsPionPlusElasticXS.hh.

◆ lPMax

G4double G4ChipsPionPlusElasticXS::lPMax
private

Definition at line 89 of file G4ChipsPionPlusElasticXS.hh.

◆ lPMin

G4double G4ChipsPionPlusElasticXS::lPMin
private

Definition at line 88 of file G4ChipsPionPlusElasticXS.hh.

◆ nLast

const G4int G4ChipsPionPlusElasticXS::nLast
private

Definition at line 87 of file G4ChipsPionPlusElasticXS.hh.

◆ nPoints

const G4int G4ChipsPionPlusElasticXS::nPoints
private

Definition at line 86 of file G4ChipsPionPlusElasticXS.hh.

◆ onlyCS

G4bool G4ChipsPionPlusElasticXS::onlyCS
private

Definition at line 92 of file G4ChipsPionPlusElasticXS.hh.

◆ PAR

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

Definition at line 127 of file G4ChipsPionPlusElasticXS.hh.

◆ PIN

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

Definition at line 145 of file G4ChipsPionPlusElasticXS.hh.

◆ S1T

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

Definition at line 130 of file G4ChipsPionPlusElasticXS.hh.

◆ S2T

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

Definition at line 132 of file G4ChipsPionPlusElasticXS.hh.

◆ S3T

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

Definition at line 134 of file G4ChipsPionPlusElasticXS.hh.

◆ S4T

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

Definition at line 136 of file G4ChipsPionPlusElasticXS.hh.

◆ SST

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

Definition at line 129 of file G4ChipsPionPlusElasticXS.hh.

◆ theB1

G4double G4ChipsPionPlusElasticXS::theB1
private

Definition at line 104 of file G4ChipsPionPlusElasticXS.hh.

◆ theB2

G4double G4ChipsPionPlusElasticXS::theB2
private

Definition at line 106 of file G4ChipsPionPlusElasticXS.hh.

◆ theB3

G4double G4ChipsPionPlusElasticXS::theB3
private

Definition at line 108 of file G4ChipsPionPlusElasticXS.hh.

◆ theB4

G4double G4ChipsPionPlusElasticXS::theB4
private

Definition at line 110 of file G4ChipsPionPlusElasticXS.hh.

◆ theS1

G4double G4ChipsPionPlusElasticXS::theS1
private

Definition at line 103 of file G4ChipsPionPlusElasticXS.hh.

◆ theS2

G4double G4ChipsPionPlusElasticXS::theS2
private

Definition at line 105 of file G4ChipsPionPlusElasticXS.hh.

◆ theS3

G4double G4ChipsPionPlusElasticXS::theS3
private

Definition at line 107 of file G4ChipsPionPlusElasticXS.hh.

◆ theS4

G4double G4ChipsPionPlusElasticXS::theS4
private

Definition at line 109 of file G4ChipsPionPlusElasticXS.hh.

◆ theSS

G4double G4ChipsPionPlusElasticXS::theSS
private

Definition at line 102 of file G4ChipsPionPlusElasticXS.hh.


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