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