]>
Commit | Line | Data |
---|---|---|
8c25d014 | 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 */ | |
5 | ||
6 | /* $Id: AliTRDarrayADC.h 23387 2008-01-17 17:25:16Z cblume $ */ | |
7 | ||
8 | /////////////////////////////////////////////// | |
9 | // // | |
10 | // Container class for ADC values // | |
11 | // // | |
12 | /////////////////////////////////////////////// | |
13 | ||
14 | #include <TObject.h> | |
15 | ||
534529cb | 16 | class AliTRDSignalIndex; |
8c25d014 | 17 | class AliTRDarrayADC: public TObject |
18 | { | |
19 | public: | |
20 | ||
48e0d7f1 | 21 | enum { |
22 | kDataInvalid = 14 | |
23 | }; | |
24 | ||
8c25d014 | 25 | AliTRDarrayADC(); |
26 | AliTRDarrayADC(Int_t nrow, Int_t ncol, Int_t ntime); | |
27 | AliTRDarrayADC(const AliTRDarrayADC &b); | |
28 | ~AliTRDarrayADC(); | |
29 | AliTRDarrayADC &operator=(const AliTRDarrayADC &b); | |
30 | ||
31 | void Allocate(Int_t nrow, Int_t ncol, Int_t ntime); | |
32 | void SetNdet(Int_t ndet) {fNdet=ndet;}; | |
33 | Int_t GetNdet() const {return fNdet;}; | |
34 | void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value) | |
615f0826 | 35 | {fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;} |
8c25d014 | 36 | Bool_t HasData() const {return fNtime ? 1 : 0;}; |
37 | Short_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const | |
38 | {return fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime];}; | |
39 | inline void GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const; | |
40 | Short_t GetDataBits(Int_t nrow, Int_t ncol, Int_t ntime) const; | |
41 | UChar_t GetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime) const; | |
42 | void SetPadStatus(Int_t nrow, Int_t ncol, Int_t ntime, UChar_t status); | |
43 | Bool_t IsPadCorrupted(Int_t nrow, Int_t ncol, Int_t ntime); | |
44 | void Compress(); | |
45 | void Expand(); | |
46 | Int_t GetNtime() const {return fNtime;}; | |
47 | Int_t GetNrow() const {return fNrow;}; | |
48 | Int_t GetNcol() const {return fNcol;}; | |
49 | Int_t GetDim() const {return fNAdim;}; | |
50 | void DeleteNegatives(); | |
51 | void Reset(); | |
534529cb | 52 | void ConditionalReset(AliTRDSignalIndex* idx); |
1ab4da8c | 53 | inline Short_t* GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime = 0) const; |
615f0826 | 54 | inline Short_t GetData(Int_t nrow, Int_t ncol, Int_t ntime) const; |
55 | inline void SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value); | |
8c25d014 | 56 | static void CreateLut(); |
8c25d014 | 57 | |
48e0d7f1 | 58 | Bool_t IsValid() { return !TestBit(kDataInvalid); } |
59 | void SetDataInvalid() { SetBit(kDataInvalid); } | |
60 | void SetDataValid() { ResetBit(kDataInvalid); } | |
61 | ||
8c25d014 | 62 | protected: |
63 | ||
64 | Int_t fNdet; //ID number of the chamber | |
65 | Int_t fNrow; //Number of rows | |
66 | Int_t fNcol; //Number of columns(pads) | |
67 | Int_t fNumberOfChannels; // Number of MCM channels per row | |
68 | Int_t fNtime; //Number of time bins | |
69 | Int_t fNAdim; //Dimension of the ADC array | |
8c25d014 | 70 | Short_t* fADC; //[fNAdim] //Pointer to adc values |
71 | static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table | |
72 | ||
73 | ClassDef(AliTRDarrayADC,4) //ADC container class | |
74 | ||
75 | }; | |
76 | ||
615f0826 | 77 | //________________________________________________________________________________ |
1ab4da8c | 78 | Short_t* AliTRDarrayADC::GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime) const |
79 | { | |
80 | // | |
81 | // Get the address of the given pad | |
82 | // | |
83 | ||
84 | Int_t corrcolumn = fgLutPadNumbering[ncol]; | |
85 | ||
86 | return &fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime]; | |
87 | ||
88 | } | |
89 | //________________________________________________________________________________ | |
615f0826 | 90 | Short_t AliTRDarrayADC::GetData(Int_t nrow, Int_t ncol, Int_t ntime) const |
91 | { | |
92 | // | |
93 | // Get the data using the pad numbering. | |
94 | // To access data using the mcm scheme use instead | |
95 | // the method GetDataByAdcCol | |
96 | // | |
97 | ||
98 | Int_t corrcolumn = fgLutPadNumbering[ncol]; | |
99 | ||
100 | return fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime]; | |
101 | ||
102 | } | |
103 | //________________________________________________________________________________ | |
104 | void AliTRDarrayADC::SetData(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value) | |
105 | { | |
106 | // | |
107 | // Set the data using the pad numbering. | |
108 | // To write data using the mcm scheme use instead | |
109 | // the method SetDataByAdcCol | |
110 | // | |
111 | ||
112 | Int_t colnumb = fgLutPadNumbering[ncol]; | |
113 | ||
114 | fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime] = value; | |
115 | ||
116 | } | |
117 | ||
118 | void AliTRDarrayADC::GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const | |
8c25d014 | 119 | { |
120 | Int_t colNum = fgLutPadNumbering[c]; | |
121 | for(Int_t ic=n, idx = (r*fNumberOfChannels+colNum)*fNtime+t; ic--; idx+=fNtime) vals[ic] = fADC[idx]; | |
122 | } | |
123 | ||
124 | #endif | |
125 |