ROOT logo
#ifndef ALIITSCALIBRATIONSSD_H
#define ALIITSCALIBRATIONSSD_H
/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */ 
#include "AliITSCalibration.h"
#include "AliITSNoiseSSDv2.h"
#include "AliITSPedestalSSDv2.h"
#include "AliITSGainSSDv2.h"
#include "AliITSBadChannelsSSDv2.h"

/* $Id$ */
//////////////////////////////////////////////
// Calibration class for SSD                   //
//                                          //
//////////////////////////////////////////////
class AliITSCalibrationSSD : public AliITSCalibration {

 public:
    AliITSCalibrationSSD();
    AliITSCalibrationSSD(const char *dataType);
    virtual ~AliITSCalibrationSSD();

    Float_t GetNoiseP(Int_t n) {return fNoise->GetNoiseP(fModule,n); }
    Float_t GetNoiseN(Int_t n) {return fNoise->GetNoiseN(fModule,n); }
    void SetNoise( AliITSNoiseSSDv2* noise) {fNoise=noise;}

    Float_t GetPedestalP(Int_t n) {return fPedestal->GetPedestalP(fModule,n); }
    Float_t GetPedestalN(Int_t n) {return fPedestal->GetPedestalN(fModule,n); }
    void SetPedestal( AliITSPedestalSSDv2* pedestal) {fPedestal=pedestal;}

    Float_t GetGainP(Int_t n) {return fGain->GetGainP(fModule,n); }
    Float_t GetGainN(Int_t n) {return fGain->GetGainN(fModule,n); }
    void SetGainP(Int_t n, Float_t value) {fGain->AddGainP(fModule,n,value);}
    void SetGainN(Int_t n, Float_t value) {fGain->AddGainN(fModule,n,value);}
    void SetGain( AliITSGainSSDv2* gain) {fGain=gain;}

    void   SetBad() {
      fIsBad = kTRUE;
      for(Int_t i=0;i<fgkChipsPerModule;i++) fIsChipBad[i]=kTRUE;
    }
    virtual Bool_t IsBad() const { return fIsBad; }
    void   SetChipBad(Int_t nChip) {
      fIsChipBad[nChip] = kTRUE;
    }
    void FillBadChipMap();
    virtual Bool_t IsChipBad(Int_t nChip) const {
      return fIsChipBad[nChip];
    }
    Int_t ChipsPerModule() const{return fgkChipsPerModule;} // # chips/module
    Int_t ChannelsPerChip() const{ return fgkChannelsPerChip;}// #channels/chip

    void SetBadChannels( AliITSBadChannelsSSDv2* badchannels) {
      fBadChannels=badchannels;}
    Char_t GetBadPChannel(Int_t n) {
      return fBadChannels->GetBadChannelP(fModule,n); }
    Char_t GetBadNChannel(Int_t n) {
      return fBadChannels->GetBadChannelN(fModule,n); }
    Bool_t IsPChannelBad(Int_t n) {
      return fBadChannels->GetBadChannelP(fModule,n)&1; }
    Bool_t IsNChannelBad(Int_t n) {
      return fBadChannels->GetBadChannelN(fModule,n)&1; }

    //
    virtual  void   SetNDetParam(Int_t npar) {
	// set number of param
	fNPar=npar;
    }
    virtual  void   SetDetParam(Double_t *par);

    // Parameters options
    virtual Int_t   NDetParam() const {
	// number of param
	return fNPar;
    }
    virtual void    GetDetParam(Double_t *dpar) const; 

    virtual void    SetSigmaSpread(Double_t, Double_t) {
      NotImplemented("SetSigmaSpread");}
    
    virtual void    SigmaSpread(Double_t &, Double_t &) const {
      NotImplemented("SetSigmaSpread");}
    
    void SetModule(Int_t mod){fModule = mod;}
    void SetModuleIndex(Int_t modId){
      fModule=modId-500; // temporary patch, 500 is n. of SPD+SDD modules
      FillBadChipMap();
    }
    void SetKeVperADC(Double_t a=86.4/120.){fKeVperADC = a;}
    Double_t ADCToKeV(Double_t adc) const {return adc*fKeVperADC;}

    void SetSSDADCpereV(Double_t a=(120./24888.9)*(85.0/77.0)){fSSDADCpereV = a;}
    Double_t GetSSDDEvToADC(Double_t eV) const {return eV*fSSDADCpereV;}
    Int_t GetSSDIEvToADC(Double_t eV) const { 
                                  return ((Int_t) GetSSDDEvToADC(eV)); }


 protected:

    static const Int_t fgkChipsPerModule  = 12;    // Number of chips/module
    static const Int_t fgkChannelsPerChip = 128;   // Number of channels/chip

    static const Int_t fgkNParDefault; // default for fNPar

    Int_t fModule;          //! module number (range 0 -> 1697)
    
    Int_t   fNPar;            // Number of detector param 
    Double_t *fDetPar;         //[fNPar] Array of parameters

    AliITSNoiseSSDv2 *fNoise; // pointer to noise calib object    
    AliITSPedestalSSDv2 *fPedestal; // pointer to pedestal calib object
    AliITSGainSSDv2 *fGain; // pointer to gain calib object
    AliITSBadChannelsSSDv2 *fBadChannels; // pointer to bad channels calib object

    Bool_t   fIsBad;                         // module is dead or alive ?
    Bool_t   fIsChipBad[fgkChipsPerModule];  // chip is dead or alive ?

    Double_t fSSDADCpereV;    // Constant to convert eV to ADC for SSD.
    Double_t fKeVperADC;       // Constant to convert ADC to keV

 private:
    AliITSCalibrationSSD(const AliITSCalibrationSSD &source); // copy constructor
    AliITSCalibrationSSD& operator=(const AliITSCalibrationSSD &source); // ass. op.

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