Line data Source code
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 :
16 : class AliTRDSignalIndex;
17 : class AliTRDarrayADC: public TObject
18 : {
19 : public:
20 :
21 : enum {
22 : kDataInvalid = 14
23 : };
24 :
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 28176 : void SetNdet(Int_t ndet) {fNdet=ndet;};
33 0 : Int_t GetNdet() const {return fNdet;};
34 : void SetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime, Short_t value)
35 23612040 : {fADC[(nrow*fNumberOfChannels+ncol)*fNtime+ntime]=value;}
36 18408 : Bool_t HasData() const {return fNtime ? 1 : 0;};
37 : Short_t GetDataByAdcCol(Int_t nrow, Int_t ncol, Int_t ntime) const
38 23587200 : {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 97298 : Int_t GetNtime() const {return fNtime;};
47 4856 : Int_t GetNrow() const {return fNrow;};
48 1504 : Int_t GetNcol() const {return fNcol;};
49 0 : Int_t GetDim() const {return fNAdim;};
50 : void DeleteNegatives();
51 : void Reset();
52 : void ConditionalReset(AliTRDSignalIndex* idx);
53 : inline Short_t* GetDataAddress(Int_t nrow, Int_t ncol, Int_t ntime = 0) const;
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);
56 : static void CreateLut();
57 :
58 0 : Bool_t IsValid() { return !TestBit(kDataInvalid); }
59 0 : void SetDataInvalid() { SetBit(kDataInvalid); }
60 0 : void SetDataValid() { ResetBit(kDataInvalid); }
61 :
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
70 : Short_t* fADC; //[fNAdim] //Pointer to adc values
71 : static Short_t *fgLutPadNumbering; // [fNcol] Look Up Table
72 :
73 436 : ClassDef(AliTRDarrayADC,4) //ADC container class
74 :
75 : };
76 :
77 : //________________________________________________________________________________
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 13332 : Int_t corrcolumn = fgLutPadNumbering[ncol];
85 :
86 6666 : return &fADC[(nrow*fNumberOfChannels+corrcolumn)*fNtime+ntime];
87 :
88 : }
89 : //________________________________________________________________________________
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 64725124 : Int_t corrcolumn = fgLutPadNumbering[ncol];
99 :
100 32362562 : 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 20217600 : Int_t colnumb = fgLutPadNumbering[ncol];
113 :
114 10108800 : fADC[(nrow*fNumberOfChannels+colnumb)*fNtime+ntime] = value;
115 :
116 10108800 : }
117 :
118 : void AliTRDarrayADC::GetData(Int_t r, Int_t c, Int_t t, Int_t n, Short_t *vals) const
119 : {
120 0 : Int_t colNum = fgLutPadNumbering[c];
121 0 : for(Int_t ic=n, idx = (r*fNumberOfChannels+colNum)*fNtime+t; ic--; idx+=fNtime) vals[ic] = fADC[idx];
122 0 : }
123 :
124 : #endif
125 :
|