58   dlnP=(lPMax-lPMin)/nLast;
 
   96   std::vector<G4double*>::iterator pos;
 
   97   for (pos=CST.begin(); pos<CST.end(); pos++)
 
  100   for (pos=PAR.begin(); pos<PAR.end(); pos++)
 
  103   for (pos=SST.begin(); pos<SST.end(); pos++)
 
  106   for (pos=S1T.begin(); pos<S1T.end(); pos++)
 
  109   for (pos=B1T.begin(); pos<B1T.end(); pos++)
 
  112   for (pos=S2T.begin(); pos<S2T.end(); pos++)
 
  115   for (pos=B2T.begin(); pos<B2T.end(); pos++)
 
  118   for (pos=S3T.begin(); pos<S3T.end(); pos++)
 
  121   for (pos=B3T.begin(); pos<B3T.end(); pos++)
 
  124   for (pos=S4T.begin(); pos<S4T.end(); pos++)
 
  127   for (pos=B4T.begin(); pos<B4T.end(); pos++)
 
  156   static std::vector <G4int>    colN;  
 
  157   static std::vector <G4int>    colZ;  
 
  158   static std::vector <G4double> colP;  
 
  159   static std::vector <G4double> colTH; 
 
  160   static std::vector <G4double> colCS; 
 
  172   if(lastI) 
for(
G4int i=0; i<lastI; i++) 
 
  174     if(colN[i]==tgN && colZ[i]==tgZ) 
 
  187         CalculateCrossSection(fCS,-1,i,321,lastZ,lastN,pMom); 
 
  192       lastCS=CalculateCrossSection(fCS,-1,i,321,lastZ,lastN,pMom); 
 
  193       if(lastCS<=0. && pEn>lastTH)    
 
  203     lastCS=CalculateCrossSection(fCS,0,lastI,321,lastZ,lastN,pMom);
 
  214     colP.push_back(pMom);
 
  215     colTH.push_back(lastTH);
 
  216     colCS.push_back(lastCS);
 
  233   static std::vector <G4double>  PIN;   
 
  237   lastLP=std::log(pMom);                
 
  255     if(lastLP>lastPIN && lastLP<lPMax)
 
  257       lastPIN=GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);
 
  275     lastPIN = GetPTables(lastLP,lPMin,PDG,tgZ,tgN); 
 
  276     PIN.push_back(lastPIN);             
 
  277     PAR.push_back(lastPAR);             
 
  278     CST.push_back(lastCST);             
 
  279     SST.push_back(lastSST);             
 
  280     S1T.push_back(lastS1T);             
 
  281     B1T.push_back(lastB1T);             
 
  282     S2T.push_back(lastS2T);             
 
  283     B2T.push_back(lastB2T);             
 
  284     S3T.push_back(lastS3T);             
 
  285     B3T.push_back(lastB3T);             
 
  286     S4T.push_back(lastS4T);             
 
  287     B4T.push_back(lastB4T);             
 
  290   if(lastLP>lastPIN && lastLP<lPMax)
 
  292     lastPIN = GetPTables(lastLP,lastPIN,PDG,tgZ,tgN);
 
  294   if(!onlyCS) lastTM=GetQ2max(PDG, tgZ, tgN, pMom); 
 
  295   if(lastLP>lPMin && lastLP<=lastPIN)   
 
  299       G4double shift=(lastLP-lPMin)/dlnP+.000001; 
 
  300       G4int    blast=
static_cast<int>(shift); 
 
  301       if(blast<0 || blast>=nLast) 
G4cout<<
"G4QKPElCS::CCS:b="<<blast<<
",n="<<nLast<<
G4endl;
 
  302       lastSIG = lastCST[blast];
 
  305         theSS  = lastSST[blast];
 
  306         theS1  = lastS1T[blast];
 
  307         theB1  = lastB1T[blast];
 
  308         theS2  = lastS2T[blast];
 
  309         theB2  = lastB2T[blast];
 
  310         theS3  = lastS3T[blast];
 
  311         theB3  = lastB3T[blast];
 
  312         theS4  = lastS4T[blast];
 
  313         theB4  = lastB4T[blast];
 
  319       G4int    blast=
static_cast<int>(shift);    
 
  321       if(blast>=nLast) blast=nLast-1;            
 
  325       lastSIG= SIGL+shift*(lastCST[lastL]-SIGL); 
 
  329         theSS=SSTL+shift*(lastSST[lastL]-SSTL); 
 
  331         theS1=S1TL+shift*(lastS1T[lastL]-S1TL); 
 
  333         theB1=B1TL+shift*(lastB1T[lastL]-B1TL); 
 
  335         theS2=S2TL+shift*(lastS2T[lastL]-S2TL); 
 
  337         theB2=B2TL+shift*(lastB2T[lastL]-B2TL); 
 
  339         theS3=S3TL+shift*(lastS3T[lastL]-S3TL); 
 
  341         theB3=B3TL+shift*(lastB3T[lastL]-B3TL); 
 
  343         theS4=S4TL+shift*(lastS4T[lastL]-S4TL); 
 
  345         theB4=B4TL+shift*(lastB4T[lastL]-B4TL); 
 
  349   else lastSIG=GetTabValues(lastLP, PDG, tgZ, tgN); 
 
  350   if(lastSIG<0.) lastSIG = 0.;                   
 
  360   const G4int n_kppel=35;                
 
  362   G4double kpp_el[n_kppel]={.7,.38,.0676,.0557,3.5,2.23,.7,.1,2.,1.,.372,5.,74.,3.,3.4,
 
  363                             .2,.17,.001,8.,.055,3.64,5.e-5,4000.,1500.,.46,1.2e6,3.5e6,
 
  364                             5.e-5,1.e10,8.5e8,1.e10,1.1,3.4e6,6.8e6,0.};
 
  381     if(lastPAR[nLast]!=pwd) 
 
  383       if ( tgZ == 1 && tgN == 0 )
 
  385         for (
G4int ip=0; ip<n_kppel; ip++) lastPAR[ip]=kpp_el[ip]; 
 
  409         lastPAR[0]=.06*asa/(1.+a*(.01+.1/ssa));                              
 
  410         lastPAR[1]=.75*asa/(1.+.009*
a);                                      
 
  411         lastPAR[2]=.9*asa*ssa/(1.+.03*
a);                                    
 
  424           lastPAR[10]=1.2e7*a8+380*a17;                      
 
  425           lastPAR[11]=.7/(1.+4.e-12*a16);                    
 
  426           lastPAR[12]=2.5/a8/(a4+1.e-16*a32);                
 
  428           lastPAR[14]=1.2*a2+2.3;                            
 
  431           lastPAR[16]=.01/(1.+.0024*a5);                     
 
  433           lastPAR[18]=9.e-7/(1.+.035*a5);                    
 
  434           lastPAR[19]=(42.+2.7e-11*a16)/(1.+.14*a);          
 
  438           lastPAR[22]=2.4e-3*a8/(1.+2.6e-4*a7);              
 
  439           lastPAR[23]=3.5e-36*a32*a8/(1.+5.e-15*a32/
a);      
 
  441           lastPAR[24]=1.e5/(a8+2.5e12/a16);                  
 
  442           lastPAR[25]=8.e7/(a12+1.e-27*a28*a28);             
 
  443           lastPAR[26]=.0006*a3;                              
 
  445           lastPAR[27]=10.+4.e-8*a12*
a;                       
 
  450           lastPAR[31]=1./(1.+.0001*a8);                      
 
  451           lastPAR[32]=1.5e-4/(1.+5.e-6*a12);                 
 
  455           lastPAR[35]=2.e-7*a4;                              
 
  459           lastPAR[38]=1.e8*std::exp(.32*asa);                
 
  460           lastPAR[39]=20.*std::exp(.45*asa);                 
 
  461           lastPAR[40]=7.e3+2.4e6/a5;                         
 
  462           lastPAR[41]=2.5e5*std::exp(.085*a3);               
 
  465           lastPAR[43]=920.+.03*a8*a3;                        
 
  466           lastPAR[44]=93.+.0023*a12;                         
 
  476           lastPAR[ 9]=4.5*std::pow(a,1.15);                  
 
  477           lastPAR[10]=.06*std::pow(a,.6);                    
 
  478           lastPAR[11]=.6*a/(1.+2.e15/a16);                   
 
  479           lastPAR[12]=.17/(a+9.e5/a3+1.5e33/a32);            
 
  480           lastPAR[13]=(.001+7.e-11*a5)/(1.+4.4
e-11*a5);      
 
  481           lastPAR[14]=(p1a10*p1a10+2.e-29)/(1.+2.
e-22*a12);  
 
  483           lastPAR[15]=400./a12+2.e-22*a9;                    
 
  484           lastPAR[16]=1.e-32*a12/(1.+5.e22/a14);             
 
  485           lastPAR[17]=1000./a2+9.5*sa*ssa;                   
 
  486           lastPAR[18]=4.e-6*a*asa+1.e11/a16;                 
 
  487           lastPAR[19]=(120./a+.002*a2)/(1.+2.e14/a16);       
 
  488           lastPAR[20]=9.+100./
a;                             
 
  490           lastPAR[21]=.002*a3+3.e7/a6;                       
 
  491           lastPAR[22]=7.e-15*a4*asa;                         
 
  492           lastPAR[23]=9000./a4;                              
 
  494           lastPAR[24]=.0011*asa/(1.+3.e34/a32/a4);           
 
  495           lastPAR[25]=1.e-5*a2+2.e14/a16;                    
 
  496           lastPAR[26]=1.2e-11*a2/(1.+1.5e19/a12);            
 
  497           lastPAR[27]=.016*asa/(1.+5.e16/a16);               
 
  499           lastPAR[28]=.002*a4/(1.+7.e7/std::pow(a-6.83,14)); 
 
  500           lastPAR[29]=2.e6/a6+7.2/std::pow(a,.11);           
 
  501           lastPAR[30]=11.*a3/(1.+7.e23/a16/a8);              
 
  502           lastPAR[31]=100./asa;                              
 
  504           lastPAR[32]=(.1+4.4e-5*a2)/(1.+5.e5/a4);           
 
  505           lastPAR[33]=3.5e-4*a2/(1.+1.e8/a8);                
 
  506           lastPAR[34]=1.3+3.e5/a4;                           
 
  507           lastPAR[35]=500./(a2+50.)+3;                       
 
  508           lastPAR[36]=1.e-9/a+s4a16*s4a16;                   
 
  510           lastPAR[37]=.4*asa+3.e-9*a6;                       
 
  511           lastPAR[38]=.0005*a5;                              
 
  515           lastPAR[41]=.05+.005*
a;                            
 
  516           lastPAR[42]=7.e-8/sa;                              
 
  520           lastPAR[46]=3.e32/(a32+1.e32);                     
 
  524           lastPAR[49]=7.e3*a/(sa+1.);                        
 
  525           lastPAR[50]=900.*sa/(1.+500./a3);                  
 
  528         lastPAR[51]=1.e15+2.e27/a4/(1.+2.e-18*a16);
 
  535       lastCST[0]=GetTabValues(lp, PDG, tgZ, tgN); 
 
  549       G4int ini = 
static_cast<int>((ILP-lPMin+.000001)/dlnP)+1; 
 
  553         G4int fin = 
static_cast<int>((LP-lPMin)/dlnP)+1; 
 
  554         if(fin>=nPoints) fin=nLast;               
 
  563             lastCST[ip]=GetTabValues(lp, PDG, tgZ, tgN); 
 
  577         else G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
 
  578                    <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
" > fin="<<fin<<
", LP="<<LP
 
  579                    <<
" > ILP="<<ILP<<
" nothing is done!"<<
G4endl;
 
  581       else G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetPTables: PDG="<<PDG
 
  582                  <<
", Z="<<tgZ<<
", N="<<tgN<<
", i="<<ini<<
">= max="<<nPoints<<
", LP="<<LP
 
  583                  <<
" > ILP="<<ILP<<
", lPMax="<<lPMax<<
" nothing is done!"<<
G4endl;
 
  592     ed << 
"PDG = " << PDG << 
", Z = " << tgZ << 
", N = " << tgN
 
  593        << 
", while it is defined only for PDG=321 (K+) " << 
G4endl;
 
  594     G4Exception(
"G4ChipsKaonPlusElasticXS::GetPTables()", 
"HAD_CHPS_0000",
 
  607   if(PDG!=321) 
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetExT:PDG="<<PDG<<
G4endl;
 
  608   if(onlyCS) 
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetExT: onlyCS=1"<<
G4endl;
 
  616     G4double R2=(1.-std::exp(-E2*E2*E2));
 
  628       q2=-std::log(1.-ran)/theB1;
 
  634       q2=-std::log(1.-ran);
 
  636       q2=std::pow(q2,third)/theB2;
 
  642       q2=-std::log(1.-ran)/theB3;
 
  648     G4double E1=lastTM*(theB1+lastTM*theSS);
 
  656     if(a>6.5)E3*=tm2*tm2*tm2;                       
 
  671       q2=-std::log(1.-ran)/theB1;
 
  672       if(std::fabs(tss)>1.
e-7) q2=(std::sqrt(theB1*(theB1+(tss+tss)*q2))-theB1)/tss;
 
  678       q2=-std::log(1.-ran)/theB2;
 
  680       if(a<6.5) q2=std::pow(q2,third);
 
  681       else      q2=std::pow(q2,fifth);
 
  687       q2=-std::log(1.-ran)/theB3;
 
  689       if(a>6.5) q2=std::pow(q2,sevth);
 
  695       q2=-std::log(1.-ran)/theB4;
 
  696       if(a<6.5) q2=lastTM-q2;                    
 
  700   if(!(q2>=-1.||q2<=1.)) 
G4cout<<
"*NAN*G4QKaonPlusElasticCS::GetExchT: -t="<<q2<<
G4endl;
 
  712   if(onlyCS)
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetSl:onlCS=true"<<
G4endl;
 
  713   if(lastLP<-4.3) 
return 0.;          
 
  717     ed << 
"PDG = " << PDG << 
", Z = " << tgZ << 
", N = " << tgN
 
  718        << 
", while it is defined only for PDG=321 (K+)" << 
G4endl;
 
  719     G4Exception(
"G4ChipsKaonPlusElasticXS::GetSlope()", 
"HAD_CHPS_0000",
 
  722   if(theB1<0.) theB1=0.;
 
  723   if(!(theB1>=-1.||theB1<=1.))
G4cout<<
"*NAN*G4QKaonPlusElCS::GetSlope:B1="<<theB1<<
G4endl;
 
  728 G4double G4ChipsKaonPlusElasticXS::GetHMaxT()
 
  730   static const G4double HGeVSQ=gigaelectronvolt*gigaelectronvolt/2.;
 
  731   return lastTM*HGeVSQ;
 
  738   if(PDG!=321)
G4cout<<
"*Warning*G4ChipsKaonPlusElasticXS::GetTaV:PDG="<<PDG<<
G4endl;
 
  741     G4cout<<
"*Warning*G4QKaonPlusElasticCS::GetTabV:(1-92)NoIsotopes for Z="<<tgZ<<
G4endl;
 
  756   if ( tgZ == 1 && tgN == 0 ) 
 
  760     theS1=(lastPAR[12]+lastPAR[13]*dl2*dl2)/(1.+lastPAR[14]/p4/p)+
 
  761           (lastPAR[15]/p2+lastPAR[16]*
p)/(p4+lastPAR[17]*sp);
 
  762     theB1=lastPAR[18]*std::pow(p,lastPAR[19])/(1.+lastPAR[20]/p3);
 
  763     theS2=lastPAR[21]+lastPAR[22]/(p4+lastPAR[23]*
p);
 
  764     theB2=lastPAR[24]+lastPAR[25]/(p4+lastPAR[26]/
sp); 
 
  765     theS3=lastPAR[27]+lastPAR[28]/(p4*p4+lastPAR[29]*p2+lastPAR[30]);
 
  766     theB3=lastPAR[31]+lastPAR[32]/(p4+lastPAR[33]); 
 
  772     return lastPAR[0]/(lastPAR[2]+
sqr(p-lastPAR[1]))+(lastPAR[3]*dp*dp+lastPAR[5])/
 
  773            (1.-lastPAR[6]/sp+lastPAR[7]/p4)
 
  774            +lastPAR[8]/(
sqr(p-lastPAR[9])+lastPAR[10]);    
 
  793       theS1=lastPAR[9]/(1.+lastPAR[10]*p4*pa)+lastPAR[11]/(p4+lastPAR[12]*p4/pa2)+
 
  794             (lastPAR[13]*dl*dl+lastPAR[14])/(1.+lastPAR[15]/p2);
 
  795       theB1=(lastPAR[16]+lastPAR[17]*p2)/(p4+lastPAR[18]/pah)+lastPAR[19];
 
  796       theSS=lastPAR[20]/(1.+lastPAR[21]/p2)+lastPAR[22]/(p6/pa+lastPAR[23]/p16);
 
  797       theS2=lastPAR[24]/(pa/p2+lastPAR[25]/p4)+lastPAR[26];
 
  798       theB2=lastPAR[27]*std::pow(p,lastPAR[28])+lastPAR[29]/(p8+lastPAR[30]/p16);
 
  799       theS3=lastPAR[31]/(pa*p+lastPAR[32]/pa)+lastPAR[33];
 
  800       theB3=lastPAR[34]/(p3+lastPAR[35]/p6)+lastPAR[36]/(1.+lastPAR[37]/p2);
 
  801       theS4=p2*(pah*lastPAR[38]*std::exp(-pah*lastPAR[39])+
 
  802                 lastPAR[40]/(1.+lastPAR[41]*std::pow(p,lastPAR[42])));
 
  803       theB4=lastPAR[43]*pa/p2/(1.+pa*lastPAR[44]);
 
  807       theS1=lastPAR[9]/(1.+lastPAR[10]/p4)+lastPAR[11]/(p4+lastPAR[12]/p2)+
 
  808             lastPAR[13]/(p5+lastPAR[14]/p16);
 
  809       theB1=(lastPAR[15]/p8+lastPAR[19])/(p+lastPAR[16]/std::pow(p,lastPAR[20]))+
 
  810             lastPAR[17]/(1.+lastPAR[18]/p4);
 
  811       theSS=lastPAR[21]/(p4/std::pow(p,lastPAR[23])+lastPAR[22]/p4);
 
  812       theS2=lastPAR[24]/p4/(std::pow(p,lastPAR[25])+lastPAR[26]/p12)+lastPAR[27];
 
  813       theB2=lastPAR[28]/std::pow(p,lastPAR[29])+lastPAR[30]/std::pow(p,lastPAR[31]);
 
  814       theS3=lastPAR[32]/std::pow(p,lastPAR[35])/(1.+lastPAR[36]/p12)+
 
  815             lastPAR[33]/(1.+lastPAR[34]/p6);
 
  816       theB3=lastPAR[37]/p8+lastPAR[38]/p2+lastPAR[39]/(1.+lastPAR[40]/p8);
 
  817       theS4=(lastPAR[41]/p4+lastPAR[46]/
p)/(1.+lastPAR[42]/p10)+
 
  818             (lastPAR[43]+lastPAR[44]*dl*dl)/(1.+lastPAR[45]/p12);
 
  819       theB4=lastPAR[47]/(1.+lastPAR[48]/
p)+lastPAR[49]*p4/(1.+lastPAR[50]*p5);
 
  824     return (lastPAR[0]*dlp*dlp+lastPAR[1]+lastPAR[2]/p2)/(1.+lastPAR[3]/p2/
sp);
 
  842     G4double mds=dmt*std::sqrt(pP2+mK2)+mK2+mt*mt;    
 
  843     return dmt*dmt*pP2/mds;
 
  848     ed << 
"PDG = " << PDG << 
",Z = " << tgZ << 
", N = " << tgN
 
  849        << 
", while it is defined only for p projectiles & Z_target>0" << 
G4endl;
 
  850     G4Exception(
"G4ChipsKaonPlusElasticXS::GetQ2max()", 
"HAD_CHPS_0000",