LCOV - code coverage report
Current view: top level - EMCAL/EMCALbase - AliCaloCalibPedestal.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 61 4.9 %
Date: 2016-06-14 17:26:59 Functions: 4 65 6.2 %

          Line data    Source code
       1             : #ifndef ALICALOCALIBPEDESTAL_H
       2             : #define ALICALOCALIBPEDESTAL_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : /* $Id$ */
       8             : 
       9             : 
      10             : // \file AliCaloCalibPedestal.h
      11             : //   \brief Description:
      12             : //   A help class for monitoring and calibration tools: MOOD, AMORE etc.,
      13             : //   that can process events from a standard AliCaloRawStreamV3,
      14             : //   most usually from LED/pulser runs. It stores signal info as
      15             : //   typical (highest) amplitude, and pedestal info in geometrically-binned
      16             : //   2D profiles of the detectors (EMCAL and PHOS).
      17             : //   Comparisons (ratios and differences) can be done with references.
      18             : 
      19             : //   \author: Timo Alho (Jyvaskyla), original version. 
      20             : //   [Consultant: D. Silvermyr (ORNL)]
      21             : //   Partly based on AliTPCCalibPedestal.
      22             : //   
      23             : //   \version $Revision$
      24             : //   \date $Date$
      25             : 
      26             : #include "TProfile.h"
      27             : #include "TProfile2D.h"
      28             : #include "TH2.h"
      29             : #include "TObjArray.h"
      30             : #include "AliEMCALGeoParams.h"
      31             : class AliCaloRawStreamV3;
      32             : class AliCaloAltroMapping;
      33             : class AliRawReader;
      34             : 
      35             : class AliCaloCalibPedestal : public TObject {
      36             :   
      37             :  public:
      38             : 
      39             :   enum kDetType {kPhos, kEmCal, kNone};//The detector types
      40             :   enum kDeadMapEntry{kAlive = 0, kDead, kHot, kWarning, kResurrected, kRecentlyDeceased, kNumDeadMapStates};//The entries being put to the deadmap
      41             :   
      42             :   AliCaloCalibPedestal(kDetType detectorType = kPhos);
      43             :   virtual ~AliCaloCalibPedestal();
      44             : 
      45             :   // copy ctor, and '=' operator, are not fully tested/debugged yet
      46             :   // at least for now; the reference info is not copied from one to the other
      47             :   AliCaloCalibPedestal(AliCaloCalibPedestal &ped); 
      48             :   AliCaloCalibPedestal& operator = (AliCaloCalibPedestal &source);
      49             :   
      50             :   // Event processing methods:  
      51             :   Bool_t ProcessEvent(AliRawReader *rawReader);
      52             :   Bool_t ProcessEvent(AliCaloRawStreamV3    *in);
      53             :   
      54             :   // Mapping handling
      55           0 :   AliCaloAltroMapping **GetAltroMapping() const { return fMapping; };
      56           0 :   void  SetAltroMapping(AliCaloAltroMapping **mapp) { fMapping = mapp; };
      57             : 
      58             :   // Parameter/cut handling
      59             :   void SetParametersFromFile(const char *parameterFile);
      60             :   void WriteParametersToFile(const char *parameterFile);
      61             : 
      62             :   ////////////////////////////
      63             :   //Simple getters
      64             :   // Main profiles:
      65           0 :   TProfile2D * GetPedProfileLowGain(int i) {ValidateProfiles(); return (TProfile2D*)fPedestalLowGain[i];};      // Return a pointer to the low-gain pedestal profile
      66           0 :   TProfile2D * GetPedProfileHighGain(int i) {ValidateProfiles(); return (TProfile2D*)fPedestalHighGain[i];};    // Return a pointer to the high-gain pedestal profile
      67           0 :   TProfile * GetPedLEDRefProfileLowGain(int i) {ValidateProfiles(); return (TProfile*)fPedestalLEDRefLowGain[i];};      // Return a pointer to the low-gain LEDRef profile 
      68           0 :   TProfile * GetPedLEDRefProfileHighGain(int i) {ValidateProfiles(); return (TProfile*)fPedestalLEDRefHighGain[i];};    // Return a pointer to the high-gain LEDRef profile 
      69           0 :   TProfile2D * GetPeakProfileLowGain(int i) {ValidateProfiles(); return (TProfile2D*)fPeakMinusPedLowGain[i];}; // Return a pointer to the low-gain peak-pedestal profile
      70           0 :   TProfile2D * GetPeakProfileHighGain(int i) {ValidateProfiles(); return (TProfile2D*)fPeakMinusPedHighGain[i];};       // Return a pointer to the high-gain peak-pedestal profile
      71             :   
      72             :   // Differences to references:
      73           0 :   TProfile2D * GetPedProfileLowGainDiff(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPedestalLowGainDiff[i];};     // Return a pointer to the low-gain pedestal profile difference
      74           0 :   TProfile2D * GetPedProfileHighGainDiff(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPedestalHighGainDiff[i];};   // Return a pointer to the high-gain pedestal profile difference
      75           0 :   TProfile * GetPedLEDRefProfileLowGainDiff(int i) {ValidateComparisonProfiles(); return (TProfile*)fPedestalLEDRefLowGainDiff[i];};    // Return a pointer to the low-gain LEDRef profile difference
      76           0 :   TProfile * GetPedLEDRefProfileHighGainDiff(int i) {ValidateComparisonProfiles(); return (TProfile*)fPedestalLEDRefHighGainDiff[i];};  // Return a pointer to the high-gain LEDRef profile difference 
      77           0 :   TProfile2D * GetPeakProfileLowGainDiff(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPeakMinusPedLowGainDiff[i];};        // Return a pointer to the low-gain peak-pedestal profile difference
      78           0 :   TProfile2D * GetPeakProfileHighGainDiff(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPeakMinusPedHighGainDiff[i];};      // Return a pointer to the high-gain peak-pedestal profile difference
      79             :   
      80             :   // Ratio to references:
      81           0 :   TProfile2D * GetPedProfileLowGainRatio(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPedestalLowGainRatio[i];};   // Return a pointer to the low-gain pedestal profile ratio
      82           0 :   TProfile2D * GetPedProfileHighGainRatio(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPedestalHighGainRatio[i];}; // Return a pointer to the high-gain pedestal profile ratio
      83           0 :   TProfile * GetPedLEDRefProfileLowGainRatio(int i) {ValidateComparisonProfiles(); return (TProfile*)fPedestalLEDRefLowGainRatio[i];};  // Return a pointer to the low-gain LEDRef profile ratio
      84           0 :   TProfile * GetPedLEDRefProfileHighGainRatio(int i) {ValidateComparisonProfiles(); return (TProfile*)fPedestalLEDRefHighGainRatio[i];};        // Return a pointer to the high-gain LEDRef profile ratio 
      85           0 :   TProfile2D * GetPeakProfileLowGainRatio(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPeakMinusPedLowGainRatio[i];};      // Return a pointer to the low-gain peak-pedestal profile ratio
      86           0 :   TProfile2D * GetPeakProfileHighGainRatio(int i){ValidateComparisonProfiles(); return (TProfile2D*)fPeakMinusPedHighGainRatio[i];};    // Return a pointer to the high-gain peak-pedestal profile ratio
      87             :   
      88           0 :   TH2F * GetPeakHighGainHisto(int i) {ValidateProfiles(); return (TH2F*)fPeakMinusPedHighGainHisto[i];};        // Return a pointer to the high-gain peak-pedestal histo
      89             : 
      90             : 
      91        1104 :   TH2D * GetDeadMap(int i) {ValidateProfiles(); return (TH2D*)fDeadMap[i];}
      92             :   //void SetDeadMap(int i, TH2D *h) const {((TH2D*)fDeadMap[i])=h;}
      93             :         
      94             :   Bool_t IsBadChannel(int imod, int icol, int irow) const; 
      95             :   void  SetChannelStatus(int imod, int icol, int irow, int status); 
      96           0 :   Int_t GetChannelStatus(int imod, int icol, int irow) const { return  (Int_t)((TH2D*)fDeadMap[imod])->GetBinContent(icol, irow);    }
      97             :         
      98           0 :   TObjArray GetDeadMap()  {ValidateProfiles(); return fDeadMap;}
      99           0 :   void SetDeadMap(TObjArray map) {fDeadMap = map;}
     100             :         
     101             :   // Basic info: getters  
     102           0 :   kDetType GetDetectorType() const {return fDetType;};//Returns if this is a PHOS or EMCAL object
     103           0 :   TString GetCaloString() const {return fCaloString;}; //Returns if this is a PHOS or EMCAL object
     104             :   
     105           0 :   int GetColumns() const {return fColumns;}; //The number of columns per module
     106           0 :   int GetRows() const {return fRows;}; //The number of rows per module
     107           0 :   int GetLEDRefs() const {return fLEDRefs;}; //The number of LED references/monitors per module
     108           0 :   int GetModules() const {return fModules;}; //The number of modules
     109           0 :   int GetRowMin() const {return fRowMin;}; //for histo def.
     110           0 :   int GetRowMax() const {return fRowMax;}; //for histo def.
     111           0 :   int GetRowMultiplier() const {return fRowMultiplier;}; //for histo filling
     112             : 
     113             :   // RunNumbers : setters and getters
     114           0 :   void SetRunNumber(int runNo) {fRunNumber = runNo;};
     115           0 :   int GetRunNumber() const {return fRunNumber;};
     116           0 :   int GetRefRunNumber() const {if (fReference) return fReference->GetRunNumber(); else return -1;};
     117             : 
     118             :   // Possibility to select only some samples for the pedestal calculation
     119           0 :   void SetSelectPedestalSamples(Bool_t flag = kFALSE) {fSelectPedestalSamples = flag;} // select to to use only some range of samples for pedestal calc.
     120           0 :   Bool_t GetSelectPedestalSamples() const {return fSelectPedestalSamples;} // select to to use only some range of samples for pedestal calc.
     121           0 :   void SetFirstPedestalSample(int i) {fFirstPedestalSample = i;} // first sample to use
     122           0 :   void SetLastPedestalSample(int i) {fLastPedestalSample = i;} // last sample to use
     123           0 :   int GetFirstPedestalSample() const {return fFirstPedestalSample;}; // first sample to use
     124           0 :   int GetLastPedestalSample() const {return fLastPedestalSample;}; // last sample to use
     125             : 
     126             :   //Set threshold/event fraction for tower warnings
     127           0 :   void SetDeadThreshold(int i) {fDeadThreshold = i;} // peak - pedestal dead threshold
     128           0 :   void SetWarningThreshold(int i) {fWarningThreshold = i;} // peak - pedestal warning threshold
     129           0 :   void SetWarningFraction(double d) {fWarningFraction = d;} // event fraction for warnings
     130           0 :   int GetDeadThreshold() const {return fDeadThreshold;}; // peak - pedestal dead threshold
     131           0 :   int GetWarningThreshold() const {return fWarningThreshold;}; // peak - pedestal warning threshold
     132           0 :   double GetWarningFraction() const {return fWarningFraction;}; // event fraction for warnings
     133             :   // hot towers
     134           0 :   void SetHotSigma(double d) {fHotSigma = d;} // rms away from normal
     135           0 :   double GetHotSigma() const {return fHotSigma;}; // rms away from normal
     136             : 
     137             :   // Basic counters
     138           0 :   int GetNEvents() const {return fNEvents;};
     139           0 :   int GetNChanFills() const {return fNChanFills;};
     140             :   
     141             :   /////////////////////////////
     142             :   //Analysis functions
     143           0 :   void SetDeadTowerCount(Int_t dead)  {fDeadTowers = dead;};//Returns the number of dead towers, by counting the bins in peak-pedestal smaller than threshold
     144          66 :   int GetDeadTowerCount() const {return fDeadTowers;};//Returns the number of dead towers, by counting the bins in peak-pedestal smaller than threshold
     145           0 :   double GetDeadTowerRatio() const {return fDeadTowers/(double)(fRows*fColumns);}; //returns the percentage of dead towers, relative to a full module
     146           0 :   int GetDeadTowerNew() const {return fNewDeadTowers;}; //return the new dead towers compared to the reference
     147           0 :   int GetDeadTowerResurrected() const {return fResurrectedTowers;}; //The the towers resurrected since the reference run
     148             : 
     149             :   void Reset();//Resets the whole class.
     150             :   Bool_t AddInfo(AliCaloCalibPedestal *ped);//picks up new info from supplied argument
     151             :   
     152             :   //////////////////////////////////////////////////////
     153             :   //Functions related to comparing this with another (reference) run.
     154             :   Bool_t LoadReferenceCalib(TString fileName, TString objectName); //Loads another AliCaloCalibPedestal by name "objectName" from the file "fileName", for reference
     155             :   void ComputeDiffAndRatio();//Actually computes the difference and ratio into the histo's in memory
     156           0 :   AliCaloCalibPedestal * GetReference() const {return fReference;}; //Get the reference object. Needed for debug, will probably be removed later
     157             :   Bool_t SetReference(AliCaloCalibPedestal *ref);
     158             :   void ComputeDeadTowers(const char * deadMapFile = 0);//Computes the dead tower values
     159             :   void ComputeHotAndWarningTowers(const char * hotMapFile = 0);//Computes the hot tower values
     160             : 
     161             :   //Saving functions
     162             :   Bool_t SaveHistograms(TString fileName, Bool_t saveEmptyHistos = kFALSE); //Saves the histograms to a .root file
     163             : 
     164           0 :   void Init() { ValidateProfiles(); } // do basic setup
     165             : 
     166             :  private:
     167             :   
     168             :   void ValidateProfiles(); //Makes sure that basic histos/profiles exist
     169             :   void CompressAndSetOwner(); //Makes sure that basic histos/profiles exist
     170             :   void ValidateComparisonProfiles(); //Makes sure that fPe..Diff and fPe..Ratio profiles exist
     171             :   
     172             :   //The histograms. We use a TObjArray instead of a simple array,because this gives automatic streaming properties for the
     173             :   //class. A TClonesArray would be more efficient, but it's a bit more difficult to use and it doesn't matter too much
     174             :   //since we have only one object per module in the array anyway.
     175             :   TObjArray fPedestalLowGain; // pedestal info for low gain
     176             :   TObjArray fPedestalHighGain; // pedestal info for high gain
     177             :   TObjArray fPedestalLEDRefLowGain; // pedestal LEDRef info for low gain
     178             :   TObjArray fPedestalLEDRefHighGain; // pedestal LEDRef info for high gain
     179             :   TObjArray fPeakMinusPedLowGain; // (peak-pedestal) info for low gain
     180             :   TObjArray fPeakMinusPedHighGain; // (peak-pedestal) info for high gain
     181             : 
     182             :   TObjArray fPeakMinusPedHighGainHisto; // (peak-pedestal TH2F) info for high gain, used for hot towers eveluation
     183             :   
     184             :   //The difference of profiles between this and the reference object
     185             :   TObjArray fPedestalLowGainDiff; //!
     186             :   TObjArray fPedestalHighGainDiff; //!
     187             :   TObjArray fPedestalLEDRefLowGainDiff; //!
     188             :   TObjArray fPedestalLEDRefHighGainDiff; //! 
     189             :   TObjArray fPeakMinusPedLowGainDiff; //!
     190             :   TObjArray fPeakMinusPedHighGainDiff; //!
     191             :   
     192             :   //The ratio of profiles between this and the reference object
     193             :   TObjArray fPedestalLowGainRatio; //!
     194             :   TObjArray fPedestalHighGainRatio; //!
     195             :   TObjArray fPedestalLEDRefLowGainRatio; //!
     196             :   TObjArray fPedestalLEDRefHighGainRatio; //! 
     197             :   TObjArray fPeakMinusPedLowGainRatio; //!
     198             :   TObjArray fPeakMinusPedHighGainRatio; //!
     199             :   
     200             :   TObjArray fDeadMap;//The deadmap
     201             : 
     202             :   // status counters
     203             :   int fNEvents; //# total events processed, 
     204             :   int fNChanFills; //# total channel fills (NChan * NEvents if not zero-suppressed)
     205             : 
     206             :   //The dead tower counts
     207             :   int fDeadTowers; // Number of towers found dead.
     208             :   int fNewDeadTowers; //! Towers that have died since the reference run
     209             :   int fResurrectedTowers; //! Towers that have been resurrected from the dead, compared to the reference
     210             :   
     211             :   AliCaloCalibPedestal * fReference; //! A reference object, for comparing the accumulated results to a previous run
     212             :   
     213             :   kDetType fDetType; //The detector type for this object
     214             :   int fColumns; //The number of columns per module
     215             :   int fRows;    //The number of rows per module
     216             :   int fLEDRefs; //The number of LED references/monitors per module
     217             :   int fModules; //The number of modules
     218             :   int fRowMin; // Minimum Row number
     219             :   int fRowMax; // Maximum now number
     220             :   int fRowMultiplier; // Multiplication factor to get proper row range between PHOS and EMCAL
     221             :   TString fCaloString; // id for which detector type we have 
     222             :   AliCaloAltroMapping **fMapping;    //! Altro Mapping object
     223             :   int fRunNumber; //The run number. Needs to be set by the user.
     224             :   Bool_t fSelectPedestalSamples; // select to to use only some range of samples for pedestal calc.
     225             :   int fFirstPedestalSample; // first sample to use
     226             :   int fLastPedestalSample; // last sample to use
     227             : 
     228             :   int fDeadThreshold; // Peak - ped threshold used for dead towers evaluation
     229             :   int fWarningThreshold; // Peak - ped threshold used for warm/warning towers evaluation
     230             :   double fWarningFraction; //if(Peak - ped) > threshold in more than this fraction of event -> tower is assigned kWarning
     231             :   double fHotSigma; // if pedestal rms more than fHotSigma away from normal -> tower is assigned kHot
     232             : 
     233             :   //Constants needed by the class: EMCAL ones are kept in AliEMCALGeoParams.h
     234             :   static const int fgkPhosRows = 64; // number of rows per module for PHOS
     235             :   static const int fgkPhosCols = 56; // number of columns per module for PHOS
     236             :   static const int fgkPhosLEDRefs = 1; // no LED monitor channels for PHOS, set to 1 just to keep code simpler (also create LEDRef histos for PHOS)
     237             :   static const int fgkPhosModules = 5; // number of modules for PHOS
     238             : 
     239          66 :   ClassDef(AliCaloCalibPedestal, 8)
     240             : 
     241             : };
     242             :     
     243             : #endif

Generated by: LCOV version 1.11