+//____________________________________________________________________
+Double_t
+AliForwardUtil::ILandauGaus(Double_t x, Double_t delta, Double_t xi,
+ Double_t sigma, Double_t sigma_n, Int_t i)
+{
+ Double_t delta_i = (i == 1 ? delta : i * (delta + xi * TMath::Log(i)));
+ Double_t xi_i = i * xi;
+ Double_t sigma_i = (i == 1 ? sigma : TMath::Sqrt(Double_t(i))*sigma);
+ if (sigma_i < 1e-10) {
+ // Fall back to landau
+ return AliForwardUtil::Landau(x, delta_i, xi_i);
+ }
+ return AliForwardUtil::LandauGaus(x, delta_i, xi_i, sigma_i, sigma_n);
+}
+
+//____________________________________________________________________
+Double_t
+AliForwardUtil::IdLandauGausdPar(Double_t x,
+ UShort_t par, Double_t dPar,
+ Double_t delta, Double_t xi,
+ Double_t sigma, Double_t sigma_n,
+ Int_t i)
+{
+ if (dPar == 0) return 0;
+ Double_t dp = dPar;
+ Double_t d2 = dPar / 2;
+ Double_t delta_i = i * (delta + xi * TMath::Log(i));
+ Double_t xi_i = i * xi;
+ Double_t si = TMath::Sqrt(Double_t(i));
+ Double_t sigma_i = si*sigma;
+ Double_t y1 = 0;
+ Double_t y2 = 0;
+ Double_t y3 = 0;
+ Double_t y4 = 0;
+ switch (par) {
+ case 0:
+ y1 = ILandauGaus(x, delta_i+i*dp, xi_i, sigma_i, sigma_n, i);
+ y2 = ILandauGaus(x, delta_i+i*d2, xi_i, sigma_i, sigma_n, i);
+ y3 = ILandauGaus(x, delta_i-i*d2, xi_i, sigma_i, sigma_n, i);
+ y4 = ILandauGaus(x, delta_i-i*dp, xi_i, sigma_i, sigma_n, i);
+ break;
+ case 1:
+ y1 = ILandauGaus(x, delta_i, xi_i+i*dp, sigma_i, sigma_n, i);
+ y2 = ILandauGaus(x, delta_i, xi_i+i*d2, sigma_i, sigma_n, i);
+ y3 = ILandauGaus(x, delta_i, xi_i-i*d2, sigma_i, sigma_n, i);
+ y4 = ILandauGaus(x, delta_i, xi_i-i*dp, sigma_i, sigma_n, i);
+ break;
+ case 2:
+ y1 = ILandauGaus(x, delta_i, xi_i, sigma_i+si*dp, sigma_n, i);
+ y2 = ILandauGaus(x, delta_i, xi_i, sigma_i+si*d2, sigma_n, i);
+ y3 = ILandauGaus(x, delta_i, xi_i, sigma_i-si*d2, sigma_n, i);
+ y4 = ILandauGaus(x, delta_i, xi_i, sigma_i-si*dp, sigma_n, i);
+ break;
+ case 3:
+ y1 = ILandauGaus(x, delta_i, xi_i, sigma_i, sigma_n+dp, i);
+ y2 = ILandauGaus(x, delta_i, xi_i, sigma_i, sigma_n+d2, i);
+ y3 = ILandauGaus(x, delta_i, xi_i, sigma_i, sigma_n-d2, i);
+ y4 = ILandauGaus(x, delta_i, xi_i, sigma_i, sigma_n-dp, i);
+ break;
+ default:
+ return 0;
+ }
+
+ Double_t d0 = y1 - y4;
+ Double_t d1 = 2 * (y2 - y3);
+
+ Double_t g = 1/(2*dp) * (4*d1 - d0) / 3;
+
+ return g;
+}
+