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

/* $Id: AliTRDarrayADC.h 23387 2008-01-17 17:25:16Z cblume $ */

///////////////////////////////////////////////
//                                           //
// Container class for ADC values            //
//                                           // 
///////////////////////////////////////////////

#include <TObject.h>

class AliTRDSignalIndex;
class AliTRDarrayADC: public TObject
{
 public:

  enum {
    kDataInvalid = 14
  };

  AliTRDarrayADC();
  AliTRDarrayADC(Int_t nrow, Int_t ncol, Int_t ntime);
  AliTRDarrayADC(const AliTRDarrayADC &b);
  ~AliTRDarrayADC();
  AliTRDarrayADC &operator=(const AliTRDarrayADC &b);

  void    Allocate(Int_t nrow, Int_t ncol, Int_t ntime);
  void    SetNdet(Int_t ndet) {fNdet=ndet;};  
  Int_t   GetNdet()  const {return fNdet;};
  void    SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
                         {fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;}
  Bool_t  HasData() const {return fNtime ? 1 : 0;};
  Short_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const
                         {return fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];};
  inline  void GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const;
  Short_t GetDataBits(Int_t nrow, Int_t ncol, Int_t ntime) const;
  UChar_t GetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime) const;
  void    SetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime, UChar_t status);
  Bool_t  IsPadCorrupted(Int_t nrow, Int_t ncol, Int_t ntime);
  void    Compress();
  void    Expand();
  Int_t   GetNtime() const {return fNtime;};
  Int_t   GetNrow() const {return fNrow;};
  Int_t   GetNcol() const {return fNcol;};
  Int_t   GetDim() const {return fNAdim;};
  void    DeleteNegatives();
  void    Reset();
  void    ConditionalReset(AliTRDSignalIndex* idx);
  inline  Short_t* GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime = 0) const;
  inline  Short_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const;
  inline  void    SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value);
  static  void    CreateLut(); 

  Bool_t  IsValid() { return !TestBit(kDataInvalid); }
  void    SetDataInvalid() { SetBit(kDataInvalid); }
  void    SetDataValid() { ResetBit(kDataInvalid); }

 protected:

  Int_t fNdet;    //ID number of the chamber
  Int_t fNrow;    //Number of rows
  Int_t fNcol;    //Number of columns(pads)
  Int_t fNumberOfChannels;  //  Number of MCM channels per row
  Int_t fNtime;   //Number of time bins
  Int_t fNAdim;   //Dimension of the ADC array
  Short_t* fADC;  //[fNAdim]   //Pointer to adc values
  static Short_t *fgLutPadNumbering;   //  [fNcol] Look Up Table

  ClassDef(AliTRDarrayADC,4) //ADC container class
    
};

//________________________________________________________________________________
Short_t* AliTRDarrayADC::GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime) const
{
  //
  // Get the address of the given pad
  //

  Int_t corrcolumn = fgLutPadNumbering[ncol];

  return &fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];

}
//________________________________________________________________________________
Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const
{
  //
  // Get the data using the pad numbering.
  // To access data using the mcm scheme use instead
  // the method GetDataByAdcCol
  //

  Int_t corrcolumn = fgLutPadNumbering[ncol];

  return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];

}
//________________________________________________________________________________
void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
{
  //
  // Set the data using the pad numbering.
  // To write data using the mcm scheme use instead
  // the method SetDataByAdcCol
  //

  Int_t colnumb = fgLutPadNumbering[ncol];

  fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime] = value;

}

void AliTRDarrayADC::GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const
{
  Int_t colNum = fgLutPadNumbering[c];
  for(Int_t ic=n, idx = (r*fNumberOfChannels+colNum)*fNtime+t; ic--; idx+=fNtime) vals[ic] = fADC[idx];
 }

#endif 

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