1 #ifndef ALITRDARRAYADC_H
2 #define ALITRDARRAYADC_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 /* $Id: AliTRDarrayADC.h 23387 2008-01-17 17:25:16Z cblume $ */
8 ///////////////////////////////////////////////
10 // Container class for ADC values //
12 ///////////////////////////////////////////////
16 class AliTRDSignalIndex;
17 class AliTRDarrayADC: public TObject
22 AliTRDarrayADC(Int_t nrow, Int_t ncol, Int_t ntime);
23 AliTRDarrayADC(const AliTRDarrayADC &b);
25 AliTRDarrayADC &operator=(const AliTRDarrayADC &b);
27 void Allocate(Int_t nrow, Int_t ncol, Int_t ntime);
28 void SetNdet(Int_t ndet) {fNdet=ndet;};
29 Int_t GetNdet() const {return fNdet;};
30 void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
31 {fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;}
32 Bool_t HasData() const {return fNtime ? 1 : 0;};
33 Short_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const
34 {return fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];};
35 inline void GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const;
36 Short_t GetDataBits(Int_t nrow, Int_t ncol, Int_t ntime) const;
37 UChar_t GetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime) const;
38 void SetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime, UChar_t status);
39 Bool_t IsPadCorrupted(Int_t nrow, Int_t ncol, Int_t ntime);
42 Int_t GetNtime() const {return fNtime;};
43 Int_t GetNrow() const {return fNrow;};
44 Int_t GetNcol() const {return fNcol;};
45 Int_t GetDim() const {return fNAdim;};
46 void DeleteNegatives();
48 void ConditionalReset(AliTRDSignalIndex* idx);
49 inline Short_t* GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime = 0) const;
50 inline Short_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const;
51 inline void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value);
52 static void CreateLut();
56 Int_t fNdet; //ID number of the chamber
57 Int_t fNrow; //Number of rows
58 Int_t fNcol; //Number of columns(pads)
59 Int_t fNumberOfChannels; // Number of MCM channels per row
60 Int_t fNtime; //Number of time bins
61 Int_t fNAdim; //Dimension of the ADC array
62 Short_t* fADC; //[fNAdim] //Pointer to adc values
63 static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table
65 ClassDef(AliTRDarrayADC,4) //ADC container class
69 //________________________________________________________________________________
70 Short_t* AliTRDarrayADC::GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime) const
73 // Get the address of the given pad
76 Int_t corrcolumn = fgLutPadNumbering[ncol];
78 return &fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];
81 //________________________________________________________________________________
82 Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const
85 // Get the data using the pad numbering.
86 // To access data using the mcm scheme use instead
87 // the method GetDataByAdcCol
90 Int_t corrcolumn = fgLutPadNumbering[ncol];
92 return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];
95 //________________________________________________________________________________
96 void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
99 // Set the data using the pad numbering.
100 // To write data using the mcm scheme use instead
101 // the method SetDataByAdcCol
104 Int_t colnumb = fgLutPadNumbering[ncol];
106 fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime] = value;
110 void AliTRDarrayADC::GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const
112 Int_t colNum = fgLutPadNumbering[c];
113 for(Int_t ic=n, idx = (r*fNumberOfChannels+colNum)*fNtime+t; ic--; idx+=fNtime) vals[ic] = fADC[idx];