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