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

/*
  Produces the data needed to calculate the quality assurance. 
  All data must be mergeable objects.

  Based on PHOS code written by
  Y. Schutz CERN July 2007
 
 Created one histogram for QA shifter;-- Yaxian Mao: 11/2009
 The idea:average counts for all the towers should be flat 
 Change all existing histograms as experts
 
 Change histograms for DQM shifter: --  Yaxian Mao 04/2010
 Calcuate the amplitude ratio from current run and the LED reference, for QAChecker use
 Also calculate the ratio of amplitude from LED Monitor system (current/Reference), to check LED system  
 
*/

// --- ROOT system ---
class TH1F ; 
class TH1I ;
class TH2F ;
class TH2 ; 
class TLine ;
class TText ;
class TProfile ;
class TObjArray ; 

// --- AliRoot header files ---
#include "AliQADataMakerRec.h"
class AliCaloRawAnalyzer;
class AliEMCALGeometry;
#include "AliCaloConstants.h"

class AliEMCALQADataMakerRec: public AliQADataMakerRec {

public:
  
  //Histograms for Raw data control
  enum HRawType_t { 
    // first normal Low Gain and High Gain info
    kNsmodLG,kNsmodHG,kTimeLG,kTimeHG,
    kNtotLG,kNtotHG,kSigHG,kSigLG,
    kPedLG,kPedHG,
    k2DRatioAmp,kRatioDist, kLEDMonRatio, kLEDMonRatioDist,
    // then TRU info
    kNsmodTRU,
    kSigTRU,kNtotTRU,
    kNL0TRU, kTimeL0TRU,
		kNL0FirstTRU, kTimeL0FirstTRU,
    // and also LED Mon info
    kNsmodLGLEDMon,kNsmodHGLEDMon,kTimeLGLEDMon,kTimeHGLEDMon,
    kSigLGLEDMon,kSigHGLEDMon,kNtotLGLEDMon,kNtotHGLEDMon,
    kPedLGLEDMon,kPedHGLEDMon,
		//and STU info
		kAmpL1, kGL1, kJL1,
		kGL1V0, kJL1V0, kSTUTRU  
  } ;

  //Histograms for RecPoints  control
  enum HRPType_t {kRecPE,kRecPM,kRecPDigM};

  //Histograms for ESDs  control
  enum HESDType_t {kESDCaloClusE,kESDCaloClusM,kESDCaloCellA,kESDCaloCellM} ;
  
public:
  
  AliEMCALQADataMakerRec(Int_t fitAlgo = Algo::kStandard) ;  // ctor
  // Default fitter is kStandard=0 (see AliCaloConstants)
  
  AliEMCALQADataMakerRec(const AliEMCALQADataMakerRec& qadm) ;   
  AliEMCALQADataMakerRec& operator = (const AliEMCALQADataMakerRec& qadm) ;
  virtual ~AliEMCALQADataMakerRec() {;} // dtor

  Int_t GetFittingAlgorithm() const {return fFittingAlgorithm;}
  void  SetFittingAlgorithm(Int_t val);
  
  AliCaloRawAnalyzer *GetRawAnalyzer()    const {return fRawAnalyzer   ;}
  AliCaloRawAnalyzer *GetRawAnalyzerTRU() const {return fRawAnalyzerTRU;}

  void SetSuperModules(int i) {fSuperModules = i;}; //The number of SuperModules
  int GetSuperModules() const {return fSuperModules;}; //The number of SuperModules

  // for pedestal calculation with raw data
  void SetFirstPedestalSample(int i)  {fFirstPedestalSample = i;}          // first sample
  int  GetFirstPedestalSample() const {return fFirstPedestalSample;}       // first sample
  void SetLastPedestalSample(int i)   {fLastPedestalSample = i;}           // last sample
  int  GetLastPedestalSample() const  {return fLastPedestalSample;}        // last sample
  
  void SetFirstPedestalSampleTRU(int i)  {fFirstPedestalSampleTRU = i;}    // first sample, TRU
  int  GetFirstPedestalSampleTRU() const {return fFirstPedestalSampleTRU;} // first sample, TRU
  void SetLastPedestalSampleTRU(int i)   {fLastPedestalSampleTRU = i;}     // last sample, TRU
  int  GetLastPedestalSampleTRU() const  {return fLastPedestalSampleTRU;}  // last sample, TRU
  
  // for selection of interesting signal (max-min) range 
  // Low Gain channels
  void SetMinSignalLG(int i)  {fMinSignalLG = i;}
  int  GetMinSignalLG() const {return fMinSignalLG;}
  void SetMaxSignalLG(int i)  {fMaxSignalLG = i;}
  int  GetMaxSignalLG() const {return fMaxSignalLG;}
  
  // High Gain channels
  void SetMinSignalHG(int i)  {fMinSignalHG = i;}
  int  GetMinSignalHG() const {return fMinSignalHG;}
  void SetMaxSignalHG(int i)  {fMaxSignalHG = i;}
  int  GetMaxSignalHG() const {return fMaxSignalHG;}
  
  // TRU channels
  void SetMinSignalTRU(int i) {fMinSignalTRU = i;}
  int GetMinSignalTRU() const {return fMinSignalTRU;}
  void SetMaxSignalTRU(int i) {fMaxSignalTRU = i;}
  int GetMaxSignalTRU() const {return fMaxSignalTRU;}
  
  // LEDMon channels
  void SetMinSignalLGLEDMon(int i) {fMinSignalLGLEDMon = i;}
  int GetMinSignalLGLEDMon() const {return fMinSignalLGLEDMon;}
  void SetMaxSignalLGLEDMon(int i) {fMaxSignalLGLEDMon = i;}
  int GetMaxSignalLGLEDMon() const {return fMaxSignalLGLEDMon;}
  void SetMinSignalHGLEDMon(int i) {fMinSignalHGLEDMon = i;}
  int GetMinSignalHGLEDMon() const {return fMinSignalHGLEDMon;}
  void SetMaxSignalHGLEDMon(int i) {fMaxSignalHGLEDMon = i;}
  int GetMaxSignalHGLEDMon() const {return fMaxSignalHGLEDMon;}

  virtual void   EndOfDetectorCycle(AliQAv1::TASKINDEX_t, TObjArray ** list) ;
  void           GetCalibRefFromOCDB() ;
  void		       GetTruChannelPosition( Int_t &globRow, Int_t &globColumn, Int_t module, Int_t ddl, Int_t branch, Int_t column ) const;
  virtual void   InitESDs() ; 
  virtual void   InitDigits() ; 
  virtual void   InitRecPoints() ; 
  virtual void   InitRaws() ; 
  virtual void   MakeESDs(AliESDEvent * esd) ;
  virtual void   MakeDigits() ;
  virtual void   MakeDigits(TTree * digTree) ; 
  virtual void   MakeRecPoints(TTree * recpoTree) ; 
  virtual void   MakeRaws(AliRawReader* rawReader) ;
  virtual void	 MakeRawsSTU(AliRawReader* rawReader);
  virtual void   StartOfDetectorCycle() ; 

private:
  
  void ConvertProfile2H(TProfile * p, TH2 * histo) ; //change the profile plot to a 2D histogram
  
  Int_t fFittingAlgorithm;              // select the fitting algorithm, only used in copy ctor ...

  AliCaloRawAnalyzer *fRawAnalyzer;     // for signal fitting
  AliCaloRawAnalyzer *fRawAnalyzerTRU;  // for TRU signal fitting
  AliEMCALGeometry   *fGeom;            // EMCAL geometry, needed for STU decoding

  int fSuperModules;           // The number of SuperModules activated
  int fFirstPedestalSample;    // first sample for pedestal calculation, in bunch
  int fLastPedestalSample;     // last sample for pedestal calculation, in bunch
  int fFirstPedestalSampleTRU; // first sample for pedestal calculation, in bunch
  int fLastPedestalSampleTRU;  // last sample for pedestal calculation, in bunch
  
  int fMinSignalLG;       // minimum signal, for Low Gain channels
  int fMaxSignalLG;       // maximum signal, for Low Gain channels
  int fMinSignalHG;       // minimum signal, for High Gain channels
  int fMaxSignalHG;       // maximum signal, for High Gain channels
  int fMinSignalTRU;      // minimum signal, for TRU channels
  int fMaxSignalTRU;      // maximum signal, for TRU channels
  int fMinSignalLGLEDMon; // minimum signal, for LEDMon channels, low gain
  int fMaxSignalLGLEDMon; // maximum signal, for LEDMon channels, low gain
  int fMinSignalHGLEDMon; // minimum signal, for LEDMon channels, high gain
  int fMaxSignalHGLEDMon; // maximum signal, for LEDMon channels, high gain

  TProfile * fCalibRefHistoPro ; // Profile reference histogram from LED run
  TH2F     * fCalibRefHistoH2F ; // H2F reference histogram from LED run
  TProfile * fLEDMonRefHistoPro; // Profile reference histogram from LED monitor
  TH2F     * fHighEmcHistoH2F  ; // H2F reference histogram from LED run
  
//  TText **    fTextSM        ; //! Text info for each SM  
//  TLine *     fLineCol       ; //! line to distinguish the different SM side: A side and C side
//  TLine *     fLineRow       ; //! line to distinguish the different SM sector 0 and 1 

  ClassDef(AliEMCALQADataMakerRec,6)  // description

};

#endif // AliEMCALQADATAMAKERREC_H
 AliEMCALQADataMakerRec.h:1
 AliEMCALQADataMakerRec.h:2
 AliEMCALQADataMakerRec.h:3
 AliEMCALQADataMakerRec.h:4
 AliEMCALQADataMakerRec.h:5
 AliEMCALQADataMakerRec.h:6
 AliEMCALQADataMakerRec.h:7
 AliEMCALQADataMakerRec.h:8
 AliEMCALQADataMakerRec.h:9
 AliEMCALQADataMakerRec.h:10
 AliEMCALQADataMakerRec.h:11
 AliEMCALQADataMakerRec.h:12
 AliEMCALQADataMakerRec.h:13
 AliEMCALQADataMakerRec.h:14
 AliEMCALQADataMakerRec.h:15
 AliEMCALQADataMakerRec.h:16
 AliEMCALQADataMakerRec.h:17
 AliEMCALQADataMakerRec.h:18
 AliEMCALQADataMakerRec.h:19
 AliEMCALQADataMakerRec.h:20
 AliEMCALQADataMakerRec.h:21
 AliEMCALQADataMakerRec.h:22
 AliEMCALQADataMakerRec.h:23
 AliEMCALQADataMakerRec.h:24
 AliEMCALQADataMakerRec.h:25
 AliEMCALQADataMakerRec.h:26
 AliEMCALQADataMakerRec.h:27
 AliEMCALQADataMakerRec.h:28
 AliEMCALQADataMakerRec.h:29
 AliEMCALQADataMakerRec.h:30
 AliEMCALQADataMakerRec.h:31
 AliEMCALQADataMakerRec.h:32
 AliEMCALQADataMakerRec.h:33
 AliEMCALQADataMakerRec.h:34
 AliEMCALQADataMakerRec.h:35
 AliEMCALQADataMakerRec.h:36
 AliEMCALQADataMakerRec.h:37
 AliEMCALQADataMakerRec.h:38
 AliEMCALQADataMakerRec.h:39
 AliEMCALQADataMakerRec.h:40
 AliEMCALQADataMakerRec.h:41
 AliEMCALQADataMakerRec.h:42
 AliEMCALQADataMakerRec.h:43
 AliEMCALQADataMakerRec.h:44
 AliEMCALQADataMakerRec.h:45
 AliEMCALQADataMakerRec.h:46
 AliEMCALQADataMakerRec.h:47
 AliEMCALQADataMakerRec.h:48
 AliEMCALQADataMakerRec.h:49
 AliEMCALQADataMakerRec.h:50
 AliEMCALQADataMakerRec.h:51
 AliEMCALQADataMakerRec.h:52
 AliEMCALQADataMakerRec.h:53
 AliEMCALQADataMakerRec.h:54
 AliEMCALQADataMakerRec.h:55
 AliEMCALQADataMakerRec.h:56
 AliEMCALQADataMakerRec.h:57
 AliEMCALQADataMakerRec.h:58
 AliEMCALQADataMakerRec.h:59
 AliEMCALQADataMakerRec.h:60
 AliEMCALQADataMakerRec.h:61
 AliEMCALQADataMakerRec.h:62
 AliEMCALQADataMakerRec.h:63
 AliEMCALQADataMakerRec.h:64
 AliEMCALQADataMakerRec.h:65
 AliEMCALQADataMakerRec.h:66
 AliEMCALQADataMakerRec.h:67
 AliEMCALQADataMakerRec.h:68
 AliEMCALQADataMakerRec.h:69
 AliEMCALQADataMakerRec.h:70
 AliEMCALQADataMakerRec.h:71
 AliEMCALQADataMakerRec.h:72
 AliEMCALQADataMakerRec.h:73
 AliEMCALQADataMakerRec.h:74
 AliEMCALQADataMakerRec.h:75
 AliEMCALQADataMakerRec.h:76
 AliEMCALQADataMakerRec.h:77
 AliEMCALQADataMakerRec.h:78
 AliEMCALQADataMakerRec.h:79
 AliEMCALQADataMakerRec.h:80
 AliEMCALQADataMakerRec.h:81
 AliEMCALQADataMakerRec.h:82
 AliEMCALQADataMakerRec.h:83
 AliEMCALQADataMakerRec.h:84
 AliEMCALQADataMakerRec.h:85
 AliEMCALQADataMakerRec.h:86
 AliEMCALQADataMakerRec.h:87
 AliEMCALQADataMakerRec.h:88
 AliEMCALQADataMakerRec.h:89
 AliEMCALQADataMakerRec.h:90
 AliEMCALQADataMakerRec.h:91
 AliEMCALQADataMakerRec.h:92
 AliEMCALQADataMakerRec.h:93
 AliEMCALQADataMakerRec.h:94
 AliEMCALQADataMakerRec.h:95
 AliEMCALQADataMakerRec.h:96
 AliEMCALQADataMakerRec.h:97
 AliEMCALQADataMakerRec.h:98
 AliEMCALQADataMakerRec.h:99
 AliEMCALQADataMakerRec.h:100
 AliEMCALQADataMakerRec.h:101
 AliEMCALQADataMakerRec.h:102
 AliEMCALQADataMakerRec.h:103
 AliEMCALQADataMakerRec.h:104
 AliEMCALQADataMakerRec.h:105
 AliEMCALQADataMakerRec.h:106
 AliEMCALQADataMakerRec.h:107
 AliEMCALQADataMakerRec.h:108
 AliEMCALQADataMakerRec.h:109
 AliEMCALQADataMakerRec.h:110
 AliEMCALQADataMakerRec.h:111
 AliEMCALQADataMakerRec.h:112
 AliEMCALQADataMakerRec.h:113
 AliEMCALQADataMakerRec.h:114
 AliEMCALQADataMakerRec.h:115
 AliEMCALQADataMakerRec.h:116
 AliEMCALQADataMakerRec.h:117
 AliEMCALQADataMakerRec.h:118
 AliEMCALQADataMakerRec.h:119
 AliEMCALQADataMakerRec.h:120
 AliEMCALQADataMakerRec.h:121
 AliEMCALQADataMakerRec.h:122
 AliEMCALQADataMakerRec.h:123
 AliEMCALQADataMakerRec.h:124
 AliEMCALQADataMakerRec.h:125
 AliEMCALQADataMakerRec.h:126
 AliEMCALQADataMakerRec.h:127
 AliEMCALQADataMakerRec.h:128
 AliEMCALQADataMakerRec.h:129
 AliEMCALQADataMakerRec.h:130
 AliEMCALQADataMakerRec.h:131
 AliEMCALQADataMakerRec.h:132
 AliEMCALQADataMakerRec.h:133
 AliEMCALQADataMakerRec.h:134
 AliEMCALQADataMakerRec.h:135
 AliEMCALQADataMakerRec.h:136
 AliEMCALQADataMakerRec.h:137
 AliEMCALQADataMakerRec.h:138
 AliEMCALQADataMakerRec.h:139
 AliEMCALQADataMakerRec.h:140
 AliEMCALQADataMakerRec.h:141
 AliEMCALQADataMakerRec.h:142
 AliEMCALQADataMakerRec.h:143
 AliEMCALQADataMakerRec.h:144
 AliEMCALQADataMakerRec.h:145
 AliEMCALQADataMakerRec.h:146
 AliEMCALQADataMakerRec.h:147
 AliEMCALQADataMakerRec.h:148
 AliEMCALQADataMakerRec.h:149
 AliEMCALQADataMakerRec.h:150
 AliEMCALQADataMakerRec.h:151
 AliEMCALQADataMakerRec.h:152
 AliEMCALQADataMakerRec.h:153
 AliEMCALQADataMakerRec.h:154
 AliEMCALQADataMakerRec.h:155
 AliEMCALQADataMakerRec.h:156
 AliEMCALQADataMakerRec.h:157
 AliEMCALQADataMakerRec.h:158
 AliEMCALQADataMakerRec.h:159
 AliEMCALQADataMakerRec.h:160
 AliEMCALQADataMakerRec.h:161
 AliEMCALQADataMakerRec.h:162
 AliEMCALQADataMakerRec.h:163
 AliEMCALQADataMakerRec.h:164
 AliEMCALQADataMakerRec.h:165
 AliEMCALQADataMakerRec.h:166
 AliEMCALQADataMakerRec.h:167
 AliEMCALQADataMakerRec.h:168
 AliEMCALQADataMakerRec.h:169
 AliEMCALQADataMakerRec.h:170
 AliEMCALQADataMakerRec.h:171
 AliEMCALQADataMakerRec.h:172
 AliEMCALQADataMakerRec.h:173
 AliEMCALQADataMakerRec.h:174
 AliEMCALQADataMakerRec.h:175
 AliEMCALQADataMakerRec.h:176
 AliEMCALQADataMakerRec.h:177
 AliEMCALQADataMakerRec.h:178
 AliEMCALQADataMakerRec.h:179
 AliEMCALQADataMakerRec.h:180
 AliEMCALQADataMakerRec.h:181
 AliEMCALQADataMakerRec.h:182
 AliEMCALQADataMakerRec.h:183