355c1a1414e727305b1fca0f899c1a3657e706cf
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTriggerBoard.h
1 #ifndef ALIMUONLOCALTRIGGERBOARD_H
2 #define ALIMUONLOCALTRIGGERBOARD_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 sim 
9 /// \class AliMUONLocalTriggerBoard
10 /// \brief Implementation of local trigger board objects
11 ///
12 //  Author Rachid Guernane (LPCCFd)
13
14 #include "AliMUONTriggerBoard.h"
15
16 class AliMUONTriggerLut;
17
18 class AliMUONLocalTriggerBoard : public AliMUONTriggerBoard 
19 {
20    public: 
21
22      /// \todo add comment
23      enum ESwitch { 
24        kX2d = 0,
25        kX2m,
26        kX2u,
27        kOR0,
28        kOR1,
29        kENY,
30        kZeroAllYLSB,
31        kZeroDown,
32        kZeroMiddle,
33        kZeroUp };
34        
35       AliMUONLocalTriggerBoard();
36       AliMUONLocalTriggerBoard(const char *name, Int_t a, AliMUONTriggerLut* lut);
37       virtual ~AliMUONLocalTriggerBoard();
38       
39                        /// Return true if LUT is set
40       Bool_t           HasLUT() const { return (fLUT != 0); }
41
42                        /// Set LUT     
43       void             SetLUT(AliMUONTriggerLut* lut) { fLUT = lut; }
44                        /// Set Coinc 44 (0/1 = coinc34/coinc44)
45       void             SetCoinc44(Int_t coinc44=0) { fCoinc44 = coinc44; }
46       
47       virtual void     Setbit(Int_t strip, Int_t cathode, Int_t chamber);
48       virtual void     SetbitM(Int_t strip, Int_t cathode, Int_t chamber);
49
50       virtual void     Pattern(Option_t *option = "X Y") const; // default option displays X then Y bp
51
52       virtual void     Reset();
53
54                        /// Set i-th Switch value
55       virtual void     SetSwitch(Int_t i, Int_t value) {fSwitch[i] = value;}
56
57                        /// Return i-th Switch value
58       virtual UShort_t GetSwitch(Int_t i) const {return fSwitch[i];}
59
60                        /// Set Transverse connector
61       virtual void     SetTC(Bool_t con) {fTC = con;}
62
63                        /// Return Transverse connector
64       virtual Bool_t   GetTC() const {return fTC;}
65
66                        /// Set Board number
67       virtual void     SetNumber(Int_t nb) {fNumber = nb;}
68
69                        /// Return Board number
70       virtual Int_t    GetNumber() const {return fNumber;}
71
72       virtual void     Module(char *mod);
73
74                        /// Return X34
75       virtual void     GetX34(UShort_t *X) const {for (Int_t i=0;i<2;i++) X[i] = fXY[0][i+2];}
76
77                        /// Set X34
78       virtual void     SetX34(UShort_t *X) {for (Int_t i=0;i<2;i++) fXY[0][i+2] = X[i];}
79
80                        /// Return Y
81       virtual void     GetY(UShort_t *Y) const {for (Int_t i=0;i<4;i++) Y[i] = fXY[1][i];}
82
83                        /// Set Y
84       virtual void     SetY(UShort_t *Y) {for (Int_t i=0;i<4;i++) fXY[1][i] = Y[i];}
85
86                        /// Return XY
87       virtual void     GetXY(UShort_t XY[2][4]) const {for (Int_t i=0;i<2;i++) for (Int_t j=0;j<4;j++) XY[i][j] = fXY[i][j];}
88
89                        /// Return XY
90       virtual UShort_t GetXY(Int_t i, Int_t j) const {return fXY[i][j];} 
91
92                        /// Set XY
93       virtual void     SetXY(UShort_t XY[2][4]) {for (Int_t i=0;i<2;i++) for (Int_t j=0;j<4;j++) fXY[i][j] = XY[i][j];}
94
95       virtual void     Conf() const;
96
97       virtual void     Response();
98
99       virtual void     Mask(Int_t index, UShort_t value);
100
101       virtual void     TrigX(Int_t ch1q[16], Int_t ch2q[16], Int_t ch3q[32], Int_t ch4q[32]);
102       
103       virtual void     Sort2x5(Int_t dev1[6], Int_t dev2[6],
104                                Int_t minDev[6], Int_t &dev1GTdev2);
105       
106       virtual void     TrigY(Int_t y1[16], Int_t y2[16], Int_t y3[16], Int_t y4[16],
107                              Int_t y3u[16], Int_t y3d[16], Int_t y4u[16], Int_t y4d[16]);
108
109                        /// Set XYU
110       virtual void     SetXYU(UShort_t V[2][4]) {for (Int_t i=0;i<2;i++) for (Int_t j=0;j<4;j++) fXYU[i][j] = V[i][j];}
111
112                        /// Set XYD
113       virtual void     SetXYD(UShort_t V[2][4]) {for (Int_t i=0;i<2;i++) for (Int_t j=0;j<4;j++) fXYD[i][j] = V[i][j];}
114
115       virtual void     Scan(Option_t *option = "") const;
116
117       virtual Int_t    GetI() const;
118
119       virtual void     LocalTrigger();
120
121                        /// Return info if Board has triggered
122       virtual Int_t    Triggered() const {return fOutput;}
123
124                        /// Return MT1 X position of the valid road
125       virtual Int_t    GetStripX11() const {return fStripX11;}
126
127                        /// Return MT1 Y position of the valid road
128       virtual Int_t    GetStripY11() const {return fStripY11;}
129
130                        /// Return Deviation in [0;+30]
131       virtual Int_t    GetDev() const {return fDev;}
132       
133                        /// Set Crate name
134       virtual void     SetCrate(TString crate) {fCrate = crate;}
135
136                        /// Return Crate name
137       virtual TString  GetCrate() const {return fCrate;}
138
139    protected:
140
141       static const Int_t fgkCircuitId[234]; ///< old numbering (to be removed)
142
143       virtual void     Resp(Option_t *option) const; ///< local trigger info before ("I") and after ("F") LUT
144
145       virtual void     BP(Option_t *option) const;   ///< display X/Y bp
146
147    private:
148       /// Not implemented
149       AliMUONLocalTriggerBoard(const AliMUONLocalTriggerBoard& right);
150       /// Not implemented
151       AliMUONLocalTriggerBoard&  operator = (const AliMUONLocalTriggerBoard& right);
152
153       Int_t    fNumber;           ///< Board number
154
155       TString  fCrate;            ///< Crate name
156
157       UShort_t fSwitch[10];       ///< Switch
158       UShort_t fXY[2][4];         ///< Bit pattern
159       UShort_t fXYU[2][4];        ///< Bit pattern UP
160       UShort_t fXYD[2][4];        ///< Bit pattern DOWN
161       UShort_t fMask[2][4];       ///< Mask
162
163       Bool_t   fTC;               ///< Transverse connector
164
165       Int_t    fStripX11;         ///< MT1 X position of the valid road 
166
167       Int_t    fStripY11;         ///< MT1 Y position of the valid road
168
169       Int_t    fDev;              ///< Deviation in [0;+30]
170
171       Int_t    fLutLpt[2];        ///< Low Pt cuts estimated from LUT
172       Int_t    fLutHpt[2];        ///< High Pt cuts estimated from LUT
173
174 //    Outputs of the local logic
175       Int_t    fOutput;           ///< Board has triggered
176       Int_t    fMinDevStrip[5];   ///< X (from algo)
177       Int_t    fMinDev[5];        ///< Dev (from algo)
178       Int_t    fCoordY[5];        ///< Y (from algo)
179       
180       AliMUONTriggerLut *fLUT;    //!< Pointer to trigger LUT, that we do not own.
181       Int_t    fCoinc44;          ///< Coinc 44 (0/1 = coinc34/coinc44)
182       
183       ClassDef(AliMUONLocalTriggerBoard,1) 
184 };
185 #endif