Skip to content

Calorimeter noise fix

The implementation of the calorimeter noise in the digitization is incorrect. Namely the code here: https://eicweb.phy.anl.gov/EIC/juggler/-/blob/master/JugDigi/src/components/CalorimeterHitDigi.cpp#L168

double    eResRel = std::sqrt(std::pow(m_normDist() * eRes[0] / std::sqrt(ahit.energyDeposit()), 2) +
                                      std::pow(m_normDist() * eRes[1], 2) +
                                      std::pow(m_normDist() * eRes[2] / (ahit.energyDeposit()), 2));

Should be either

double    eResRel =m_normDist() * std::sqrt(std::pow(eRes[0] / std::sqrt(ahit.energyDeposit()), 2) +
                                      std::pow(eRes[1], 2) +
                                      std::pow(eRes[2] / (ahit.energyDeposit()), 2));

or

double    eResRel = m_normDist() * (eRes[0] / std::sqrt(ahit.energyDeposit()) +
                  m_normDist() * eRes[1] + 
                  m_normDist() * eRes[2] / (ahit.energyDeposit());
``
That is, the three contributions to the noise are typically assumed to arise from independent Gaussian fluctuations. So they should either contribute separately (second form) or can be combined by adding in quadrature (first form).