ROOT logo
#ifndef ALIITSCORRMAPSDD_H
#define ALIITSCORRMAPSDD_H
/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

///////////////////////////////////////////////////////////////////
//                                                               //
// Mother class for SDD maps used to correct for                 //
// voltage divider shape and doping fluctuations                 //
// Origin: F.Prino, Torino, prino@to.infn.it                     //
//                                                               //
///////////////////////////////////////////////////////////////////

#include<TNamed.h>
#include "AliLog.h"
class TH1F;
class TH2F;
class AliITSsegmentationSDD;

class AliITSCorrMapSDD : public TNamed {

 public:
  // maps produced from residuals stores Xtrue-Xmeasured in drift lenght.
  // Since the map computes xtrue-xmeas in drift coordinate
  // and the difference is added to measured local coordinate, we have
  // Left:  Xmeas_loc_corr = Xmeas_loc + (Xtrue-Xmeas)_loc = Xmeas_loc - (Xtrue-Xmeas)_drift
  // Right: Xmeas_loc_corr = Xmeas_loc + (Xtrue-Xmeas)_loc = Xmeas_loc + (Xtrue-Xmeas)_drift
  // hence, for the left side the sign of the correction need to inverted
  enum {kLeftInvBit = BIT(14)};   
  AliITSCorrMapSDD();
  AliITSCorrMapSDD(Char_t *mapname);
  virtual ~AliITSCorrMapSDD(){};
  //
  void   SetInversionBit(Bool_t v=kTRUE)           {SetBit(kLeftInvBit,v);}
  Bool_t GetInversionBit()               const     {return TestBit(kLeftInvBit);}
  //
  Int_t GetNBinsAnode() const {return fNAnodePts;}
  Int_t GetNBinsDrift() const {return fNDriftPts;}
  void SetNBinsAnode(Int_t nbins) {
    if(nbins<=kMaxNAnodePts) fNAnodePts=nbins;
    else AliError(Form("Max. number of anode bins = %d",kMaxNAnodePts));
  }
  void SetNBinsDrift(Int_t nbins) {
    if(nbins<=kMaxNDriftPts) fNDriftPts=nbins;
    else AliError(Form("Max. number of drift bins = %d",kMaxNDriftPts));
  }

  Bool_t CheckAnodeBounds(Int_t iAn) const {
    if(iAn<0 || iAn>=fNAnodePts)return kFALSE;
    else return kTRUE;
  }
  Bool_t CheckDriftBounds(Int_t iTb) const {
    if(iTb<0 || iTb >= fNDriftPts)return kFALSE;
    else return kTRUE;
  }

  virtual void Set1DMap(TH1F* /*hmap*/){
    AliError("Not implemented");
  }
  virtual void Set2DMap(TH2F* /*hmap*/){
    AliError("Not implemented");
  }

  virtual void ResetMap(){
    AliError("Not implemented");
  }
  virtual void SetCellContent(Int_t /*iAn*/, Int_t /*iTb*/, Float_t /*devMicron*/){
    AliError("Not implemented");
  }
  virtual Float_t GetCellContent(Int_t /*iAn*/, Int_t /*iTb*/) const {
    AliError("Not implemented");
    return -99999.;
  }

  void    ComputeGridPoints(Float_t z, Float_t x, AliITSsegmentationSDD *seg, Bool_t isReco=kTRUE);
  Float_t GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg);
  Float_t GetShiftForSimulation(Float_t z, Float_t x, AliITSsegmentationSDD *seg);
  TH2F* GetMapHisto() const;
  TH1F* GetMapProfile() const;
  TH1F* GetResidualDistr(Float_t dmin=-300., Float_t dmax=300.) const;


 protected:

  enum {kMaxNAnodePts=256};// max number of map points along anodes
  enum {kMaxNDriftPts=291};// max number of map points along drift

  static const Int_t fgkNAnodePtsDefault; // default value for fNAnodePts
  static const Int_t fgkNDriftPtsDefault; // default value for fNDriftPts
  Int_t fNAnodePts; // number of map points along anodes
  Int_t fNDriftPts; // number of map points along anodes

  Float_t fXt1;   // true coordinate in lower grid point
  Float_t fXt2;   // true coordinate in upper grid point
  Float_t fXm1;   // measured coordinate in lower grid point
  Float_t fXm2;   // measured coordinate in upper grid point
  Float_t fDrLen; // drift length

  ClassDef(AliITSCorrMapSDD,2);
};
#endif

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