68   mass2GeV2= massGeV*massGeV;
 
   69   AtomicWeight = 
G4int(AWeight + 0.5);
 
   71   DefineNucleusParameters(AWeight);
 
   73   limitQ2 = 35./(R1*R1);     
 
   79   for(
G4int ii = 1; ii < ONQ2; ii++) 
 
   81     TableQ2[ii] = TableQ2[ii-1]+dQ2;
 
   87   for(
G4int kk = 0; kk < NENERGY; kk++) 
 
   91     G4double plab2= eGeV[kk]*(eGeV[kk] + 2.0*massGeV);
 
   92     G4double Q2m  = 4.0*plab2*massA2/(mass2GeV2 + massA2 + 2.*massA2*elab);
 
   96     maxQ2[kk] = std::min(limitQ2, Q2m);
 
   97     TableCrossSec[ONQ2*kk] = 0.0;
 
  107 void G4ElasticData::DefineNucleusParameters(
G4double A)
 
  109   switch (AtomicWeight)
 
  203       R1    = 4.45*std::pow(A - 1.,0.309)*0.9;
 
  204       R2    = 2.3 *std::pow(A, 0.36);
 
  206       if(A < 100 && A > 3) Pnucl = 0.176 + 0.00275*A;
 
  212       if(A >= 100)               Aeff = 0.7;
 
  213       else if(A < 100 && A > 75) Aeff = 1.5 - 0.008*A;
 
  229   dQ2 = hMass = hMass2 =  hLabMomentum = hLabMomentum2 = MomentumCM = HadrEnergy 
 
  230     = R1 = R2 = Pnucl = Aeff = HadrTot = HadrSlope = HadrReIm = TotP = DDSect2
 
  231     = DDSect3 = ConstU = FmaxT = Slope1 = Slope2 = Coeff1 = Coeff2 = MaxTR 
 
  232     = Slope0 = Coeff0 = aAIm = aDIm = Dtot11 = 0.0;
 
  233   NumbN = iHadrCode = iHadron = 0;
 
  236   plabLowLimit = 20.0*
MeV;
 
  237   lowestEnergyLimit = 0.0;
 
  245   protonM2  =  protonM*protonM;
 
  247   BoundaryP[0]=9.0;BoundaryTG[0]=5.0;BoundaryTL[0]=0.;
 
  248   BoundaryP[1]=20.0;BoundaryTG[1]=1.5;BoundaryTL[1]=0.;
 
  249   BoundaryP[2]=5.0; BoundaryTG[2]=1.0;BoundaryTL[2]=1.5;
 
  250   BoundaryP[3]=8.0; BoundaryTG[3]=3.0;BoundaryTL[3]=0.;
 
  251   BoundaryP[4]=7.0; BoundaryTG[4]=3.0;BoundaryTL[4]=0.;
 
  252   BoundaryP[5]=5.0; BoundaryTG[5]=2.0;BoundaryTL[5]=0.;
 
  253   BoundaryP[6]=5.0; BoundaryTG[6]=1.5;BoundaryTL[6]=3.0;
 
  260   LowEdgeEnergy[0] = 0.0;
 
  261   LowEdgeEnergy[1] = 0.5;
 
  262   LowEdgeEnergy[2] = 0.7;
 
  265   for(
G4int i=3; i<NENERGY; i++) {
 
  267     LowEdgeEnergy[i] = e/
f;
 
  273   G4int ic[NHADRONS] = {211,-211,2112,2212,321,-321,130,310,311,-311,
 
  274             3122,3222,3112,3212,3312,3322,3334,
 
  275             -2212,-2112,-3122,-3222,-3112,-3212,-3312,-3322,-3334};
 
  277   G4int id[NHADRONS] = {2,3,6,0,4,5,4,4,4,5,
 
  281   G4int id1[NHADRONS] = {3,4,1,0,5,6,5,5,5,6,
 
  285   for(
G4int j=0; j<NHADRONS; j++) 
 
  287     HadronCode[j]  = ic[j];
 
  288     HadronType[j]  = 
id[j];
 
  289     HadronType1[j] = id1[j];
 
  291     for(
G4int k = 0; k < 93; k++) { SetOfElasticData[j][k] = 0; }
 
  298   char* dirName = getenv(
"G4PhysListDocDir");
 
  303     outFile.open(pathName);
 
  304     outFile << 
"<html>\n";
 
  305     outFile << 
"<head>\n";
 
  307     outFile << 
"<title>Description of G4ElasticHadrNucleusHE Model</title>\n";
 
  308     outFile << 
"</head>\n";
 
  309     outFile << 
"<body>\n";
 
  311     outFile << 
"G4ElasticHadrNucleusHE is a hadron-nucleus elastic scattering\n" 
  312             << 
"model developed by N. Starkov which uses a Glauber model\n" 
  313             << 
"parameterization to calculate the final state.  It is valid\n" 
  314             << 
"for all hadrons with incident energies above 1 GeV.\n";
 
  316     outFile << 
"</body>\n";
 
  317     outFile << 
"</html>\n";
 
  329   for(
G4int j = 0; j < NHADRONS; j++) 
 
  331     for(
G4int k = 0; k < 93; k++) 
 
  333       if(SetOfElasticData[j][k]) 
delete SetOfElasticData[j][k];
 
  356     G4cout<< 
" G4ElasticHadrNucleusHE::SampleT: "  
  358       << 
" at Z= " << Z << 
" A= " << N
 
  359       << 
" plab(GeV)= " << plab
 
  364   for( idx = 0 ; idx < NHADRONS; idx++) 
 
  366     if(iHadrCode == HadronCode[idx]) 
break;
 
  371   if( idx >= NHADRONS ) 
return Q2;
 
  373   iHadron = HadronType[idx];
 
  374   iHadrCode = HadronCode[idx];
 
  379       hMass2 = hMass*hMass;
 
  381       G4double T = sqrt(plab*plab+hMass2)-hMass;
 
  397       SetOfElasticData[idx][
Z] = ElD1;
 
  401           G4cout<< 
" G4ElasticHadrNucleusHE::SampleT:  new record " << idx
 
  412     (hMass2 + M2 + 2.*M*std::sqrt(plab2 + hMass2));
 
  415       G4double T = sqrt(plab2+hMass2)-hMass;
 
  420     G4cout<<
" SampleT: Q2(GeV^2)= "<<Q2<< 
"  t/tmax= " << Q2/Q2max <<
G4endl;
 
  453   G4double ekin  = std::sqrt(hMass2 + ptot2) - hMass;
 
  456     G4cout<<
"Q2_2: ekin  plab  "<<ekin<<
"    "<<plab<<
"  tmax "<<tmax<<
G4endl;
 
  460   for( NumbOnE = 0; NumbOnE < NENERGY-1; NumbOnE++ ) 
 
  462     if( ekin <= LowEdgeEnergy[NumbOnE+1] ) 
break;
 
  470   hLabMomentum2  = T*(T + 2.*hMass);
 
  481       hLabMomentum = std::sqrt(hLabMomentum2);
 
  487       G4cout<<
"1  plab  T  "<<plab<<
"  "<<T<<
"  sigTot  B  ReIm  " 
  488         <<HadrTot<<
"  "<<HadrSlope<<
"  "<<HadrReIm<<
G4endl;
 
  489       G4cout<<
"  R1  R2  Aeff  p  "<<R1<<
"  "<<R2<<
"  "<<Aeff<<
"  " 
  496     G4cout<<
" HadrNucleusQ2_2: NumbOnE= " << NumbOnE 
 
  497           << 
" length= " << length 
 
  498           << 
" Q2max= " << Q2max 
 
  499           << 
" ekin= " << ekin <<
G4endl;
 
  508       for(
G4int ii=0; ii<ONQ2; ii++)
 
  517       pElD->
dnkE[NumbOnE] = ONQ2;
 
  523   for( iNumbQ2 = 1; iNumbQ2<length; iNumbQ2++ ) 
 
  525       if(Rand <= pElD->TableCrossSec[index+iNumbQ2]) 
break;
 
  527   Q2 = 
GetQ2_2(iNumbQ2, dNumbQ2, dNumbFQ2, Rand);
 
  529   if(tmax < Q2max) Q2 *= tmax/Q2max;
 
  532     G4cout<<
" HadrNucleusQ2_2(2): Q2= "<<Q2<<
" iNumbQ2= " << iNumbQ2 
 
  533       << 
" rand= " << Rand << 
G4endl;
 
  555     G4cout << 
"GetQ2_2 kk= " << kk << 
" X2= " << X2 << 
" X3= " << X3 
 
  556        << 
" F2= " << F2 << 
" F3= " << F3 << 
" Rndm= " << ranUni << 
G4endl;
 
  558   if(kk == 1 || kk == 0)
 
  572   G4double D0  = F12*F2+F1*F32+F3*F22-F32*F2-F22*F1-F12*F3;
 
  575     G4cout << 
"       X1= " << X1 << 
" F1= " << F1 << 
"  D0= "  
  578   if(std::abs(D0) < 0.00000001)
 
  580       ranQ2 = X2 + (ranUni - F2)*(X3 - X2)/(F3 - F2);
 
  584       G4double DA = X1*F2+X3*F1+X2*F3-X3*F2-X1*F3-X2*F1;
 
  585       G4double DB = X2*F12+X1*F32+X3*F22-X2*F32-X3*F12-X1*
F22;
 
  586       G4double DC = X3*F2*F12+X2*F1*F32+X1*F3*F22
 
  587                -X1*F2*F32-X2*F3*F12-X3*F1*
F22;
 
  588       ranQ2 = (DA*ranUni*ranUni + DB*ranUni + DC)/D0;
 
  607   for(ii = 1; ii<ONQ2; ii++)
 
  612       for(jj = 0; jj<20; jj++)
 
  617       curSum += curSec*aSimp;
 
  619       if(aSimp > 3) aSimp = 2;
 
  623         G4cout<<
"  Q2  "<<curQ2<<
"  AIm  "<<aAIm<<
"  DIm  "<<aDIm
 
  624           <<
"  Diff  "<<curSec<<
"  totSum  "<<totSum<<
G4endl;
 
  634     G4cout<<
"  GetHeavy: Q2  dQ2  totSum  "<<Q2l<<
"  "<<dQ2<<
"  "<<totSum
 
  636           <<curSec<<
"  totSum  "<< totSum<<
"  DTot " 
  653     G4double valueConstU = 2.*(hMass2 + protonM2) - Q2;
 
  655     G4double y = (1.-Coeff1-Coeff0)/HadrSlope*(1.-std::exp(-HadrSlope*Q2))
 
  656       + Coeff0*(1.-std::exp(-Slope0*Q2))
 
  657       + Coeff2/Slope2*std::exp(Slope2*valueConstU)*(std::exp(Slope2*Q2)-1.)
 
  658       + 2.*Coeff1/Slope1*(1./Slope1-(1./Slope1+SqrQ2)*std::exp(-Slope1*SqrQ2));
 
  665   G4double prec = Nucleus > 208  ?  1.0e-7 : 1.0e-6;
 
  673     G4cout<<
" Fq2 Before for i Tot B Im "<<HadrTot<<
"  "<<HadrSlope<<
"  " 
  677     G4cout << 
"GetFq2: Stot= " << Stot << 
" Bhad= " << Bhad 
 
  679            << 
" Asq= " << Asq << 
G4endl;
 
  680     G4cout << 
"R1= " << R1 << 
" R2= " << R2 << 
" Pnucl= " << Pnucl <<
G4endl;
 
  687   G4double    Norm     = (R12*R1-Pnucl*R22*R2); 
 
  694   G4double    FiH      = std::asin(HadrReIm/Rho2);
 
  698     G4cout << 
"UnucRho2= " << UnucRho2 << 
" FiH= " << FiH << 
" NN2= " << NN2 
 
  699        << 
" Norm= " << Norm << 
G4endl;
 
  711   G4int    i1, i2, j1, j2;
 
  713   for(i1 = 1; i1<= Nucleus; i1++) 
 
  715       N1    = -N1*Unucl*(Nucleus-i1+1)/i1*Rho2;
 
  720       for(i2 = 1; i2<=Nucleus; i2++) 
 
  722           N2    = -N2*Unucl*(Nucleus-i2+1)/i2*Rho2;
 
  725       for(j2=0; j2<= i2; j2++) 
 
  728               exp2  = 1/(j2/R22B+(i2-j2)/R12B);
 
  731           for(j1=0; j1<=i1; j1++) 
 
  733           exp1  = 1/(j1/R22B+(i1-j1)/R12B);
 
  736           Prod3 = Prod3+N4*exp1*exp2*
 
  737             (1-std::exp(-Q2*dddd/4))/dddd*4*SetBinom[i1][j1];
 
  739           Prod2 = Prod2 +Prod3*N5*SetBinom[i2][j2];
 
  741       Prod1 = Prod1 + Prod2*N2*std::cos(FiH*(i1-i2));
 
  743       if (std::fabs(Prod2*N2/Prod1)<prec) 
break;
 
  745       Prod0   = Prod0 + Prod1*N1;
 
  746       if(std::fabs(N1*Prod1/Prod0) < prec) 
break;
 
  750   Prod0 *= 0.25*
pi/MbToGeV2;  
 
  753     G4cout << 
"GetLightFq2 Z= " << Z << 
" A= " << Nucleus 
 
  754        <<
" Q2= " << Q2 << 
" Res= " << Prod0 << 
G4endl;
 
  772     G4double valueConstU = hMass2 + protonM2-2*protonM*HadrEnergy - aQ2;
 
  774     G4double MaxT = 4*MomentumCM*MomentumCM;
 
  776      BoundaryTL[0] = MaxT;
 
  777      BoundaryTL[1] = MaxT;
 
  778      BoundaryTL[3] = MaxT;
 
  779      BoundaryTL[4] = MaxT;
 
  780      BoundaryTL[5] = MaxT;
 
  784     dSigPodT = HadrTot*HadrTot*(1+HadrReIm*HadrReIm)*
 
  786                   Coeff1*std::exp(-Slope1*SqrQ2)+
 
  787                   Coeff2*std::exp( Slope2*(valueConstU)+aQ2)+
 
  788                   (1-Coeff1-Coeff0)*std::exp(-HadrSlope*aQ2)+
 
  789                  +Coeff0*std::exp(-Slope0*aQ2)
 
  809     G4double    R23Ap    = R22*R2/R22Ap*Pnuclp;
 
  813     G4double R12ApdR22Ap = 0.5*(R12Apd+R22Apd);
 
  815     G4double DDSec1p  = (DDSect2+DDSect3*std::log(1.06*2*HadrEnergy/R1/4));
 
  816     G4double DDSec2p  = (DDSect2+DDSect3*std::log(1.06*2*HadrEnergy/
 
  817                              std::sqrt((R12+R22)/2)/4));
 
  818     G4double DDSec3p  = (DDSect2+DDSect3*std::log(1.06*2*HadrEnergy/R2/4));
 
  820     G4double    Norm     = (R12*R1-Pnucl*R22*R2)*Aeff;
 
  821     G4double    Normp    = (R12*R1-Pnuclp*R22*R2)*Aeff;
 
  836     G4double    Prod1, Tot1=0, medTot, DTot1, DmedTot;
 
  839     for( i=1; i<=NWeight; i++)
 
  841       N       = -N*Unucl*(NWeight-i+1)/i*Rho2;
 
  843       Prod1   = std::exp(-theQ2/i*R12B/4)/i*R12B;
 
  846        for(
G4int l=1; l<=i; l++)
 
  848          exp1    = l/R22B+(i-l)/R12B;
 
  849          N4      = -N4*(i-l+1)/l*N2;
 
  850          Prod1   = Prod1+N4/exp1*std::exp(-theQ2/exp1/4);
 
  851          medTot  = medTot+N4/exp1;
 
  854       ReElasticAmpl0  = ReElasticAmpl0+Prod1*N*std::sin(FiH*i);
 
  855       ImElasticAmpl0  = ImElasticAmpl0+Prod1*N*std::cos(FiH*i);
 
  856       Tot1            = Tot1+medTot*N*std::cos(FiH*i);
 
  857       if(std::fabs(Prod1*N/ImElasticAmpl0) < 0.000001) 
break;
 
  860     ImElasticAmpl0 = ImElasticAmpl0*
pi/2.568;   
 
  861     ReElasticAmpl0 = ReElasticAmpl0*
pi/2.568;   
 
  862     Tot1           = Tot1*
twopi/2.568;
 
  865     G4double C2 = 2*R23Ap*R13Ap/2*DDSec2p;
 
  872     Din1  = 0.5*(C1*std::exp(-theQ2/8*R12Ap)/2*R12Ap-
 
  873                  C2/R12ApdR22Ap*std::exp(-theQ2/4/R12ApdR22Ap)+
 
  874                  C3*R22Ap/2*std::exp(-theQ2/8*R22Ap));
 
  876     DTot1 = 0.5*(C1/2*R12Ap-C2/R12ApdR22Ap+C3*R22Ap/2);
 
  886     for( i = 1; i<= NWeight-2; i++)
 
  888       N1p     = -N1p*UnuclScr*(NWeight-i-1)/i*Rho2;
 
  892         for(
G4int l = 0; l<=i; l++) 
 
  894           if(l == 0)      BinCoeff = 1;
 
  895           else if(l !=0 ) BinCoeff = BinCoeff*(i-l+1)/l;
 
  897           exp1  = l/R22B+(i-l)/R12B;
 
  899           exp2p = exp1+R12ApdR22Ap;
 
  902           Din2  = Din2 + N2p*BinCoeff*
 
  903               (C1/exp1p*std::exp(-theQ2/4/exp1p)-
 
  904                    C2/exp2p*std::exp(-theQ2/4/exp2p)+
 
  905                    C3/exp3p*std::exp(-theQ2/4/exp3p));
 
  907       DmedTot = DmedTot + N2p*BinCoeff*
 
  908         (C1/exp1p-C2/exp2p+C3/exp3p);
 
  913     Din1  = Din1+Din2*N1p/(i+2)/(i+1)*std::cos(FiH*i);
 
  914     DTot1 = DTot1+DmedTot*N1p/(i+2)/(i+1)*std::cos(FiH*i);
 
  916     if(std::fabs(Din2*N1p/Din1) < 0.000001) 
break;
 
  919     Din1 = -Din1*NWeight*(NWeight-1)
 
  922     DTot1 = DTot1*NWeight*(NWeight-1)
 
  930     G4double DiffCrSec2 = (ReElasticAmpl0*ReElasticAmpl0+
 
  931                            (ImElasticAmpl0+Din1)*
 
  932                            (ImElasticAmpl0+Din1))*2/4/
pi;
 
  937     aAIm   = ImElasticAmpl0;
 
  940     return DiffCrSec2*1.0;  
 
  950   HadrEnergy = std::sqrt(hMass2 + hLabMomentum2);
 
  952   G4double sHadr = 2.*HadrEnergy*protonM+protonM2+hMass2;
 
  954   G4double Ecm   = 0.5*(sHadr-hMass2+protonM2)/sqrS;
 
  955   MomentumCM     = std::sqrt(Ecm*Ecm-protonM2);
 
  958     G4cout << 
"GetHadrVall.: Z= " << Z << 
" iHadr= " << iHadron 
 
  959        << 
" E(GeV)= " << HadrEnergy << 
" sqrS= " << sqrS
 
  960        << 
" plab= " << hLabMomentum   
 
  961        <<
"  E - m  "<<HadrEnergy - hMass<< 
G4endl;
 
  964   G4double logE = std::log(HadrEnergy);
 
  973       if(hLabMomentum > 10)
 
  974     TotP = TotN = 7.5*logE - 40.12525 + 103*std::pow(sHadr,-0.165); 
 
  983       if( hLabMomentum > 1.4 )
 
  984         TotN = 33.3+15.2*(hLabMomentum2-1.35)/
 
  985           (std::pow(hLabMomentum,2.37)+0.95);
 
  987       else if(hLabMomentum > 0.8)
 
  990           TotN = 33.0 + 25.5*A0*A0;  
 
  995           TotN = 33.0 + 30.*A0*A0*A0*A0;
 
 1000         if(hLabMomentum >= 1.05)
 
 1002         TotP = 39.0+75.*(hLabMomentum-1.2)/
 
 1003           (hLabMomentum2*hLabMomentum+0.15);
 
 1006         else if(hLabMomentum >= 0.7)
 
 1009          TotP = 23.0 + 40.*A0*A0;
 
 1013         TotP = 23.+50.*std::pow(std::log(0.73/hLabMomentum),3.5);
 
 1019       HadrTot = 0.5*(TotP+TotN);
 
 1022       if(hLabMomentum >= 2.)       HadrSlope = 5.44 + 0.88*logS;
 
 1024       else if(hLabMomentum >= 0.5) HadrSlope = 3.73*hLabMomentum-0.37;
 
 1026       else                         HadrSlope = 1.5;
 
 1029       if(hLabMomentum >= 1.2)
 
 1030      HadrReIm  = 0.13*(logS - 5.8579332)*std::pow(sHadr,-0.18);
 
 1032       else if(hLabMomentum >= 0.6) 
 
 1033     HadrReIm = -75.5*(std::pow(hLabMomentum,0.25)-0.95)/
 
 1034       (std::pow(3*hLabMomentum,2.2)+1);     
 
 1037     HadrReIm = 15.5*hLabMomentum/(27*hLabMomentum2*hLabMomentum+2);
 
 1042       if( iHadrCode == 3122)
 
 1048       else if( iHadrCode == 3222)
 
 1054       else if(iHadrCode == 3112 || iHadrCode == 3212 )
 
 1060       else if( iHadrCode == 3312 || iHadrCode == 3322 )
 
 1066       else if( iHadrCode == 3334)
 
 1077       HadrTot   = 5.2+5.2*logE + 123.2/sqrS;     
 
 1078       HadrSlope = 8.32+0.57*logS;                
 
 1080       if( HadrEnergy < 1000 )
 
 1081     HadrReIm  = 0.06*(sqrS-2.236)*(sqrS-14.14)*std::pow(sHadr,-0.8);
 
 1083     HadrReIm  = 0.6*(logS - 5.8579332)*std::pow(sHadr,-0.25);
 
 1088       if( iHadrCode == -3122)
 
 1094       else if( iHadrCode == -3222)
 
 1100       else if(iHadrCode == -3112 || iHadrCode == -3212 )
 
 1106       else if( iHadrCode == -3312 || iHadrCode == -3322 )
 
 1112       else if( iHadrCode == -3334)
 
 1123       if(hLabMomentum >= 3.5)
 
 1124     TotP = 10.6+2.*logE + 25.*std::pow(HadrEnergy,-0.43); 
 
 1126       else if(hLabMomentum >= 1.15)
 
 1128           G4double x = (hLabMomentum - 2.55)/0.55; 
 
 1129       G4double y = (hLabMomentum - 1.47)/0.225;
 
 1130       TotP = 3.2*std::exp(-x*x) + 12.*std::exp(-y*y) + 27.5;
 
 1133       else if(hLabMomentum >= 0.4)
 
 1135     TotP  = 88*(logE+0.2877)*(logE+0.2877)+14.0;
 
 1140       G4double x = (hLabMomentum - 0.29)/0.085;
 
 1141       TotP = 20. + 180.*std::exp(-x*x);
 
 1145       if(hLabMomentum >= 3.0 )
 
 1146     TotN = 10.6 + 2.*logE + 30.*std::pow(HadrEnergy,-0.43); 
 
 1148       else if(hLabMomentum >= 1.3) 
 
 1152       TotN = 36.1+0.079 - 4.313*logE + 3.*std::exp(-x*x) + 
 
 1155       else if(hLabMomentum >= 0.65)
 
 1157           G4double x = (hLabMomentum - 0.72)/0.06;
 
 1158           G4double y = (hLabMomentum - 1.015)/0.075;
 
 1159       TotN = 36.1 + 10.*std::exp(-x*x) + 24*std::exp(-y*y);
 
 1161       else if(hLabMomentum >= 0.37)
 
 1163       G4double x = std::log(hLabMomentum/0.48);
 
 1164       TotN = 26. + 110.*x*
x;
 
 1168           G4double x = (hLabMomentum - 0.29)/0.07;
 
 1169       TotN = 28.0 + 40.*std::exp(-x*x);
 
 1171       HadrTot = (TotP+TotN)/2;
 
 1173       HadrSlope = 7.28+0.245*logS;        
 
 1174       HadrReIm  = 0.2*(logS - 4.6051702)*std::pow(sHadr,-0.15);
 
 1183       HadrTot   = 10.6+1.8*logE + 9.0*std::pow(HadrEnergy,-0.55);  
 
 1184       if(HadrEnergy>100) HadrSlope = 15.0;
 
 1185       else HadrSlope = 1.0+1.76*logS - 2.84/sqrS;   
 
 1187       HadrReIm  = 0.4*(sHadr-20)*(sHadr-150)*std::pow(sHadr+50,-2.1);
 
 1194        HadrTot   = 10+1.8*logE + 25./sqrS; 
 
 1195        HadrSlope = 6.98+0.127*logS;         
 
 1196        HadrReIm  = 0.4*(sHadr-20)*(sHadr-20)*std::pow(sHadr+50,-2.1);
 
 1203     G4cout << 
"HadrTot= " << HadrTot << 
" HadrSlope= " << HadrSlope
 
 1204        << 
" HadrReIm= " << HadrReIm << 
" DDSect2= " << DDSect2
 
 1205        << 
" DDSect3= " << DDSect3 << 
G4endl;
 
 1211   Coeff0 = Coeff1 = Coeff2 = 0.0;
 
 1212   Slope0 = Slope1 = 1.0;
 
 1216   static const G4double EnP0[6]={1.5,3.0,5.0,9.0,14.0,19.0};
 
 1217   static const G4double C0P0[6]={0.15,0.02,0.06,0.08,0.0003,0.0002};
 
 1218   static const G4double C1P0[6]={0.05,0.02,0.03,0.025,0.0,0.0};
 
 1219   static const G4double B0P0[6]={1.5,2.5,3.0,4.5,1.4,1.25};
 
 1220   static const G4double B1P0[6]={5.0,1.0,3.5,4.0,4.8,4.8};
 
 1223   static const G4double EnN[5]={1.5,5.0,10.0,14.0,20.0};
 
 1224   static const G4double C0N[5]={0.0,0.0,0.02,0.02,0.01};
 
 1225   static const G4double C1N[5]={0.06,0.008,0.0015,0.001,0.0003};
 
 1226   static const G4double B0N[5]={1.5,2.5,3.8,3.8,3.5};
 
 1227   static const G4double B1N[5]={1.5,2.2,3.6,4.5,4.8};
 
 1230   static const G4double EnP[2]={1.5,4.0};
 
 1231   static const G4double C0P[2]={0.001,0.0005};
 
 1232   static const G4double C1P[2]={0.003,0.001};
 
 1233   static const G4double B0P[2]={2.5,4.5};
 
 1234   static const G4double B1P[2]={1.0,4.0};
 
 1237   static const G4double EnPP[4]={1.0,2.0,3.0,4.0};
 
 1238   static const G4double C0PP[4]={0.0,0.0,0.0,0.0};
 
 1239   static const G4double C1PP[4]={0.15,0.08,0.02,0.01};
 
 1240   static const G4double B0PP[4]={1.5,2.8,3.8,3.8};
 
 1241   static const G4double B1PP[4]={0.8,1.6,3.6,4.6};
 
 1244   static const G4double EnPPN[4]={1.0,2.0,3.0,4.0};
 
 1245   static const G4double C0PPN[4]={0.0,0.0,0.0,0.0};
 
 1246   static const G4double C1PPN[4]={0.0,0.0,0.0,0.0};
 
 1247   static const G4double B0PPN[4]={1.5,2.8,3.8,3.8};
 
 1248   static const G4double B1PPN[4]={0.8,1.6,3.6,4.6};
 
 1251   static const G4double EnK[4]={1.4,2.33,3.0,5.0};
 
 1252   static const G4double C0K[4]={0.0,0.0,0.0,0.0};
 
 1253   static const G4double C1K[4]={0.01,0.007,0.005,0.003};
 
 1254   static const G4double B0K[4]={1.5,2.0,3.8,3.8};
 
 1255   static const G4double B1K[4]={1.6,1.6,1.6,1.6};
 
 1258   static const G4double EnKM[2]={1.4,4.0};
 
 1259   static const G4double C0KM[2]={0.006,0.002};
 
 1260   static const G4double C1KM[2]={0.00,0.00};
 
 1261   static const G4double B0KM[2]={2.5,3.5};
 
 1262   static const G4double B1KM[2]={1.6,1.6};
 
 1268       if(hLabMomentum <BoundaryP[0])
 
 1271       Coeff2 = 0.8/hLabMomentum/hLabMomentum;
 
 1276       if(hLabMomentum < BoundaryP[1])
 
 1279       Coeff2 = 0.8/hLabMomentum/hLabMomentum;
 
 1284       if(hLabMomentum <  BoundaryP[2])
 
 1290       if(hLabMomentum < BoundaryP[3])
 
 1293       Coeff2 = 0.02/hLabMomentum;
 
 1298       if(hLabMomentum < BoundaryP[4])
 
 1301       Coeff2 = 0.02/hLabMomentum;
 
 1306       if(hLabMomentum < BoundaryP[5])
 
 1309       if(hLabMomentum < 1) Coeff2 = 0.34;
 
 1310       else  Coeff2 = 0.34/hLabMomentum2/hLabMomentum;
 
 1314       if(hLabMomentum < BoundaryP[6])
 
 1317       if(hLabMomentum < 1) Coeff2 = 0.01;
 
 1318       else  Coeff2 = 0.01/hLabMomentum2/hLabMomentum;
 
 1323     G4cout<<
"  HadrVal : Plasb  "<<hLabMomentum
 
 1324       <<
"  iHadron  "<<iHadron<<
"  HadrTot  "<<HadrTot<<
G4endl;
 
 1333     G4cout<<
"1  GetKin.: HadronName MomentumH " 
 1338   G4double Sh     = 2.0*protonM*HadrEnergy+protonM2+hMass2; 
 
 1340   ConstU = 2*protonM2+2*hMass2-Sh;
 
 1342   G4double MaxT = 4*MomentumCM*MomentumCM;
 
 1344   BoundaryTL[0] = MaxT; 
 
 1345   BoundaryTL[1] = MaxT;
 
 1346   BoundaryTL[3] = MaxT;
 
 1347   BoundaryTL[4] = MaxT;
 
 1348   BoundaryTL[5] = MaxT;
 
 1352   while(iHadrCode!=HadronCode[NumberH]) NumberH++;
 
 1354   NumberH = HadronType1[NumberH];   
 
 1356   if(MomentumH<BoundaryP[NumberH]) MaxTR = BoundaryTL[NumberH];
 
 1357   else MaxTR = BoundaryTG[NumberH];
 
 1360     G4cout<<
"3  GetKin. : NumberH  "<<NumberH
 
 1361       <<
"  Bound.P[NumberH] "<<BoundaryP[NumberH]
 
 1362       <<
"  Bound.TL[NumberH] "<<BoundaryTL[NumberH]
 
 1363       <<
"  Bound.TG[NumberH] "<<BoundaryTG[NumberH]
 
 1364       <<
"  MaxT MaxTR "<<MaxT<<
"  "<<MaxTR<<
G4endl;
 
 1374   Fdistr = (1-Coeff1-Coeff0) 
 
 1375     /HadrSlope*(1-std::exp(-HadrSlope*Q2))
 
 1376     + Coeff0*(1-std::exp(-Slope0*Q2))
 
 1377     + Coeff2/Slope2*std::exp(Slope2*ConstU)*(std::exp(Slope2*Q2)-1)
 
 1378     + 2*Coeff1/Slope1*(1/Slope1-(1/Slope1+SqrQ2)*std::exp(-Slope1*SqrQ2));
 
 1381     G4cout<<
"Old:  Coeff0 Coeff1 Coeff2 "<<Coeff0<<
"  " 
 1382           <<Coeff1<<
"  "<<Coeff2<<
"  Slope Slope0 Slope1 Slope2 " 
 1383           <<HadrSlope<<
"  "<<Slope0<<
"  "<<Slope1<<
"  "<<Slope2
 
 1384           <<
"  Fdistr "<<Fdistr<<
G4endl;
 
 1390   G4double DDD0=MaxTR*0.5, DDD1=0.0, DDD2=MaxTR, delta;
 
 1393   FmaxT = 
GetFt(MaxTR);
 
 1396   while(std::fabs(delta) > 0.0001)
 
 1401         DDD0 = (DDD0+DDD1)*0.5;
 
 1406         DDD0 = (DDD0+DDD2)*0.5;
 
 1422   hMass2        = hMass*hMass;
 
 1423   hLabMomentum  = inLabMom;
 
 1424   hLabMomentum2 = hLabMomentum*hLabMomentum;
 
 1425   HadrEnergy    = sqrt(hLabMomentum2+hMass2); 
 
 1442 void G4ElasticHadrNucleusHE::Binom()
 
 1447   for(N = 0; N < 240; N++)
 
 1451       for( M = 0; M <= 
N; M++ )
 
 1455       if ( ( N > 0 ) && ( N > M ) && M > 0 )
 
 1460       SetBinom[
N][M] = Fact1;