]>
Commit | Line | Data |
---|---|---|
a9e2aefa | 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 | ||
30178c30 | 16 | /* $Id$ */ |
a9e2aefa | 17 | |
8d7dfec2 | 18 | |
a9e2aefa | 19 | #include "AliMUONLocalTrigger.h" |
2be06f1e | 20 | #include <assert.h> |
21 | #include "AliLog.h" | |
8d7dfec2 | 22 | #include "AliMUONLocalStruct.h" |
a9e2aefa | 23 | |
5398f946 | 24 | /// \class AliMUONLocalTrigger |
8d7dfec2 | 25 | /// Local Trigger algorithm data outputs |
5398f946 | 26 | /// (contains local trigger decision and bit patterns) \n |
27 | /// Add SetLocalStruct method for rawdata (Ch. Finck) | |
28 | /// \author Ph. Crochet | |
29 | ||
30 | /// \cond CLASSIMP | |
31 | ClassImp(AliMUONLocalTrigger) | |
32 | /// \endcond | |
8d7dfec2 | 33 | |
a9e2aefa | 34 | //---------------------------------------------------------------------- |
35 | AliMUONLocalTrigger::AliMUONLocalTrigger() | |
8d7dfec2 | 36 | : TObject(), |
37 | fLoCircuit(0), | |
38 | fLoStripX(0), | |
39 | fLoDev(0), | |
40 | fLoStripY(0), | |
41 | fLoLpt(0), | |
42 | fLoHpt(0), | |
8d7dfec2 | 43 | |
44 | fX1Pattern(0), | |
45 | fX2Pattern(0), | |
46 | fX3Pattern(0), | |
47 | fX4Pattern(0), | |
48 | ||
49 | fY1Pattern(0), | |
50 | fY2Pattern(0), | |
51 | fY3Pattern(0), | |
52 | fY4Pattern(0), | |
53 | ||
54 | fLoDecision(0), | |
55 | fDigits(0) | |
a9e2aefa | 56 | { |
5398f946 | 57 | /// Default constructor |
a9e2aefa | 58 | } |
e9b63742 | 59 | //---------------------------------------------------------------------- |
30178c30 | 60 | AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig) |
1657f946 | 61 | : TObject(theMUONLocalTrig), |
62 | fLoCircuit(theMUONLocalTrig.fLoCircuit), | |
63 | fLoStripX(theMUONLocalTrig.fLoStripX), | |
64 | fLoDev(theMUONLocalTrig.fLoDev), | |
65 | fLoStripY(theMUONLocalTrig.fLoStripY), | |
66 | fLoLpt(theMUONLocalTrig.fLoLpt), | |
67 | fLoHpt(theMUONLocalTrig.fLoHpt), | |
1657f946 | 68 | |
69 | fX1Pattern(theMUONLocalTrig.fX1Pattern), | |
70 | fX2Pattern(theMUONLocalTrig.fX2Pattern), | |
71 | fX3Pattern(theMUONLocalTrig.fX3Pattern), | |
72 | fX4Pattern(theMUONLocalTrig.fX4Pattern), | |
73 | ||
74 | fY1Pattern(theMUONLocalTrig.fY1Pattern), | |
75 | fY2Pattern(theMUONLocalTrig.fY2Pattern), | |
76 | fY3Pattern(theMUONLocalTrig.fY3Pattern), | |
77 | fY4Pattern(theMUONLocalTrig.fY4Pattern), | |
78 | ||
79 | fLoDecision(theMUONLocalTrig.fLoDecision), | |
80 | fDigits(theMUONLocalTrig.fDigits) | |
e9b63742 | 81 | { |
5398f946 | 82 | /// Copy constructor (useful for TClonesArray) |
83 | ||
e9b63742 | 84 | } |
85 | //---------------------------------------------------------------------- | |
30178c30 | 86 | AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) |
e9b63742 | 87 | { |
5398f946 | 88 | /// Assigment operator; |
89 | /// equal operator (useful for non-pointer member in TClonesArray) | |
8d7dfec2 | 90 | |
30178c30 | 91 | if (this == &theMUONLocalTrig) |
e9b63742 | 92 | return *this; |
93 | ||
30178c30 | 94 | // base class assignement |
95 | TObject::operator=(theMUONLocalTrig); | |
96 | ||
97 | fLoCircuit = theMUONLocalTrig.fLoCircuit; | |
98 | fLoStripX = theMUONLocalTrig.fLoStripX; | |
99 | fLoDev = theMUONLocalTrig.fLoDev; | |
100 | fLoStripY = theMUONLocalTrig.fLoStripY; | |
101 | fLoLpt = theMUONLocalTrig.fLoLpt; | |
102 | fLoHpt = theMUONLocalTrig.fLoHpt; | |
e9b63742 | 103 | |
6dc7fcdf | 104 | fX1Pattern = theMUONLocalTrig.fX1Pattern; |
105 | fX2Pattern = theMUONLocalTrig.fX2Pattern; | |
106 | fX3Pattern = theMUONLocalTrig.fX3Pattern; | |
107 | fX4Pattern = theMUONLocalTrig.fX4Pattern; | |
108 | ||
109 | fY1Pattern = theMUONLocalTrig.fY1Pattern; | |
110 | fY2Pattern = theMUONLocalTrig.fY2Pattern; | |
111 | fY3Pattern = theMUONLocalTrig.fY3Pattern; | |
112 | fY4Pattern = theMUONLocalTrig.fY4Pattern; | |
113 | ||
114 | fLoDecision = theMUONLocalTrig.fLoDecision; | |
115 | ||
2be06f1e | 116 | fDigits = theMUONLocalTrig.fDigits; |
117 | ||
e9b63742 | 118 | return *this; |
119 | } | |
120 | ||
a9e2aefa | 121 | //---------------------------------------------------------------------- |
da3d7180 | 122 | AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) : |
123 | fLoCircuit(localtr[0]), | |
124 | fLoStripX(localtr[1]), | |
125 | fLoDev(localtr[2]), | |
126 | fLoStripY(localtr[3]), | |
127 | fLoLpt(localtr[4]), | |
128 | fLoHpt(localtr[5]), | |
ad705f30 | 129 | // keep on with this way |
da3d7180 | 130 | fX1Pattern((UShort_t)localtr[7]), |
131 | fX2Pattern((UShort_t)localtr[8]), | |
132 | fX3Pattern((UShort_t)localtr[9]), | |
133 | fX4Pattern((UShort_t)localtr[10]), | |
134 | ||
135 | fY1Pattern((UShort_t)localtr[11]), | |
136 | fY2Pattern((UShort_t)localtr[12]), | |
137 | fY3Pattern((UShort_t)localtr[13]), | |
138 | fY4Pattern((UShort_t)localtr[14]), | |
139 | ||
140 | fLoDecision(0), | |
141 | fDigits(digits) | |
a9e2aefa | 142 | { |
da3d7180 | 143 | /// Add a local trigger object |
a9e2aefa | 144 | } |
1657f946 | 145 | |
6dc7fcdf | 146 | //---------------------------------------------------------------------- |
147 | Char_t AliMUONLocalTrigger::GetLoDecision() | |
148 | { | |
5398f946 | 149 | /// Get local decision |
150 | /// from H(L)pt; | |
151 | /// returns local trigger decision | |
8d7dfec2 | 152 | |
6dc7fcdf | 153 | fLoDecision = (fLoLpt & 0x3); |
154 | fLoDecision |= (fLoHpt << 2) & 0xC; | |
402fb06e | 155 | |
6dc7fcdf | 156 | return fLoDecision; |
157 | } | |
2be06f1e | 158 | |
159 | //---------------------------------------------------------------------- | |
160 | void AliMUONLocalTrigger::GetDigit( | |
8d7dfec2 | 161 | Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const |
2be06f1e | 162 | { |
5398f946 | 163 | /// Returns the i'th digit that fired this circuit. |
164 | /// The number of digits can be found with NumberOfDigits(), that is | |
165 | /// i is valid in the range [ 0 , NumberOfDigits() - 1 ] | |
2be06f1e | 166 | |
167 | Int_t digitnumber = fDigits[i]; | |
168 | DecodeDigitNumber(digitnumber, chamber, cathode, digit); | |
b8fdc4dd | 169 | } |
2be06f1e | 170 | |
171 | //---------------------------------------------------------------------- | |
8d7dfec2 | 172 | Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, |
173 | Int_t digit) | |
2be06f1e | 174 | { |
5398f946 | 175 | /// Encodes a 32-bit digit number from digit information to be stored |
176 | /// in internal integer arrays. Note that the value of the digit parameter | |
177 | /// can not be larger than 0x07FFFFFF. | |
2be06f1e | 178 | |
179 | assert( 0 <= cathode && cathode <= 1 ); | |
180 | assert( 0 <= chamber && chamber <= 13 ); | |
181 | ||
182 | if ((digit & 0xF8000000) != 0) | |
183 | { | |
184 | AliErrorGeneral("AliMUONLocalTrigger", Form( | |
185 | "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.", | |
186 | cathode, chamber, digit | |
187 | )); | |
188 | return -1; | |
189 | }; | |
190 | ||
191 | return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit; | |
b8fdc4dd | 192 | } |
2be06f1e | 193 | |
194 | //---------------------------------------------------------------------- | |
8d7dfec2 | 195 | void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, |
196 | Int_t& cathode, Int_t& digit) | |
2be06f1e | 197 | { |
5398f946 | 198 | /// Decodes a digit number into information about the digit. |
199 | /// One can subsequently fetch the digit with | |
200 | /// AliMUONDataInterface::Digit(chamber, cathode, digit) | |
2be06f1e | 201 | |
202 | cathode = (digitnumber >> 31) & 0x1; | |
203 | chamber = (digitnumber >> 27) & 0xF; | |
204 | digit = digitnumber & 0x7FFFFFF; | |
b8fdc4dd | 205 | } |
2be06f1e | 206 | |
8d7dfec2 | 207 | //---------------------------------------------------------------------- |
208 | void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) | |
209 | { | |
5398f946 | 210 | /// Set local trigger info from rawdata localStruct |
8d7dfec2 | 211 | |
212 | // set id' | |
213 | SetLoCircuit(loCircuit); | |
214 | ||
215 | // set X, Y dev | |
216 | SetLoStripX((Int_t)localStruct.GetXPos()); | |
217 | SetLoStripY((Int_t)localStruct.GetYPos()); | |
218 | SetLoDev((Int_t)localStruct.GetXDev()); | |
219 | ||
220 | // set L(H)pt | |
221 | SetLoLpt(localStruct.GetLpt()); | |
222 | SetLoHpt(localStruct.GetHpt()); | |
223 | ||
224 | // set pattern X | |
225 | SetX1Pattern(localStruct.GetX1()); | |
226 | SetX2Pattern(localStruct.GetX2()); | |
227 | SetX3Pattern(localStruct.GetX3()); | |
228 | SetX4Pattern(localStruct.GetX4()); | |
229 | ||
230 | // set pattern Y | |
231 | SetY1Pattern(localStruct.GetY1()); | |
232 | SetY2Pattern(localStruct.GetY2()); | |
233 | SetY3Pattern(localStruct.GetY3()); | |
234 | SetY4Pattern(localStruct.GetY4()); | |
235 | ||
236 | } | |
eba3379e | 237 | |
238 | //---------------------------------------------------------------------- | |
239 | void AliMUONLocalTrigger::Print(Option_t* opt) const | |
240 | { | |
241 | // | |
242 | // Printing Local Trigger information | |
243 | // | |
244 | TString sopt(opt); | |
245 | sopt.ToUpper(); | |
246 | ||
247 | if ( sopt.Contains("FULL") ) { | |
248 | ||
ad705f30 | 249 | printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt()); |
eba3379e | 250 | |
251 | } | |
252 | } | |
253 |