Line data Source code
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 : #include "AliMUONLocalTrigger.h"
20 : #include "AliLog.h"
21 : #include "AliMUONLocalStruct.h"
22 : #include "AliMUONRawStreamTriggerHP.h"
23 : #include <Riostream.h>
24 : #include <TArrayS.h>
25 :
26 : //-----------------------------------------------------------------------------
27 : /// \class AliMUONLocalTrigger
28 : /// Local Trigger algorithm data outputs
29 : /// (contains local trigger decision and bit patterns) \n
30 : /// Add SetLocalStruct method for rawdata (Ch. Finck)
31 : /// \author Ph. Crochet
32 : //-----------------------------------------------------------------------------
33 :
34 : using std::endl;
35 : using std::cout;
36 : /// \cond CLASSIMP
37 18 : ClassImp(AliMUONLocalTrigger)
38 : /// \endcond
39 :
40 : //----------------------------------------------------------------------
41 : AliMUONLocalTrigger::AliMUONLocalTrigger()
42 2668 : : TObject(),
43 2668 : fLoCircuit(0),
44 2668 : fLoStripX(0),
45 2668 : fLoDev(0),
46 2668 : fLoSdev(1),
47 2668 : fLoTrigY(1),
48 2668 : fLoStripY(15),
49 2668 : fLoLpt(0),
50 2668 : fLoHpt(0),
51 :
52 2668 : fX1Pattern(0),
53 2668 : fX2Pattern(0),
54 2668 : fX3Pattern(0),
55 2668 : fX4Pattern(0),
56 :
57 2668 : fY1Pattern(0),
58 2668 : fY2Pattern(0),
59 2668 : fY3Pattern(0),
60 2668 : fY4Pattern(0),
61 :
62 2668 : fHitPatternFromResponse(0xFF),
63 2668 : fTriggerWithoutChamber(0)
64 13340 : {
65 : /// Default constructor
66 5336 : }
67 : //----------------------------------------------------------------------
68 : AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
69 173460 : : TObject(theMUONLocalTrig),
70 173460 : fLoCircuit(theMUONLocalTrig.fLoCircuit),
71 173460 : fLoStripX(theMUONLocalTrig.fLoStripX),
72 173460 : fLoDev(theMUONLocalTrig.fLoDev),
73 173460 : fLoSdev(theMUONLocalTrig.fLoSdev),
74 173460 : fLoTrigY(theMUONLocalTrig.fLoTrigY),
75 173460 : fLoStripY(theMUONLocalTrig.fLoStripY),
76 173460 : fLoLpt(theMUONLocalTrig.fLoLpt),
77 173460 : fLoHpt(theMUONLocalTrig.fLoHpt),
78 :
79 173460 : fX1Pattern(theMUONLocalTrig.fX1Pattern),
80 173460 : fX2Pattern(theMUONLocalTrig.fX2Pattern),
81 173460 : fX3Pattern(theMUONLocalTrig.fX3Pattern),
82 173460 : fX4Pattern(theMUONLocalTrig.fX4Pattern),
83 :
84 173460 : fY1Pattern(theMUONLocalTrig.fY1Pattern),
85 173460 : fY2Pattern(theMUONLocalTrig.fY2Pattern),
86 173460 : fY3Pattern(theMUONLocalTrig.fY3Pattern),
87 173460 : fY4Pattern(theMUONLocalTrig.fY4Pattern),
88 :
89 173460 : fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse),
90 173460 : fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber)
91 867300 : {
92 : /// Copy constructor (useful for TClonesArray)
93 :
94 346920 : }
95 :
96 : //----------------------------------------------------------------------
97 : AliMUONLocalTrigger::~AliMUONLocalTrigger()
98 16990 : {
99 : /// Destructor
100 19581 : }
101 :
102 : //----------------------------------------------------------------------
103 : AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
104 : {
105 : /// Assigment operator;
106 : /// equal operator (useful for non-pointer member in TClonesArray)
107 :
108 0 : if (this == &theMUONLocalTrig)
109 0 : return *this;
110 :
111 : // base class assignement
112 0 : TObject::operator=(theMUONLocalTrig);
113 :
114 0 : fLoCircuit = theMUONLocalTrig.fLoCircuit;
115 0 : fLoStripX = theMUONLocalTrig.fLoStripX;
116 0 : fLoDev = theMUONLocalTrig.fLoDev;
117 0 : fLoSdev = theMUONLocalTrig.fLoSdev;
118 0 : fLoTrigY = theMUONLocalTrig.fLoTrigY;
119 0 : fLoStripY = theMUONLocalTrig.fLoStripY;
120 0 : fLoLpt = theMUONLocalTrig.fLoLpt;
121 0 : fLoHpt = theMUONLocalTrig.fLoHpt;
122 :
123 0 : fX1Pattern = theMUONLocalTrig.fX1Pattern;
124 0 : fX2Pattern = theMUONLocalTrig.fX2Pattern;
125 0 : fX3Pattern = theMUONLocalTrig.fX3Pattern;
126 0 : fX4Pattern = theMUONLocalTrig.fX4Pattern;
127 :
128 0 : fY1Pattern = theMUONLocalTrig.fY1Pattern;
129 0 : fY2Pattern = theMUONLocalTrig.fY2Pattern;
130 0 : fY3Pattern = theMUONLocalTrig.fY3Pattern;
131 0 : fY4Pattern = theMUONLocalTrig.fY4Pattern;
132 :
133 0 : fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse;
134 0 : fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber;
135 :
136 0 : return *this;
137 0 : }
138 :
139 :
140 : //----------------------------------------------------------------------
141 : Char_t AliMUONLocalTrigger::GetLoDecision() const
142 : {
143 : /// Get local decision
144 : /// from H(L)pt;
145 : /// returns local trigger decision
146 :
147 1872 : Char_t rv = (fLoLpt & 0x3);
148 936 : rv |= (fLoHpt << 2) & 0xC;
149 :
150 936 : return rv;
151 : }
152 :
153 : //___________________________________________
154 : void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
155 : {
156 : /// return array of X pattern
157 1546 : Short_t vec[4] = {static_cast<Short_t>(GetX1Pattern()), static_cast<Short_t>(GetX2Pattern()), static_cast<Short_t>(GetX3Pattern()), static_cast<Short_t>(GetX4Pattern())};
158 773 : array.Set(4, vec);
159 773 : }
160 :
161 : //___________________________________________
162 : void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
163 : {
164 : /// return array of Y pattern
165 1546 : Short_t vec[4] = {static_cast<Short_t>(GetY1Pattern()), static_cast<Short_t>(GetY2Pattern()), static_cast<Short_t>(GetY3Pattern()), static_cast<Short_t>(GetY4Pattern())};
166 773 : array.Set(4, vec);
167 773 : }
168 :
169 : //___________________________________________
170 : Bool_t
171 : AliMUONLocalTrigger::IsNull() const
172 : {
173 : /// Whether or not this card has something usefull to say or not
174 519816 : return ( fX1Pattern == 0 &&
175 171077 : fX2Pattern == 0 &&
176 171075 : fX3Pattern == 0 &&
177 171064 : fX4Pattern == 0 &&
178 171064 : fY1Pattern == 0 &&
179 170149 : fY2Pattern == 0 &&
180 170149 : fY3Pattern == 0 &&
181 170147 : fY4Pattern == 0 );
182 : }
183 :
184 : //----------------------------------------------------------------------
185 : void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
186 : {
187 : /// Set local trigger info from rawdata localStruct
188 :
189 : // set id'
190 0 : SetLoCircuit(loCircuit);
191 :
192 : // set X, Y, dev, Sdev and TrigY
193 0 : SetLoStripX((Int_t)localStruct.GetXPos());
194 0 : SetLoStripY((Int_t)localStruct.GetYPos());
195 0 : SetLoDev((Int_t)localStruct.GetXDev());
196 0 : SetLoSdev((Int_t)localStruct.GetSXDev());
197 0 : SetLoTrigY((Int_t)localStruct.GetTrigY());
198 :
199 : // set L(H)pt
200 0 : SetLoLpt(localStruct.GetLpt());
201 0 : SetLoHpt(localStruct.GetHpt());
202 :
203 : // set pattern X
204 0 : SetX1Pattern(localStruct.GetX1());
205 0 : SetX2Pattern(localStruct.GetX2());
206 0 : SetX3Pattern(localStruct.GetX3());
207 0 : SetX4Pattern(localStruct.GetX4());
208 :
209 : // set pattern Y
210 0 : SetY1Pattern(localStruct.GetY1());
211 0 : SetY2Pattern(localStruct.GetY2());
212 0 : SetY3Pattern(localStruct.GetY3());
213 0 : SetY4Pattern(localStruct.GetY4());
214 :
215 0 : }
216 :
217 : //----------------------------------------------------------------------
218 : void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct)
219 : {
220 : /// Set local trigger info from rawdata localStruct (new raw reader)
221 :
222 : // set id'
223 1936 : SetLoCircuit(loCircuit);
224 :
225 : // set X, Y, dev, Sdev and TrigY
226 968 : SetLoStripX((Int_t)localStruct.GetXPos());
227 968 : SetLoStripY((Int_t)localStruct.GetYPos());
228 968 : SetLoDev((Int_t)localStruct.GetXDev());
229 968 : SetLoSdev((Int_t)localStruct.GetSXDev());
230 968 : SetLoTrigY((Int_t)localStruct.GetTrigY());
231 :
232 : // set L(H)pt
233 968 : SetLoLpt(localStruct.GetLpt());
234 968 : SetLoHpt(localStruct.GetHpt());
235 :
236 : // set pattern X
237 968 : SetX1Pattern(localStruct.GetX1());
238 968 : SetX2Pattern(localStruct.GetX2());
239 968 : SetX3Pattern(localStruct.GetX3());
240 968 : SetX4Pattern(localStruct.GetX4());
241 :
242 : // set pattern Y
243 968 : SetY1Pattern(localStruct.GetY1());
244 968 : SetY2Pattern(localStruct.GetY2());
245 968 : SetY3Pattern(localStruct.GetY3());
246 968 : SetY4Pattern(localStruct.GetY4());
247 :
248 968 : }
249 :
250 : namespace
251 : {
252 : const char* AsString(Int_t t)
253 : {
254 0 : switch (t)
255 : {
256 : case 0:
257 0 : return "no";
258 : break;
259 : case 1:
260 0 : return "minus";
261 : break;
262 : case 2:
263 0 : return "plus";
264 : break;
265 : case 3:
266 0 : return "undef";
267 : break;
268 : default:
269 0 : return "";
270 : break;
271 : }
272 0 : }
273 : }
274 :
275 : //----------------------------------------------------------------------
276 : void AliMUONLocalTrigger::Print(Option_t* opt) const
277 : {
278 : /// Printing Local Trigger information
279 :
280 0 : TString sopt(opt);
281 0 : sopt.ToUpper();
282 :
283 0 : cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s",
284 0 : LoCircuit(), GetLoDecision(),
285 0 : LoStripX(), LoDev(), LoSdev(), LoStripY(),
286 0 : AsString(LoLpt()),AsString(LoHpt())) << endl;
287 :
288 0 : if ( sopt.Contains("FULL") ) {
289 :
290 0 : cout << Form("Xpatterns = 0x %04x %04x %04x %04x",
291 0 : fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl;
292 0 : cout << Form("Ypatterns = 0x %04x %04x %04x %04x",
293 0 : fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl;
294 : }
295 0 : }
296 :
297 : //----------------------------------------------------------------------
298 : Int_t AliMUONLocalTrigger::GetDeviation() const
299 : {
300 : /// return deviation
301 :
302 56 : Int_t deviation = LoDev();
303 : Int_t sign = 0;
304 40 : if ( !LoSdev() && deviation ) sign=-1;
305 28 : if ( !LoSdev() && !deviation ) sign= 0;
306 44 : if ( LoSdev() == 1 ) sign=+1;
307 28 : deviation *= sign;
308 28 : deviation += 15;
309 28 : return deviation;
310 : }
311 :
312 : //----------------------------------------------------------------------
313 : void AliMUONLocalTrigger::SetDeviation(Int_t deviation)
314 : {
315 : /// set LoDev and LoSDev according to deviation
316 :
317 0 : deviation -= 15;
318 0 : if (deviation > 0) {
319 0 : SetLoDev(deviation);
320 0 : SetLoSdev(1);
321 0 : } else {
322 0 : SetLoDev(-deviation);
323 0 : SetLoSdev(0);
324 : }
325 0 : }
326 :
327 : //----------------------------------------------------------------------
328 : const char*
329 : AliMUONLocalTrigger::GetName() const
330 : {
331 : /// Generate name
332 :
333 0 : return Form("LocalBoard%3d",LoCircuit());
334 : }
335 :
336 :
337 : //----------------------------------------------------------------------
338 : Bool_t AliMUONLocalTrigger::IsTrigX() const
339 : {
340 : /// Trigger response X strips
341 : Bool_t xTrig;
342 332 : if ( LoSdev()==1 && LoDev()==0 &&
343 128 : LoStripX()==0) xTrig=kFALSE; // no trigger in X
344 : else xTrig = kTRUE; // trigger in X
345 94 : return xTrig;
346 : }
347 :
348 :
349 : //----------------------------------------------------------------------
350 : Bool_t AliMUONLocalTrigger::IsTrigY() const
351 : {
352 : /// Trigger response Y strips
353 : Bool_t yTrig;
354 62 : if ( LoTrigY()==1 &&
355 4 : LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y
356 : else yTrig = kTRUE; // trigger in Y
357 30 : return yTrig;
358 : }
|