]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONLocalTrigger.cxx
Adding Set/Get methods for trigger pattern
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTrigger.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18
19
20 #include "AliMUONLocalTrigger.h"
21 #include <assert.h>
22 #include "AliLog.h"
23 #include "AliMUONLocalStruct.h"
24
25 ClassImp(AliMUONLocalTrigger)
26
27 /// ------------------
28 /// Class AliMUONLocalTrigger
29 /// ------------------
30 /// Local Trigger algorithm data outputs
31 /// (contains local trigger decision and bit patterns)
32 /// Ph. Crochet
33 ///
34 /// add SetLocalStruct method for rawdata
35 /// Ch. Finck
36
37 //----------------------------------------------------------------------
38 AliMUONLocalTrigger::AliMUONLocalTrigger()
39   : TObject(), 
40     fLoCircuit(0),
41     fLoStripX(0),
42     fLoDev(0),
43     fLoStripY(0),
44     fLoLpt(0),
45     fLoHpt(0),
46     fLoApt(0),
47     
48     fX1Pattern(0),
49     fX2Pattern(0),
50     fX3Pattern(0),
51     fX4Pattern(0),
52     
53     fY1Pattern(0),
54     fY2Pattern(0),
55     fY3Pattern(0),
56     fY4Pattern(0),
57     
58     fLoDecision(0),
59     fDigits(0)
60 {
61   //
62   // constructor
63   //
64 }
65 //----------------------------------------------------------------------
66 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
67   : TObject(theMUONLocalTrig)
68 {
69   //
70   // copy constructor (useful for TClonesArray)
71   //
72   fLoCircuit = theMUONLocalTrig.fLoCircuit;
73   fLoStripX  = theMUONLocalTrig.fLoStripX;         
74   fLoDev     = theMUONLocalTrig.fLoDev;           
75   fLoStripY  = theMUONLocalTrig.fLoStripY;           
76   fLoLpt     = theMUONLocalTrig.fLoLpt;
77   fLoHpt     = theMUONLocalTrig.fLoHpt;
78   fLoApt     = theMUONLocalTrig.fLoApt;
79
80   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
81   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
82   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
83   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
84
85   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
86   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
87   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
88   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
89
90   fLoDecision =  theMUONLocalTrig.fLoDecision;
91
92   fDigits = theMUONLocalTrig.fDigits;
93 }
94 //----------------------------------------------------------------------
95 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
96 {
97   // assigment operator
98   //
99   // equal operator (useful for non-pointer member in TClonesArray)
100
101   if (this == &theMUONLocalTrig)
102     return *this;
103
104   // base class assignement
105   TObject::operator=(theMUONLocalTrig);
106
107   fLoCircuit = theMUONLocalTrig.fLoCircuit;
108   fLoStripX  = theMUONLocalTrig.fLoStripX;         
109   fLoDev     = theMUONLocalTrig.fLoDev;           
110   fLoStripY  = theMUONLocalTrig.fLoStripY;           
111   fLoLpt     = theMUONLocalTrig.fLoLpt;
112   fLoHpt     = theMUONLocalTrig.fLoHpt;
113   fLoApt     = theMUONLocalTrig.fLoApt;
114
115   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
116   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
117   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
118   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
119
120   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
121   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
122   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
123   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
124
125   fLoDecision =  theMUONLocalTrig.fLoDecision;
126
127   fDigits = theMUONLocalTrig.fDigits;
128
129   return *this;
130 }
131
132 //----------------------------------------------------------------------
133 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
134 {
135   //
136   // add a local trigger object 
137   //
138   fLoCircuit = localtr[0];
139   fLoStripX  = localtr[1];         
140   fLoDev     = localtr[2];           
141   fLoStripY  = localtr[3];           
142   fLoLpt     = localtr[4];
143   fLoHpt     = localtr[5];
144   fLoApt     = localtr[6];
145
146   // keep on with this way
147   fX1Pattern = (UShort_t)localtr[7];
148   fX2Pattern = (UShort_t)localtr[8];
149   fX3Pattern = (UShort_t)localtr[9];
150   fX4Pattern = (UShort_t)localtr[10];
151
152   fY1Pattern = (UShort_t)localtr[11];
153   fY2Pattern = (UShort_t)localtr[12];
154   fY3Pattern = (UShort_t)localtr[13];
155   fY4Pattern = (UShort_t)localtr[14];
156
157   fDigits = digits;
158 }
159 //----------------------------------------------------------------------
160 Char_t AliMUONLocalTrigger::GetLoDecision()
161 {
162   // get local decision 
163   // from H(L)pt
164   // returns local trigger decision
165
166   fLoDecision  = (fLoLpt & 0x3);
167   fLoDecision |= (fLoHpt << 2) & 0xC;
168
169   return fLoDecision;
170 }
171
172 //----------------------------------------------------------------------
173 void AliMUONLocalTrigger::GetDigit(
174                 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
175 {
176 // Returns the i'th digit that fired this circuit.
177 // The number of digits can be found with NumberOfDigits(), that is 
178 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
179
180         Int_t digitnumber = fDigits[i];
181         DecodeDigitNumber(digitnumber, chamber, cathode, digit);
182 }
183
184 //----------------------------------------------------------------------
185 Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, 
186                                              Int_t digit)
187 {
188 // Encodes a 32-bit digit number from digit information to be stored
189 // in internal integer arrays. Note that the value of the digit parameter
190 // can not be larger than 0x07FFFFFF.
191
192         assert( 0 <= cathode && cathode <= 1 );
193         assert( 0 <= chamber && chamber <= 13 );
194
195         if ((digit & 0xF8000000) != 0)
196         {
197                 AliErrorGeneral("AliMUONLocalTrigger", Form(
198                         "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
199                         cathode, chamber, digit
200                 ));
201                 return -1;
202         };
203
204         return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
205 }
206
207 //----------------------------------------------------------------------
208 void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, 
209                                             Int_t& cathode, Int_t& digit)
210 {
211 // Decodes a digit number into information about the digit.
212 // One can subsequently fetch the digit with
213 // AliMUONDataInterface::Digit(chamber, cathode, digit)
214
215         cathode = (digitnumber >> 31) & 0x1;
216         chamber = (digitnumber >> 27) & 0xF;
217         digit = digitnumber & 0x7FFFFFF;
218 }
219
220 //----------------------------------------------------------------------
221 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
222 {
223   //
224   // Set local trigger info from rawdata localStruct
225   //
226
227   // set id'
228   SetLoCircuit(loCircuit);
229
230   // set X, Y dev  
231   SetLoStripX((Int_t)localStruct.GetXPos());
232   SetLoStripY((Int_t)localStruct.GetYPos());
233   SetLoDev((Int_t)localStruct.GetXDev());
234  
235   // set L(H)pt
236   SetLoLpt(localStruct.GetLpt());
237   SetLoHpt(localStruct.GetHpt());
238
239   // set pattern X
240   SetX1Pattern(localStruct.GetX1());
241   SetX2Pattern(localStruct.GetX2());
242   SetX3Pattern(localStruct.GetX3());
243   SetX4Pattern(localStruct.GetX4());
244
245   // set pattern Y
246   SetY1Pattern(localStruct.GetY1());
247   SetY2Pattern(localStruct.GetY2());
248   SetY3Pattern(localStruct.GetY3());
249   SetY4Pattern(localStruct.GetY4());
250
251 }