Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4ChipsAntiBaryonElasticXS.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/cross_sections/src/G4ChipsAntiBaryonElasticXS.cc (Version 11.3.0) and /processes/hadronic/cross_sections/src/G4ChipsAntiBaryonElasticXS.cc (Version 9.4.p1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 //                                                
 28 //                                                
 29 // G4 Physics class: G4ChipsAntiBaryonElasticX    
 30 // Created: M.V. Kossov, CERN/ITEP(Moscow), 5-    
 31 // The last update: M.V. Kossov, CERN/ITEP (Mo    
 32 //                                                
 33 //                                                
 34 // -------------------------------------------    
 35 // Short description: Interaction cross-sectio    
 36 // Class extracted from CHIPS and integrated i    
 37 // -------------------------------------------    
 38                                                   
 39                                                   
 40 #include "G4ChipsAntiBaryonElasticXS.hh"          
 41 #include "G4SystemOfUnits.hh"                     
 42 #include "G4DynamicParticle.hh"                   
 43 #include "G4ParticleDefinition.hh"                
 44 #include "G4AntiProton.hh"                        
 45 #include "G4Nucleus.hh"                           
 46 #include "G4ParticleTable.hh"                     
 47 #include "G4NucleiProperties.hh"                  
 48 #include "G4IonTable.hh"                          
 49 #include "G4Log.hh"                               
 50 #include "G4Exp.hh"                               
 51 #include "G4Pow.hh"                               
 52                                                   
 53 // factory                                        
 54 #include "G4CrossSectionFactory.hh"               
 55 //                                                
 56 G4_DECLARE_XS_FACTORY(G4ChipsAntiBaryonElastic    
 57                                                   
 58 G4ChipsAntiBaryonElasticXS::G4ChipsAntiBaryonE    
 59 {                                                 
 60   lPMin=-8.;  //Min tabulatedLogarithmMomentum    
 61   lPMax= 8.;  //Max tabulatedLogarithmMomentum    
 62   dlnP=(lPMax-lPMin)/nLast;// LogStep inTable     
 63   onlyCS=true;//Flag toCalculOnlyCS(not Si/Bi)    
 64   lastSIG=0.; //Last calculated cross section     
 65   lastLP=-10.;//LastLog(mom_of IncidentHadron)    
 66   lastTM=0.;  //Last t_maximum                    
 67   theSS=0.;   //TheLastSqSlope of 1st difr.Max    
 68   theS1=0.;   //TheLastMantissa of 1st difrMax    
 69   theB1=0.;   //TheLastSlope of 1st difructMax    
 70   theS2=0.;   //TheLastMantissa of 2nd difrMax    
 71   theB2=0.;   //TheLastSlope of 2nd difructMax    
 72   theS3=0.;   //TheLastMantissa of 3d difr.Max    
 73   theB3=0.;   //TheLastSlope of 3d difruct.Max    
 74   theS4=0.;   //TheLastMantissa of 4th difrMax    
 75   theB4=0.;   //TheLastSlope of 4th difructMax    
 76   lastTZ=0;   // Last atomic number of the tar    
 77   lastTN=0;   // Last # of neutrons in the tar    
 78   lastPIN=0.; // Last initialized max momentum    
 79   lastCST=0;  // Elastic cross-section table      
 80   lastPAR=0;  // ParametersForFunctionCalculat    
 81   lastSST=0;  // E-dep ofSqardSlope of 1st dif    
 82   lastS1T=0;  // E-dep of mantissa of 1st dif.    
 83   lastB1T=0;  // E-dep of the slope of 1st dif    
 84   lastS2T=0;  // E-dep of mantissa of 2nd difr    
 85   lastB2T=0;  // E-dep of the slope of 2nd dif    
 86   lastS3T=0;  // E-dep of mantissa of 3d difr.    
 87   lastB3T=0;  // E-dep of the slope of 3d difr    
 88   lastS4T=0;  // E-dep of mantissa of 4th difr    
 89   lastB4T=0;  // E-dep of the slope of 4th dif    
 90   lastN=0;    // The last N of calculated nucl    
 91   lastZ=0;    // The last Z of calculated nucl    
 92   lastP=0.;   // LastUsed inCrossSection Momen    
 93   lastTH=0.;  // Last threshold momentum          
 94   lastCS=0.;  // Last value of the Cross Secti    
 95   lastI=0;    // The last position in the DAMD    
 96 }                                                 
 97                                                   
 98 G4ChipsAntiBaryonElasticXS::~G4ChipsAntiBaryon    
 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 }                                                 
135                                                   
136 void                                              
137 G4ChipsAntiBaryonElasticXS::CrossSectionDescri    
138 {                                                 
139     outFile << "G4ChipsAntiBaryonElasticXS pro    
140             << "section for anti-baryon nucleu    
141             << "momentum. The cross section is    
142             << "CHIPS parameterization of cros    
143 }                                                 
144                                                   
145 G4bool G4ChipsAntiBaryonElasticXS::IsIsoApplic    
146          const G4Element*,                        
147          const G4Material*)                       
148 {                                                 
149                                                   
150   /*                                              
151   if(particle == G4AntiNeutron::AntiNeutron())    
152   {                                               
153     return true;                                  
154   }                                               
155   else if(particle == G4AntiProton::AntiProton    
156   {                                               
157     return true;                                  
158   }                                               
159   else if(particle == G4AntiLambda::AntiLambda    
160   {                                               
161     return true;                                  
162   }                                               
163   else if(particle == G4AntiSigmaPlus::AntiSig    
164   {                                               
165     return true;                                  
166   }                                               
167   else if(particle == G4AntiSigmaMinus::AntiSi    
168   {                                               
169     return true;                                  
170   }                                               
171   else if(particle == G4AntiSigmaZero::AntiSig    
172   {                                               
173     return true;                                  
174   }                                               
175   else if(particle == G4AntiXiMinus::AntiXiMin    
176   {                                               
177     return true;                                  
178   }                                               
179   else if(particle == G4AntiXiZero::AntiXiZero    
180   {                                               
181     return true;                                  
182   }                                               
183   else if(particle == G4AntiOmegaMinus::AntiOm    
184   {                                               
185     return true;                                  
186   }                                               
187   */                                              
188   return true;                                    
189 }                                                 
190                                                   
191 // The main member function giving the collisi    
192 // Make pMom in independent units ! (Now it is    
193 G4double G4ChipsAntiBaryonElasticXS::GetIsoCro    
194               const G4Isotope*,                   
195               const G4Element*,                   
196               const G4Material*)                  
197 {                                                 
198   G4double pMom=Pt->GetTotalMomentum();           
199   G4int tgN = A - tgZ;                            
200   G4int pdg = Pt->GetDefinition()->GetPDGEncod    
201                                                   
202   return GetChipsCrossSection(pMom, tgZ, tgN,     
203 }                                                 
204                                                   
205 G4double G4ChipsAntiBaryonElasticXS::GetChipsC    
206 {                                                 
207   G4bool fCS = false;                             
208                                                   
209   G4double pEn=pMom;                              
210   onlyCS=fCS;                                     
211                                                   
212   G4bool in=false;                   // By def    
213   lastP   = 0.;                      // New mo    
214   lastN   = tgN;                     // The la    
215   lastZ   = tgZ;                     // The la    
216   lastI   = (G4int)colN.size();      // Size o    
217   if(lastI) for(G4int i=0; i<lastI; ++i) // Lo    
218   {                                  // The nu    
219     if(colN[i]==tgN && colZ[i]==tgZ) // Isotop    
220     {                                             
221       lastI=i;                                    
222       lastTH =colTH[i];              // Last T    
223       if(pEn<=lastTH)                             
224       {                                           
225         return 0.;                   // Energy    
226       }                                           
227       lastP  =colP [i];              // Last M    
228       lastCS =colCS[i];              // Last C    
229       //  if(std::fabs(lastP/pMom-1.)<toleranc    
230       if(lastP == pMom)              // Do not    
231       {                                           
232         CalculateCrossSection(fCS,-1,i,pPDG,la    
233         return lastCS*millibarn;     // Use th    
234       }                                           
235       in = true;                       // This    
236       // Momentum pMom is in IU ! @@ Units        
237       lastCS=CalculateCrossSection(fCS,-1,i,pP    
238       if(lastCS<=0. && pEn>lastTH)    // Corre    
239       {                                           
240         lastTH=pEn;                               
241       }                                           
242       break;                           // Go o    
243     }                                             
244   } // End of attampt to find the nucleus in D    
245   if(!in)                            // This n    
246   {                                               
247     //!!The slave functions must provide cross    
248     lastCS=CalculateCrossSection(fCS,0,lastI,p    
249     if(lastCS<=0.)                                
250     {                                             
251       lastTH = 0; // ThresholdEnergy(tgZ, tgN)    
252       if(pEn>lastTH)                              
253       {                                           
254         lastTH=pEn;                               
255       }                                           
256     }                                             
257     colN.push_back(tgN);                          
258     colZ.push_back(tgZ);                          
259     colP.push_back(pMom);                         
260     colTH.push_back(lastTH);                      
261     colCS.push_back(lastCS);                      
262     return lastCS*millibarn;                      
263   } // End of creation of the new set of param    
264   else                                            
265   {                                               
266     colP[lastI]=pMom;                             
267     colCS[lastI]=lastCS;                          
268   }                                               
269   return lastCS*millibarn;                        
270 }                                                 
271                                                   
272 // Calculation of total elastic cross section     
273 // F=0 - create AMDB, F=-1 - read&update AMDB,    
274 G4double G4ChipsAntiBaryonElasticXS::Calculate    
275                                              G    
276 {                                                 
277   G4double pMom=pIU/GeV;                // All    
278   onlyCS=CS;                            // Fla    
279   lastLP=G4Log(pMom);                // Make a    
280   if(F)                                 // Thi    
281   {                                               
282     if(F<0)                             // the    
283     {                                             
284       lastPIN = PIN[I];                 // Max    
285       lastPAR = PAR[I];                 // Poi    
286       lastCST = CST[I];                 // Poi    
287       lastSST = SST[I];                 // Poi    
288       lastS1T = S1T[I];                 // Poi    
289       lastB1T = B1T[I];                 // Poi    
290       lastS2T = S2T[I];                 // Poi    
291       lastB2T = B2T[I];                 // Poi    
292       lastS3T = S3T[I];                 // Poi    
293       lastB3T = B3T[I];                 // Poi    
294       lastS4T = S4T[I];                 // Poi    
295       lastB4T = B4T[I];                 // Poi    
296     }                                             
297     if(lastLP>lastPIN && lastLP<lPMax)            
298     {                                             
299       lastPIN=GetPTables(lastLP,lastPIN,PDG,tg    
300       PIN[I]=lastPIN;                   // Rem    
301     }                                             
302   }                                               
303   else                                  // Thi    
304   {                                               
305     lastPAR = new G4double[nPoints];    // All    
306     lastPAR[nLast]=0;                   // Ini    
307     lastCST = new G4double[nPoints];    // All    
308     lastSST = new G4double[nPoints];    // All    
309     lastS1T = new G4double[nPoints];    // All    
310     lastB1T = new G4double[nPoints];    // All    
311     lastS2T = new G4double[nPoints];    // All    
312     lastB2T = new G4double[nPoints];    // All    
313     lastS3T = new G4double[nPoints];    // All    
314     lastB3T = new G4double[nPoints];    // All    
315     lastS4T = new G4double[nPoints];    // All    
316     lastB4T = new G4double[nPoints];    // All    
317     lastPIN = GetPTables(lastLP,lPMin,PDG,tgZ,    
318     PIN.push_back(lastPIN);             // Fil    
319     PAR.push_back(lastPAR);             // Fil    
320     CST.push_back(lastCST);             // Fil    
321     SST.push_back(lastSST);             // Fil    
322     S1T.push_back(lastS1T);             // Fil    
323     B1T.push_back(lastB1T);             // Fil    
324     S2T.push_back(lastS2T);             // Fil    
325     B2T.push_back(lastB2T);             // Fil    
326     S3T.push_back(lastS3T);             // Fil    
327     B3T.push_back(lastB3T);             // Fil    
328     S4T.push_back(lastS4T);             // Fil    
329     B4T.push_back(lastB4T);             // Fil    
330   } // End of creation/update of the new set o    
331   // =---------= NOW Update (if necessary) and    
332   if(lastLP>lastPIN && lastLP<lPMax)              
333   {                                               
334     lastPIN = GetPTables(lastLP,lastPIN,PDG,tg    
335   }                                               
336   if(!onlyCS) lastTM=GetQ2max(PDG, tgZ, tgN, p    
337   if(lastLP>lPMin && lastLP<=lastPIN)   // Lin    
338   {                                               
339     if(lastLP==lastPIN)                           
340     {                                             
341       G4double shift=(lastLP-lPMin)/dlnP+.0000    
342       G4int    blast=static_cast<int>(shift);     
343       if(blast<0 || blast>=nLast) G4cout<<"G4Q    
344       lastSIG = lastCST[blast];                   
345       if(!onlyCS)                       // Ski    
346       {                                           
347         theSS  = lastSST[blast];                  
348         theS1  = lastS1T[blast];                  
349         theB1  = lastB1T[blast];                  
350         theS2  = lastS2T[blast];                  
351         theB2  = lastB2T[blast];                  
352         theS3  = lastS3T[blast];                  
353         theB3  = lastB3T[blast];                  
354         theS4  = lastS4T[blast];                  
355         theB4  = lastB4T[blast];                  
356       }                                           
357     }                                             
358     else                                          
359     {                                             
360       G4double shift=(lastLP-lPMin)/dlnP;         
361       G4int    blast=static_cast<int>(shift);     
362       if(blast<0)   blast=0;                      
363       if(blast>=nLast) blast=nLast-1;             
364       shift-=blast;                               
365       G4int lastL=blast+1;                        
366       G4double SIGL=lastCST[blast];               
367       lastSIG= SIGL+shift*(lastCST[lastL]-SIGL    
368       if(!onlyCS)                       // Ski    
369       {                                           
370         G4double SSTL=lastSST[blast];             
371         theSS=SSTL+shift*(lastSST[lastL]-SSTL)    
372         G4double S1TL=lastS1T[blast];             
373         theS1=S1TL+shift*(lastS1T[lastL]-S1TL)    
374         G4double B1TL=lastB1T[blast];             
375         theB1=B1TL+shift*(lastB1T[lastL]-B1TL)    
376         G4double S2TL=lastS2T[blast];             
377         theS2=S2TL+shift*(lastS2T[lastL]-S2TL)    
378         G4double B2TL=lastB2T[blast];             
379         theB2=B2TL+shift*(lastB2T[lastL]-B2TL)    
380         G4double S3TL=lastS3T[blast];             
381         theS3=S3TL+shift*(lastS3T[lastL]-S3TL)    
382         G4double B3TL=lastB3T[blast];             
383         theB3=B3TL+shift*(lastB3T[lastL]-B3TL)    
384         G4double S4TL=lastS4T[blast];             
385         theS4=S4TL+shift*(lastS4T[lastL]-S4TL)    
386         G4double B4TL=lastB4T[blast];             
387         theB4=B4TL+shift*(lastB4T[lastL]-B4TL)    
388       }                                           
389     }                                             
390   }                                               
391   else lastSIG=GetTabValues(lastLP, PDG, tgZ,     
392   if(lastSIG<0.) lastSIG = 0.;                    
393   return lastSIG;                                 
394 }                                                 
395                                                   
396 // It has parameter sets for all tZ/tN/PDG, us    
397 G4double G4ChipsAntiBaryonElasticXS::GetPTable    
398                                                   
399 {                                                 
400   // @@ At present all nA==pA ---------> Each     
401   static const G4double pwd=2727;                 
402   const G4int n_appel=30;                // #o    
403   //                          -0- -1- -2- -3-     
404   G4double app_el[n_appel]={1.25,3.5,80.,1.,.0    
405                             3.64,5.e-5,4000.,1    
406                             1.e10,1.1,3.4e6,6.    
407   //                        -15-  -16-  -17-      
408   //                        -25-  -26- -27- -2    
409   //AR-24Jun2014  if(PDG>-3334 && PDG<-1111)      
410   if(PDG>-3335 && PDG<-1111)                      
411   {                                               
412     // -- Total pp elastic cross section cs &     
413     //p2=p*p;p3=p2*p;sp=sqrt(p);p2s=p2*sp;lp=l    
414     //CS=2.865/p2s/(1+.0022/p2s)+(18.9+.6461*d    
415     //   par(0)       par(7)     par(1) par(2)    
416     //dl2=lp-5., s1=(74.+3.*dl2*dl2)/(1+3.4/p4    
417     //     par(8) par(9) par(10)        par(11    
418     // b1=8.*p**.055/(1.+3.64/p3); s2=5.e-5+40    
419     // par(15) par(16)  par(17)     par(18) pa    
420     // s3=5.e-5+1.e10/(p4*p4+8.5e8*p2+1.e10);     
421     //  par(24) par(25)     par(26)  par(27) p    
422     //                                            
423     if(lastPAR[nLast]!=pwd) // A unique flag t    
424     {                                             
425       if ( tgZ == 1 && tgN == 0 )                 
426       {                                           
427         for (G4int ip=0; ip<n_appel; ip++) las    
428       }                                           
429       else                                        
430       {                                           
431         G4double a=tgZ+tgN;                       
432         G4double sa=std::sqrt(a);                 
433         G4double ssa=std::sqrt(sa);               
434         G4double asa=a*sa;                        
435         G4double a2=a*a;                          
436         G4double a3=a2*a;                         
437         G4double a4=a3*a;                         
438         G4double a5=a4*a;                         
439         G4double a6=a4*a2;                        
440         G4double a7=a6*a;                         
441         G4double a8=a7*a;                         
442         G4double a9=a8*a;                         
443         G4double a10=a5*a5;                       
444         G4double a12=a6*a6;                       
445         G4double a14=a7*a7;                       
446         G4double a16=a8*a8;                       
447         G4double a17=a16*a;                       
448         //G4double a20=a16*a4;                    
449         G4double a32=a16*a16;                     
450         // Reaction cross-section parameters (    
451         lastPAR[0]=.23*asa/(1.+a*.15);            
452         lastPAR[1]=2.8*asa/(1.+a*(.015+.05/ssa    
453         lastPAR[2]=15.*a/(1.+.005*a2);            
454         lastPAR[3]=.013*a2/(1.+a3*(.006+a*.000    
455         lastPAR[4]=5.;                            
456         lastPAR[5]=0.;                            
457         lastPAR[6]=0.;                            
458         lastPAR[7]=0.;                            
459         lastPAR[8]=0.;                            
460         // @@ the differential cross-section i    
461         if(a<6.5)                                 
462         {                                         
463           G4double a28=a16*a12;                   
464           // The main pre-exponent      (pel_s    
465           lastPAR[ 9]=4000*a;                     
466           lastPAR[10]=1.2e7*a8+380*a17;           
467           lastPAR[11]=.7/(1.+4.e-12*a16);         
468           lastPAR[12]=2.5/a8/(a4+1.e-16*a32);     
469           lastPAR[13]=.28*a;                      
470           lastPAR[14]=1.2*a2+2.3;                 
471           lastPAR[15]=3.8/a;                      
472           // The main slope             (pel_s    
473           lastPAR[16]=.01/(1.+.0024*a5);          
474           lastPAR[17]=.2*a;                       
475           lastPAR[18]=9.e-7/(1.+.035*a5);         
476           lastPAR[19]=(42.+2.7e-11*a16)/(1.+.1    
477           // The main quadratic         (pel_s    
478           lastPAR[20]=2.25*a3;                    
479           lastPAR[21]=18.;                        
480           lastPAR[22]=2.4e-3*a8/(1.+2.6e-4*a7)    
481           lastPAR[23]=3.5e-36*a32*a8/(1.+5.e-1    
482           // The 1st max pre-exponent   (pel_q    
483           lastPAR[24]=1.e5/(a8+2.5e12/a16);       
484           lastPAR[25]=8.e7/(a12+1.e-27*a28*a28    
485           lastPAR[26]=.0006*a3;                   
486           // The 1st max slope          (pel_q    
487           lastPAR[27]=10.+4.e-8*a12*a;            
488           lastPAR[28]=.114;                       
489           lastPAR[29]=.003;                       
490           lastPAR[30]=2.e-23;                     
491           // The effective pre-exponent (pel_s    
492           lastPAR[31]=1./(1.+.0001*a8);           
493           lastPAR[32]=1.5e-4/(1.+5.e-6*a12);      
494           lastPAR[33]=.03;                        
495           // The effective slope        (pel_s    
496           lastPAR[34]=a/2;                        
497           lastPAR[35]=2.e-7*a4;                   
498           lastPAR[36]=4.;                         
499           lastPAR[37]=64./a3;                     
500           // The gloria pre-exponent    (pel_u    
501           lastPAR[38]=1.e8*G4Exp(.32*asa);        
502           lastPAR[39]=20.*G4Exp(.45*asa);         
503           lastPAR[40]=7.e3+2.4e6/a5;              
504           lastPAR[41]=2.5e5*G4Exp(.085*a3);       
505           lastPAR[42]=2.5*a;                      
506           // The gloria slope           (pel_u    
507           lastPAR[43]=920.+.03*a8*a3;             
508           lastPAR[44]=93.+.0023*a12;              
509         }                                         
510         else // A > Li6 (li7, ...)                
511         {                                         
512           G4double p1a10=2.2e-28*a10;             
513           G4double r4a16=6.e14/a16;               
514           G4double s4a16=r4a16*r4a16;             
515           // a24                                  
516           // a36                                  
517           // The main pre-exponent      (peh_s    
518           lastPAR[ 9]=4.5*G4Pow::GetInstance()    
519           lastPAR[10]=.06*G4Pow::GetInstance()    
520           lastPAR[11]=.6*a/(1.+2.e15/a16);        
521           lastPAR[12]=.17/(a+9.e5/a3+1.5e33/a3    
522           lastPAR[13]=(.001+7.e-11*a5)/(1.+4.4    
523           lastPAR[14]=(p1a10*p1a10+2.e-29)/(1.    
524           // The main slope             (peh_s    
525           lastPAR[15]=400./a12+2.e-22*a9;         
526           lastPAR[16]=1.e-32*a12/(1.+5.e22/a14    
527           lastPAR[17]=1000./a2+9.5*sa*ssa;        
528           lastPAR[18]=4.e-6*a*asa+1.e11/a16;      
529           lastPAR[19]=(120./a+.002*a2)/(1.+2.e    
530           lastPAR[20]=9.+100./a;                  
531           // The main quadratic         (peh_s    
532           lastPAR[21]=.002*a3+3.e7/a6;            
533           lastPAR[22]=7.e-15*a4*asa;              
534           lastPAR[23]=9000./a4;                   
535           // The 1st max pre-exponent   (peh_q    
536           lastPAR[24]=.0011*asa/(1.+3.e34/a32/    
537           lastPAR[25]=1.e-5*a2+2.e14/a16;         
538           lastPAR[26]=1.2e-11*a2/(1.+1.5e19/a1    
539           lastPAR[27]=.016*asa/(1.+5.e16/a16);    
540           // The 1st max slope          (peh_q    
541           lastPAR[28]=.002*a4/(1.+7.e7/G4Pow::    
542           lastPAR[29]=2.e6/a6+7.2/G4Pow::GetIn    
543           lastPAR[30]=11.*a3/(1.+7.e23/a16/a8)    
544           lastPAR[31]=100./asa;                   
545           // The 2nd max pre-exponent   (peh_s    
546           lastPAR[32]=(.1+4.4e-5*a2)/(1.+5.e5/    
547           lastPAR[33]=3.5e-4*a2/(1.+1.e8/a8);     
548           lastPAR[34]=1.3+3.e5/a4;                
549           lastPAR[35]=500./(a2+50.)+3;            
550           lastPAR[36]=1.e-9/a+s4a16*s4a16;        
551           // The 2nd max slope          (peh_s    
552           lastPAR[37]=.4*asa+3.e-9*a6;            
553           lastPAR[38]=.0005*a5;                   
554           lastPAR[39]=.002*a5;                    
555           lastPAR[40]=10.;                        
556           // The effective pre-exponent (peh_u    
557           lastPAR[41]=.05+.005*a;                 
558           lastPAR[42]=7.e-8/sa;                   
559           lastPAR[43]=.8*sa;                      
560           lastPAR[44]=.02*sa;                     
561           lastPAR[45]=1.e8/a3;                    
562           lastPAR[46]=3.e32/(a32+1.e32);          
563           // The effective slope        (peh_u    
564           lastPAR[47]=24.;                        
565           lastPAR[48]=20./sa;                     
566           lastPAR[49]=7.e3*a/(sa+1.);             
567           lastPAR[50]=900.*sa/(1.+500./a3);       
568         }                                         
569         // Parameter for lowEnergyNeutrons        
570         lastPAR[51]=1.e15+2.e27/a4/(1.+2.e-18*    
571       }                                           
572       lastPAR[nLast]=pwd;                         
573       // and initialize the zero element of th    
574       G4double lp=lPMin;                          
575       G4bool memCS=onlyCS;                        
576       onlyCS=false;                               
577       lastCST[0]=GetTabValues(lp, PDG, tgZ, tg    
578       onlyCS=memCS;                               
579       lastSST[0]=theSS;                           
580       lastS1T[0]=theS1;                           
581       lastB1T[0]=theB1;                           
582       lastS2T[0]=theS2;                           
583       lastB2T[0]=theB2;                           
584       lastS3T[0]=theS3;                           
585       lastB3T[0]=theB3;                           
586       lastS4T[0]=theS4;                           
587       lastB4T[0]=theB4;                           
588     }                                             
589     if(LP>ILP)                                    
590     {                                             
591       G4int ini = static_cast<int>((ILP-lPMin+    
592       if(ini<0) ini=0;                            
593       if(ini<nPoints)                             
594       {                                           
595         G4int fin = static_cast<int>((LP-lPMin    
596         if(fin>=nPoints) fin=nLast;               
597         if(fin>=ini)                              
598         {                                         
599           G4double lp=0.;                         
600           for(G4int ip=ini; ip<=fin; ip++)        
601           {                                       
602             lp=lPMin+ip*dlnP;                     
603             G4bool memCS=onlyCS;                  
604             onlyCS=false;                         
605             lastCST[ip]=GetTabValues(lp, PDG,     
606             onlyCS=memCS;                         
607             lastSST[ip]=theSS;                    
608             lastS1T[ip]=theS1;                    
609             lastB1T[ip]=theB1;                    
610             lastS2T[ip]=theS2;                    
611             lastB2T[ip]=theB2;                    
612             lastS3T[ip]=theS3;                    
613             lastB3T[ip]=theB3;                    
614             lastS4T[ip]=theS4;                    
615             lastB4T[ip]=theB4;                    
616           }                                       
617           return lp;                              
618         }                                         
619         else G4cout<<"*Warning*G4ChipsAntiBary    
620                    <<", Z="<<tgZ<<", N="<<tgN<    
621                    <<" > ILP="<<ILP<<" nothing    
622       }                                           
623       else G4cout<<"*Warning*G4ChipsAntiBaryon    
624                  <<", Z="<<tgZ<<", N="<<tgN<<"    
625                  <<" > ILP="<<ILP<<", lPMax="<    
626     }                                             
627   }                                               
628   else                                            
629   {                                               
630     // G4cout<<"*Error*G4ChipsAntiBaryonElasti    
631     //       <<", N="<<tgN<<", while it is def    
632     // throw G4QException("G4ChipsAntiBaryonEl    
633     G4ExceptionDescription ed;                    
634     ed << "PDG = " << PDG << ", Z = " << tgZ <    
635        << ", while it is defined only for Anti    
636     G4Exception("G4ChipsAntiBaryonElasticXS::G    
637                 FatalException, ed);              
638   }                                               
639   return ILP;                                     
640 }                                                 
641                                                   
642 // Returns Q2=-t in independent units (MeV^2)     
643 G4double G4ChipsAntiBaryonElasticXS::GetExchan    
644 {                                                 
645   static const G4double GeVSQ=gigaelectronvolt    
646   static const G4double third=1./3.;              
647   static const G4double fifth=1./5.;              
648   static const G4double sevth=1./7.;              
649                                                   
650   if(PDG<-3334 || PDG>-1111)G4cout<<"*Warning*    
651   if(onlyCS)G4cout<<"WarningG4ChipsAntiBaryonE    
652   if(lastLP<-4.3) return lastTM*GeVSQ*G4Unifor    
653   G4double q2=0.;                                 
654   if(tgZ==1 && tgN==0)                // ===>     
655   {                                               
656     G4double E1=lastTM*theB1;                     
657     G4double R1=(1.-G4Exp(-E1));                  
658     G4double E2=lastTM*theB2;                     
659     G4double R2=(1.-G4Exp(-E2*E2*E2));            
660     G4double E3=lastTM*theB3;                     
661     G4double R3=(1.-G4Exp(-E3));                  
662     G4double I1=R1*theS1/theB1;                   
663     G4double I2=R2*theS2;                         
664     G4double I3=R3*theS3;                         
665     G4double I12=I1+I2;                           
666     G4double rand=(I12+I3)*G4UniformRand();       
667     if     (rand<I1 )                             
668     {                                             
669       G4double ran=R1*G4UniformRand();            
670       if(ran>1.) ran=1.;                          
671       q2=-G4Log(1.-ran)/theB1;                    
672     }                                             
673     else if(rand<I12)                             
674     {                                             
675       G4double ran=R2*G4UniformRand();            
676       if(ran>1.) ran=1.;                          
677       q2=-G4Log(1.-ran);                          
678       if(q2<0.) q2=0.;                            
679       q2=G4Pow::GetInstance()->powA(q2,third)/    
680     }                                             
681     else                                          
682     {                                             
683       G4double ran=R3*G4UniformRand();            
684       if(ran>1.) ran=1.;                          
685       q2=-G4Log(1.-ran)/theB3;                    
686     }                                             
687   }                                               
688   else                                            
689   {                                               
690     G4double a=tgZ+tgN;                           
691     G4double E1=lastTM*(theB1+lastTM*theSS);      
692     G4double R1=(1.-G4Exp(-E1));                  
693     G4double tss=theSS+theSS; // for future so    
694     G4double tm2=lastTM*lastTM;                   
695     G4double E2=lastTM*tm2*theB2;                 
696     if(a>6.5)E2*=tm2;                             
697     G4double R2=(1.-G4Exp(-E2));                  
698     G4double E3=lastTM*theB3;                     
699     if(a>6.5)E3*=tm2*tm2*tm2;                     
700     G4double R3=(1.-G4Exp(-E3));                  
701     G4double E4=lastTM*theB4;                     
702     G4double R4=(1.-G4Exp(-E4));                  
703     G4double I1=R1*theS1;                         
704     G4double I2=R2*theS2;                         
705     G4double I3=R3*theS3;                         
706     G4double I4=R4*theS4;                         
707     G4double I12=I1+I2;                           
708     G4double I13=I12+I3;                          
709     G4double rand=(I13+I4)*G4UniformRand();       
710     if(rand<I1)                                   
711     {                                             
712       G4double ran=R1*G4UniformRand();            
713       if(ran>1.) ran=1.;                          
714       q2=-G4Log(1.-ran)/theB1;                    
715       if(std::fabs(tss)>1.e-7) q2=(std::sqrt(t    
716     }                                             
717     else if(rand<I12)                             
718     {                                             
719       G4double ran=R2*G4UniformRand();            
720       if(ran>1.) ran=1.;                          
721       q2=-G4Log(1.-ran)/theB2;                    
722       if(q2<0.) q2=0.;                            
723       if(a<6.5) q2=G4Pow::GetInstance()->powA(    
724       else      q2=G4Pow::GetInstance()->powA(    
725     }                                             
726     else if(rand<I13)                             
727     {                                             
728       G4double ran=R3*G4UniformRand();            
729       if(ran>1.) ran=1.;                          
730       q2=-G4Log(1.-ran)/theB3;                    
731       if(q2<0.) q2=0.;                            
732       if(a>6.5) q2=G4Pow::GetInstance()->powA(    
733     }                                             
734     else                                          
735     {                                             
736       G4double ran=R4*G4UniformRand();            
737       if(ran>1.) ran=1.;                          
738       q2=-G4Log(1.-ran)/theB4;                    
739       if(a<6.5) q2=lastTM-q2;                     
740     }                                             
741   }                                               
742   if(q2<0.) q2=0.;                                
743   if(!(q2>=-1.||q2<=1.))G4cout<<"*NAN*G4QaBEla    
744   if(q2>lastTM)                                   
745   {                                               
746     q2=lastTM;                                    
747   }                                               
748   return q2*GeVSQ;                                
749 }                                                 
750                                                   
751 // Returns B in independent units (MeV^-2) (al    
752 G4double G4ChipsAntiBaryonElasticXS::GetSlope(    
753 {                                                 
754   static const G4double GeVSQ=gigaelectronvolt    
755   if(onlyCS)G4cout<<"WarningG4ChipsAntiBaryonE    
756   if(lastLP<-4.3) return 0.;          // S-wav    
757   if(PDG<-3334 || PDG>-1111)                      
758   {                                               
759     // G4cout<<"*Error*G4ChipsAntiBaryonElasti    
760     //       <<", N="<<tgN<<", while it is def    
761     // throw G4QException("G4ChipsAntiBaryonEl    
762     G4ExceptionDescription ed;                    
763     ed << "PDG = " << PDG << ", Z = " << tgZ <    
764        << ", while it is defined only for Anti    
765     G4Exception("G4ChipsAntiBaryonElasticXS::G    
766                 FatalException, ed);              
767   }                                               
768   if(theB1<0.) theB1=0.;                          
769   if(!(theB1>=-1.||theB1<=1.))G4cout<<"*NAN*G4    
770   return theB1/GeVSQ;                             
771 }                                                 
772                                                   
773 // Returns half max(Q2=-t) in independent unit    
774 G4double G4ChipsAntiBaryonElasticXS::GetHMaxT(    
775 {                                                 
776   static const G4double HGeVSQ=gigaelectronvol    
777   return lastTM*HGeVSQ;                           
778 }                                                 
779                                                   
780 // lastLP is used, so calculating tables, one     
781 G4double G4ChipsAntiBaryonElasticXS::GetTabVal    
782                                                   
783 {                                                 
784   if(PDG<-3334 || PDG>-1111) G4cout<<"*Warning    
785                                                   
786   //AR-24Apr2018 Switch to allow transuranic e    
787   const G4bool isHeavyElementAllowed = true;      
788   if(tgZ<0 || ( !isHeavyElementAllowed && tgZ>    
789   {                                               
790     G4cout<<"*Warning*G4QAntiBaryonElCS::GetTa    
791     return 0.;                                    
792   }                                               
793   G4int iZ=tgZ-1; // Z index                      
794   if(iZ<0)                                        
795   {                                               
796     iZ=0;         // conversion of the neutron    
797     tgZ=1;                                        
798     tgN=0;                                        
799   }                                               
800   G4double p=G4Exp(lp);              // moment    
801   G4double sp=std::sqrt(p);             // sqr    
802   G4double p2=p*p;                                
803   G4double p3=p2*p;                               
804   G4double p4=p3*p;                               
805   if ( tgZ == 1 && tgN == 0 ) // PiMin+P          
806   {                                               
807     G4double dl2=lp-lastPAR[6]; // ld ?           
808     theSS=lastPAR[29];                            
809     theS1=(lastPAR[7]+lastPAR[8]*dl2*dl2)/(1.+    
810           (lastPAR[10]/p2+lastPAR[11]*p)/(p4+l    
811     theB1=lastPAR[13]*G4Pow::GetInstance()->po    
812     theS2=lastPAR[16]+lastPAR[17]/(p4+lastPAR[    
813     theB2=lastPAR[19]+lastPAR[20]/(p4+lastPAR[    
814     theS3=lastPAR[22]+lastPAR[23]/(p4*p4+lastP    
815     theB3=lastPAR[26]+lastPAR[27]/(p4+lastPAR[    
816     theS4=0.;                                     
817     theB4=0.;                                     
818     // Returns the total elastic pim-p cross-s    
819     G4double ye=G4Exp(lp*lastPAR[0]);             
820     G4double dp=lp-lastPAR[1];                    
821     return lastPAR[2]/(ye+lastPAR[3])+lastPAR[    
822   }                                               
823   else                                            
824   {                                               
825     G4double p5=p4*p;                             
826     G4double p6=p5*p;                             
827     G4double p8=p6*p2;                            
828     G4double p10=p8*p2;                           
829     G4double p12=p10*p2;                          
830     G4double p16=p8*p8;                           
831     //G4double p24=p16*p8;                        
832     G4double dl=lp-5.;                            
833     G4double a=tgZ+tgN;                           
834     G4double pah=G4Pow::GetInstance()->powA(p,    
835     G4double pa=pah*pah;                          
836     G4double pa2=pa*pa;                           
837     if(a<6.5)                                     
838     {                                             
839       theS1=lastPAR[9]/(1.+lastPAR[10]*p4*pa)+    
840             (lastPAR[13]*dl*dl+lastPAR[14])/(1    
841       theB1=(lastPAR[16]+lastPAR[17]*p2)/(p4+l    
842       theSS=lastPAR[20]/(1.+lastPAR[21]/p2)+la    
843       theS2=lastPAR[24]/(pa/p2+lastPAR[25]/p4)    
844       theB2=lastPAR[27]*G4Pow::GetInstance()->    
845       theS3=lastPAR[31]/(pa*p+lastPAR[32]/pa)+    
846       theB3=lastPAR[34]/(p3+lastPAR[35]/p6)+la    
847       theS4=p2*(pah*lastPAR[38]*G4Exp(-pah*las    
848                 lastPAR[40]/(1.+lastPAR[41]*G4    
849       theB4=lastPAR[43]*pa/p2/(1.+pa*lastPAR[4    
850     }                                             
851     else                                          
852     {                                             
853       theS1=lastPAR[9]/(1.+lastPAR[10]/p4)+las    
854             lastPAR[13]/(p5+lastPAR[14]/p16);     
855       theB1=(lastPAR[15]/p8+lastPAR[19])/(p+la    
856             lastPAR[17]/(1.+lastPAR[18]/p4);      
857       theSS=lastPAR[21]/(p4/G4Pow::GetInstance    
858       theS2=lastPAR[24]/p4/(G4Pow::GetInstance    
859       theB2=lastPAR[28]/G4Pow::GetInstance()->    
860       theS3=lastPAR[32]/G4Pow::GetInstance()->    
861             lastPAR[33]/(1.+lastPAR[34]/p6);      
862       theB3=lastPAR[37]/p8+lastPAR[38]/p2+last    
863       theS4=(lastPAR[41]/p4+lastPAR[46]/p)/(1.    
864             (lastPAR[43]+lastPAR[44]*dl*dl)/(1    
865       theB4=lastPAR[47]/(1.+lastPAR[48]/p)+las    
866     }                                             
867     // Returns the total elastic (n/p)A cross-    
868     G4double dlp=lp-lastPAR[4]; // ax             
869     //         p1               p2          p3    
870     return (lastPAR[0]*dlp*dlp+lastPAR[1]+last    
871   }                                               
872   return 0.;                                      
873 } // End of GetTableValues                        
874                                                   
875 // Returns max -t=Q2 (GeV^2) for the momentum     
876 G4double G4ChipsAntiBaryonElasticXS::GetQ2max(    
877                                                   
878 {                                                 
879   static const G4double mNeut= G4Neutron::Neut    
880   static const G4double mProt= G4Proton::Proto    
881   static const G4double mNuc2= sqr((mProt+mNeu    
882   G4double pP2=pP*pP;                             
883   if(tgZ || tgN>-1)                               
884   {                                               
885     G4double mt=G4ParticleTable::GetParticleTa    
886     G4double dmt=mt+mt;                           
887     G4double mds=dmt*std::sqrt(pP2+mNuc2)+mNuc    
888     return dmt*dmt*pP2/mds;                       
889   }                                               
890   else                                            
891   {                                               
892     // G4cout<<"*Error*G4ChipsAntiBaryonElasti    
893     //       <<tgN<<", while it is defined onl    
894     // throw G4QException("G4ChipsAntiBaryonEl    
895     G4ExceptionDescription ed;                    
896     ed << "PDG = " << PDG << ", Z = " << tgZ <    
897        << ", while it is defined only for p pr    
898     G4Exception("G4ChipsAntiBaryonElasticXS::G    
899                 FatalException, ed);              
900     return 0;                                     
901   }                                               
902 }                                                 
903