ROOT logo
#ifndef ALIEMCALCALIBTIMEDEP_H
#define ALIEMCALCALIBTIMEDEP_H

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

/* $Id: AliEMCALCalibTimeDep.h $ */

/////////////////////////////////////////////////
// class for EMCAL time-dependence calibration //
/////////////////////////////////////////////////

#include "TObject.h"

class AliEMCALSensorTempArray;
class AliCaloCalibSignal;
class AliEMCALCalibTempCoeff;
class AliEMCALCalibReference; 
class AliEMCALCalibTimeDepCorrection; 

class AliEMCALCalibTimeDep : public TObject {

 public:
  AliEMCALCalibTimeDep(); //! ctor
  AliEMCALCalibTimeDep(const AliEMCALCalibTimeDep &calibt); //! copy ctor
  AliEMCALCalibTimeDep& operator= (const AliEMCALCalibTimeDep &calibt); //! 
  virtual ~AliEMCALCalibTimeDep(); //! dtor
  virtual void PrintInfo() const; 

  void Initialize(Int_t run, UInt_t startTime, UInt_t endTime);//!

  // simple getters
  Int_t GetRunNumber() const { return fRun; } // 
  UInt_t GetStartTime() const { return fStartTime; } // 
  UInt_t GetEndTime() const { return fEndTime; } //  
  Double_t GetLengthOfRunInHours() const; // 
  Double_t GetLengthOfRunInBins() const; // 

  // Temperature Section
  // access pointer to the basic temperature object: AliEMCALSensorTempArray 
  AliEMCALSensorTempArray  * GetTempArray() const { return fTempArray; } // temperature array

  // range of temperature readings/values during the run 
  Int_t ScanTemperatureInfo(); // go through the temperature info
  Double_t GetMinTemp() const { return fMinTemp; } //  
  Double_t GetMaxTemp() const { return fMaxTemp; } // 
  Double_t GetMinTempVariation() const { return fMinTempVariation; } //  
  Double_t GetMaxTempVariation() const { return fMaxTempVariation; } // 
  Double_t GetMinTempValid() const { return fMinTempValid; } //  
  Double_t GetMaxTempValid() const { return fMaxTempValid; } // 
  UInt_t GetMinTime() const { return fMinTime; } // 
  UInt_t GetMaxTime() const { return fMaxTime; } // 
  Double_t GetRangeOfTempMeasureInHours() const; //! 
  Double_t GetRangeOfTempMeasureInDegrees() const; //! 

  // basic calibration info
  Double_t GetTemperatureSM(int imod, UInt_t timeStamp) const; // for all sensors, in a SuperModule
  // End of Temperature Section

  // control parameters
  void SetTemperatureResolution(Double_t d) { fTemperatureResolution = d; } // value for checking at which level we care about temperature differences
  void SetMaxTemperatureDiff(Double_t d) { fMaxTemperatureDiff = d; } 
  void SetTimeBinsPerHour(Int_t i) { fTimeBinsPerHour = i; } // size of the time-bins we use for corrections
  Double_t GetTemperatureResolution() const { return fTemperatureResolution; } // value for checking at which level we care about temperature differences
  Double_t GetMaxTemperatureDiff() const { return fMaxTemperatureDiff; }
  Int_t GetTimeBinsPerHour() const { return fTimeBinsPerHour; } // size of the time-bins we use foc corrections

  void SetHighLowGainFactor(Double_t value) {fHighLowGainFactor = value;}
  Double_t GetHighLowGainFactor() const {return fHighLowGainFactor;}

  // access to other pointers
  AliCaloCalibSignal  * GetCalibSignal() const { return fCalibSignal; } //
  AliEMCALCalibTempCoeff  * GetCalibTempCoeff() const { return fCalibTempCoeff; } //
  AliEMCALCalibReference  * GetCalibReference() const { return fCalibReference; } //

  // storage and access of the correction info
  Int_t CalcCorrection(); //
  AliEMCALCalibTimeDepCorrection  * GetCalibTimeDepCorrection() 
    const { return fCalibTimeDepCorrection; } //

  Double_t GetTempCoeff(Double_t IDark, Double_t M) const; //

  // for local debugging: setters of the main input pointers that are normally from OCDB
  void SetTempArray(AliEMCALSensorTempArray  *arr) { fTempArray = arr; } // 
  void SetCalibSignal(AliCaloCalibSignal  *obj) { fCalibSignal = obj; } // 
  void SetCalibTempCoeff(AliEMCALCalibTempCoeff  *obj) { fCalibTempCoeff = obj; } //
  void SetCalibReference(AliEMCALCalibReference  *obj) { fCalibReference = obj; } //
  // basic setters, also for local debugging
  void SetRunNumber(Int_t i) { fRun= i; } // 
  void SetStartTime(UInt_t ui) { fStartTime = ui; } // 
  void SetEndTime(UInt_t ui) { fEndTime = ui; } //  

  void SetMinTempValid(Double_t d) { fMinTempValid = d; } //  
  void SetMaxTempValid(Double_t d) { fMaxTempValid = d; } // 

  Int_t GetVerbosity() const { return fVerbosity; } // debug flag 
  void SetVerbosity(Int_t i) { fVerbosity= i; } // debug flag 

 private:

  void Reset(); //

  void GetTemperatureInfo(); // pick up Preprocessor output
  void GetCalibSignalInfo(); // pick up Preprocessor output
  void GetCalibTempCoeffInfo(); // pick up OCDB info
  void GetCalibReferenceInfo(); // pick up OCDB info

  Int_t CalcLEDCorrection(Int_t nSM, Int_t nBins); // based on LED signals, and reference photodiodes
  Int_t CalcLEDCorrectionStripBasis(Int_t nSM, Int_t nBins); // based on LED signals, and reference photodiodes
  Int_t CalcTemperatureCorrection(Int_t nSM, Int_t nBins, Int_t binSize); // based on temperature info

  //
  Int_t fRun; // run number
  UInt_t fStartTime; // start timestamp
  UInt_t fEndTime; // end timestamp
  // temperature stuff
  Double_t fMinTemp; // min temp
  Double_t fMaxTemp; // max temp
  Double_t fMinTempVariation; // min temp variation, within a sensor
  Double_t fMaxTempVariation; // max temp variation, within a sensor
  Double_t fMinTempValid; // min limit for when temp. readings appear valid
  Double_t fMaxTempValid; // max limit for when temp. readings appear valid
  UInt_t fMinTime; // min time
  UInt_t fMaxTime; // max time
  //
  Double_t fTemperatureResolution; // value for checking at which level we care about temperature differences
  Double_t fMaxTemperatureDiff; // value for checking that temperature sensor info seems reasonable 
  Int_t fTimeBinsPerHour; // size of the time-bins we use for corrections

  Double_t fHighLowGainFactor;     //gain factor to convert between high and low gain
  
  // pointers to the different used classes
  AliEMCALSensorTempArray  *fTempArray;     // CDB class for temperature sensors
  AliCaloCalibSignal *fCalibSignal; // LED signal info
  AliEMCALCalibTempCoeff *fCalibTempCoeff; // Temperature Coefficient info
  AliEMCALCalibReference *fCalibReference; // reference info
  AliEMCALCalibTimeDepCorrection *fCalibTimeDepCorrection; // correction values

  Int_t fVerbosity; // debug flag

  //
  ClassDef(AliEMCALCalibTimeDep,5)    // EMCAL time-dep Calibration data
};

#endif
 AliEMCALCalibTimeDep.h:1
 AliEMCALCalibTimeDep.h:2
 AliEMCALCalibTimeDep.h:3
 AliEMCALCalibTimeDep.h:4
 AliEMCALCalibTimeDep.h:5
 AliEMCALCalibTimeDep.h:6
 AliEMCALCalibTimeDep.h:7
 AliEMCALCalibTimeDep.h:8
 AliEMCALCalibTimeDep.h:9
 AliEMCALCalibTimeDep.h:10
 AliEMCALCalibTimeDep.h:11
 AliEMCALCalibTimeDep.h:12
 AliEMCALCalibTimeDep.h:13
 AliEMCALCalibTimeDep.h:14
 AliEMCALCalibTimeDep.h:15
 AliEMCALCalibTimeDep.h:16
 AliEMCALCalibTimeDep.h:17
 AliEMCALCalibTimeDep.h:18
 AliEMCALCalibTimeDep.h:19
 AliEMCALCalibTimeDep.h:20
 AliEMCALCalibTimeDep.h:21
 AliEMCALCalibTimeDep.h:22
 AliEMCALCalibTimeDep.h:23
 AliEMCALCalibTimeDep.h:24
 AliEMCALCalibTimeDep.h:25
 AliEMCALCalibTimeDep.h:26
 AliEMCALCalibTimeDep.h:27
 AliEMCALCalibTimeDep.h:28
 AliEMCALCalibTimeDep.h:29
 AliEMCALCalibTimeDep.h:30
 AliEMCALCalibTimeDep.h:31
 AliEMCALCalibTimeDep.h:32
 AliEMCALCalibTimeDep.h:33
 AliEMCALCalibTimeDep.h:34
 AliEMCALCalibTimeDep.h:35
 AliEMCALCalibTimeDep.h:36
 AliEMCALCalibTimeDep.h:37
 AliEMCALCalibTimeDep.h:38
 AliEMCALCalibTimeDep.h:39
 AliEMCALCalibTimeDep.h:40
 AliEMCALCalibTimeDep.h:41
 AliEMCALCalibTimeDep.h:42
 AliEMCALCalibTimeDep.h:43
 AliEMCALCalibTimeDep.h:44
 AliEMCALCalibTimeDep.h:45
 AliEMCALCalibTimeDep.h:46
 AliEMCALCalibTimeDep.h:47
 AliEMCALCalibTimeDep.h:48
 AliEMCALCalibTimeDep.h:49
 AliEMCALCalibTimeDep.h:50
 AliEMCALCalibTimeDep.h:51
 AliEMCALCalibTimeDep.h:52
 AliEMCALCalibTimeDep.h:53
 AliEMCALCalibTimeDep.h:54
 AliEMCALCalibTimeDep.h:55
 AliEMCALCalibTimeDep.h:56
 AliEMCALCalibTimeDep.h:57
 AliEMCALCalibTimeDep.h:58
 AliEMCALCalibTimeDep.h:59
 AliEMCALCalibTimeDep.h:60
 AliEMCALCalibTimeDep.h:61
 AliEMCALCalibTimeDep.h:62
 AliEMCALCalibTimeDep.h:63
 AliEMCALCalibTimeDep.h:64
 AliEMCALCalibTimeDep.h:65
 AliEMCALCalibTimeDep.h:66
 AliEMCALCalibTimeDep.h:67
 AliEMCALCalibTimeDep.h:68
 AliEMCALCalibTimeDep.h:69
 AliEMCALCalibTimeDep.h:70
 AliEMCALCalibTimeDep.h:71
 AliEMCALCalibTimeDep.h:72
 AliEMCALCalibTimeDep.h:73
 AliEMCALCalibTimeDep.h:74
 AliEMCALCalibTimeDep.h:75
 AliEMCALCalibTimeDep.h:76
 AliEMCALCalibTimeDep.h:77
 AliEMCALCalibTimeDep.h:78
 AliEMCALCalibTimeDep.h:79
 AliEMCALCalibTimeDep.h:80
 AliEMCALCalibTimeDep.h:81
 AliEMCALCalibTimeDep.h:82
 AliEMCALCalibTimeDep.h:83
 AliEMCALCalibTimeDep.h:84
 AliEMCALCalibTimeDep.h:85
 AliEMCALCalibTimeDep.h:86
 AliEMCALCalibTimeDep.h:87
 AliEMCALCalibTimeDep.h:88
 AliEMCALCalibTimeDep.h:89
 AliEMCALCalibTimeDep.h:90
 AliEMCALCalibTimeDep.h:91
 AliEMCALCalibTimeDep.h:92
 AliEMCALCalibTimeDep.h:93
 AliEMCALCalibTimeDep.h:94
 AliEMCALCalibTimeDep.h:95
 AliEMCALCalibTimeDep.h:96
 AliEMCALCalibTimeDep.h:97
 AliEMCALCalibTimeDep.h:98
 AliEMCALCalibTimeDep.h:99
 AliEMCALCalibTimeDep.h:100
 AliEMCALCalibTimeDep.h:101
 AliEMCALCalibTimeDep.h:102
 AliEMCALCalibTimeDep.h:103
 AliEMCALCalibTimeDep.h:104
 AliEMCALCalibTimeDep.h:105
 AliEMCALCalibTimeDep.h:106
 AliEMCALCalibTimeDep.h:107
 AliEMCALCalibTimeDep.h:108
 AliEMCALCalibTimeDep.h:109
 AliEMCALCalibTimeDep.h:110
 AliEMCALCalibTimeDep.h:111
 AliEMCALCalibTimeDep.h:112
 AliEMCALCalibTimeDep.h:113
 AliEMCALCalibTimeDep.h:114
 AliEMCALCalibTimeDep.h:115
 AliEMCALCalibTimeDep.h:116
 AliEMCALCalibTimeDep.h:117
 AliEMCALCalibTimeDep.h:118
 AliEMCALCalibTimeDep.h:119
 AliEMCALCalibTimeDep.h:120
 AliEMCALCalibTimeDep.h:121
 AliEMCALCalibTimeDep.h:122
 AliEMCALCalibTimeDep.h:123
 AliEMCALCalibTimeDep.h:124
 AliEMCALCalibTimeDep.h:125
 AliEMCALCalibTimeDep.h:126
 AliEMCALCalibTimeDep.h:127
 AliEMCALCalibTimeDep.h:128
 AliEMCALCalibTimeDep.h:129
 AliEMCALCalibTimeDep.h:130
 AliEMCALCalibTimeDep.h:131
 AliEMCALCalibTimeDep.h:132
 AliEMCALCalibTimeDep.h:133
 AliEMCALCalibTimeDep.h:134
 AliEMCALCalibTimeDep.h:135
 AliEMCALCalibTimeDep.h:136
 AliEMCALCalibTimeDep.h:137
 AliEMCALCalibTimeDep.h:138
 AliEMCALCalibTimeDep.h:139
 AliEMCALCalibTimeDep.h:140
 AliEMCALCalibTimeDep.h:141
 AliEMCALCalibTimeDep.h:142
 AliEMCALCalibTimeDep.h:143
 AliEMCALCalibTimeDep.h:144
 AliEMCALCalibTimeDep.h:145