32def6aa |
1 | #ifndef ALIMUONLOCALSTRUCT_H |
2 | #define ALIMUONLOCALSTRUCT_H |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ |
5 | |
6 | /*$Id$*/ |
7 | |
8 | /// \ingroup raw |
9 | /// \class AliMUONLocalStruct |
10 | /// \brief rawdata local card structure for trigger |
11 | /// |
78649106 |
12 | // Author Christian Finck |
32def6aa |
13 | |
14 | #include <TObject.h> |
dfba12ee |
15 | #include <TMath.h> |
32def6aa |
16 | |
17 | class AliMUONLocalStruct : public TObject{ |
18 | |
19 | public: |
20 | AliMUONLocalStruct(); |
21 | AliMUONLocalStruct(const AliMUONLocalStruct& event); |
22 | AliMUONLocalStruct& operator=(const AliMUONLocalStruct& event); |
23 | |
24 | |
71a2d3aa |
25 | virtual ~AliMUONLocalStruct(); |
32def6aa |
26 | |
27 | // local board info |
71a2d3aa |
28 | /// Return local data |
32def6aa |
29 | UInt_t GetData(Int_t n) const {return fData[n];} |
30 | |
71a2d3aa |
31 | /// Return X2 |
32def6aa |
32 | UShort_t GetX2() const {return (fData[0] >> 16) & 0xFFFF;} |
71a2d3aa |
33 | /// Return X1 |
32def6aa |
34 | UShort_t GetX1() const {return (fData[0]) & 0xFFFF;} |
71a2d3aa |
35 | /// Return X4 |
32def6aa |
36 | UShort_t GetX4() const {return (fData[1] >> 16) & 0xFFFF;} |
71a2d3aa |
37 | /// Return X3 |
32def6aa |
38 | UShort_t GetX3() const {return (fData[1]) & 0xFFFF;} |
39 | |
71a2d3aa |
40 | /// Return Y2 |
32def6aa |
41 | UShort_t GetY2() const {return (fData[2] >> 16) & 0xFFFF;} |
71a2d3aa |
42 | /// Return Y1 |
32def6aa |
43 | UShort_t GetY1() const {return (fData[2]) & 0xFFFF;} |
71a2d3aa |
44 | /// Return Y4 |
32def6aa |
45 | UShort_t GetY4() const {return (fData[3] >> 16) & 0xFFFF;} |
71a2d3aa |
46 | /// Return Y3 |
32def6aa |
47 | UShort_t GetY3() const {return (fData[3]) & 0xFFFF;} |
48 | |
71a2d3aa |
49 | /// Return Id |
1afc1008 |
50 | UChar_t GetId() const {return fData[4] >> 19 & 0xF;} |
71a2d3aa |
51 | /// Return Dec |
1afc1008 |
52 | UChar_t GetDec() const {return fData[4] >> 15 & 0xF;} |
71a2d3aa |
53 | /// Return TriggerY |
1afc1008 |
54 | Bool_t GetTriggerY() const {return (fData[4] >> 14 & 0x1);} |
71a2d3aa |
55 | /// Return Upos |
1afc1008 |
56 | UChar_t GetYPos() const {return fData[4] >> 10 & 0xF;} |
fa3fe02e |
57 | /// Get Sign of X deviation |
c4860b34 |
58 | UChar_t GetSXDev() const {return fData[4] >> 9 & 0x1;} |
fa3fe02e |
59 | /// Get X deviation |
c4860b34 |
60 | UChar_t GetXDev() const {return fData[4] >> 5 & 0xF;} |
71a2d3aa |
61 | /// Return TriggerX |
1afc1008 |
62 | Bool_t GetTriggerX() const {return ((GetXDev() >> 4 & 0x1) && !(GetXDev() & 0xF));} |
71a2d3aa |
63 | /// Return Xpos |
1afc1008 |
64 | UChar_t GetXPos() const {return fData[4] & 0x1F;} |
32def6aa |
65 | |
71a2d3aa |
66 | /// Return LPT |
32def6aa |
67 | Int_t GetLpt() const {return (GetDec() & 0x3);} |
71a2d3aa |
68 | /// Return HPT |
32def6aa |
69 | Int_t GetHpt() const {return (GetDec() >> 2) & 0x3;} |
70 | |
71a2d3aa |
71 | /// Set local data |
32def6aa |
72 | void SetData(UInt_t d, Int_t n) {fData[n] = d;} |
73 | |
71a2d3aa |
74 | /// Return data |
32def6aa |
75 | UInt_t* GetData() {return &fData[0];} |
76 | |
77 | // Scaler methods |
71a2d3aa |
78 | /// Return local L0 |
32def6aa |
79 | UInt_t GetL0() const {return fL0;} |
71a2d3aa |
80 | /// Return local hold (dead time) |
32def6aa |
81 | UInt_t GetHold() const {return fHold;} |
71a2d3aa |
82 | /// Return local clock |
32def6aa |
83 | UInt_t GetClock() const {return fClk;} |
71a2d3aa |
84 | /// Return switch |
32def6aa |
85 | UChar_t GetSwitch() const {return (fEOS >> 2) & 0x3FF;} |
71a2d3aa |
86 | /// Return ComptXY |
32def6aa |
87 | UChar_t GetComptXY() const {return fEOS & 3;} |
88 | |
71a2d3aa |
89 | /// Return XY1 |
dfba12ee |
90 | UShort_t GetXY1(Int_t n) const {return (n % 2 == 0) ? |
91 | (fScaler[TMath::Nint(Float_t(n/2))] & 0xFFFF) : |
92 | (fScaler[TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;} |
93 | |
71a2d3aa |
94 | /// Return XY2 |
dfba12ee |
95 | UShort_t GetXY2(Int_t n) const {return (n % 2 == 0) ? |
96 | (fScaler[8 + TMath::Nint(Float_t(n/2))] & 0xFFFF) : |
97 | (fScaler[8 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;} |
98 | |
71a2d3aa |
99 | /// Return XY3 |
dfba12ee |
100 | UShort_t GetXY3(Int_t n) const {return (n % 2 == 0) ? |
101 | (fScaler[8*2 + TMath::Nint(Float_t(n/2))] & 0xFFFF) : |
102 | (fScaler[8*2 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;} |
103 | |
71a2d3aa |
104 | /// Return XY4 |
dfba12ee |
105 | UShort_t GetXY4(Int_t n) const {return (n % 2 == 0) ? |
106 | (fScaler[8*3 + TMath::Nint(Float_t(n/2))] & 0xFFFF) : |
107 | (fScaler[8*3 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;} |
32def6aa |
108 | |
71a2d3aa |
109 | /// Return scalers |
32def6aa |
110 | UInt_t* GetScalers() {return &fL0;} |
111 | |
112 | // get length |
71a2d3aa |
113 | /// Return scaler length in word |
32def6aa |
114 | Int_t GetScalerLength() const {return fgkScalerLength;} |
71a2d3aa |
115 | /// Return local info length in word |
32def6aa |
116 | Int_t GetLength() const {return fgkLength;} |
71a2d3aa |
117 | /// Return end of local info word |
32def6aa |
118 | UInt_t GetEndOfLocal() const {return fgkEndOfLocal;} |
71a2d3aa |
119 | /// Return Word for "empty" slots |
b2e46925 |
120 | UInt_t GetDisableWord() const {return fgkDisableWord;} |
32def6aa |
121 | |
71a2d3aa |
122 | // set random numbers to fill variable |
32def6aa |
123 | void SetScalersNumbers(); |
124 | |
125 | private: |
126 | |
127 | // local info |
829425a5 |
128 | UInt_t fData[5]; ///< local data |
32def6aa |
129 | |
130 | // local card scalers |
829425a5 |
131 | UInt_t fL0; ///< local L0 |
132 | UInt_t fHold; ///< local hold (dead time) |
133 | UInt_t fClk; ///< local clock |
32def6aa |
134 | |
829425a5 |
135 | UInt_t fLPtNTrig; ///< local low Pt no trigger |
136 | UInt_t fHPtNTrig; ///< local high Pt no trigger |
32def6aa |
137 | |
829425a5 |
138 | UInt_t fLPtRTrig; ///< local low Pt right trigger |
139 | UInt_t fHPtRTrig; ///< local high Pt right trigger |
32def6aa |
140 | |
829425a5 |
141 | UInt_t fLPtLTrig; ///< local low Pt left trigger |
142 | UInt_t fHPtLTrig; ///< local high Pt left trigger |
32def6aa |
143 | |
829425a5 |
144 | UInt_t fLPtSTrig; ///< local low Pt straight trigger |
145 | UInt_t fHPtSTrig; ///< local high Pt straight trigger |
32def6aa |
146 | |
829425a5 |
147 | UInt_t fScaler[8*4]; ///< local data |
148 | UInt_t fEOS; ///< contains switches conf. & flag for reading X (0) or Y (1) in fScaler |
149 | UInt_t fReset; ///< reset signal |
32def6aa |
150 | |
829425a5 |
151 | static const Int_t fgkLength; ///< local info length in word |
152 | static const Int_t fgkScalerLength; ///< scaler length in word |
153 | static const UInt_t fgkEndOfLocal; ///< end of local info word |
b6ab2009 |
154 | static const UInt_t fgkDisableWord; ///< Word for "empty" slots |
32def6aa |
155 | |
156 | ClassDef(AliMUONLocalStruct,3) |
157 | }; |
158 | #endif |