- Adding check and flagging for HG present
[u/mrichter/AliRoot.git] / MUON / AliMUONDigitCalibrator.h
index 19fbb0b..d55b099 100644 (file)
@@ -7,38 +7,84 @@
 /// \class AliMUONDigitCalibrator
 /// \brief Class to calibrate the digits
 /// 
-/// \author Laurent Aphecetche
+//  Author Laurent Aphecetche
 
 #ifndef ALIMUONDIGITCALIBRATOR_H
 #define ALIMUONDIGITCALIBRATOR_H
 
-#ifndef ROOT_TTask
-#include "TTask.h"
+#ifndef ROOT_TObject
+#include "TObject.h"
 #endif
 
 class AliMUONCalibrationData;
-class AliMUONData;
-class AliMUONV2DStore;
+class AliMUONLogger;
+class AliMUONVStore;
+class AliMUONVDigitStore;
+class AliMUONVDigit;
+class AliMUONPadStatusMaker;
+class AliMUONPadStatusMapMaker;
+class AliMUONRecoParam;
+class TExMap;
 
-class AliMUONDigitCalibrator : public TTask
+class AliMUONDigitCalibrator : public TObject
 {
 public:
-  AliMUONDigitCalibrator(AliMUONData* data, 
-                         AliMUONCalibrationData* calib,
-                         Bool_t createAndUseStatusMap=kTRUE);
+
+  AliMUONDigitCalibrator(Int_t runNumber, const char* calibMode="NOGAIN");
+  
+  AliMUONDigitCalibrator(const AliMUONCalibrationData& calib, 
+                         const AliMUONRecoParam* recoParams,
+                         const char* calibMode="NOGAIN");
+  
+  AliMUONDigitCalibrator(const AliMUONCalibrationData& calib, 
+                         const char* calibMode="NOGAIN");
+  
   virtual ~AliMUONDigitCalibrator();
   
-  virtual void Exec(Option_t*);
+  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:    
-    AliMUONDigitCalibrator(const AliMUONDigitCalibrator& other);
-    AliMUONDigitCalibrator& operator=(const AliMUONDigitCalibrator& other);
-
-    AliMUONData* fData;                       //!< MUON data 
-    AliMUONCalibrationData* fCalibrationData; //!< Calibration data
-    AliMUONV2DStore* fStatusMap; //!< Channel status map
-    
-  ClassDef(AliMUONDigitCalibrator,2) // Calibrate raw digit
+  
+  /// Not implemented
+  AliMUONDigitCalibrator(const AliMUONDigitCalibrator& other);
+  /// Not implemented
+  AliMUONDigitCalibrator& operator=(const AliMUONDigitCalibrator& other);
+  
+  void Ctor(const char* calibMode,
+            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