ROOT logo
#ifndef ALIEMCALCALIBABS_H
#define ALIEMCALCALIBABS_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 absolute calibrations
*/

// total calibration factor is a product of
// a) overall calibration factor [fAbsoluteCalib]
// b) individual gain factor per tower [fRelativeCalib]
// c) time-dependent correction
// In this class we store a), b) 

// ******* internal class definition *************

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

 public:
  AliEMCALSuperModuleCalibAbs(const int smNum=0) : TObject(), // just init values
    fSuperModuleNum(smNum),
    fCalibMethod(0),
    fCalibPass(0),
    fAbsoluteCalib(0)
    {
      for (int icol=0; icol<AliEMCALGeoParams::fgkEMCALCols; icol++) {
	for (int irow=0; irow<AliEMCALGeoParams::fgkEMCALRows; irow++) {
	  fRelativeCalib[icol][irow] = 1.0;
	}
      }
    }

 public:
  // first
  void SetSuperModuleNum(Int_t i) { fSuperModuleNum = i;}; // 
  Int_t GetSuperModuleNum() const { return fSuperModuleNum;}; // 
  void SetCalibMethod(Int_t i) { fCalibMethod = i;}; // 
  Int_t GetCalibMethod() const { return fCalibMethod;}; // 
  void SetCalibPass(Int_t i) { fCalibPass = i;}; // 
  Int_t GetCalibPass() const { return fCalibPass;}; // 
  void SetAbsoluteCalib(Float_t f) { fAbsoluteCalib = f;}; // 
  Float_t GetAbsoluteCalib() const { return fAbsoluteCalib;}; // 

  // third
  void SetRelativeCalib(int icol, int irow, Float_t f) { fRelativeCalib[icol][irow] = f; }; //
  Float_t GetRelativeCalib(int icol, int irow) const { return fRelativeCalib[icol][irow]; }; //

 private:
  // first: overall values for the whole SuperModule
  Int_t fSuperModuleNum; // which SuperModule is this?
  Int_t fCalibMethod; // a la 0=cosmics, 1=pi0, 2=electrons,3=using ecore,
  Int_t fCalibPass; // which analysis iteration is this.. 1,2,..N
  Float_t fAbsoluteCalib; // (ADC>GeV absolute gain/conversion)
  
  // third: individual info for each tower
  Float_t fRelativeCalib[AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]; // values around 1, if gains are well balanced

  ClassDef(AliEMCALSuperModuleCalibAbs, 3) // help class
};
// ******* end of internal class definition *************

class AliEMCALCalibAbs : public TObject {

public:

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

  AliEMCALCalibAbs(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 ReadTextCalibAbsInfo(Int_t nSM, const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void WriteTextCalibAbsInfo(const TString &txtFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void ReadRootCalibAbsInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void ReadTreeCalibAbsInfo(TTree *tree, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules
  void WriteRootCalibAbsInfo(const TString &rootFileName, Bool_t swapSides=kFALSE); // info file is for nSm=1 to fgkEMCALModules

  virtual ~AliEMCALCalibAbs();

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

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

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

protected:

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

private:

  AliEMCALCalibAbs(const AliEMCALCalibAbs &);
  AliEMCALCalibAbs &operator = (const AliEMCALCalibAbs &);

  ClassDef(AliEMCALCalibAbs, 4) //CalibAbs data info
};

#endif
 AliEMCALCalibAbs.h:1
 AliEMCALCalibAbs.h:2
 AliEMCALCalibAbs.h:3
 AliEMCALCalibAbs.h:4
 AliEMCALCalibAbs.h:5
 AliEMCALCalibAbs.h:6
 AliEMCALCalibAbs.h:7
 AliEMCALCalibAbs.h:8
 AliEMCALCalibAbs.h:9
 AliEMCALCalibAbs.h:10
 AliEMCALCalibAbs.h:11
 AliEMCALCalibAbs.h:12
 AliEMCALCalibAbs.h:13
 AliEMCALCalibAbs.h:14
 AliEMCALCalibAbs.h:15
 AliEMCALCalibAbs.h:16
 AliEMCALCalibAbs.h:17
 AliEMCALCalibAbs.h:18
 AliEMCALCalibAbs.h:19
 AliEMCALCalibAbs.h:20
 AliEMCALCalibAbs.h:21
 AliEMCALCalibAbs.h:22
 AliEMCALCalibAbs.h:23
 AliEMCALCalibAbs.h:24
 AliEMCALCalibAbs.h:25
 AliEMCALCalibAbs.h:26
 AliEMCALCalibAbs.h:27
 AliEMCALCalibAbs.h:28
 AliEMCALCalibAbs.h:29
 AliEMCALCalibAbs.h:30
 AliEMCALCalibAbs.h:31
 AliEMCALCalibAbs.h:32
 AliEMCALCalibAbs.h:33
 AliEMCALCalibAbs.h:34
 AliEMCALCalibAbs.h:35
 AliEMCALCalibAbs.h:36
 AliEMCALCalibAbs.h:37
 AliEMCALCalibAbs.h:38
 AliEMCALCalibAbs.h:39
 AliEMCALCalibAbs.h:40
 AliEMCALCalibAbs.h:41
 AliEMCALCalibAbs.h:42
 AliEMCALCalibAbs.h:43
 AliEMCALCalibAbs.h:44
 AliEMCALCalibAbs.h:45
 AliEMCALCalibAbs.h:46
 AliEMCALCalibAbs.h:47
 AliEMCALCalibAbs.h:48
 AliEMCALCalibAbs.h:49
 AliEMCALCalibAbs.h:50
 AliEMCALCalibAbs.h:51
 AliEMCALCalibAbs.h:52
 AliEMCALCalibAbs.h:53
 AliEMCALCalibAbs.h:54
 AliEMCALCalibAbs.h:55
 AliEMCALCalibAbs.h:56
 AliEMCALCalibAbs.h:57
 AliEMCALCalibAbs.h:58
 AliEMCALCalibAbs.h:59
 AliEMCALCalibAbs.h:60
 AliEMCALCalibAbs.h:61
 AliEMCALCalibAbs.h:62
 AliEMCALCalibAbs.h:63
 AliEMCALCalibAbs.h:64
 AliEMCALCalibAbs.h:65
 AliEMCALCalibAbs.h:66
 AliEMCALCalibAbs.h:67
 AliEMCALCalibAbs.h:68
 AliEMCALCalibAbs.h:69
 AliEMCALCalibAbs.h:70
 AliEMCALCalibAbs.h:71
 AliEMCALCalibAbs.h:72
 AliEMCALCalibAbs.h:73
 AliEMCALCalibAbs.h:74
 AliEMCALCalibAbs.h:75
 AliEMCALCalibAbs.h:76
 AliEMCALCalibAbs.h:77
 AliEMCALCalibAbs.h:78
 AliEMCALCalibAbs.h:79
 AliEMCALCalibAbs.h:80
 AliEMCALCalibAbs.h:81
 AliEMCALCalibAbs.h:82
 AliEMCALCalibAbs.h:83
 AliEMCALCalibAbs.h:84
 AliEMCALCalibAbs.h:85
 AliEMCALCalibAbs.h:86
 AliEMCALCalibAbs.h:87
 AliEMCALCalibAbs.h:88
 AliEMCALCalibAbs.h:89
 AliEMCALCalibAbs.h:90
 AliEMCALCalibAbs.h:91
 AliEMCALCalibAbs.h:92
 AliEMCALCalibAbs.h:93
 AliEMCALCalibAbs.h:94
 AliEMCALCalibAbs.h:95
 AliEMCALCalibAbs.h:96
 AliEMCALCalibAbs.h:97
 AliEMCALCalibAbs.h:98
 AliEMCALCalibAbs.h:99
 AliEMCALCalibAbs.h:100
 AliEMCALCalibAbs.h:101
 AliEMCALCalibAbs.h:102
 AliEMCALCalibAbs.h:103
 AliEMCALCalibAbs.h:104
 AliEMCALCalibAbs.h:105
 AliEMCALCalibAbs.h:106
 AliEMCALCalibAbs.h:107
 AliEMCALCalibAbs.h:108
 AliEMCALCalibAbs.h:109
 AliEMCALCalibAbs.h:110
 AliEMCALCalibAbs.h:111
 AliEMCALCalibAbs.h:112
 AliEMCALCalibAbs.h:113
 AliEMCALCalibAbs.h:114