44 const double sigma1 =
m_tileBlob->getData(subHash,dbGain,2);
45 const double sigma2 =
m_tileBlob->getData(subHash,dbGain,3);
46 const double ratio =
m_tileBlob->getData(subHash,dbGain,4);
49 if((sigma1 == 0. && sigma2 == 0.) || e == 0.)
return 0.;
50 if(sigma1 == 0.)
return e/sigma2;
51 if((ratio == 0.) || sigma2 == 0.)
return e/sigma1;
52 const double x1 = e/sigma1;
53 const double x2 = e/sigma2;
55 constexpr std::array<float,2> valid_range{0.9,7.5};
56 const float wide_gauss_sigma = std::min(std::abs(x1),std::abs(x2));
57 if(wide_gauss_sigma > valid_range[1])
return wide_gauss_sigma;
59 const float narrow_gauss_sigma= std::max(std::abs(x1),std::abs(x2));
60 if(narrow_gauss_sigma < valid_range[0])
return narrow_gauss_sigma;
63 const double y1= TMath::Erf(M_SQRT1_2*x1);
64 const double y2= TMath::Erf(M_SQRT1_2*x2);
66 const double z = ( y1*sigma1 + ratio*y2*sigma2 )/( sigma1 + ratio*sigma2);
73 return M_SQRT2*TMath::ErfInverse(
z);