Ignore:
Timestamp:
Apr 6, 2009, 12:30:29 PM (15 years ago)
Author:
garnier
Message:

update processes

Location:
trunk/source/processes/hadronic/models/chiral_inv_phase_space/calcul
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/hadronic/models/chiral_inv_phase_space/calcul/G4GlauberCrossSections.cc

    r819 r962  
    317317}
    318318
     319// Initialize factorials and combinatoric coefficients
    319320void Initialize()
    320321{
     
    448449  G4double S        = (MassN+MassN)*HadrEnergy+MassN2+MassH2;// Mondelststam s
    449450  G4double EcmH     = (S-MassN2+MassH2)/2/std::sqrt(S);     // CM energy of a hadron
    450   G4double CMMom = std::sqrt(EcmH*EcmH-MassH2);             // CM momentum
     451  G4double CMMom    = std::sqrt(EcmH*EcmH-MassH2);          // CM momentum
    451452
    452453  G4double Stot     = HadrTot*mb2G2;                        // in GeV^-2
     
    485486  for(G4int i=1; i<=A; i++)                          // @@ Make separately for n and p
    486487  {
    487     N              *= -Unucl*(A-i+1)*Rho2/i;
     488    N              *= -Unucl*(A-i+1)*Rho2/i;         // Includes total cross-section
    488489    G4double N4     = 1.;
    489     G4double Prod1  = std::exp(-Q2*R12B/i/4)*R12B/i;
     490    G4double Prod1  = std::exp(-Q2*R12B/i/4)*R12B/i; // Includes the slope
    490491    G4double medTot = R12B/i;
    491492    for(G4int l=1; l<=i; l++)
     
    556557  ImElA0             *= Corr0;
    557558                       
    558   return (ReElA0*ReElA0+(ImElA0+Din1)*(ImElA0+Din1))*CMMom*CMMom*mb2G2/4/pi2;
     559  //return (ReElA0*ReElA0+(ImElA0+Din1)*(ImElA0+Din1))*CMMom*CMMom*mb2G2/4/pi2; // ds/do
     560  return (ReElA0*ReElA0+(ImElA0+Din1)*(ImElA0+Din1))*mb2G2/(twopi+twopi);
    559561} // End of DiffElasticCS
    560562
     
    564566  static const G4double mb2G2 = 2.568;                      // Transform from mb to GeV^-2
    565567  static const G4double piMG  = pi/mb2G2;                   // PiTrans from GeV^-2 to mb
    566   G4double hMom       = HadrMom/1000.;                      // Momentum (GeV, inputParam)
     568  G4double p          = HadrMom/1000.;                      // Momentum (GeV, inputParam)
     569  G4double p2         = p*p;
    567570                G4double MassH      = G4QPDGCode(hPDG).GetMass()/1000.;   // Hadron Mass in GeV
    568571  G4double MassH2     = MassH*MassH;
    569   G4double HadrEnergy = std::sqrt(hMom*hMom+MassH2);        // Tot energy in GeV
     572  G4double HadrEnergy = std::sqrt(p2+MassH2);               // Tot energy in GeV
    570573                //G4cout<<"G4GCS::DiffElasticCS: PGG_proj="<<hPDG<<", A_nuc= "<<A<<G4endl;
    571   if(A==2 || A==3) G4Exception("G4GCS: This model does not work for nuclei with A=2, A=3");
    572   if(A>252) G4Exception("G4GCS: This nucleus is too heavy for the model !!!");
    573574  //if(HadrEnergy-MassH<1.) G4Exception("Kin energy is too small for the model (T>1 GeV)");
    574   CalculateParameters(hPDG, HadrMom);                   
    575   CalculateIntegralCS(A, HadrEnergy);
    576   CalculateNuclearParameters(A);
     575  CalculateParameters(hPDG, HadrMom);                       // ?                   
     576  CalculateIntegralCS(A, HadrEnergy);                       // ?
     577  CalculateNuclearParameters(A);                            // ?
    577578  G4double Q2 = aQ2/1000/1000;                              // in GeV^2
    578579                //G4doubleMassN     = A*0.938;                              // @@ This is bad!
    579580                G4double MassN    = A*0.9315;                             // @@ Atomic Unit is bad too
    580581  if(G4NucleiPropertiesTable::IsInTable(Z,A))
    581                                 MassN=G4NucleiProperties::GetNuclearMass(A,Z)/1000.;    // Geant4 NuclearMass
     582                                MassN=G4NucleiProperties::GetNuclearMass(A,Z)/1000.;    // Geant4 NuclearMass in GeV
    582583  G4double MassN2   = MassN*MassN;
    583584  G4double S        = (MassN+MassN)*HadrEnergy+MassN2+MassH2;// Mondelststam s
    584585  G4double EcmH     = (S-MassN2+MassH2)/2/std::sqrt(S);     // CM energy of a hadron
    585586  G4double CMMom    = std::sqrt(EcmH*EcmH-MassH2);          // CM momentum
    586   G4double Stot     = HadrTot*mb2G2;                        // in GeV^-2
    587   G4double Bhad     = HadrSlope;                            // in GeV^-2
    588   G4double Asq      = 1+HadrReIm*HadrReIm;                  // |M|^2/(ImM)^2
     587  //G4cout<<"P="<<CMMom<<",E="<<HadrEnergy<<",N="<<MassN2<<",h="<<MassH2<<",p="<<p<<G4endl;
     588  G4double p3       = p2*p;
     589  G4double p4       = p2*p2;
     590  G4double sp       = std::sqrt(p);
     591  G4double p2s      = p2*sp;
     592  G4double ap       = std::log(p);
     593  G4double dl       = ap-3.;
     594  G4double dl2      = dl*dl;
     595  G4double shPPTot  = 2.91/(p2s+.0024)+5.+(32.+.3*dl2+23./p)/(1.+1.3/p4); // SigPP in mb
     596  G4double shPNTot  = 12./(p2s+.05*p+.0001/std::sqrt(sp))+.35/p
     597                      +(38.+.3*dl2+8./p)/(1.+1.2/p3);       // SigPP in mb
     598  G4double hNTot    = (Z*shPPTot+(A-Z)*shPNTot)/A;          // SighN in mb
     599  G4double Stot     = hNTot*mb2G2;                          // in GeV^-2
     600  G4double shPPSl   = 8.*std::pow(p,.055)/(1.+3.64/p4);     // PPslope in GeV^-2
     601  G4double shPNSl   = (7.2+4.32/(p4*p4+.012*p3))/(1.+2.5/p4); // PNslope in GeV^-2
     602  G4double Bhad     = (Z*shPPSl+(A-Z)*shPNSl)/A;            // B-slope in GeV^-2
     603  G4double hNReIm   = -.55+ap*(.12+ap*.0045);               // Re/Im_hN in no unit
     604  G4double Asq      = 1+hNReIm*hNReIm;                      // |M|^2/(ImM)^2
    589605  G4double Rho2     = std::sqrt(Asq);                       // M/ImM
    590   G4double R12      = R1*R1;
    591   G4double R22      = R2*R2;
     606  G4double r1       = 3.9*std::pow(A-1.,.309);             // Positive diffractionalRadius
     607  G4double r2       = 2.*std::pow(A,.36);                  // Negative diffraction radius
     608  G4double pN       = Pnucl;                                // Dubna value
     609  //G4double pN       = .4;                                   // Screaning factor
     610  G4double Ae       = Aeff;                                 // Dubna value
     611  //G4double Ae       = .75;                                   // Normalization
     612  G4double R12      = r1*r1;
     613  G4double R22      = r2*r2;
     614  G4double R1C      = R12*r1;
     615  G4double R2C      = R22*r2;
    592616  G4double R12B     = R12+Bhad+Bhad;                        // Slope is used
    593617  G4double R22B     = R22+Bhad+Bhad;                        // Slope is used
    594   G4double Norm     = (R12*R1-Pnucl*R22*R2)*Aeff;           // Some questionable norming
    595   G4double R13      = R12*R1/R12B;                          // Slope is used
    596   G4double R23      = Pnucl*R22*R2/R22B;                    // Slope is used
     618  G4double Norm     = (R1C-pN*R2C)*Ae;                      // ScreanFac & NormFac are used
     619  G4double R13      = R1C/R12B;                             // Slope is used
     620  G4double R23      = pN*R2C/R22B;                          // Slope & ScreanFact are used
    597621  G4double norFac   = Stot/twopi/Norm;                      // totCS (in GeV^-2) is used
    598622  G4double Unucl    = norFac*R13;
    599   G4double SinFi    = HadrReIm/Rho2;
     623  G4double SinFi    = hNReIm/Rho2;                          // Real part
    600624  G4double FiH      = std::asin(SinFi);
    601625  G4double N        = -1.;
     
    606630  for(G4int i=1; i<=A; i++)
    607631  {
    608     N              *= -Unucl*(A-i+1)*Rho2/i;
     632    N              *= -Unucl*(A-i+1)*Rho2/i;                // TotCS is used
    609633    G4double N4     = 1.;
    610634    G4double Prod1  = std::exp(-Q2*R12B/i/4)*R12B/i;        // Slope is used
     
    631655  ImElA0         *= Corr0;
    632656                       
    633   return (ReElA0*ReElA0+ImElA0*ImElA0)*CMMom*CMMom*mb2G2/4/pi2;
     657  //return (ReElA0*ReElA0+ImElA0*ImElA0)*CMMom*CMMom*mb2G2/4/pi2; // ds/do
     658  return (ReElA0*ReElA0+ImElA0*ImElA0)*mb2G2/(twopi+twopi);
    634659} // End of DiffElasticCS
    635660
     
    705730  else if(A==12) r0   = 0.80;
    706731                else           r0   = 1.16*(1.-1.16/Re2);  // For other nuclei which have not been tested
    707   G4double MassN      = mN;                              // A * AtomicUnit(GeV)
     732                G4double MassN      = A*0.9315;                             // @@ Atomic Unit is bad too
    708733  G4double MassN2     = MassN*MassN;
    709734  G4double S          = (MassN+MassN)*HadrEnergy+MassN2+MassH2; // Mondelstam S
     
    736761    G4double expB     = std::exp(InExp);
    737762    G4double HRIE     = HadrReIm*InExp;
    738     ReIntegrand[i]    = (1.-expB*std::cos(HRIE));
    739     ImIntegrand[i]    = expB*std::sin(HRIE);
     763    ReIntegrand[i]    = (1.-expB*std::cos(HRIE));           // Real part of the amplitude
     764    ImIntegrand[i]    = expB*std::sin(HRIE);                // Imaginary part of the amplit
    740765  }
    741766  InCoh     = 0.;                                           // incohirent (quasi-elastic)
    742767  ValB       = -stepB;
    743   for(G4int k=0; k<NptB; k++)
     768  for(G4int k=0; k<NptB; k++)                               // Third integration (?)
    744769  {
    745770    ValB              += stepB;
    746771    InCoh             += Thick[k]*ValB*std::exp(-hTotG2*Thick[k]);
    747     G4double J0qb      = QJ0(std::sqrt(Q2)*ValB)*ValB;
     772    G4double J0qb      = QJ0(std::sqrt(Q2)*ValB)*ValB;      // Bessel0(Q*b)
    748773    ReSum             += J0qb*ReIntegrand[k];
    749774    ImSum             += J0qb*ImIntegrand[k];
     
    753778  InCoh *= stepB*hTotG2*hTotG2*(1.+HadrReIm*HadrReIm)*std::exp(-HadrSlope*Q2)/8/mb2G2;
    754779  //G4cout<<"GHAD:RS="<<ReSum<<",IS="<<ImSum<<",CM="<<CMMom<<",st="<<stepB<<G4endl;
    755   return (ReSum*ReSum+ImSum*ImSum)*m2G10*CMMom*CMMom*stepB*stepB/twopi;
     780  //return (ReSum*ReSum+ImSum*ImSum)*m2G10*CMMom*CMMom*stepB*stepB/twopi; // ds/do
     781  return (ReSum*ReSum+ImSum*ImSum)*m2G10*stepB*stepB/12; // ds/dt
    756782
    757783
     
    763789  static const G4double hc2   = .3893793;                   // Transform from GeV^-2 to mb
    764790  static const G4double mb2G2 = 1./hc2;                     // Transform from mb to GeV^-2
    765   //static const G4double mb2G2 = 2.568;                     // Transform from mb to GeV^-2
    766791  static const G4double f22mb = 10;                         // Transform from fermi^2 to mb
    767792  static const G4double f22G2 = f22mb*mb2G2;                // Transform from fm2 to GeV^-2
    768793  static const G4double f2Gm1 = std::sqrt(f22G2);           // Transform from fm to GeV^-1
    769794  G4double Re         = std::pow(A,.33333333);              // A-dep coefficient
    770   G4double Lim        = 50.*Re;                             // Integration accuracy limit
     795  G4double Lim        = 100*Re;                             // Integration accuracy limit
    771796  G4double Tb[Npb];                                         // Calculated T(b) array
    772797  G4QBesIKJY QI0(BessI0);                                   // I0 Bessel function
    773798  G4QBesIKJY QJ0(BessJ0);                                   // J0 Bessel function
    774            hMom       = hMom/1000.;                         // Momentum (GeV, inputParam)
     799  G4double p          = hMom/1000.;                         // Momentum (GeV, inputParam)
     800  G4double p2         = p*p;
    775801                G4double MassH      = G4QPDGCode(hPDG).GetMass()/1000.;   // Hadron Mass in GeV
    776802  G4double MassH2     = MassH*MassH;                        // Squared mass of the hadron
    777   G4double hEnergy    = std::sqrt(hMom*hMom+MassH2);        // Tot energy in GeV
     803  G4double hEnergy    = std::sqrt(p2+MassH2);               // Tot energy in GeV
    778804  G4double Q2         = aQ2/1000000.;                       // -t in GeV
    779   G4double MassN      = mN;                                 // AtomicUnit(GeV)[prototype]
     805                G4double MassN    = A*0.9315;                             // @@ Atomic Unit is bad too
     806  if(G4NucleiPropertiesTable::IsInTable(Z,A))
     807                                MassN=G4NucleiProperties::GetNuclearMass(A,Z)/1000.;    // Geant4 NuclearMass in GeV
    780808  G4double MassN2     = MassN*MassN;                        // Squared mass of the target
    781809  G4double S          = (MassN+MassN)*hEnergy+MassN2+MassH2;// Mondelstam s
    782810  G4double EcmH       = (S-MassN2+MassH2)/2/std::sqrt(S);   // Hadron CM Energy
    783811  G4double CMMom      = std::sqrt(EcmH*EcmH-MassH2);        // CM momentum (to norm CS)
    784   // @@ Temporary only for nucleons
    785   //G4cout<<"CHPS:E="<<hEnergy<<",dM="<<2*MassN<<",sN="<<MassN2<<",sH="<<MassH2<<G4endl;
    786   G4double shNTot     = 5.2+5.2*std::log(hEnergy)+51*std::pow(hEnergy,-.35); // SighN in mb
    787   G4double shNSl      = 5.44+.88*std::log(S);               // B-slope in GeV^-2
    788   G4double shNReIm    = .13*std::log(S/350)*std::pow(S,-.18); // Re/Im_hN in no unit
     812  //G4cout<<"2: P="<<CMMom<<",E="<<hEnergy<<",N="<<MassN2<<",h="<<MassH2<<",p="<<p<<G4endl;
     813  // The mean value of the total can be used
     814  G4double p3         = p2*p;
     815  G4double p4         = p2*p2;
     816  G4double sp         = std::sqrt(p);
     817  G4double p2s        = p2*sp;
     818  G4double ap         = std::log(p);
     819  G4double dl         = ap-3.;
     820  G4double dl2        = dl*dl;
     821  G4double shPPTot    = 2.91/(p2s+.0024)+5.+(32.+.3*dl2+23./p)/(1.+1.3/p4); // SigPP in mb
     822  G4double shPNTot    = 12./(p2s+.05*p+.0001/std::sqrt(sp))+.35/p
     823                        +(38.+.3*dl2+8./p)/(1.+1.2/p3);     // SigPP in mb
     824  G4double shNTot     = (Z*shPPTot+(A-Z)*shPNTot)/A;        // SighN in mb
     825#ifdef debug
     826  G4cout<<"CHIPS:SI,p="<<p<<",n="<<shNTot<<",P="<<shPPTot<<",N="<<shPNTot
     827        <<",Z="<<Z<<",A="<<A<<G4endl;
     828#endif
     829  G4double shPPSl     = 8.*std::pow(p,.055)/(1.+3.64/p4);   // PPslope in GeV^-2
     830  G4double shPNSl     = (7.2+4.32/(p4*p4+.012*p3))/(1.+2.5/p4); // PNslope in GeV^-2
     831  G4double shNSl      = (Z*shPPSl+(A-Z)*shPNSl)/A;          // B-slope in GeV^-2
     832#ifdef debug
     833  G4cout<<"CHIPS:SL,n="<<shNSl<<",P="<<shPPSl<<",N="<<shPNSl<<G4endl;
     834#endif
     835  G4double shNReIm    = -.55+ap*(.12+ap*.0045); // Re/Im_hN in no unit
    789836  //G4cout<<"CHPS: s="<<S<<",T="<<shNTot<<",R="<<shNReIm<<",B="<<shNSl<<G4endl;
    790837  // @@ End of temporary ^^^^^^^
    791838  G4double dHS        = shNSl+shNSl;                        // Working: doubled B-slope
    792   //G4double rAfm       = 0.;
    793   //if    (A==208) rAfm = 1.125*Re;
    794   //else if(A==90) rAfm = 1.12*Re;
    795   //else if(A==64) rAfm = 1.1*Re;
    796   //else if(A==58) rAfm = 1.09*Re;
    797   //else if(A==48) rAfm = 1.07*Re;
    798   //else if(A==40) rAfm = 1.15*Re;
    799   //else if(A==28) rAfm = 0.93*Re;
    800   //else if(A==16) rAfm = 0.92*Re;
    801   //else if(A==12) rAfm = 0.80*Re;
    802                 //else           rAfm = 1.16*(Re-1.16/Re);                  // For other nuclei
    803   //G4double stepB      = 2.5*rAfm*f2Gm1/(Npb-1);           // in GeV^-1, step of integral
    804839  G4double stepB      = (Re+Re+2.7)*f2Gm1/(Npb-1);          // in GeV^-1, step of integral
    805840  G4double hTotG2     = shNTot*mb2G2;                       // sigma_hN in GeV^-2
     
    807842  G4double ImSum      = 0.;                                 // Integration of ImPart of Amp
    808843  G4double ValB       = -stepB;
    809   for(G4int i=0; i<Npb; i++)
     844  for(G4int i=0; i<Npb; i++)                                // First integration over b
    810845  {
    811846    ValB             += stepB;                              // An incident parameter
    812     G4double ValB2    = ValB*ValB;                          // A working value
    813     G4double IPH      = ValB/shNSl;                         // A working value
     847    G4double ValB2    = ValB*ValB;                          // A working value b^2
     848    G4double IPH      = ValB/shNSl;                         // A working value slope
    814849    G4double Integ    = 0.;                                 // Integral over ImpactParam.
    815850    G4double ValS     = 0.;                                 // Prototype of ImpactParameter
    816     for(G4int j=1; j<Npb; j++)
     851    for(G4int j=1; j<Npb; j++)                              // Second integration over b
    817852    {
    818853      ValS           += stepB; //  back to fm               // Impact parameter GeV^-1
    819854      if(!i) Tb[j]    = CHIPS_Tb(A,ValS/f2Gm1)/f22G2;       // GeV^2, calculate only once
    820855      //if(!i) Tb[j]    = Thickness(A,ValS/f2Gm1,rAfm)/f22G2; // Calculate T(b) only once
    821       G4double FunS   = IPH*ValS;                           // Working product
    822       if(FunS > Lim) break;                                 // (?)
    823       Integ          += ValS*std::exp(-(ValS*ValS+ValB2)/dHS)*QI0(FunS)*Tb[j];
     856      G4double FunS   = IPH*ValS;                           // b1*b2/slope
     857      if(FunS > Lim) break;                                 // To avoid NAN
     858      Integ          += ValS*std::exp(-(ValS*ValS+ValB2)/dHS)*QI0(FunS)*Tb[j]; // BessI0
    824859    }
    825     G4double InExp    = -hTotG2*Integ*stepB/dHS;            // Working product
    826     G4double expB     = std::exp(InExp);                    // Workung sqrt
     860    G4double InExp    = -hTotG2*Integ*stepB/dHS;            // Integrated absorption
     861    G4double expB     = std::exp(InExp);                    // Exponential absorption
    827862    G4double HRIE     = shNReIm*InExp;                      // Phase shift
    828     G4double J0qb      = QJ0(std::sqrt(Q2)*ValB)*ValB;
     863    G4double J0qb      = QJ0(std::sqrt(Q2)*ValB)*ValB;      // Bessel0(Q*b)
    829864    ReSum             += J0qb*(1.-expB*std::cos(HRIE));
    830865    ImSum             += J0qb*expB*std::sin(HRIE);
     
    832867  //G4cout<<"CHPS:RS="<<ReSum<<",IS="<<ImSum<<",CM="<<CMMom<<",st="<<stepB<<G4endl;
    833868  //return (ReSum*ReSum+ImSum*ImSum)*mb2G2*CMMom*CMMom*stepB*stepB/twopi;
    834   return (ReSum*ReSum+ImSum*ImSum)*f22G2*CMMom*CMMom*stepB*stepB/twopi;
    835 
     869  //return (ReSum*ReSum+ImSum*ImSum)*f22G2*CMMom*CMMom*stepB*stepB/twopi; // ds/do
     870  return (ReSum*ReSum+ImSum*ImSum)*f22G2*stepB*stepB/12; // ds/dt
     871}
     872
     873// Separate quasielastic calculation
    836874G4double CHIPSDifQuasiElasticCS(G4int hPDG, G4double hMom, G4int A, G4int Z, G4double aQ2)
    837875{//      =================================================================================
    838876  static const G4int Npb      = 500;                        // A#of intergation points
    839   //static const G4double mN = .9315;                         // Atomic Unit GeV
    840   static const G4double mN = .938;                          // Mass of proton GeV
    841877  static const G4double hc2   = .3893793;                   // Transform from GeV^-2 to mb
    842878  static const G4double mb2G2 = 1./hc2;                     // Transform from mb to GeV^-2
     
    845881  static const G4double f22G2 = f22mb*mb2G2;                // Transform from fm2 to GeV^-2
    846882  static const G4double f2Gm1 = std::sqrt(f22G2);           // Transform from fm to GeV^-1
    847            hMom       = hMom/1000.;                         // Momentum (GeV, inputParam)
    848                 G4double MassH      = G4QPDGCode(hPDG).GetMass()/1000.;   // Hadron Mass in GeV
    849   G4double MassH2     = MassH*MassH;                        // Squared mass of the hadron
    850   G4double hEnergy    = std::sqrt(hMom*hMom+MassH2);        // Tot energy in GeV
     883  G4double p          = hMom/1000.;                         // Momentum (GeV, inputParam)
     884  G4double p2         = p*p;
    851885  G4double Q2         = aQ2/1000000.;                       // -t in GeV
    852   G4double MassN      = mN;                                 // A*AtomicUnit(GeV)[prototype]
    853   //if(G4NucleiPropertiesTable::IsInTable(Z,A))
    854                 //              MassN=G4NucleiProperties::GetNuclearMass(A,Z)/A/1000.;  // Geant4 NuclearMass/A
    855   G4double MassN2     = MassN*MassN;                        // Squared mass of the target
    856   G4double S          = (MassN+MassN)*hEnergy+MassN2+MassH2;// Mondelstam s
    857886  // @@ Temporary only for nucleons
    858   G4double shNTot     = 5.2+5.2*std::log(hEnergy)+51*std::pow(hEnergy,-.35); // SighN in mb
    859   G4double shNSl      = 6.44+.88*std::log(S);               // B-slope in GeV^-2
    860   G4double shNReIm    = .13*std::log(S/350)*std::pow(S,-.18); // Re/Im_hN in no unit
     887  G4double p3         = p2*p;
     888  G4double p4         = p2*p2;
     889  G4double sp         = std::sqrt(p);
     890  G4double p2s        = p2*sp;
     891  G4double ap         = std::log(p);
     892  G4double dl         = ap-3.;
     893  G4double dl2        = dl*dl;
     894  G4double shPPTot    = 2.91/(p2s+.0024)+5.+(32.+.3*dl2+23./p)/(1.+1.3/p4); // SigPP in mb
     895  G4double shPNTot    = 12./(p2s+.05*p+.0001/std::sqrt(sp))+.35/p
     896                        +(38.+.3*dl2+8./p)/(1.+1.2/p3);     // SigPP in mb
     897  G4double shNTot     = (Z*shPPTot+(A-Z)*shPNTot)/A;        // SighN in mb
     898  G4double shPPSl     = 8.*std::pow(p,.055)/(1.+3.64/p4);   // PPslope in GeV^-2
     899  G4double shPNSl     = (7.2+4.32/(p4*p4+.012*p3))/(1.+2.5/p4); // PNslope in GeV^-2
     900  G4double shNSl      = (Z*shPPSl+(A-Z)*shPNSl)/A;          // B-slope in GeV^-2
     901  G4double shNReIm    = -.55+ap*(.12+ap*.0045); // Re/Im_hN in no unit
    861902  // @@ End of temporary ^^^^^^^
    862903  G4double Re         = std::pow(A,.33333333);              // A-dep coefficient
     
    10091050  //const G4int A[na]={4,9,12,16,27,48,58,64,120,181,207,238}; // A's of target nuclei
    10101051  //                 He Al Pb
    1011   const G4int A[na]={208}; // A's of target nuclei
     1052  const G4int A[na]={119}; // A's of target nuclei
    10121053  //                     p    n  pi+  pi-  K+  K-  antip
    10131054  const G4int pdg[np]={2212,2112,211,-211,321,-321,-2212}; // projectiles
    1014   const G4double mom[nm]={1090.}; // momentum in MeV/c
     1055  const G4double mom[nm]={120.}; // momentum in MeV/c
    10151056#ifdef integrc
    10161057  for(G4int ip=0; ip<np; ip++)
     
    10491090  //const G4int Z[na]={2,4, 6, 8,13,22,28,29, 50, 73, 82, 92}; // Z's of target nuclei
    10501091  //                He Al Pb
    1051   const G4int Z[na]={82}; // Z's of target nuclei
     1092  const G4int Z[na]={50}; // Z's of target nuclei
    10521093  // Test of differential ellastic cross sections
    10531094                Initialize();
     
    10661107                      {
    10671108          G4double Sig1 = CHIPSDiffElCS(PDG, mom[im], Z[ia], A[ia], t[it]);
    1068           //G4double Sig1 = DiffElasticCS(PDG, mom[im], A[ia], t[it]);
     1109          //G4double Sig1 = DiffElasticCS(PDG, mom[im], A[ia], t[it]); //Doesn't work
    10691110          G4double Sig2 = CoherentDifElasticCS(PDG, mom[im], A[ia], t[it]);
    10701111          G4double Sig3 = CHIPSDifElasticCS(PDG, mom[im], A[ia], Z[ia], t[it]);
  • trunk/source/processes/hadronic/models/chiral_inv_phase_space/calcul/G4NuMuXQ2Integration.cc

    r819 r962  
    6262  else
    6363  {
    64                   double r=0.;
    65     double max=1.;
    66     double H=1.22;
    67     if(A==1)                   // Proton
    68                   {
    69       r=std::sqrt(Q2/1.66);
    70       max=.5;
    71     }
    72     else if(A<13)              // Light nuclei
    73                   {
    74       double f=Q2/4.62;
    75       r=f*f;
    76       max=.3;
    77       if(A>2) H=1.;
    78     }
    79     else if(A>0)               // Heavy nuclei
    80                   {
    81       double f=Q2/3.4;
    82       double ff=f*f;
    83       r=ff*ff;
    84       max=.5;
    85       H=1.;
    86     }
    87     else G4cout<<"strucf: A="<<A<<" <= 0"<< G4endl;
     64                  //double r=0.;
     65    double min=.077;             // Delta(0)
     66                                double max=.47;              // Hard Pomeron
     67    //double H=1.22;
     68    if(Q2<=0.) G4cout<<"strucf: Q2="<<Q2<<" <= 0"<< G4endl;
     69    double Q=std::sqrt(Q2);
     70    //if(A==1)                   // Proton
     71                  //{
     72    //  r=std::sqrt(Q2/1.66);
     73    //  max=.5;
     74    //}
     75    //else if(A<13)              // Light nuclei
     76                  //{
     77    //  double f=Q2/4.62;
     78    //  r=f*f;
     79    //  max=.3;
     80    //  if(A>2) H=1.;
     81    //}
     82    //else if(A>0)               // Heavy nuclei
     83                  //{
     84    //  double f=Q2/3.4;
     85    //  double ff=f*f;
     86    //  r=ff*ff;
     87    //  max=.5;
     88    //  H=1.;
     89    //}
     90    //else G4cout<<"strucf: A="<<A<<" <= 0"<< G4endl;
    8891    //
    8992    N=3.+.3581*std::log(1.+Q2/.04); // a#of partons in the nonperturbative phase space
    90     Del=(1.+r)/(12.5+r/max);
    91     double S=std::pow(1.+.6/Q2,-1.-Del);
    92     D=H*S*(1.-.5*S);
     93    Del=min+(max-min)/(1.+5./Q);
     94    D=0.68*std::pow(1.+.145/Q2,-1.-Del); // 0.68=1-0.34, m2=.145 GeV2
    9395    V=3*(1.-D)*(N-1.);
    94     double cc=Q2/.08;
    95     double cc2=cc*cc;
    96     //double C=(1.+cc2)/(1.+cc2/.24);              // Weak?
    97     double C=(1.+cc2)/(1.+cc2/.24)/(1.+Q2/21.6); // EM
    98     double c3=C+C+C;
     96    double c3=.75;                       // 3*0.25
    9997    double uu=std::exp(lGam(N-Del)-lGam(N-1.)-lGam(1.-Del))/N;
    10098    U2=(c3+N-3.)*uu;
    10199    U3=c3*uu;
    102     //UU=uu+uu+uu; // @@
    103100    mA  = A;
    104101    mQ2 = Q2;
     
    125122  //else
    126123  xf3= U3*pp+dir;
    127   fL = per/4.;
     124  fL = per/5.;                             // 20%
    128125  return;
    129126}
     
    157154  const double sik=GF2*hc2/pif; // precalculated coefficient
    158155  //const double mpi=.1349766;    // pi0 meson mass in GeV
    159   const double mpi=.13957018;   // charged pi meson mass in GeV
     156  //const double mpi=.13957018;   // charged pi meson mass in GeV
    160157  //const double mpi2=mpi*mpi;    // m_pi^2 in GeV^2
    161158  //const double me=.00051099892; // electron mass in GeV
     
    168165  //const double mtau2=mtau*mtau; // m_tau^2 in GeV^2
    169166  //const double hmtau2=mtau2/2;  // .5*m_e^2 in GeV^2
    170   //const double mp=.93827203;    // proton mass in GeV
    171   //const double mn=.93956536;    // neutron mass in GeV
     167  const double mp=.93827203;    // proton mass in GeV
     168  const double mn=.93956536;    // neutron mass in GeV
    172169  //const double md=1.87561282;   // deuteron mass in GeV
    173   const double MN=.931494043;   // Nucleon mass (inside nucleus, atomic mass unit, GeV)
    174   //const double MN=(mn+mp)/2;    // Nucleon mass (mean free) in GeV
    175   //const double MD=1.232;        // proton mass in GeV
     170  //const double MN=.931494043;   // Nucleon mass (inside nucleus, atomic mass unit, GeV)
     171  const double MN=(mn+mp)/2;    // Nucleon mass (mean free) in GeV
     172  const double MD=1.232;        // proton mass in GeV
    176173  //const double mp2=mp*mp;       // m_p^2 in GeV^2
    177174  const double MN2=MN*MN;       // M_N^2 in GeV^2
     
    184181  //
    185182  //const double mc=.3;           // parameter of W>M+mc cut for Quasi-Elastic/Delta
    186   const double mc=mpi;          // parameter of W>M+mc cut for Quasi-Elastic/Delta
     183  const double mc=std::sqrt((MN*MN+MD*MD)/2)-MN; // Squared mean between N and \Delta
     184  //const double mc=mpi;          // parameter of W>M+mc cut for Quasi-Elastic/Delta
    187185  const double mcV=(dMN+mc)*mc; // constant of W>M+mc cut for Quasi-Elastic
    188186  //std::ofstream fileNuMuX("NuMuXQ2.out", std::ios::out);
     
    198196  int    A=12;                    // Neucleus for which calculations should be done
    199197  double lEnuMin=0;               // LogLog of Minimum energy of neutrino
    200   double lEnuMax=std::log(1.+std::log(300./EminMu)); // LogLog of Maximum energy of neutrino
    201   int    nE=31;
     198  double lEnuMax=std::log(1.+std::log(300./EminMu)); // LogLog of MaximumEnergy of neutrino
     199  int    nE=49;                   // Number of points
    202200  double dlE=(lEnuMax-lEnuMin)/nE;
    203201  lEnuMin+=dlE/10;
     
    241239        double dik=MW4/Q2M/Q2M;
    242240        double qmc=Q2+mcV;
    243         double lXQES=std::log((std::sqrt(qmc*qmc+Q2*fMN2)-qmc)/dMN2); // Quasielastic boundary
     241        double lXQES=std::log((std::sqrt(qmc*qmc+Q2*fMN2)-qmc)/dMN2);//QuasielasticBoundary
    244242        //double lXQES=log(Q2/(Q2+mcV)); // Quasielastic boundary (W=MN+m_c)
    245243        //double xN=Q2/dME;
     
    248246        double lXmin=std::log(xN);
    249247        // ****** QE ********
    250         //if(lXQES>lXmin) lXmin=lXQES;   // A cut which leaves only QES
     248        if(lXQES>lXmin) lXmin=lXQES;   // A cut which leaves only QES >>>>>>>>>>>>>>>>
    251249        // *** End of QE^^^^^
    252250        double lXmax=0.;               // QES is in DIS
     
    262260                                      {
    263261            getFun(A, lX, Q2, f);
    264             DISxint+=f[0]+f[0]+xN*(f[1]+f[1]+xN*f[3]); // neutrino
    265             //DISxint+=f[0]+f[0]+xN*(f[2]+f[2]+xN*f[4]); // anti-neutrino
     262            // ***** Neutrino/Antineutrino switch ******>>>>>>>>>>>>>>>>>>>>>>>>>>>>
     263            //DISxint+=f[0]+f[0]+xN*(f[1]+f[1]+xN*f[3]); // neutrino
     264            DISxint+=f[0]+f[0]+xN*(f[2]+f[2]+xN*f[4]); // anti-neutrino
    266265            //G4cout<<f[0]<<","<<f[1]<<","<<f[2]<<","<<f[3]<<","<<f[4]<<G4endl;
    267266          }
     
    279278    //===== tot/qe choice ====
    280279    DIStsig*=sik/Enu;
    281     G4cout<<"***total*** E="<<Enu<<",sig/E="<<DIStsig<<G4endl;
     280    //G4cout<<"***total-neutrino*** E="<<Enu<<" ,sig/E="<<DIStsig<<G4endl;
     281    G4cout<<"***total-antineutrino*** E="<<Enu<<" ,sig/E="<<DIStsig<<G4endl;
     282    //G4cout<<"***quasiel-nu*** E="<<Enu<<" ,sig/E="<<DIStsig<<G4endl;
     283    //G4cout<<"***quasiel-antinu*** E="<<Enu<<" ,sig/E="<<DIStsig<<G4endl;
    282284    //...................
    283285    //DIStsig*=sik;
Note: See TracChangeset for help on using the changeset viewer.