Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCrossSectionsMultiPionsAndResonances.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/models/inclxx/incl_physics/src/G4INCLCrossSectionsMultiPionsAndResonances.cc (Version 11.3.0) and /processes/hadronic/models/inclxx/incl_physics/src/G4INCLCrossSectionsMultiPionsAndResonances.cc (Version 2.0)


  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 // INCL++ intra-nuclear cascade model             
 27 // Alain Boudard, CEA-Saclay, France              
 28 // Joseph Cugnon, University of Liege, Belgium    
 29 // Jean-Christophe David, CEA-Saclay, France      
 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H    
 31 // Sylvie Leray, CEA-Saclay, France               
 32 // Davide Mancusi, CEA-Saclay, France             
 33 //                                                
 34 #define INCLXX_IN_GEANT4_MODE 1                   
 35                                                   
 36 #include "globals.hh"                             
 37                                                   
 38 /** \file G4INCLCrossSectionsMultiPionsAndReso    
 39  * \brief Multipion and mesonic Resonances cro    
 40  *                                                
 41  * \date 4th February 2014                        
 42  * \author Jean-Christophe David                  
 43  */                                               
 44                                                   
 45 #include "G4INCLCrossSectionsMultiPionsAndReso    
 46 #include "G4INCLKinematicsUtils.hh"               
 47 #include "G4INCLParticleTable.hh"                 
 48 // #include <cassert>                             
 49                                                   
 50 namespace G4INCL {                                
 51                                                   
 52     template<G4int N>                             
 53     struct BystrickyEvaluator {                   
 54         static G4double eval(const G4double pL    
 55             const G4double pMeV = pLab*1E3;       
 56             const G4double ekin=std::sqrt(Part    
 57             const G4double xrat=ekin*oneOverTh    
 58             const G4double x=std::log(xrat);      
 59             return HornerEvaluator<N>::eval(x,    
 60         }                                         
 61     };                                            
 62                                                   
 63     const G4int CrossSectionsMultiPionsAndReso    
 64     const G4int CrossSectionsMultiPionsAndReso    
 65                                                   
 66     const G4double CrossSectionsMultiPionsAndR    
 67     const G4double CrossSectionsMultiPionsAndR    
 68     const G4double CrossSectionsMultiPionsAndR    
 69     const G4double CrossSectionsMultiPionsAndR    
 70     const G4double CrossSectionsMultiPionsAndR    
 71     const G4double CrossSectionsMultiPionsAndR    
 72     const G4double CrossSectionsMultiPionsAndR    
 73     const G4double CrossSectionsMultiPionsAndR    
 74     const G4double CrossSectionsMultiPionsAndR    
 75     const G4double CrossSectionsMultiPionsAndR    
 76                                                   
 77     CrossSectionsMultiPionsAndResonances::Cros    
 78     s11pzHC(-2.228000000000294018,8.7560000000    
 79     s01ppHC(2.0570000000126518344,-6.029000000    
 80     s01pzHC(0.18030000000000441851,7.870099999    
 81     s11pmHC(0.20590000000000031866,3.345099999    
 82     s12pmHC(-0.77235999999999901328,4.26265999    
 83     s12ppHC(-0.75724999999999975664,2.09343999    
 84     s12zzHC(-0.89599999999996965072,7.88299999    
 85     s02pzHC(-1.0579999999999967036,11.11399999    
 86     s02pmHC(2.4009000000012553286,-7.768000000    
 87     s12mzHC(-0.21858699999999976269,1.91489999    
 88     {                                             
 89     }                                             
 90                                                   
 91     G4double CrossSectionsMultiPionsAndResonan    
 92         G4double inelastic;                       
 93         if(p1->isNucleon() && p2->isNucleon())    
 94             return CrossSectionsMultiPions::NN    
 95         } else if((p1->isNucleon() && p2->isDe    
 96                   (p1->isDelta() && p2->isNucl    
 97             inelastic = CrossSectionsMultiPion    
 98         } else if((p1->isNucleon() && p2->isPi    
 99                   (p1->isPion() && p2->isNucle    
100             return CrossSectionsMultiPions::pi    
101         } else if((p1->isNucleon() && p2->isEt    
102                   (p1->isEta() && p2->isNucleo    
103             inelastic = etaNToPiN(p1,p2) + eta    
104         } else if((p1->isNucleon() && p2->isOm    
105                   (p1->isOmega() && p2->isNucl    
106             inelastic = omegaNInelastic(p1,p2)    
107         } else if((p1->isNucleon() && p2->isEt    
108                   (p1->isEtaPrime() && p2->isN    
109             inelastic = etaPrimeNToPiN(p1,p2);    
110         } else {                                  
111             inelastic = 0.;                       
112         }                                         
113                                                   
114         return inelastic + elastic(p1, p2);       
115     }                                             
116                                                   
117                                                   
118     G4double CrossSectionsMultiPionsAndResonan    
119         if((p1->isNucleon()||p1->isDelta()) &&    
120             return CrossSectionsMultiPions::el    
121         }                                         
122         else if ((p1->isNucleon() && p2->isPio    
123             return CrossSectionsMultiPions::el    
124         }                                         
125         else if ((p1->isNucleon() && p2->isEta    
126             return etaNElastic(p1, p2);           
127         }                                         
128         else if ((p1->isNucleon() && p2->isOme    
129             return omegaNElastic(p1, p2);         
130         }                                         
131         else {                                    
132             return 0.0;                           
133         }                                         
134     }                                             
135                                                   
136                                                   
137     G4double CrossSectionsMultiPionsAndResonan    
138         //                                        
139         //     pion-Nucleon producing xpi pion    
140         //                                        
141 // assert(xpi>1 && xpi<=nMaxPiPiN);               
142 // assert((particle1->isNucleon() && particle2    
143                                                   
144         const G4double oldXS2Pi=CrossSectionsM    
145         const G4double oldXS3Pi=CrossSectionsM    
146         const G4double oldXS4Pi=CrossSectionsM    
147         const G4double xsEta=piNToEtaN(particl    
148         const G4double xsOmega=piNToOmegaN(par    
149         G4double newXS2Pi=0.;                     
150         G4double newXS3Pi=0.;                     
151         G4double newXS4Pi=0.;                     
152                                                   
153         if (xpi == 2) {                           
154             if (oldXS4Pi != 0.)                   
155                 newXS2Pi=oldXS2Pi;                
156             else if (oldXS3Pi != 0.) {            
157                 newXS3Pi=oldXS3Pi-xsEta-xsOmeg    
158                 if (newXS3Pi < 1.e-09)            
159                     newXS2Pi=oldXS2Pi-(xsEta+x    
160                 else                              
161                     newXS2Pi=oldXS2Pi;            
162             }                                     
163             else {                                
164                 newXS2Pi=oldXS2Pi-xsEta-xsOmeg    
165             if (newXS2Pi < 1.e-09)                
166                     newXS2Pi=0.;                  
167             }                                     
168             return newXS2Pi;                      
169         }                                         
170         else if (xpi == 3) {                      
171             if (oldXS4Pi != 0.) {                 
172                 newXS4Pi=oldXS4Pi-xsEta-xsOmeg    
173                 if (newXS4Pi < 1.e-09)            
174                     newXS3Pi=oldXS3Pi-(xsEta+x    
175                 else                              
176                     newXS3Pi=oldXS3Pi;            
177             }                                     
178             else {                                
179                 newXS3Pi=oldXS3Pi-xsEta-xsOmeg    
180                 if (newXS3Pi < 1.e-09)            
181                     newXS3Pi=0.;                  
182             }                                     
183             return newXS3Pi;                      
184         }                                         
185         else if (xpi == 4) {                      
186             newXS4Pi=oldXS4Pi-xsEta-xsOmega;      
187             if (newXS4Pi < 1.e-09)                
188                 newXS4Pi=0.;                      
189             return newXS4Pi;                      
190         }                                         
191         else // should never reach this point     
192             return 0.;                            
193     }                                             
194                                                   
195     G4double CrossSectionsMultiPionsAndResonan    
196         //                                        
197         //     Pion-Nucleon producing Eta cros    
198         //                                        
199 // assert((particle1->isNucleon() && particle2    
200                                                   
201         G4double sigma;                           
202         sigma=piMinuspToEtaN(particle1,particl    
203                                                   
204         const G4int isoin = ParticleTable::get    
205                                                   
206         if (isoin == -1) {                        
207             if ((particle1->getType()) == Prot    
208             else return 0.5 * sigma;              
209         }                                         
210         else if (isoin == 1) {                    
211             if ((particle1->getType()) == Neut    
212             else return 0.5 * sigma;              
213         }                                         
214         else return 0. ; // should never retur    
215                                                   
216 //        return sigma;                           
217     }                                             
218                                                   
219     G4double CrossSectionsMultiPionsAndResonan    
220         //                                        
221         //     Pion-Nucleon producing Omega cr    
222         //                                        
223 // assert((particle1->isNucleon() && particle2    
224                                                   
225         G4double sigma;                           
226         sigma=piMinuspToOmegaN(particle1,parti    
227                                                   
228         const G4int isoin = ParticleTable::get    
229                                                   
230         if (isoin == -1) {                        
231             if ((particle1->getType()) == Prot    
232             else return 0.5 * sigma;              
233         }                                         
234         else if (isoin == 1) {                    
235             if ((particle1->getType()) == Neut    
236             else return 0.5 * sigma;              
237         }                                         
238         else return 0. ; // should never retur    
239                                                   
240 //        return sigma;                           
241     }                                             
242                                                   
243 #if defined(NDEBUG) || defined(INCLXX_IN_GEANT    
244     G4double CrossSectionsMultiPionsAndResonan    
245 #else                                             
246     G4double CrossSectionsMultiPionsAndResonan    
247 #endif                                            
248         //                                        
249         //     Pion-Nucleon producing EtaPrime    
250         //                                        
251 // assert((particle1->isNucleon() && particle2    
252                                                   
253         return 0.;                                
254     }                                             
255                                                   
256     G4double CrossSectionsMultiPionsAndResonan    
257         //                                        
258         //     Eta-Nucleon producing Pion cros    
259         //                                        
260 // assert((particle1->isNucleon() && particle2    
261                                                   
262         const Particle *eta;                      
263         const Particle *nucleon;                  
264                                                   
265         if (particle1->isEta()) {                 
266          eta = particle1;                         
267          nucleon = particle2;                     
268         }                                         
269         else {                                    
270          eta = particle2;                         
271          nucleon = particle1;                     
272         }                                         
273                                                   
274         const G4double pLab = KinematicsUtils:    
275         G4double sigma=0.;                        
276                                                   
277         if (pLab <= 574.)                         
278          sigma= 1.511147E-13*std::pow(pLab,6)-    
279         else if (pLab <= 850.)                    
280          sigma= -8.00018E-14*std::pow(pLab,6)+    
281         else if (pLab <= 1300.)                   
282          sigma= 6.56364E-09*std::pow(pLab,3)-     
283         else {                                    
284             G4double ECM=KinematicsUtils::tota    
285             G4double massPiZero=ParticleTable:    
286             G4double massPiMinus=ParticleTable    
287             G4double massProton=ParticleTable:    
288             G4double masseta;                     
289             G4double massnucleon;                 
290             G4double pCM_eta;                     
291             masseta=eta->getMass();               
292             massnucleon=nucleon->getMass();       
293             pCM_eta=KinematicsUtils::momentumI    
294             G4double pCM_PiZero=KinematicsUtil    
295             G4double pCM_PiMinus=KinematicsUti    
296             sigma = (piMinuspToEtaN(ECM)/2.) *    
297         }                                         
298         if (sigma < 0.) sigma=0.;                 
299                                                   
300         return sigma;                             
301     }                                             
302                                                   
303     G4double CrossSectionsMultiPionsAndResonan    
304         //                                        
305         //     Eta-Nucleon producing Two Pions    
306         //                                        
307 // assert((particle1->isNucleon() && particle2    
308                                                   
309         G4double sigma=0.;                        
310                                                   
311         const Particle *eta;                      
312         const Particle *nucleon;                  
313                                                   
314         if (particle1->isEta()) {                 
315             eta = particle1;                      
316             nucleon = particle2;                  
317         }                                         
318         else {                                    
319             eta = particle2;                      
320             nucleon = particle1;                  
321         }                                         
322                                                   
323         const G4double pLab = KinematicsUtils:    
324                                                   
325         if (pLab < 450.)                          
326             sigma = 2.01854221E-13*std::pow(pL    
327         else if (pLab < 600.)                     
328             sigma = 2.01854221E-13*std::pow(45    
329         else if (pLab <= 1300.)                   
330             sigma = -6.32793049e-16*std::pow(p    
331             1.37055547e-05*std::pow(pLab,3) -     
332         else                                      
333             sigma = etaNToPiN(particle1,partic    
334                                                   
335         if (sigma < 0.) sigma = 0.;               
336         return sigma; // Parameterization from    
337     }                                             
338                                                   
339                                                   
340     G4double CrossSectionsMultiPionsAndResonan    
341         //                                        
342         //     Eta-Nucleon elastic cross secti    
343         //                                        
344 // assert((particle1->isNucleon() && particle2    
345                                                   
346         G4double sigma=0.;                        
347                                                   
348         const Particle *eta;                      
349         const Particle *nucleon;                  
350                                                   
351         if (particle1->isEta()) {                 
352             eta = particle1;                      
353             nucleon = particle2;                  
354         }                                         
355         else {                                    
356             eta = particle2;                      
357             nucleon = particle1;                  
358         }                                         
359                                                   
360         const G4double pLab = KinematicsUtils:    
361                                                   
362         if (pLab < 700.)                          
363             sigma = 3.6838e-15*std::pow(pLab,6    
364             4.3222e-06*std::pow(pLab,3) + 7.91    
365         else if (pLab < 1400.)                    
366             sigma = 3.562630e-16*std::pow(pLab    
367             9.667078e-06*std::pow(pLab,3) + 7.    
368         else if (pLab < 2025.)                    
369             sigma = -1.041950E-03*pLab + 2.110    
370         else                                      
371             sigma=0.;                             
372                                                   
373         if (sigma < 0.) sigma = 0.;               
374             return sigma; // Parameterization     
375         }                                         
376                                                   
377     G4double CrossSectionsMultiPionsAndResonan    
378         //                                        
379         //     Omega-Nucleon inelastic cross s    
380         //                                        
381 // assert((particle1->isNucleon() && particle2    
382                                                   
383         G4double sigma=0.;                        
384                                                   
385         const Particle *omega;                    
386         const Particle *nucleon;                  
387                                                   
388         if (particle1->isOmega()) {               
389             omega = particle1;                    
390             nucleon = particle2;                  
391             }                                     
392         else {                                    
393             omega = particle2;                    
394             nucleon = particle1;                  
395         }                                         
396                                                   
397         const G4double pLab = KinematicsUtils:    
398                                                   
399         sigma = 20. + 4.0/pLab;    // Eq.(24)     
400                                                   
401         return sigma;                             
402     }                                             
403                                                   
404                                                   
405     G4double CrossSectionsMultiPionsAndResonan    
406         //                                        
407         //     Omega-Nucleon elastic cross sec    
408         //                                        
409 // assert((particle1->isNucleon() && particle2    
410                                                   
411         G4double sigma=0.;                        
412                                                   
413         const Particle *omega;                    
414         const Particle *nucleon;                  
415                                                   
416         if (particle1->isOmega()) {               
417             omega = particle1;                    
418             nucleon = particle2;                  
419         }                                         
420         else {                                    
421             omega = particle2;                    
422             nucleon = particle1;                  
423         }                                         
424                                                   
425         const G4double pLab = KinematicsUtils:    
426                                                   
427         sigma = 5.4 + 10.*std::exp(-0.6*pLab);    
428                                                   
429         return sigma;                             
430     }                                             
431                                                   
432                                                   
433     G4double CrossSectionsMultiPionsAndResonan    
434         //                                        
435         //     Omega-Nucleon producing Pion cr    
436         //                                        
437 // assert((particle1->isNucleon() && particle2    
438                                                   
439         G4double ECM=KinematicsUtils::totalEne    
440                                                   
441         G4double massPiZero=ParticleTable::get    
442         G4double massPiMinus=ParticleTable::ge    
443         G4double massProton=ParticleTable::get    
444                                                   
445         G4double massomega;                       
446         G4double massnucleon;                     
447         G4double pCM_omega;                       
448         G4double pLab_omega;                      
449                                                   
450         G4double sigma=0.;                        
451                                                   
452         if (particle1->isOmega()) {               
453             massomega=particle1->getMass();       
454             massnucleon=particle2->getMass();     
455         }                                         
456         else {                                    
457             massomega=particle2->getMass();       
458             massnucleon=particle1->getMass();     
459         }                                         
460         pCM_omega=KinematicsUtils::momentumInC    
461         pLab_omega=KinematicsUtils::momentumIn    
462                                                   
463         G4double pCM_PiZero=KinematicsUtils::m    
464         G4double pCM_PiMinus=KinematicsUtils::    
465                                                   
466         sigma = (piMinuspToOmegaN(ECM)/2.) * s    
467         + piMinuspToOmegaN(ECM) * std::pow((pC    
468                                                   
469         if (sigma > omegaNInelastic(particle1,    
470 //        if (sigma > omegaNInelastic(particle    
471             sigma = omegaNInelastic(particle1,    
472         }                                         
473                                                   
474         return sigma;                             
475     }                                             
476                                                   
477                                                   
478     G4double CrossSectionsMultiPionsAndResonan    
479         //                                        
480         //     Omega-Nucleon producing 2 PionS    
481         //                                        
482 // assert((particle1->isNucleon() && particle2    
483                                                   
484         G4double sigma=0.;                        
485                                                   
486         sigma = omegaNInelastic(particle1,part    
487                                                   
488         return sigma;                             
489     }                                             
490                                                   
491                                                   
492 #if defined(NDEBUG) || defined(INCLXX_IN_GEANT    
493   G4double CrossSectionsMultiPionsAndResonance    
494 #else                                             
495   G4double CrossSectionsMultiPionsAndResonance    
496 #endif                                            
497         //                                        
498         //     EtaPrime-Nucleon producing Pion    
499         //                                        
500 // assert((particle1->isNucleon() && particle2    
501                                                   
502         return 0.;                                
503     }                                             
504                                                   
505     G4double CrossSectionsMultiPionsAndResonan    
506         //                                        
507         //     Pion-Nucleon producing Eta cros    
508         //                                        
509 // assert((particle1->isNucleon() && particle2    
510                                                   
511         G4double masspion;                        
512         G4double massnucleon;                     
513         if (particle1->isPion()) {                
514             masspion=particle1->getMass();        
515             massnucleon=particle2->getMass();     
516         }                                         
517         else {                                    
518             masspion=particle2->getMass();        
519             massnucleon=particle1->getMass();     
520         }                                         
521                                                   
522         G4double ECM=KinematicsUtils::totalEne    
523         G4double plab=KinematicsUtils::momentu    
524                                                   
525         G4double sigma;                           
526                                                   
527 // new parameterization (JCD) - end of februar    
528         if (ECM < 1486.5) sigma=0.;               
529         else                                      
530         {                                         
531             if (ECM < 1535.)                      
532             {                                     
533                 sigma = -0.0000003689197974814    
534             }                                     
535             else if (ECM < 1670.)                 
536             {                                     
537                 sigma = -0.0000000337986446*st    
538             }                                     
539             else if (ECM < 1714.)                 
540             {                                     
541                 sigma =  0.000003737765*std::p    
542             }                                     
543             else sigma=1.47*std::pow(plab, -1.    
544         }                                         
545 //                                                
546                                                   
547         return sigma;                             
548     }                                             
549                                                   
550     G4double CrossSectionsMultiPionsAndResonan    
551         //                                        
552         //     Pion-Nucleon producing Eta cros    
553         //                                        
554                                                   
555         const G4double masspion = ParticleTabl    
556         const G4double massnucleon = ParticleT    
557                                                   
558         G4double plab=KinematicsUtils::momentu    
559                                                   
560         G4double sigma;                           
561                                                   
562 // new parameterization (JCD) - end of februar    
563         if (ECM < 1486.5) sigma=0.;               
564         else                                      
565         {                                         
566             if (ECM < 1535.)                      
567             {                                     
568                 sigma = -0.0000003689197974814    
569             }                                     
570             else if (ECM < 1670.)                 
571             {                                     
572                 sigma = -0.0000000337986446*st    
573             }                                     
574             else if (ECM < 1714.)                 
575             {                                     
576                 sigma =  0.000003737765*std::p    
577             }                                     
578             else sigma=1.47*std::pow(plab, -1.    
579         }                                         
580                                                   
581         return sigma;                             
582     }                                             
583                                                   
584     G4double CrossSectionsMultiPionsAndResonan    
585         //                                        
586         //     Pion-Nucleon producing Omega cr    
587         //                                        
588 // assert((particle1->isNucleon() && particle2    
589 //jcd to be removed                               
590 //        return 0.;                              
591 //jcd                                             
592                                                   
593 //        G4double param=1.095 ; // Deneye (Th    
594         G4double param=1.0903 ; // JCD (thresh    
595                                                   
596         G4double masspion;                        
597         G4double massnucleon;                     
598         if (particle1->isPion()) {                
599             masspion=particle1->getMass();        
600             massnucleon=particle2->getMass();     
601         }                                         
602         else {                                    
603             masspion=particle2->getMass();        
604             massnucleon=particle1->getMass();     
605         }                                         
606         G4double ECM=KinematicsUtils::totalEne    
607         G4double plab=KinematicsUtils::momentu    
608                                                   
609         G4double sigma;                           
610         if (plab < param) sigma=0.;               
611         else sigma=13.76*(plab-param)/(std::po    
612                                                   
613         return sigma;                             
614 }                                                 
615     G4double CrossSectionsMultiPionsAndResonan    
616         //                                        
617         //     Pion-Nucleon producing Omega cr    
618         //                                        
619 //jcd to be removed                               
620 //    return 0.;                                  
621 //jcd                                             
622                                                   
623 //        G4double param=1.095 ; // Deneye (Th    
624         G4double param=1.0903 ; // JCD (thresh    
625                                                   
626         const G4double masspion = ParticleTabl    
627         const G4double massnucleon = ParticleT    
628                                                   
629         G4double plab=KinematicsUtils::momentu    
630                                                   
631         G4double sigma;                           
632         if (plab < param) sigma=0.;               
633         else sigma=13.76*(plab-param)/(std::po    
634                                                   
635         return sigma;                             
636     }                                             
637                                                   
638     G4double CrossSectionsMultiPionsAndResonan    
639                                                   
640         const G4double Ecm=0.001*ener;            
641         G4double sNNEta; // pp->pp+eta(+X)        
642         G4double sNNEta1; // np->np+eta(+X)       
643         G4double sNNEta2; // np->d+eta (d will    
644         G4double x=Ecm*Ecm/5.88;                  
645                                                   
646 //jcd                                             
647         if (Ecm >= 3.05) {                        
648             sNNEta = 2.5*std::pow((x-1.),1.47)    
649         }                                         
650         else if(Ecm >= 2.6) {                     
651             sNNEta = -327.29*Ecm*Ecm*Ecm + 287    
652             if (sNNEta <= NNToNNEtaExcluIso(en    
653         }                                         
654         else {                                    
655             sNNEta = NNToNNEtaExcluIso(ener, 2    
656         }                                         
657 //jcd                                             
658         if (sNNEta < 1.e-9) sNNEta = 0.;          
659                                                   
660         if (iso != 0) {                           
661             return sNNEta/1000.; // parameteri    
662         }                                         
663                                                   
664         if(Ecm >= 6.25) {                         
665             sNNEta1 = sNNEta;                     
666         }                                         
667         else if (Ecm >= 2.6) {                    
668             sNNEta1 = sNNEta*std::exp(-(-5.531    
669         }                                         
670         else if (Ecm >= 2.525) { // = exclusiv    
671             sNNEta1 = -4433.586*Ecm*Ecm*Ecm*Ec    
672         }                                         
673         else { // = exclusive pn                  
674             sNNEta1 = 17570.217219*Ecm*Ecm - 8    
675         }                                         
676                                                   
677         sNNEta2 = -10220.89518466*Ecm*Ecm+5122    
678         if (sNNEta2 < 0.) sNNEta2=0.;             
679                                                   
680         sNNEta = 2*(sNNEta1+sNNEta2)-sNNEta;      
681                                                   
682         G4double Mn=ParticleTable::getRealMass    
683         G4double Mp=ParticleTable::getRealMass    
684         G4double Meta=ParticleTable::getRealMa    
685         if (sNNEta < 1.e-9 || Ecm < Mn+Mp+Meta    
686                                                   
687         return sNNEta/1000.; // parameterizati    
688     }                                             
689                                                   
690                                                   
691     G4double CrossSectionsMultiPionsAndResonan    
692                                                   
693         const G4double ener=KinematicsUtils::t    
694         const G4int iso=ParticleTable::getIsos    
695                                                   
696         if (iso != 0) {                           
697             return NNToNNEtaIso(ener, iso);       
698         }                                         
699         else {                                    
700             return 0.5*(NNToNNEtaIso(ener, 0)+    
701         }                                         
702     }                                             
703                                                   
704     G4double CrossSectionsMultiPionsAndResonan    
705                                                   
706         const G4double Ecm=0.001*ener;            
707         G4double sNNEta; // pp->pp+eta            
708         G4double sNNEta1; // np->np+eta           
709         G4double sNNEta2; // np->d+eta (d wil     
710                                                   
711         if(Ecm>=3.875) { // By hand (JCD)         
712             sNNEta = -13.008*Ecm*Ecm + 84.531*    
713         }                                         
714         else if(Ecm>=2.725) { // By hand (JCD)    
715             sNNEta = -913.2809*std::pow(Ecm,5)    
716         }                                         
717         else if(Ecm>=2.575) { // By hand (JCD)    
718             sNNEta = -2640.3*Ecm*Ecm + 14692*E    
719         }                                         
720         else {                                    
721             sNNEta = -147043.497285*std::pow(E    
722         }                                         
723                                                   
724         G4double Mn=ParticleTable::getRealMass    
725         G4double Mp=ParticleTable::getRealMass    
726         G4double Meta=ParticleTable::getRealMa    
727         G4double Thr0=0.;                         
728         if (iso > 0) {                            
729             Thr0=2.*Mp+Meta;                      
730         }                                         
731         else if (iso < 0) {                       
732             Thr0=2.*Mn+Meta;                      
733         }                                         
734         else {                                    
735             Thr0=Mn+Mp+Meta;                      
736         }                                         
737                                                   
738         if (sNNEta < 1.e-9 || Ecm < Thr0) sNNE    
739                                                   
740         if (iso != 0) {                           
741             return sNNEta/1000.; // parameteri    
742         }                                         
743                                                   
744         if(Ecm>=3.9) {                            
745             sNNEta1 = sNNEta;                     
746         }                                         
747         else if (Ecm >= 3.5) {                    
748             sNNEta1 = -1916.2*Ecm*Ecm*Ecm + 21    
749         }                                         
750         else if (Ecm >= 2.525) {                  
751             sNNEta1 = -4433.586*Ecm*Ecm*Ecm*Ec    
752         }                                         
753         else {                                    
754             sNNEta1 = 17570.217219*Ecm*Ecm - 8    
755         }                                         
756                                                   
757         sNNEta2 = -10220.89518466*Ecm*Ecm+5122    
758         if (sNNEta2 < 0.) sNNEta2=0.;             
759                                                   
760         sNNEta = 2*(sNNEta1+sNNEta2)-sNNEta;      
761         if (sNNEta < 1.e-9 || Ecm < Thr0) sNNE    
762                                                   
763         return sNNEta/1000.; // parameterizati    
764                                                   
765     }                                             
766                                                   
767     G4double CrossSectionsMultiPionsAndResonan    
768                                                   
769         const G4double ener=KinematicsUtils::t    
770         const G4int iso=ParticleTable::getIsos    
771                                                   
772         if (iso != 0) {                           
773             return NNToNNEtaExcluIso(ener, iso    
774         }                                         
775         else {                                    
776             return 0.5*(NNToNNEtaExcluIso(ener    
777         }                                         
778     }                                             
779                                                   
780                                                   
781     G4double CrossSectionsMultiPionsAndResonan    
782                                                   
783         const G4double Ecm=0.001*ener;            
784         G4double sNNOmega; // pp->pp+eta(+X)      
785         G4double sNNOmega1; // np->np+eta(+X)     
786         G4double x=Ecm*Ecm/7.06;                  
787                                                   
788         if(Ecm>4.0) {                             
789             sNNOmega = 2.5*std::pow(x-1, 1.47)    
790         }                                         
791         else if(Ecm>2.802) { // 2802 MeV -> th    
792             sNNOmega = (568.5254*Ecm*Ecm - 269    
793         if (sNNOmega <= NNToNNOmegaExcluIso(en    
794         }                                         
795         else {                                    
796             sNNOmega = NNToNNOmegaExcluIso(ene    
797         }                                         
798                                                   
799         if (sNNOmega < 1.e-9) sNNOmega = 0.;      
800                                                   
801         if (iso != 0) {                           
802         return sNNOmega;                          
803         }                                         
804                                                   
805         sNNOmega1 = 3.*sNNOmega; // 3.0: ratio    
806                                                   
807         sNNOmega = 2.*sNNOmega1-sNNOmega;         
808                                                   
809         if (sNNOmega < 1.e-9) sNNOmega = 0.;      
810                                                   
811         return sNNOmega;                          
812     }                                             
813                                                   
814                                                   
815     G4double CrossSectionsMultiPionsAndResonan    
816                                                   
817         const G4double ener=KinematicsUtils::t    
818         const G4int iso=ParticleTable::getIsos    
819 //jcd to be removed                               
820 //        return 0.;                              
821 //jcd                                             
822         if (iso != 0) {                           
823             return NNToNNOmegaIso(ener, iso);     
824         }                                         
825         else {                                    
826             return 0.5*(NNToNNOmegaIso(ener, 0    
827         }                                         
828     }                                             
829                                                   
830     G4double CrossSectionsMultiPionsAndResonan    
831                                                   
832         const G4double Ecm=0.001*ener;            
833         G4double sNNOmega; // pp->pp+eta          
834         G4double sNNOmega1; // np->np+eta         
835         G4double sthroot=std::sqrt(7.06);         
836                                                   
837         if(Ecm>=3.0744) { // By hand (JCD)        
838             sNNOmega = 330.*(Ecm-sthroot)/(1.0    
839         }                                         
840         else if(Ecm>=2.65854){                    
841             sNNOmega = -1208.09757*std::pow(Ec    
842         }                                         
843         else {                                    
844             sNNOmega = 0. ;                       
845         }                                         
846                                                   
847         G4double Mn=ParticleTable::getRealMass    
848         G4double Mp=ParticleTable::getRealMass    
849         G4double Momega=ParticleTable::getReal    
850         G4double Thr0=0.;                         
851         if (iso > 0) {                            
852             Thr0=2.*Mp+Momega;                    
853         }                                         
854         else if (iso < 0) {                       
855             Thr0=2.*Mn+Momega;                    
856         }                                         
857         else {                                    
858             Thr0=Mn+Mp+Momega;                    
859         }                                         
860                                                   
861         if (sNNOmega < 1.e-9 || Ecm < Thr0) sN    
862                                                   
863         if (iso != 0) {                           
864             return sNNOmega/1000.; // paramete    
865         }                                         
866                                                   
867         sNNOmega1 = 3*sNNOmega; // 3.0: ratio     
868                                                   
869         sNNOmega = 2*sNNOmega1-sNNOmega;          
870         if (sNNOmega < 1.e-9 || Ecm < Thr0) sN    
871                                                   
872         return sNNOmega/1000.; // parameteriza    
873     }                                             
874                                                   
875     G4double CrossSectionsMultiPionsAndResonan    
876 //jcd to be removed                               
877 //        return 0.;                              
878 //jcd                                             
879                                                   
880         const G4double ener=KinematicsUtils::t    
881         const G4int iso=ParticleTable::getIsos    
882                                                   
883         if (iso != 0) {                           
884             return NNToNNOmegaExcluIso(ener, i    
885         }                                         
886         else {                                    
887             return 0.5*(NNToNNOmegaExcluIso(en    
888         }                                         
889     }                                             
890                                                   
891                                                   
892     G4double CrossSectionsMultiPionsAndResonan    
893         //                                        
894         //     Nucleon-Nucleon producing xpi p    
895         //                                        
896 // assert(xpi>0 && xpi<=nMaxPiNN);                
897 // assert(particle1->isNucleon() && particle2-    
898                                                   
899         G4double oldXS1Pi=CrossSectionsMultiPi    
900         G4double oldXS2Pi=CrossSectionsMultiPi    
901         G4double oldXS3Pi=CrossSectionsMultiPi    
902         G4double oldXS4Pi=CrossSectionsMultiPi    
903         G4double xsEtaOmega=NNToNNEta(particle    
904         G4double newXS1Pi=0.;                     
905         G4double newXS2Pi=0.;                     
906         G4double newXS3Pi=0.;                     
907         G4double newXS4Pi=0.;                     
908                                                   
909         if (xpi == 1) {                           
910             if (oldXS4Pi != 0. || oldXS3Pi !=     
911                 newXS1Pi=oldXS1Pi;                
912             else if (oldXS2Pi != 0.) {            
913                 newXS2Pi=oldXS2Pi-xsEtaOmega;     
914                 if (newXS2Pi < 0.)                
915                     newXS1Pi=oldXS1Pi-(xsEtaOm    
916                 else                              
917                     newXS1Pi=oldXS1Pi;            
918             }                                     
919             else                                  
920                 newXS1Pi=oldXS1Pi-xsEtaOmega;     
921             return newXS1Pi;                      
922         }                                         
923         else if (xpi == 2) {                      
924             if (oldXS4Pi != 0.)                   
925             newXS2Pi=oldXS2Pi;                    
926             else if (oldXS3Pi != 0.) {            
927                 newXS3Pi=oldXS3Pi-xsEtaOmega;     
928                 if (newXS3Pi < 0.)                
929                     newXS2Pi=oldXS2Pi-(xsEtaOm    
930                 else                              
931                     newXS2Pi=oldXS2Pi;            
932             }                                     
933             else {                                
934                 newXS2Pi=oldXS2Pi-xsEtaOmega;     
935                 if (newXS2Pi < 0.)                
936                     newXS2Pi=0.;                  
937             }                                     
938             return newXS2Pi;                      
939         }                                         
940         else if (xpi == 3) {                      
941             if (oldXS4Pi != 0.) {                 
942                 newXS4Pi=oldXS4Pi-xsEtaOmega;     
943                 if (newXS4Pi < 0.)                
944                     newXS3Pi=oldXS3Pi-(xsEtaOm    
945                 else                              
946                     newXS3Pi=oldXS3Pi;            
947             }                                     
948             else {                                
949                 newXS3Pi=oldXS3Pi-xsEtaOmega;     
950                 if (newXS3Pi < 0.)                
951                     newXS3Pi=0.;                  
952             }                                     
953             return newXS3Pi;                      
954         }                                         
955         else if (xpi == 4) {                      
956             newXS4Pi=oldXS4Pi-xsEtaOmega;         
957             if (newXS4Pi < 0.)                    
958                 newXS4Pi=0.;                      
959             return newXS4Pi;                      
960         }                                         
961                                                   
962         else // should never reach this point     
963         return 0.;                                
964     }                                             
965                                                   
966                                                   
967     G4double CrossSectionsMultiPionsAndResonan    
968         // Cross section for nucleon-nucleon p    
969                                                   
970         const G4int iso=ParticleTable::getIsos    
971         if (iso!=0)                               
972             return 0.;                            
973                                                   
974         const G4double ener=KinematicsUtils::t    
975         if (ener < 2018.563) return 0.;           
976                                                   
977         const G4double xsiso2=CrossSectionsMul    
978         const G4double xsiso0=CrossSectionsMul    
979                                                   
980         return 0.25*(CrossSectionsMultiPions::    
981     }                                             
982                                                   
983     G4double CrossSectionsMultiPionsAndResonan    
984         const G4double ener=KinematicsUtils::t    
985         if (ener < 2018.563) return 0.;           
986         const G4int iso=ParticleTable::getIsos    
987                                                   
988         const G4double xsiso2=CrossSectionsMul    
989         if (iso != 0)                             
990             return CrossSectionsMultiPions::NN    
991         else {                                    
992             const G4double xsiso0=CrossSection    
993             return 0.5*(CrossSectionsMultiPion    
994         }                                         
995     }                                             
996                                                   
997     G4double CrossSectionsMultiPionsAndResonan    
998         //                                        
999         //     Nucleon-Nucleon producing one e    
1000         //                                       
1001         const G4double ener=KinematicsUtils::    
1002         if (ener < 2018.563) return 0.;          
1003         const G4int iso=ParticleTable::getIso    
1004                                                  
1005                                                  
1006         const G4double xsiso2=CrossSectionsMu    
1007         if (iso != 0) {                          
1008             return CrossSectionsMultiPions::N    
1009         }                                        
1010         else {                                   
1011             const G4double xsiso0=CrossSectio    
1012             return 0.5*(CrossSectionsMultiPio    
1013         }                                        
1014     }                                            
1015                                                  
1016     G4double CrossSectionsMultiPionsAndResona    
1017         //                                       
1018         //     Nucleon-Nucleon producing one     
1019         //                                       
1020                                                  
1021         const G4double ener=KinematicsUtils::    
1022         if (ener < 2018.563) return 0.;          
1023         const G4int iso=ParticleTable::getIso    
1024                                                  
1025                                                  
1026         const G4double xsiso2=CrossSectionsMu    
1027         const G4double xs1pi2=CrossSectionsMu    
1028         const G4double xs2pi2=CrossSectionsMu    
1029         if (iso != 0)                            
1030             return CrossSectionsMultiPions::N    
1031         else {                                   
1032             const G4double xsiso0=CrossSectio    
1033             const G4double xs1pi0=CrossSectio    
1034             const G4double xs2pi0=CrossSectio    
1035             return 0.5*(CrossSectionsMultiPio    
1036         }                                        
1037     }                                            
1038                                                  
1039     G4double CrossSectionsMultiPionsAndResona    
1040         //                                       
1041         //     Nucleon-Nucleon producing one     
1042         //                                       
1043                                                  
1044         const G4double ener=KinematicsUtils::    
1045         if (ener < 2018.563) return 0.;          
1046         const G4double s = ener*ener;            
1047         const G4int i = ParticleTable::getIso    
1048         G4double xsinelas;                       
1049         if (i!=0)                                
1050             xsinelas=CrossSectionsMultiPions:    
1051         else                                     
1052             xsinelas=0.5*(CrossSectionsMultiP    
1053         if (xsinelas <= 1.e-9) return 0.;        
1054         G4double ratio=(NNToNNEta(particle1,     
1055         if(s<6.25E6)                             
1056             return 0.;                           
1057         const G4double sigma = NNToNNEta(part    
1058         return ((sigma>1.e-9) ? sigma : 0.);     
1059     }                                            
1060                                                  
1061     G4double CrossSectionsMultiPionsAndResona    
1062         //                                       
1063         //     Nucleon-Nucleon producing one     
1064         //                                       
1065 // assert(xpi>0 && xpi<=nMaxPiNN);               
1066 // assert(particle1->isNucleon() && particle2    
1067                                                  
1068         const G4double ener=KinematicsUtils::    
1069         if (ener < 2018.563) return 0.;          
1070         const G4int i = ParticleTable::getIso    
1071         G4double xsinelas;                       
1072         if (i!=0)                                
1073             xsinelas=CrossSectionsMultiPions:    
1074         else                                     
1075             xsinelas=0.5*(CrossSectionsMultiP    
1076         if (xsinelas <= 1.e-9) return 0.;        
1077         G4double ratio=(NNToNNEta(particle1,     
1078                                                  
1079         if (xpi == 1)                            
1080             return NNToNNEtaOnePi(particle1,     
1081         else if (xpi == 2)                       
1082             return NNToNNEtaTwoPi(particle1,     
1083         else if (xpi == 3)                       
1084             return NNToNNEtaThreePi(particle1    
1085         else if (xpi == 4)                       
1086             return NNToNNEtaFourPi(particle1,    
1087         else // should never reach this point    
1088             return 0.;                           
1089     }                                            
1090                                                  
1091                                                  
1092     G4double CrossSectionsMultiPionsAndResona    
1093 // assert(p1->isNucleon() && p2->isNucleon())    
1094         const G4int i = ParticleTable::getIso    
1095         const G4double ener=KinematicsUtils::    
1096         if (ener < 2018.563) return 0.;          
1097         G4double xsinelas;                       
1098         if (i!=0)                                
1099             xsinelas=CrossSectionsMultiPions:    
1100         else                                     
1101             xsinelas=0.5*(CrossSectionsMultiP    
1102         if (xsinelas <= 1.e-9) return 0.;        
1103         G4double ratio=(NNToNNEta(p1, p2)-NNT    
1104         G4double sigma = NNToNNEtaOnePiOrDelt    
1105         if(i==0)                                 
1106             sigma *= 0.5;                        
1107         return sigma;                            
1108     }                                            
1109                                                  
1110                                                  
1111     G4double CrossSectionsMultiPionsAndResona    
1112         // Cross section for nucleon-nucleon     
1113                                                  
1114         const G4int iso=ParticleTable::getIso    
1115         if (iso!=0)                              
1116             return 0.;                           
1117                                                  
1118         const G4double ener=KinematicsUtils::    
1119         if (ener < 2018.563) return 0.;          
1120                                                  
1121         const G4double xsiso2=CrossSectionsMu    
1122         const G4double xsiso0=CrossSectionsMu    
1123                                                  
1124         return 0.25*(CrossSectionsMultiPions:    
1125     }                                            
1126                                                  
1127     G4double CrossSectionsMultiPionsAndResona    
1128         const G4double ener=KinematicsUtils::    
1129         if (ener < 2018.563) return 0.;          
1130         const G4int iso=ParticleTable::getIso    
1131                                                  
1132         const G4double xsiso2=CrossSectionsMu    
1133         if (iso != 0)                            
1134             return CrossSectionsMultiPions::N    
1135         else {                                   
1136             const G4double xsiso0=CrossSectio    
1137             return 0.5*(CrossSectionsMultiPio    
1138         }                                        
1139     }                                            
1140                                                  
1141     G4double CrossSectionsMultiPionsAndResona    
1142         //                                       
1143         //     Nucleon-Nucleon producing one     
1144         //                                       
1145         const G4double ener=KinematicsUtils::    
1146         if (ener < 2018.563) return 0.;          
1147         const G4int iso=ParticleTable::getIso    
1148                                                  
1149         const G4double xsiso2=CrossSectionsMu    
1150         if (iso != 0) {                          
1151             return CrossSectionsMultiPions::N    
1152         }                                        
1153         else {                                   
1154             const G4double xsiso0=CrossSectio    
1155             return 0.5*(CrossSectionsMultiPio    
1156         }                                        
1157     }                                            
1158                                                  
1159     G4double CrossSectionsMultiPionsAndResona    
1160         //                                       
1161         //     Nucleon-Nucleon producing one     
1162         //                                       
1163                                                  
1164         const G4double ener=KinematicsUtils::    
1165         if (ener < 2018.563) return 0.;          
1166         const G4int iso=ParticleTable::getIso    
1167                                                  
1168                                                  
1169         const G4double xsiso2=CrossSectionsMu    
1170         const G4double xs1pi2=CrossSectionsMu    
1171         const G4double xs2pi2=CrossSectionsMu    
1172         if (iso != 0)                            
1173             return CrossSectionsMultiPions::N    
1174         else {                                   
1175             const G4double xsiso0=CrossSectio    
1176             const G4double xs1pi0=CrossSectio    
1177             const G4double xs2pi0=CrossSectio    
1178             return 0.5*(CrossSectionsMultiPio    
1179         }                                        
1180     }                                            
1181                                                  
1182     G4double CrossSectionsMultiPionsAndResona    
1183         //                                       
1184         //     Nucleon-Nucleon producing one     
1185         //                                       
1186 //jcd to be removed                              
1187 //        return 0.;                             
1188 //jcd                                            
1189                                                  
1190         const G4double ener=KinematicsUtils::    
1191         if (ener < 2018.563) return 0.;          
1192         const G4double s = ener*ener;            
1193         const G4int i = ParticleTable::getIso    
1194         G4double xsinelas;                       
1195         if (i!=0)                                
1196             xsinelas=CrossSectionsMultiPions:    
1197         else                                     
1198             xsinelas=0.5*(CrossSectionsMultiP    
1199         if (xsinelas <= 1.e-9) return 0.;        
1200         G4double ratio=(NNToNNOmega(particle1    
1201         if(s<6.25E6)                             
1202             return 0.;                           
1203         const G4double sigma = NNToNNOmega(pa    
1204         return ((sigma>1.e-9) ? sigma : 0.);     
1205     }                                            
1206                                                  
1207     G4double CrossSectionsMultiPionsAndResona    
1208         //                                       
1209         //     Nucleon-Nucleon producing one     
1210         //                                       
1211 // assert(xpi>0 && xpi<=nMaxPiNN);               
1212 // assert(particle1->isNucleon() && particle2    
1213 //jcd to be removed                              
1214 //        return 0.;                             
1215 //jcd                                            
1216                                                  
1217         const G4double ener=KinematicsUtils::    
1218         if (ener < 2018.563) return 0.;          
1219         const G4int i = ParticleTable::getIso    
1220         G4double xsinelas;                       
1221         if (i!=0)                                
1222             xsinelas=CrossSectionsMultiPions:    
1223         else                                     
1224             xsinelas=0.5*(CrossSectionsMultiP    
1225         if (xsinelas <= 1.e-9) return 0.;        
1226         G4double ratio=(NNToNNOmega(particle1    
1227                                                  
1228         if (xpi == 1)                            
1229             return NNToNNOmegaOnePi(particle1    
1230         else if (xpi == 2)                       
1231             return NNToNNOmegaTwoPi(particle1    
1232         else if (xpi == 3)                       
1233             return NNToNNOmegaThreePi(particl    
1234         else if (xpi == 4)                       
1235             return NNToNNOmegaFourPi(particle    
1236         else // should never reach this point    
1237             return 0.;                           
1238     }                                            
1239                                                  
1240                                                  
1241     G4double CrossSectionsMultiPionsAndResona    
1242 // assert(p1->isNucleon() && p2->isNucleon())    
1243 //jcd to be removed                              
1244 //        return 0.;                             
1245 //jcd                                            
1246         const G4int i = ParticleTable::getIso    
1247         const G4double ener=KinematicsUtils::    
1248         if (ener < 2018.563) return 0.;          
1249         G4double xsinelas;                       
1250         if (i!=0)                                
1251             xsinelas=CrossSectionsMultiPions:    
1252         else                                     
1253             xsinelas=0.5*(CrossSectionsMultiP    
1254         if (xsinelas <= 1.e-9) return 0.;        
1255         G4double ratio=(NNToNNOmega(p1, p2)-N    
1256         G4double sigma = NNToNNOmegaOnePiOrDe    
1257         if(i==0)                                 
1258             sigma *= 0.5;                        
1259         return sigma;                            
1260     }                                            
1261                                                  
1262                                                  
1263 } // namespace G4INCL                            
1264                                                  
1265