Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4ChipsAntiBaryonInelasticXS.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/G4ChipsAntiBaryonInelasticXS.cc (Version 11.3.0) and /processes/hadronic/cross_sections/src/G4ChipsAntiBaryonInelasticXS.cc (Version 9.2.p3)


  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 // The lust update: M.V. Kossov, CERN/ITEP(Mos    
 28 //                                                
 29 //                                                
 30 // G4 Physics class: G4ChipsAntiBaryonInelasti    
 31 // Created: M.V. Kossov, CERN/ITEP(Moscow), 20    
 32 // The last update: M.V. Kossov, CERN/ITEP (Mo    
 33 //                                                
 34 // -------------------------------------------    
 35 // Short description: Cross-sections extracted    
 36 // anti-baryoninteractions. Original author: M    
 37 // -------------------------------------------    
 38 //                                                
 39                                                   
 40 #include "G4ChipsAntiBaryonInelasticXS.hh"        
 41 #include "G4SystemOfUnits.hh"                     
 42 #include "G4DynamicParticle.hh"                   
 43 #include "G4ParticleDefinition.hh"                
 44 #include "G4AntiNeutron.hh"                       
 45 #include "G4AntiProton.hh"                        
 46 #include "G4AntiLambda.hh"                        
 47 #include "G4AntiSigmaPlus.hh"                     
 48 #include "G4AntiSigmaMinus.hh"                    
 49 #include "G4AntiSigmaZero.hh"                     
 50 #include "G4AntiXiMinus.hh"                       
 51 #include "G4AntiXiZero.hh"                        
 52 #include "G4AntiOmegaMinus.hh"                    
 53 #include "G4Log.hh"                               
 54 #include "G4Exp.hh"                               
 55 #include "G4Pow.hh"                               
 56                                                   
 57 // factory                                        
 58 #include "G4CrossSectionFactory.hh"               
 59 //                                                
 60 G4_DECLARE_XS_FACTORY(G4ChipsAntiBaryonInelast    
 61                                                   
 62 G4ChipsAntiBaryonInelasticXS::G4ChipsAntiBaryo    
 63 {                                                 
 64   lastLEN=0; // Pointer to lastArray of LowEn     
 65   lastHEN=0; // Pointer to lastArray of HighEn    
 66   lastN=0;   // The last N of calculated nucle    
 67   lastZ=0;   // The last Z of calculated nucle    
 68   lastP=0.;  // Last used Cross Section Moment    
 69   lastTH=0.; // Last threshold momentum           
 70   lastCS=0.; // Last value of the Cross Sectio    
 71   lastI=0;   // The last position in the DAMDB    
 72   LEN = new std::vector<G4double*>;               
 73   HEN = new std::vector<G4double*>;               
 74 }                                                 
 75                                                   
 76 G4ChipsAntiBaryonInelasticXS::~G4ChipsAntiBary    
 77 {                                                 
 78   std::size_t lens=LEN->size();                   
 79   for(std::size_t i=0; i<lens; ++i) delete[] (    
 80   delete LEN;                                     
 81   std::size_t hens=HEN->size();                   
 82   for(std::size_t i=0; i<hens; ++i) delete[] (    
 83   delete HEN;                                     
 84 }                                                 
 85                                                   
 86 void G4ChipsAntiBaryonInelasticXS::CrossSectio    
 87 {                                                 
 88   outFile << "G4ChipsAntiBaryonInelasticXS pro    
 89           << "section for anti-baryon nucleus     
 90           << "momentum. The cross section is c    
 91           << "CHIPS parameterization of cross     
 92 }                                                 
 93                                                   
 94                                                   
 95 G4bool G4ChipsAntiBaryonInelasticXS::IsIsoAppl    
 96          const G4Element*,                        
 97          const G4Material*)                       
 98 {                                                 
 99   /*                                              
100   const G4ParticleDefinition* particle = Pt->G    
101                                                   
102   if(particle == G4AntiNeutron::AntiNeutron())    
103   {                                               
104     return true;                                  
105   }                                               
106   else if(particle == G4AntiProton::AntiProton    
107   {                                               
108     return true;                                  
109   }                                               
110   else if(particle == G4AntiLambda::AntiLambda    
111   {                                               
112     return true;                                  
113   }                                               
114   else if(particle == G4AntiSigmaPlus::AntiSig    
115   {                                               
116     return true;                                  
117   }                                               
118   else if(particle == G4AntiSigmaMinus::AntiSi    
119   {                                               
120     return true;                                  
121   }                                               
122   else if(particle == G4AntiSigmaZero::AntiSig    
123   {                                               
124     return true;                                  
125   }                                               
126   else if(particle == G4AntiXiMinus::AntiXiMin    
127   {                                               
128     return true;                                  
129   }                                               
130   else if(particle == G4AntiXiZero::AntiXiZero    
131   {                                               
132     return true;                                  
133   }                                               
134   else if(particle == G4AntiOmegaMinus::AntiOm    
135   {                                               
136     return true;                                  
137   }                                               
138   */                                              
139   return true;                                    
140 }                                                 
141                                                   
142 // The main member function giving the collisi    
143 // Make pMom in independent units ! (Now it is    
144 G4double G4ChipsAntiBaryonInelasticXS::GetIsoC    
145               const G4Isotope*,                   
146               const G4Element*,                   
147               const G4Material*)                  
148 {                                                 
149   G4double pMom=Pt->GetTotalMomentum();           
150   G4int tgN = A - tgZ;                            
151   G4int pdg = Pt->GetDefinition()->GetPDGEncod    
152                                                   
153   return GetChipsCrossSection(pMom, tgZ, tgN,     
154 }                                                 
155                                                   
156 G4double G4ChipsAntiBaryonInelasticXS::GetChip    
157 {                                                 
158                                                   
159   G4bool in=false;                     // By d    
160   if(tgN!=lastN || tgZ!=lastZ)         // The     
161   {                                               
162     in = false;                        // By d    
163     lastP   = 0.;                      // New     
164     lastN   = tgN;                     // The     
165     lastZ   = tgZ;                     // The     
166     lastI   = (G4int)colN.size();      // Size    
167     j  = 0;                            // A#0f    
168     if(lastI) for(G4int i=0; i<lastI; i++) //     
169     {                                             
170       if(colN[i]==tgN && colZ[i]==tgZ) // Try     
171       {                                           
172         lastI=i;                       // Reme    
173         lastTH =colTH[i];              // The     
174         if(pMom<=lastTH)                          
175         {                                         
176           return 0.;                   // Ener    
177         }                                         
178         lastP  =colP [i];              // Last    
179         lastCS =colCS[i];              // Last    
180         in = true;                     // This    
181         // Momentum pMom is in IU ! @@ Units      
182         lastCS=CalculateCrossSection(-1,j,cPDG    
183         if(lastCS<=0. && pMom>lastTH)  // Corr    
184         {                                         
185           lastCS=0.;                              
186           lastTH=pMom;                            
187         }                                         
188         break;                         // Go o    
189       }                                           
190       j++;                             // Incr    
191     }                                             
192     if(!in)                            // This    
193     {                                             
194       //!!The slave functions must provide cro    
195       lastCS=CalculateCrossSection(0,j,cPDG,la    
196       //if(lastCS>0.)                   // It     
197       //{                                         
198                                                   
199       lastTH = 0; //ThresholdEnergy(tgZ, tgN);    
200         colN.push_back(tgN);                      
201         colZ.push_back(tgZ);                      
202         colP.push_back(pMom);                     
203         colTH.push_back(lastTH);                  
204         colCS.push_back(lastCS);                  
205       //} // M.K. Presence of H1 with high thr    
206       return lastCS*millibarn;                    
207     } // End of creation of the new set of par    
208     else                                          
209     {                                             
210       colP[lastI]=pMom;                           
211       colCS[lastI]=lastCS;                        
212     }                                             
213   } // End of parameters udate                    
214   else if(pMom<=lastTH)                           
215   {                                               
216     return 0.;                         // Mome    
217   }                                               
218   else                                 // It i    
219   {                                               
220     lastCS=CalculateCrossSection(1,j,cPDG,last    
221     lastP=pMom;                                   
222   }                                               
223   return lastCS*millibarn;                        
224 }                                                 
225                                                   
226 // The main member function giving the gamma-A    
227 G4double G4ChipsAntiBaryonInelasticXS::Calcula    
228                                         G4int,    
229 {                                                 
230   static const G4double THmin=27.;     // defa    
231   static const G4double THmiG=THmin*.001; // m    
232   static const G4double dP=10.;        // step    
233   static const G4double dPG=dP*.001;   // step    
234   static const G4int    nL=105;        // A#of    
235   static const G4double Pmin=THmin+(nL-1)*dP;     
236   static const G4double Pmax=227000.;  // maxP    
237   static const G4int    nH=224;        // A#of    
238   static const G4double milP=G4Log(Pmin);// Lo    
239   static const G4double malP=G4Log(Pmax);// Hi    
240   static const G4double dlP=(malP-milP)/(nH-1)    
241   static const G4double milPG=G4Log(.001*Pmin)    
242   if(F<=0)                             // This    
243   {                                               
244     if(F<0)                            // This    
245     {                                             
246       G4int sync=(G4int)LEN->size();              
247       if(sync<=I) G4cerr<<"*!*G4QPiMinusNuclCS    
248       lastLEN=(*LEN)[I];               // Poin    
249       lastHEN=(*HEN)[I];               // Poin    
250     }                                             
251     else                               // This    
252     {                                             
253       lastLEN = new G4double[nL];      // Allo    
254       lastHEN = new G4double[nH];      // Allo    
255       // --- Instead of making a separate func    
256       G4double P=THmiG;                // Tabl    
257       for(G4int k=0; k<nL; k++)                   
258       {                                           
259         lastLEN[k] = CrossSectionLin(targZ, ta    
260         P+=dPG;                                   
261       }                                           
262       G4double lP=milPG;                          
263       for(G4int n=0; n<nH; n++)                   
264       {                                           
265         lastHEN[n] = CrossSectionLog(targZ, ta    
266         lP+=dlP;                                  
267       }                                           
268       // --- End of possible separate function    
269       // *** The synchronization check ***        
270       G4int sync=(G4int)LEN->size();              
271       if(sync!=I)                                 
272       {                                           
273         G4cerr<<"***G4QPiMinusNuclCS::CalcCros    
274               <<", N="<<targN<<", F="<<F<<G4en    
275         //G4Exception("G4PiMinusNuclearCS::Cal    
276       }                                           
277       LEN->push_back(lastLEN);         // reme    
278       HEN->push_back(lastHEN);         // reme    
279     } // End of creation of the new set of par    
280   } // End of parameters udate                    
281   // =-------------------= NOW the Magic Formu    
282   G4double sigma;                                 
283   if (Momentum<lastTH) return 0.;      // It m    
284   else if (Momentum<Pmin)              // High    
285   {                                               
286     sigma=EquLinearFit(Momentum,nL,THmin,dP,la    
287   }                                               
288   else if (Momentum<Pmax)              // High    
289   {                                               
290     G4double lP=G4Log(Momentum);                  
291     sigma=EquLinearFit(lP,nH,milP,dlP,lastHEN)    
292   }                                               
293   else                                 // UHE     
294   {                                               
295     G4double P=0.001*Momentum;         // Appr    
296     sigma=CrossSectionFormula(targZ, targN, P,    
297   }                                               
298   if(sigma<0.) return 0.;                         
299   return sigma;                                   
300 }                                                 
301                                                   
302 // Calculation formula for piMinus-nuclear ine    
303 G4double G4ChipsAntiBaryonInelasticXS::CrossSe    
304 {                                                 
305   G4double lP=G4Log(P);                           
306   return CrossSectionFormula(tZ, tN, P, lP);      
307 }                                                 
308                                                   
309 // Calculation formula for piMinus-nuclear ine    
310 G4double G4ChipsAntiBaryonInelasticXS::CrossSe    
311 {                                                 
312   G4double P=G4Exp(lP);                           
313   return CrossSectionFormula(tZ, tN, P, lP);      
314 }                                                 
315 // Calculation formula for piMinus-nuclear ine    
316 G4double G4ChipsAntiBaryonInelasticXS::CrossSe    
317                                                   
318 {                                                 
319   G4double sigma=0.;                              
320   if(tZ==1 && !tN)                        // A    
321   {                                               
322     G4double ld=lP-3.5;                           
323     G4double ld2=ld*ld;                           
324     G4double ye=G4Exp(lP*1.25);                   
325     G4double yt=G4Exp(lP*0.35);                   
326     G4double El=80./(ye+1.);                      
327     G4double To=(80./yt+.3)/yt;                   
328     sigma=(To-El)+.2443*ld2+31.48;                
329   }                                               
330   else if(tZ==1 && tN==1)                         
331   {                                               
332     G4double r=lP-3.7;                            
333     sigma=0.6*r*r+67.+90.*G4Exp(-lP*.666);        
334   }                                               
335   else if(tZ<97 && tN<152)                // G    
336   {                                               
337     G4double d=lP-4.2;                            
338     G4double sp=std::sqrt(P);                     
339     G4double a=tN+tZ;                      //     
340     G4double sa=std::sqrt(a);                     
341     G4double a2=a*a;                              
342     G4double a3=a2*a;                             
343     G4double a2s=a2*sa;                           
344     G4double c=(170.+3600./a2s)/(1.+65./a2s)+4    
345     G4double r=(170.+0.01*a3)/(1.+a3/28000.);     
346     sigma=c+d*d+r/sp;                             
347   }                                               
348   else                                            
349   {                                               
350     G4cerr<<"-Warning-G4QAntiBarNuclearCroSect    
351     sigma=0.;                                     
352   }                                               
353   if(sigma<0.) return 0.;                         
354   return sigma;                                   
355 }                                                 
356                                                   
357 G4double G4ChipsAntiBaryonInelasticXS::EquLine    
358 {                                                 
359   if(DX<=0. || N<2)                               
360     {                                             
361       G4cerr<<"***G4ChipsAntiBaryonInelasticXS    
362       return Y[0];                                
363     }                                             
364                                                   
365   G4int    N2=N-2;                                
366   G4double d=(X-X0)/DX;                           
367   G4int    jj=static_cast<int>(d);                
368   if     (jj<0)  jj=0;                            
369   else if(jj>N2) jj=N2;                           
370   d-=jj; // excess                                
371   G4double yi=Y[jj];                              
372   G4double sigma=yi+(Y[jj+1]-yi)*d;               
373                                                   
374   return sigma;                                   
375 }                                                 
376