ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup rec
/// \class AliMUONDigitCalibrator
/// \brief Class to calibrate the digits
/// 
//  Author Laurent Aphecetche

#ifndef ALIMUONDIGITCALIBRATOR_H
#define ALIMUONDIGITCALIBRATOR_H

#ifndef ROOT_TObject
#include "TObject.h"
#endif

class AliMUONCalibrationData;
class AliMUONLogger;
class AliMUONVStore;
class AliMUONVDigitStore;
class AliMUONVDigit;
class AliMUONPadStatusMaker;
class AliMUONPadStatusMapMaker;
class AliMUONRecoParam;
class TExMap;

class AliMUONDigitCalibrator : public TObject
{
public:

  AliMUONDigitCalibrator(Int_t runNumber);
  
  AliMUONDigitCalibrator(const AliMUONCalibrationData& calib, 
                         const AliMUONRecoParam* recoParams);
  
  AliMUONDigitCalibrator(const AliMUONCalibrationData& calib, int b);
  
  virtual ~AliMUONDigitCalibrator();
  
  virtual void Calibrate(AliMUONVDigitStore& digitStore);

  Bool_t IsValidDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, 
                      Int_t* statusMap=0x0) const;

  Float_t CalibrateDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel,
                         Float_t adc, Float_t nsigmas=-1, 
                         Bool_t* isSaturated=0x0) const;
                     
  Int_t PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;

  Int_t StatusMap(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;

private:    
  
  /// Not implemented
  AliMUONDigitCalibrator(const AliMUONDigitCalibrator& other);
  /// Not implemented
  AliMUONDigitCalibrator& operator=(const AliMUONDigitCalibrator& other);
  
  void Ctor(const AliMUONCalibrationData& calib,
            const AliMUONRecoParam* recoParams,
            Bool_t deferredInitialization=kTRUE);
  
private:
	AliMUONLogger* fLogger; //!< to log repeated messages
	AliMUONPadStatusMaker* fStatusMaker; //!< to build pad statuses
	AliMUONPadStatusMapMaker* fStatusMapMaker; //!< to build status map
	AliMUONVStore* fPedestals; //!< pedestal values
	AliMUONVStore* fGains; //!< gain values
	Int_t fApplyGains; //!< whether we should apply gains or not, capa or not...
	AliMUONVStore* fCapacitances; //!< capa values
	Double_t fNumberOfBadPads; //!< # of times we've rejected a bad pad
	Double_t fNumberOfPads; //!< # of pads we've seen
	Double_t fChargeSigmaCut; //!< number of sigmas to cut on
  UInt_t fMask; //!< mask used to cut bad channels
  
	static const Int_t fgkNoGain; //!< do not apply gain calib at all
	static const Int_t fgkGainConstantCapa; //!< apply gain (from OCDB) with constant capa
	static const Int_t fgkGain; //!< apply gain and capa (from OCDB)
	static const Int_t fgkInjectionGain; //!< apply injection gain (from OCDB)
	
  ClassDef(AliMUONDigitCalibrator,10) // Calibrate raw digit
};

#endif
 AliMUONDigitCalibrator.h:1
 AliMUONDigitCalibrator.h:2
 AliMUONDigitCalibrator.h:3
 AliMUONDigitCalibrator.h:4
 AliMUONDigitCalibrator.h:5
 AliMUONDigitCalibrator.h:6
 AliMUONDigitCalibrator.h:7
 AliMUONDigitCalibrator.h:8
 AliMUONDigitCalibrator.h:9
 AliMUONDigitCalibrator.h:10
 AliMUONDigitCalibrator.h:11
 AliMUONDigitCalibrator.h:12
 AliMUONDigitCalibrator.h:13
 AliMUONDigitCalibrator.h:14
 AliMUONDigitCalibrator.h:15
 AliMUONDigitCalibrator.h:16
 AliMUONDigitCalibrator.h:17
 AliMUONDigitCalibrator.h:18
 AliMUONDigitCalibrator.h:19
 AliMUONDigitCalibrator.h:20
 AliMUONDigitCalibrator.h:21
 AliMUONDigitCalibrator.h:22
 AliMUONDigitCalibrator.h:23
 AliMUONDigitCalibrator.h:24
 AliMUONDigitCalibrator.h:25
 AliMUONDigitCalibrator.h:26
 AliMUONDigitCalibrator.h:27
 AliMUONDigitCalibrator.h:28
 AliMUONDigitCalibrator.h:29
 AliMUONDigitCalibrator.h:30
 AliMUONDigitCalibrator.h:31
 AliMUONDigitCalibrator.h:32
 AliMUONDigitCalibrator.h:33
 AliMUONDigitCalibrator.h:34
 AliMUONDigitCalibrator.h:35
 AliMUONDigitCalibrator.h:36
 AliMUONDigitCalibrator.h:37
 AliMUONDigitCalibrator.h:38
 AliMUONDigitCalibrator.h:39
 AliMUONDigitCalibrator.h:40
 AliMUONDigitCalibrator.h:41
 AliMUONDigitCalibrator.h:42
 AliMUONDigitCalibrator.h:43
 AliMUONDigitCalibrator.h:44
 AliMUONDigitCalibrator.h:45
 AliMUONDigitCalibrator.h:46
 AliMUONDigitCalibrator.h:47
 AliMUONDigitCalibrator.h:48
 AliMUONDigitCalibrator.h:49
 AliMUONDigitCalibrator.h:50
 AliMUONDigitCalibrator.h:51
 AliMUONDigitCalibrator.h:52
 AliMUONDigitCalibrator.h:53
 AliMUONDigitCalibrator.h:54
 AliMUONDigitCalibrator.h:55
 AliMUONDigitCalibrator.h:56
 AliMUONDigitCalibrator.h:57
 AliMUONDigitCalibrator.h:58
 AliMUONDigitCalibrator.h:59
 AliMUONDigitCalibrator.h:60
 AliMUONDigitCalibrator.h:61
 AliMUONDigitCalibrator.h:62
 AliMUONDigitCalibrator.h:63
 AliMUONDigitCalibrator.h:64
 AliMUONDigitCalibrator.h:65
 AliMUONDigitCalibrator.h:66
 AliMUONDigitCalibrator.h:67
 AliMUONDigitCalibrator.h:68
 AliMUONDigitCalibrator.h:69
 AliMUONDigitCalibrator.h:70
 AliMUONDigitCalibrator.h:71
 AliMUONDigitCalibrator.h:72
 AliMUONDigitCalibrator.h:73
 AliMUONDigitCalibrator.h:74
 AliMUONDigitCalibrator.h:75
 AliMUONDigitCalibrator.h:76
 AliMUONDigitCalibrator.h:77
 AliMUONDigitCalibrator.h:78
 AliMUONDigitCalibrator.h:79
 AliMUONDigitCalibrator.h:80
 AliMUONDigitCalibrator.h:81
 AliMUONDigitCalibrator.h:82
 AliMUONDigitCalibrator.h:83
 AliMUONDigitCalibrator.h:84
 AliMUONDigitCalibrator.h:85
 AliMUONDigitCalibrator.h:86
 AliMUONDigitCalibrator.h:87