ROOT logo
#ifndef ALIEMCALCALIBREFERENCE_H
#define ALIEMCALCALIBREFERENCE_H

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

/* $Id: $ */

#include <TObject.h>
#include <TObjArray.h>
#include "AliEMCALGeoParams.h"
class TString;
class TTree;

/*
  Objects of this class contain basis for reference calibrations
*/

// total calibration factor is a product of
// a) overall calibration factor [fAbsoluteGain]
// b) individual gain factor per tower [fRelativeGain]
// c) time-dependent correction
// In this class we store the needed static ingredients for c)

// ******* internal class definition *************
// values per single tower
class AliEMCALCalibReferenceVal : public TObject {

 public:
  AliEMCALCalibReferenceVal() : TObject(), // just init values
    fHighLow(0),
    fLEDAmp(0),
    fLEDAmpRMS(0)
    {
    }
  
  void Init() {
    fHighLow = 0;
    fLEDAmp = 0;
    fLEDAmpRMS = 0;
    return;
  }

 public:
  void SetHighLow(Int_t i) { fHighLow = i; }; //
  Int_t GetHighLow() const { return fHighLow; }; //
  void SetLEDAmp(Float_t f) { fLEDAmp = f; }; //
  Float_t GetLEDAmp() const { return fLEDAmp; }; //
  void SetLEDAmpRMS(Float_t f) { fLEDAmpRMS = f; }; //
  Float_t GetLEDAmpRMS() const { return fLEDAmpRMS; }; //

 private:
  Int_t fHighLow; // 0 (low) or 1 (high) gain, used for LEDAmp info
  Float_t fLEDAmp; // LED amplitude
  Float_t fLEDAmpRMS; // RMS

  ClassDef(AliEMCALCalibReferenceVal, 1) // help class
};

// 1 SuperModule's worth of info: info on where the different APDs are
class AliEMCALSuperModuleCalibReference : public TObject {

 public:
  AliEMCALSuperModuleCalibReference(const int smNum=0) : TObject(), // just init values
    fSuperModuleNum(smNum),
    fReferenceTime(0)
    {
      for (int iref=0; iref<AliEMCALGeoParams::fgkEMCALLEDRefs; iref++) {
	fLEDRefAmp[iref] = 0;
	fLEDRefAmpRMS[iref] = 0;
	fLEDRefHighLow[iref] = 0;
      }

      for (int itemp=0; itemp<AliEMCALGeoParams::fgkEMCALTempSensors; itemp++) {
	fTemperature[itemp] = 0;
	fTemperatureRMS[itemp] = 0;
      }

      for (int icol=0; icol<AliEMCALGeoParams::fgkEMCALCols; icol++) {
	for (int irow=0; irow<AliEMCALGeoParams::fgkEMCALRows; irow++) {
	  fAPDVal[icol][irow].Init();
	}
      }
    }

 public:
  // first
  void SetSuperModuleNum(Int_t i) { fSuperModuleNum = i;}; // 
  Int_t GetSuperModuleNum() const { return fSuperModuleNum;}; // 
  void SetReferenceTime(Int_t i) { fReferenceTime = i;}; // 
  Int_t GetReferenceTime() const { return fReferenceTime;}; // 

  // second
  void SetLEDRefAmp(int iLEDRef, Float_t f) { fLEDRefAmp[iLEDRef] = f;}; // 
  Float_t GetLEDRefAmp(int iLEDRef) const { return fLEDRefAmp[iLEDRef];}; // 
  void SetLEDRefAmpRMS(int iLEDRef, Float_t f) { fLEDRefAmpRMS[iLEDRef] = f;}; // 
  Float_t GetLEDRefAmpRMS(int iLEDRef) const { return fLEDRefAmpRMS[iLEDRef];}; // 
  void SetLEDRefHighLow(int iLEDRef, Int_t i) { fLEDRefHighLow[iLEDRef] = i;}; // 
  Int_t GetLEDRefHighLow(int iLEDRef) const { return fLEDRefHighLow[iLEDRef];}; // 

  void SetTemperature(int itemp, Float_t f) { fTemperature[itemp] = f;}; // 
  Float_t GetTemperature(int itemp) const { return fTemperature[itemp];}; // 
  void SetTemperatureRMS(int itemp, Float_t f) { fTemperatureRMS[itemp] = f;}; // 
  Float_t GetTemperatureRMS(int itemp) const { return fTemperatureRMS[itemp];}; // 

  // third
  AliEMCALCalibReferenceVal * GetAPDVal(int icol, int irow) 
    { return &fAPDVal[icol][irow]; };

 private:
  // first: overall values for the whole SuperModule
  Int_t fSuperModuleNum; // which SuperModule is this?
  Int_t fReferenceTime; // t0, unix timestamp
  
  // second: additional info for LED Reference and SM temperature
  Float_t fLEDRefAmp[AliEMCALGeoParams::fgkEMCALLEDRefs]; // LED amplitude at  t0, low gain equivalent
  Float_t fLEDRefAmpRMS[AliEMCALGeoParams::fgkEMCALLEDRefs]; // RMS
  Int_t fLEDRefHighLow[AliEMCALGeoParams::fgkEMCALLEDRefs]; // 0 (low) or 1 (high) gain
  
  Float_t fTemperature[AliEMCALGeoParams::fgkEMCALTempSensors]; // temperature at t0
  Float_t fTemperatureRMS[AliEMCALGeoParams::fgkEMCALTempSensors]; // RMS
  
  // third: individual info for each tower
  AliEMCALCalibReferenceVal fAPDVal[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; // at t0

  ClassDef(AliEMCALSuperModuleCalibReference, 1) // help class
};
// ******* end of internal class definition *************

class AliEMCALCalibReference : public TObject {

public:

  enum kProblemType {kNoLED=-999};// code in possible problems

  AliEMCALCalibReference(const int nSM = AliEMCALGeoParams::fgkEMCALModules);

  // Read and Write txt I/O methods are normally not used, but are useful for 
  // filling the object before it is saved in OCDB 
  void ReadTextCalibReferenceInfo(Int_t nSM, const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void WriteTextCalibReferenceInfo(const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void ReadRootCalibReferenceInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void ReadTreeCalibReferenceInfo(TTree *tree, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void WriteRootCalibReferenceInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules

  virtual ~AliEMCALCalibReference();

  // pointer to stored info.
  Int_t GetNSuperModule() const { return fNSuperModule; }; 

  // - via the index in the stored array:
  virtual AliEMCALSuperModuleCalibReference * GetSuperModuleCalibReferenceId(Int_t smIndex) const
   { return (AliEMCALSuperModuleCalibReference*) fSuperModuleData[smIndex]; };

  // - or via the actual SM number
  virtual AliEMCALSuperModuleCalibReference * GetSuperModuleCalibReferenceNum(Int_t smNum) const;

protected:

  Int_t 	  fNSuperModule; // Number of supermodules.
  TObjArray fSuperModuleData; // SuperModule data

private:

  AliEMCALCalibReference(const AliEMCALCalibReference &);
  AliEMCALCalibReference &operator = (const AliEMCALCalibReference &);

  ClassDef(AliEMCALCalibReference, 1) //CalibReference data info
};

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