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