//_____________________________________________________________________________
-AliZDCFragment::AliZDCFragment()
+AliZDCFragment::AliZDCFragment():
+ fB(0),
+ fZbAverage(0),
+ fNimf(0),
+ fZmax(0),
+ fTau(0),
+ fNalpha(0),
+ fZtot(0),
+ fNtot(0)
{
//
// Default constructor
//
- fB = 0;
+ for(Int_t i=0; i<=99; i++){
+ fZZ[i] = 0;
+ fNN[i] = 0;
+ }
}
//_____________________________________________________________________________
-AliZDCFragment::AliZDCFragment(Float_t b)
- : TNamed(" "," ")
+AliZDCFragment::AliZDCFragment(Float_t b):
+ TNamed(" "," "),
+ fB(b),
+ fZbAverage(0),
+ fNimf(0),
+ fZmax(0),
+ fTau(0),
+ fNalpha(0),
+ fZtot(0),
+ fNtot(0)
{
//
// Standard constructor
//
- fB = b;
- fZbAverage = 0;
- fNimf = 0;
- fZmax = 0;
- fTau = 0;
for(Int_t i=0; i<=99; i++){
fZZ[i] = 0;
fNN[i] = 0;
}
- fNalpha = 0;
- fZtot = 0;
- fNtot = 0;
}
//_____________________________________________________________________________
-void AliZDCFragment::GenerateIMF(Int_t* fZZ, Int_t &fNalpha)
+void AliZDCFragment::GenerateIMF()
{
// Loop variables
// Coefficients of polynomial for fluctuations on average number of IMF
const Float_t kParamFluctNimf[4]={-0.13176,2.9392,-5.2147,2.3092};
// Coefficients of polynomial for average maximum Z of fragments
- const Float_t kParamZmax[4]={0.16899,14.203,-2.8284,65.036};
+ //const Float_t kParamZmax[4]={0.16899,14.203,-2.8284,65.036};
+ const Float_t kParamZmax[4]={0.16899,14.203,-2.8284,70.5};
// Coefficients of polynomial for fluctuations on maximum Z of fragments
const Float_t kParamFluctZmax[5]={0.013782,-0.17282,1.5065,1.0654,-2.4317};
// Coefficients of polynomial for exponent tau of fragments Z distribution
// Coefficients of polynomial for fluctuations on average number of alphas
const Float_t kParamFluctNalpha[5]={0.283,6.2141,-17.113,17.394,-6.6084};
// Coefficients of function for Pb nucleus skin
- const Float_t kParamSkinPb[2]={0.93,11.05};
+ const Float_t kParamSkinPb[2]={0.762408, 20.};
// Thickness of nuclear surface
- const Float_t kNuclearThick = 0.52;
+ //const Float_t kNuclearThick = 0.52;
// Maximum impact parameter for U [r0*A**(1/3)]
const Float_t kbMaxU = 14.87;
// Maximum impact parameter for Pb [r0*A**(1/3)]
+ //const Float_t kbMaxPb = 14.22+4*kNuclearThick;
const Float_t kbMaxPb = 14.22;
// Z of the projectile
const Float_t kZProj = 82.;
// From b(Pb) to b(U)
+ if(fB>kbMaxPb) fB = 2*kbMaxPb-fB;
+
Float_t bU = fB*kbMaxU/kbMaxPb;
// From b(U) to Zbound(U)
// Zbound is proportional to b**2 up to b < kbMaxPb-2*kNuclearThick
// and then it is an increasing exponential, imposing that at
// b=kbMaxPb-2kNuclearThick the two functions have the same derivative
- Float_t bCore = kbMaxPb-2*kNuclearThick;
- if(fB>bCore){
- fZbAverage=kZProj*(1.-TMath::Exp(-kParamSkinPb[0]*(fB-kParamSkinPb[1])));
+ //Float_t bCore = kbMaxPb-2*kNuclearThick;
+ if(fB>kbMaxPb){
+ fZbAverage = TMath::Exp(-kParamSkinPb[0]*(fB-kParamSkinPb[1]));
+ //printf(" b = %1.2f fm Z_bound %1.2f\n", fB, fZbAverage);
}
if(fZbAverage>kZProj) fZbAverage = kZProj;
Float_t zbNorm = fZbAverage/kZProj;
fluctZmax = fluctZmax*kZProj/6.;
Float_t xg = gRandom->Gaus(0.0,1.0);
fluctZmax = fluctZmax*xg;
- fZmax = averageZmax+fluctZmax;
+ fZmax = (averageZmax+fluctZmax);
if(fZmax>kZProj) fZmax = kZProj;
// printf("\n\n ------------------------------------------------------------");
}
//_____________________________________________________________________________
-void AliZDCFragment::AttachNeutrons(Int_t *fZZ, Int_t *fNN, Int_t &fZtot,Int_t &fNtot)
+void AliZDCFragment::AttachNeutrons()
{
//
// Prepare nuclear fragment by attaching a suitable number of neutrons
}
//_____________________________________________________________________________
-const Float_t AliZDCFragment::DeuteronFraction()
+Float_t AliZDCFragment::DeuteronNumber()
{
// Calculates the fraction of deuterum nucleus produced
//
- Float_t deuteronProdPar[2] = {1.068,0.0385};
- Float_t deutFrac = deuteronProdPar[0]-deuteronProdPar[1]*fB;
- if(deutFrac>1.) deutFrac=1.;
- return deutFrac;
+ Float_t deuteronProdPar[2] = {-0.068,0.0385};
+ Float_t deutNum = deuteronProdPar[0] + deuteronProdPar[1]*fB;
+ if(deutNum<0.) deutNum = 0.;
+ return deutNum;
}