ROOT logo
#ifndef ALIFMDCORRNOISEGAIN_H
#define ALIFMDCORRNOISEGAIN_H
#include <AliFMDFloatMap.h>

/**
 * Get the noise calibration.  That is, the ratio 
 *
 * @f[ 
 *   \frac{\sigma_{i}}{g_{i}k}
 * @f] 
 *
 * where @f$ k@f$ is a constant determined by the electronics of
 * units DAC/MIP, and @f$ \sigma_i, g_i@f$ are the noise and gain of
 * the @f$ i @f$ strip respectively.
 *
 * This correction is needed because some of the reconstructed data
 * (what which have an AliESDFMD class version less than or equal to
 * 3) used the wrong zero-suppression factor.  The zero suppression
 * factor used by the on-line electronics was 4, but due to a coding
 * error in the AliFMDRawReader a zero suppression factor of 1 was
 * assumed during the reconstruction.  This shifts the zero of the
 * energy loss distribution artificially towards the left (lover
 * valued signals).
 *
 * So let's assume the real zero-suppression factor is @f$ f@f$ while
 * the zero suppression factor @f$ f'@f$ assumed in the reconstruction
 * was (wrongly) lower.  The number of ADC counts @f$ c_i'@f$ used in
 * the reconstruction can be calculated from the reconstructed signal
 * @f$ m_i'@f$ by
 *
 * @f[
 *    c_i' = m_i \times g_i \times k / \cos\theta_i
 * @f] 
 *
 * where @f$\theta_i@f$ is the incident angle of the @f$ i@f$ strip. 
 * 
 * This number of counts used the wrong noise factor @f$ f'@f$ so to
 * correct to the on-line value, we need to do
 *
 * @f[ 
 *   c_i = c_i' - \floor{f'\times n_i} + \floor{f\times n_i}
 * @f] 
 * 
 * which gives the correct number of ADC counts over the pedestal. To
 * convert back to the scaled energy loss signal we then need to
 * calculate (noting that @f$ f,f'@f$ are integers)
 *
 * @f{eqnarray}
 *    m_i &=& \frac{c_i \times \cos\theta_i}{g_i \times k}\\ 
 *    &=& \left(c_i' - \lfloor f'\times n_i\rfloor + 
 *           \lfloor f\times n_i\rfloor\right)\frac{\cos\theta}{g_i \times k}\\
 *    &=& \left(\frac{m_i'\times g_i\times k}{\cos\theta} -
 *            \lfloor f'\times n_i\rfloor + \lfloor f\times n_i\rfloor\right)
 *         \frac{\cos\theta}{g_i \times k}\\
 *    &=& m_i' + \frac{1}{g_i \times k}
 *         \left(\lfloor f\times n_i}\rfloor-
 *             \lfloor f'\times n_i\rfloor\right)\cos\theta\\
 *    &=& m_i' + \frac{\lfloor n_i\rfloor}{g_i \times k}
 *        \left(f-f'\right)\cos\theta
 * @f{eqnarray}
 * 
 */
class AliFMDCorrNoiseGain : public TObject 
{
public:
  /**
   * Default constructor 
   */
  AliFMDCorrNoiseGain() : fValues(0) { fValues.Reset(-1); }
  /** 
   * Constructor from a float map 
   * 
   * @param map Construct from this map 
   */
  AliFMDCorrNoiseGain(const AliFMDFloatMap& map) : fValues(map) {}
  /** 
   * Get the noise value for a particular strip 
   * 
   * @param d  Detector
   * @param r  Ring 
   * @param s  Sector 
   * @param t  Strip 
   * 
   * @return Noise value for strip 
   */
  Float_t Get(UShort_t d, Char_t r, UShort_t s, UShort_t t) const 
  { 
    return fValues(d, r, s, t);
  }
  /** 
   * Set the value for a strip. 
   * 
   * @param d Detector 
   * @param r Ring 
   * @param s Sector
   * @param t Strip
   * @param x Value 
   */
  void Set(UShort_t d, Char_t r, UShort_t s, UShort_t t, Float_t x) 
  { 
    fValues(d, r, s, t) = x;
  }
  /** 
   * Get a reference to the noise map 
   * 
   * @return Noise map 
   */
  const AliFMDFloatMap& Values() { return fValues; }
protected: 
  AliFMDFloatMap fValues; // The noise-gain map 
  ClassDef(AliFMDCorrNoiseGain,1); // Clone of AliFMDCalibPedestal
};

#endif
// Local Variables:
//   mode: C++
// End:

 
 AliFMDCorrNoiseGain.h:1
 AliFMDCorrNoiseGain.h:2
 AliFMDCorrNoiseGain.h:3
 AliFMDCorrNoiseGain.h:4
 AliFMDCorrNoiseGain.h:5
 AliFMDCorrNoiseGain.h:6
 AliFMDCorrNoiseGain.h:7
 AliFMDCorrNoiseGain.h:8
 AliFMDCorrNoiseGain.h:9
 AliFMDCorrNoiseGain.h:10
 AliFMDCorrNoiseGain.h:11
 AliFMDCorrNoiseGain.h:12
 AliFMDCorrNoiseGain.h:13
 AliFMDCorrNoiseGain.h:14
 AliFMDCorrNoiseGain.h:15
 AliFMDCorrNoiseGain.h:16
 AliFMDCorrNoiseGain.h:17
 AliFMDCorrNoiseGain.h:18
 AliFMDCorrNoiseGain.h:19
 AliFMDCorrNoiseGain.h:20
 AliFMDCorrNoiseGain.h:21
 AliFMDCorrNoiseGain.h:22
 AliFMDCorrNoiseGain.h:23
 AliFMDCorrNoiseGain.h:24
 AliFMDCorrNoiseGain.h:25
 AliFMDCorrNoiseGain.h:26
 AliFMDCorrNoiseGain.h:27
 AliFMDCorrNoiseGain.h:28
 AliFMDCorrNoiseGain.h:29
 AliFMDCorrNoiseGain.h:30
 AliFMDCorrNoiseGain.h:31
 AliFMDCorrNoiseGain.h:32
 AliFMDCorrNoiseGain.h:33
 AliFMDCorrNoiseGain.h:34
 AliFMDCorrNoiseGain.h:35
 AliFMDCorrNoiseGain.h:36
 AliFMDCorrNoiseGain.h:37
 AliFMDCorrNoiseGain.h:38
 AliFMDCorrNoiseGain.h:39
 AliFMDCorrNoiseGain.h:40
 AliFMDCorrNoiseGain.h:41
 AliFMDCorrNoiseGain.h:42
 AliFMDCorrNoiseGain.h:43
 AliFMDCorrNoiseGain.h:44
 AliFMDCorrNoiseGain.h:45
 AliFMDCorrNoiseGain.h:46
 AliFMDCorrNoiseGain.h:47
 AliFMDCorrNoiseGain.h:48
 AliFMDCorrNoiseGain.h:49
 AliFMDCorrNoiseGain.h:50
 AliFMDCorrNoiseGain.h:51
 AliFMDCorrNoiseGain.h:52
 AliFMDCorrNoiseGain.h:53
 AliFMDCorrNoiseGain.h:54
 AliFMDCorrNoiseGain.h:55
 AliFMDCorrNoiseGain.h:56
 AliFMDCorrNoiseGain.h:57
 AliFMDCorrNoiseGain.h:58
 AliFMDCorrNoiseGain.h:59
 AliFMDCorrNoiseGain.h:60
 AliFMDCorrNoiseGain.h:61
 AliFMDCorrNoiseGain.h:62
 AliFMDCorrNoiseGain.h:63
 AliFMDCorrNoiseGain.h:64
 AliFMDCorrNoiseGain.h:65
 AliFMDCorrNoiseGain.h:66
 AliFMDCorrNoiseGain.h:67
 AliFMDCorrNoiseGain.h:68
 AliFMDCorrNoiseGain.h:69
 AliFMDCorrNoiseGain.h:70
 AliFMDCorrNoiseGain.h:71
 AliFMDCorrNoiseGain.h:72
 AliFMDCorrNoiseGain.h:73
 AliFMDCorrNoiseGain.h:74
 AliFMDCorrNoiseGain.h:75
 AliFMDCorrNoiseGain.h:76
 AliFMDCorrNoiseGain.h:77
 AliFMDCorrNoiseGain.h:78
 AliFMDCorrNoiseGain.h:79
 AliFMDCorrNoiseGain.h:80
 AliFMDCorrNoiseGain.h:81
 AliFMDCorrNoiseGain.h:82
 AliFMDCorrNoiseGain.h:83
 AliFMDCorrNoiseGain.h:84
 AliFMDCorrNoiseGain.h:85
 AliFMDCorrNoiseGain.h:86
 AliFMDCorrNoiseGain.h:87
 AliFMDCorrNoiseGain.h:88
 AliFMDCorrNoiseGain.h:89
 AliFMDCorrNoiseGain.h:90
 AliFMDCorrNoiseGain.h:91
 AliFMDCorrNoiseGain.h:92
 AliFMDCorrNoiseGain.h:93
 AliFMDCorrNoiseGain.h:94
 AliFMDCorrNoiseGain.h:95
 AliFMDCorrNoiseGain.h:96
 AliFMDCorrNoiseGain.h:97
 AliFMDCorrNoiseGain.h:98
 AliFMDCorrNoiseGain.h:99
 AliFMDCorrNoiseGain.h:100
 AliFMDCorrNoiseGain.h:101
 AliFMDCorrNoiseGain.h:102
 AliFMDCorrNoiseGain.h:103
 AliFMDCorrNoiseGain.h:104
 AliFMDCorrNoiseGain.h:105
 AliFMDCorrNoiseGain.h:106
 AliFMDCorrNoiseGain.h:107
 AliFMDCorrNoiseGain.h:108
 AliFMDCorrNoiseGain.h:109
 AliFMDCorrNoiseGain.h:110
 AliFMDCorrNoiseGain.h:111
 AliFMDCorrNoiseGain.h:112
 AliFMDCorrNoiseGain.h:113
 AliFMDCorrNoiseGain.h:114
 AliFMDCorrNoiseGain.h:115
 AliFMDCorrNoiseGain.h:116
 AliFMDCorrNoiseGain.h:117
 AliFMDCorrNoiseGain.h:118
 AliFMDCorrNoiseGain.h:119