Bug fix in the constructor (thanks to A.Marin)
[u/mrichter/AliRoot.git] / EMCAL / AliCaloCalibSignal.h
index f00e96d..7c8b81f 100644 (file)
 
 #include "TString.h"
 #include "TTree.h"
-
+#include "AliEMCALGeoParams.h"
 class AliCaloRawStreamV3;
 class AliCaloAltroMapping;
 class AliRawReader;
-class AliRawEventHeaderBase;
 
 class AliCaloCalibSignal : public TObject {
   
@@ -38,20 +37,27 @@ class AliCaloCalibSignal : public TObject {
   
   AliCaloCalibSignal(kDetType detectorType = kPhos); //ctor
   virtual ~AliCaloCalibSignal(); //dtor
-
-  // copy ctor, and '=' operator, are not fully tested/debugged yet
-  AliCaloCalibSignal(const AliCaloCalibSignal &sig); // copy ctor
-  AliCaloCalibSignal& operator = (const  AliCaloCalibSignal &source); //!
   
+private:
+  //Just declare them, avoid compilation warning
+  AliCaloCalibSignal(const AliCaloCalibSignal & /*sig*/); // copy ctor
+  AliCaloCalibSignal& operator = (const  AliCaloCalibSignal &/*source*/); // assing operator
+  
+public:
   // Event processing methods:
   Bool_t ProcessEvent(AliRawReader *rawReader);
-  Bool_t ProcessEvent(AliCaloRawStreamV3 *in, AliRawEventHeaderBase *aliHeader); // added header for time info
-  Bool_t CheckFractionAboveAmp(int *AmpVal, int nTotChan); // check fraction of signals to check for LED events
+  Bool_t ProcessEvent(AliCaloRawStreamV3 *in, UInt_t Timestamp); // added header for time info
+  Bool_t CheckFractionAboveAmp(const int *AmpVal, int resultArray[]); // check fraction of signals to check for LED events
+  Bool_t CheckLEDRefAboveAmp(const int *AmpVal, int resultArray[]); // check if LED Ref is also above cut
 
   // Mapping handling
-  AliCaloAltroMapping **GetAltroMapping() { return fMapping; };
+  AliCaloAltroMapping **GetAltroMapping() const { return fMapping; };
   void  SetAltroMapping(AliCaloAltroMapping **mapp) { fMapping = mapp; };
 
+  // Parameter/cut handling
+  void SetParametersFromFile(const char *parameterFile);
+  void WriteParametersToFile(const char *parameterFile);
+
   ////////////////////////////
   //Simple getters
   // for TTree
@@ -69,7 +75,7 @@ class AliCaloCalibSignal : public TObject {
   int GetNLowGain(int towId) const { return fNLowGain[towId];};        //!
 
   // also for LED reference
-  int GetNRef(int imod, int istripMod, int igain) const //!
+  int GetNRef(const int imod, const int istripMod, const int igain) //!
     { int refId = GetRefNum(imod, istripMod, igain); return fNRef[refId];}; //!
   int GetNRef(int refId) const { return fNRef[refId];}; //!
 
@@ -81,27 +87,19 @@ class AliCaloCalibSignal : public TObject {
   int GetRows() const {return fRows;}; //The number of rows per module
   int GetLEDRefs() const {return fLEDRefs;}; //The number of LED references/monitors per module
   int GetModules() const {return fModules;}; //The number of modules
-  int GetTowerNum(int imod, int icol, int irow) const { return (imod*fColumns*fRows + icol*fRows + irow);}; // help index
 
-  int GetChannelNum(int imod, int icol, int irow, int igain) const { return (igain*fModules*fColumns*fRows + imod*fColumns*fRows + icol*fRows + irow);}; // channel number with gain included
+  int GetTowerNum(const int imod, const int icol, const int irow) const { return (imod*fColumns*fRows + icol*fRows + irow);}; // help index
 
-  Bool_t DecodeChannelNum(int chanId, int *imod, int *icol, int *irow, int *igain) const {
-    *igain = chanId/(fModules*fColumns*fRows);
-    *imod = (chanId/(fColumns*fRows)) % fModules;
-    *icol = (chanId/fRows) % fColumns;
-    *irow = chanId % fRows;
-    return kTRUE;
-  }; // return the module, column, row, and gain for a given channel number
+  int GetChannelNum(const int imod, const int icol, const int irow, const int igain) const { return (igain*fModules*fColumns*fRows + imod*fColumns*fRows + icol*fRows + irow);}; // channel number with gain included
+
+  Bool_t DecodeChannelNum(const int chanId, 
+                         int *imod, int *icol, int *irow, int *igain) const; // return the module, column, row, and gain for a given channel number
 
   // LED reference indexing
-  int GetRefNum(int imod, int istripMod, int igain) const { return (igain*fModules*fLEDRefs + imod*fLEDRefs + istripMod);}; // channel number with gain included
+  int GetRefNum(const int imod, const int istripMod, const int igain) const { return (igain*fModules*fLEDRefs + imod*fLEDRefs + istripMod);}; // channel number with gain included
 
-  Bool_t DecodeRefNum(int refId, int *imod, int *istripMod, int *igain) const {
-    *igain = refId/(fModules*fLEDRefs);
-    *imod = (refId/(fLEDRefs)) % fModules;
-    *istripMod = refId % fLEDRefs;
-    return kTRUE;
-  }; // return the module, stripModule, and gain for a given reference number
+  Bool_t DecodeRefNum(const int refId, 
+                     int *imod, int *istripMod, int *igain) const; // return the module, stripModule, and gain for a given reference number
 
   // Basic Counters
   int GetNEvents() const {return fNEvents;};
@@ -116,6 +114,11 @@ class AliCaloCalibSignal : public TObject {
   double GetReqFractionAboveAmpCutVal() const { return fReqFractionAboveAmpCutVal; }; //!
   void SetReqFractionAboveAmp(bool b) { fReqFractionAboveAmp = b; } //!
   bool GetReqFractionAboveAmp() const { return fReqFractionAboveAmp; }; //!
+  // also for LED Reference/Mon channels
+  void SetAmpCutLEDRef(double d) { fAmpCutLEDRef = d; } //!
+  double GetAmpCutLEDRef() const { return fAmpCutLEDRef; }; //!
+  void SetReqLEDRefAboveAmpCutVal(bool b) { fReqLEDRefAboveAmpCutVal = b; } //!
+  bool GetReqLEDRefAboveAmpCutVal() const { return fReqLEDRefAboveAmpCutVal; }; //!
 
   // We may select to get averaged info
   void SetUseAverage(bool b) { fUseAverage = b; } //!
@@ -169,6 +172,9 @@ class AliCaloCalibSignal : public TObject {
   double fReqFractionAboveAmpCutVal; // required fraction that should be above cut
   bool fReqFractionAboveAmp; // flag to select if we should do some event selection based on amplitudes
 
+  double fAmpCutLEDRef; // amplitude cut value for LED reference
+  bool fReqLEDRefAboveAmpCutVal; // flag to select if we should require that signal is also seen in LED Reference/Monitoring channel
+
   double fHour; // fraction of hour since beginning of run, for amp vs. time graphs, for current event
   double fLatestHour; // largest fraction of hour since beginning of run, for amp vs. time graphs
   bool fUseAverage; // flag to average graph points into over a time interval
@@ -178,25 +184,17 @@ class AliCaloCalibSignal : public TObject {
   int fNEvents; // # events processed
   int fNAcceptedEvents; // # events accepted
 
-  //Constants needed by the class
-  static const int fgkSampleMax = 1023; // highest possible sample value (10-bit = 0x3ff)
-  static const int fgkSampleMin = 0; // lowest possible sample value 
-  
+  //Constants needed by the class: EMCAL ones are kept in AliEMCALGeoParams.h
   static const int fgkPhosRows = 64; // number of rows per module for PHOS
   static const int fgkPhosCols = 56; // number of columns per module for PHOS
   static const int fgkPhosLEDRefs = 0; // no LED monitor channels for PHOS
   static const int fgkPhosModules = 5; // number of modules for PHOS
   
-  static const int fgkEmCalRows = 24; // number of rows per module for EMCAL
-  static const int fgkEmCalCols = 48; // number of columns per module for EMCAL
-  static const int fgkEmCalLEDRefs = 24; // number of LEDs (reference/monitors) per module for EMCAL; one per StripModule
-  static const int fgkEmCalModules = 12; // number of modules for EMCAL
-
   // From numbers above: PHOS has more possible towers (17920) than EMCAL (13824) 
   // so use PHOS numbers to set max. array sizes
   static const int fgkMaxTowers = 17920; // fgkPhosModules * fgkPhosCols * fgkPhosRows; 
   // for LED references; maximum from EMCAL
-  static const int fgkMaxRefs = 288; // fgkEmCalModules * fgkEmCalLEDRefs
+  static const int fgkMaxRefs = 288; // AliEMCALGeoParams::fgkEMCALModules * AliEMCALGeoParams::fgkEMCALLEDRefs
 
   static const int fgkNumSecInHr = 3600;  // number of seconds in an hour, for the fractional hour conversion on the time graph
   
@@ -211,7 +209,7 @@ class AliCaloCalibSignal : public TObject {
   int fNLowGain[fgkMaxTowers]; // same, for low gain
   int fNRef[fgkMaxRefs * 2]; // same, for LED refs; *2 for both gains
   
-  ClassDef(AliCaloCalibSignal, 3) // don't forget to change version if you change class member list..
+  ClassDef(AliCaloCalibSignal, 6) // don't forget to change version if you change class member list..
     
 };