ROOT logo
#ifndef ALITOFCALIBHISTO_H
#define ALITOFCALIBHISTO_H

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

// *
// *
// * AliTOFcalibHisto - class to handle TOF calibration histograms,
// *                    map histograms and more
// *
// *
// * autors:   Roberto Preghenella (R+)
// * concacts: preghenella@bo.infn.it
// *
// *

#include "TObject.h"
#include "TString.h"

class TH1D;
class TFile;
class AliESDtrack;

class AliTOFcalibHisto :
public TObject
{

 public:

  enum ECorrection_t {
    kDDLBCcorr,
    kAmphenolCableCorr,
    kFlatCableCorr,
    kInterfaceCardCorr,
    kDDLdelayCorr,
    kHPTDCdelayCorr,
    kFEAchDelayCorr,
    kFEAdelayCorr,
    kTRMdelayCorr,
    kICdelayCorr,
    kStripDelayCorr,
    kIndexDelayCorr,
    kTimeSlewingCorr,
    kNcorrections
  };
  
  enum ECalibConst_t {
    kLHCperiod,
    kAmphenolCableDelay,
    kFlatCableDelay,
    kInterfaceCardDelay,
    kNcalibConsts
  };

  enum ECalibMap_t {
    /* main index */
    kIndex,
    /* EO indices */
    kDDL, 
    kTRM, 
    kChain, 
    kTDC, 
    kChannel, 
    /* DO indices */
    kSector, 
    kPlate, 
    kStrip, 
    kSectorStrip, 
    kPadZ, 
    kPadX, 
    kPad,
    kInterfaceCardIndex,
    /* calib constants */
    kDDLBCshift,
    kFlatCableLength,
    kInterfaceCardLength,
    kAmphenolCableLength,
    /* number of histos */
    kNcalibMaps
  };

  enum ECalibPar_t {
    kDDLdelayPar,
    kHPTDCdelayPar,
    kLeftFEAchDelayPar,
    kRightFEAchDelayPar,
    kFEAdelayPar,
    kICdelayPar,
    kTRMdelayPar,
    kStripDelayPar,
    kIndexDelayPar,
    kTimeSlewingPar,
    kNcalibPars
  };

  enum ECalibStat_t {
    kStripStat,
    kNcalibStats
  };

  AliTOFcalibHisto(); /* default constructor */
  virtual ~AliTOFcalibHisto(); /* default destructor */

  /* getters */
  static const Char_t *GetCalibHistoFileName() {return fgCalibHistoFileName.Data();}; /* get calib histo file name */
  static const Char_t *GetCalibParFileName() {return fgCalibParFileName.Data();}; /* get calib par file name */
  static const Char_t *GetCalibStatFileName() {return fgCalibStatFileName.Data();}; /* get calib stat file name */

  /* setters */
  static void SetCalibHistoFileName(const Char_t *value) {fgCalibHistoFileName = value;}; /* set calib histo file name */
  static void SetCalibParFileName(const Char_t *value) {fgCalibParFileName = value;}; /* set calib par file name */
  static void SetCalibStatFileName(const Char_t *value) {fgCalibStatFileName = value;}; /* set calib stat file name */
  static void SetCableCorrectionFlag(Int_t i, Bool_t flag) {if (i < kNcorrections) fgCableCorrectionFlag[i] = flag;}; // set cable correction flag
  static void SetFullCorrectionFlag(Int_t i, Bool_t flag) {if (i < kNcorrections) fgFullCorrectionFlag[i] = flag;}; // set full correction flag

  /* methods */
  static Int_t GetIndexEO(Int_t ddl, Int_t trm, Int_t chain, Int_t tdc, Int_t channel) {return (channel + 8 * tdc + 120 * chain + 240 * trm + 2400 * ddl);}; /* get index EO */
  void LoadCalibHisto(); /* load calib histo */
  void LoadCalibPar(); /* load calib par */
  void LoadCalibStat(); /* load calib stat */
  void WriteCalibHisto(); /* write calib histo */
  void WriteCalibStat(); /* write calib stat */
  Double_t GetCalibConst(Int_t histo) {return GetHisto(fCalibConst[histo], 0);}; /* get calib const */
  Double_t GetCalibMap(Int_t histo, Int_t index) {return GetHisto(fCalibMap[histo], index);}; /* get calib map */
  Double_t GetCalibPar(Int_t histo, Int_t index) {return GetHisto(fCalibPar[histo], index);}; /* get calib par */
  Bool_t GetCalibStat(Int_t histo, Int_t index) {return GetHisto(fCalibStat[histo], index) != 0. ? kTRUE : kFALSE;}; /* get calib stat */
  Double_t GetCorrection(Int_t corr, Int_t index, Double_t tot = 0.); /* get correction */
  Double_t GetNominalCorrection(Int_t index); /* get nominal correction */
  void ApplyNominalCorrection(AliESDtrack *track); /* apply nominal corrections */

  Double_t GetCableCorrection(Int_t index); /* get cable correction */
  Double_t GetFullCorrection(Int_t index, Double_t tot = 0.); /* get full correction */

  Bool_t GetStatus(Int_t index); /* get status */
  
 private:

  static TFile *fgCalibHistoFile; /* calib histo file */
  static TFile *fgCalibParFile; /* calib par file */
  static TFile *fgCalibStatFile; /* calib stat file */

  static TString fgCalibHistoFileName; /* calib histo file name */
  static TString fgCalibParFileName; /* calib par file name */
  static TString fgCalibStatFileName; /* calib par file name */
  static const TString fgkCalibConstName[kNcalibConsts]; // calib const name array */
  static const TString fgkCalibMapName[kNcalibMaps]; // calib map name array */
  static const TString fgkCalibParName[kNcalibPars]; // calib par name array */
  static const TString fgkCalibStatName[kNcalibStats]; // calib stat name array */

  static const Double_t fgkLHCperiod; /* LHC clock period */
  static const Double_t fgkAmphenolCableDelay; /* Amphenol cable delay */
  static const Double_t fgkFlatCableDelay; /* flat cable delay */
  static const Double_t fgkInterfaceCardDelay; /* interface card delay */

  static const Int_t fgkNchannels; /* number of readout channels (DO) */
  static const Int_t fgkNchannelsEO; /* number of readout channels (EO) */
  static const Int_t fgkDDLBCshift[72]; /* DDL BC shifts due to TTC fibers */
  static const Double_t fgkFlatCableLength[91]; /* strip flat-cable length */
  static const Double_t fgkInterfaceCardLength[48]; /* interface card length */

  static Bool_t fgCableCorrectionFlag[kNcorrections]; // cable correction flag
  static Bool_t fgFullCorrectionFlag[kNcorrections]; // full correction flag

  static const Int_t fgkStripStat[18][91]; // strip status

  TH1D *fCalibConst[kNcalibConsts]; // calib const array
  TH1D *fCalibMap[kNcalibMaps]; // calib map array
  TH1D *fCalibPar[kNcalibPars]; // calib par array
  TH1D *fCalibStat[kNcalibStats]; // calib stat array

  /* methods */
  void LoadHisto(TFile * const file, TH1D **histo, const Char_t *name); /* create histo */
  void CreateHisto(TH1D **histo, const Char_t *name, Int_t size); /* create histo */
  void WriteHisto(TFile *file, TH1D *histo); /* write histo */
  void SetHisto(TH1D *histo, Int_t index, Double_t value); /* set histo */
  Double_t GetHisto(TH1D *histo, Int_t index); /* get histo */
  
  AliTOFcalibHisto(const AliTOFcalibHisto &source) : TObject(source) {}; /* copy constructor */
  AliTOFcalibHisto &operator=(const AliTOFcalibHisto &) {return *this;}; /* operator= */

  ClassDef(AliTOFcalibHisto, 1);
  
};

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