1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 #include "AliMUONLocalTrigger.h"
21 #include "AliMUONLocalStruct.h"
22 #include <Riostream.h>
25 //-----------------------------------------------------------------------------
26 /// \class AliMUONLocalTrigger
27 /// Local Trigger algorithm data outputs
28 /// (contains local trigger decision and bit patterns) \n
29 /// Add SetLocalStruct method for rawdata (Ch. Finck)
30 /// \author Ph. Crochet
31 //-----------------------------------------------------------------------------
34 ClassImp(AliMUONLocalTrigger)
37 //----------------------------------------------------------------------
38 AliMUONLocalTrigger::AliMUONLocalTrigger()
59 /// Default constructor
61 //----------------------------------------------------------------------
62 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
63 : TObject(theMUONLocalTrig),
64 fLoCircuit(theMUONLocalTrig.fLoCircuit),
65 fLoStripX(theMUONLocalTrig.fLoStripX),
66 fLoDev(theMUONLocalTrig.fLoDev),
67 fLoSdev(theMUONLocalTrig.fLoSdev),
68 fLoTrigY(theMUONLocalTrig.fLoTrigY),
69 fLoStripY(theMUONLocalTrig.fLoStripY),
70 fLoLpt(theMUONLocalTrig.fLoLpt),
71 fLoHpt(theMUONLocalTrig.fLoHpt),
73 fX1Pattern(theMUONLocalTrig.fX1Pattern),
74 fX2Pattern(theMUONLocalTrig.fX2Pattern),
75 fX3Pattern(theMUONLocalTrig.fX3Pattern),
76 fX4Pattern(theMUONLocalTrig.fX4Pattern),
78 fY1Pattern(theMUONLocalTrig.fY1Pattern),
79 fY2Pattern(theMUONLocalTrig.fY2Pattern),
80 fY3Pattern(theMUONLocalTrig.fY3Pattern),
81 fY4Pattern(theMUONLocalTrig.fY4Pattern)
83 /// Copy constructor (useful for TClonesArray)
87 //----------------------------------------------------------------------
88 AliMUONLocalTrigger::~AliMUONLocalTrigger()
93 //----------------------------------------------------------------------
94 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
96 /// Assigment operator;
97 /// equal operator (useful for non-pointer member in TClonesArray)
99 if (this == &theMUONLocalTrig)
102 // base class assignement
103 TObject::operator=(theMUONLocalTrig);
105 fLoCircuit = theMUONLocalTrig.fLoCircuit;
106 fLoStripX = theMUONLocalTrig.fLoStripX;
107 fLoDev = theMUONLocalTrig.fLoDev;
108 fLoSdev = theMUONLocalTrig.fLoSdev;
109 fLoTrigY = theMUONLocalTrig.fLoTrigY;
110 fLoStripY = theMUONLocalTrig.fLoStripY;
111 fLoLpt = theMUONLocalTrig.fLoLpt;
112 fLoHpt = theMUONLocalTrig.fLoHpt;
114 fX1Pattern = theMUONLocalTrig.fX1Pattern;
115 fX2Pattern = theMUONLocalTrig.fX2Pattern;
116 fX3Pattern = theMUONLocalTrig.fX3Pattern;
117 fX4Pattern = theMUONLocalTrig.fX4Pattern;
119 fY1Pattern = theMUONLocalTrig.fY1Pattern;
120 fY2Pattern = theMUONLocalTrig.fY2Pattern;
121 fY3Pattern = theMUONLocalTrig.fY3Pattern;
122 fY4Pattern = theMUONLocalTrig.fY4Pattern;
128 //----------------------------------------------------------------------
129 Char_t AliMUONLocalTrigger::GetLoDecision() const
131 /// Get local decision
133 /// returns local trigger decision
135 Char_t rv = (fLoLpt & 0x3);
136 rv |= (fLoHpt << 2) & 0xC;
141 //___________________________________________
142 void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
144 /// return array of X pattern
145 Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()};
149 //___________________________________________
150 void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
152 /// return array of Y pattern
153 Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()};
157 //___________________________________________
159 AliMUONLocalTrigger::IsNull() const
161 /// Whether or not this card has something usefull to say or not
162 return ( fX1Pattern == 0 &&
172 //----------------------------------------------------------------------
173 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
175 /// Set local trigger info from rawdata localStruct
178 SetLoCircuit(loCircuit);
180 // set X, Y, dev, Sdev and TrigY
181 SetLoStripX((Int_t)localStruct.GetXPos());
182 SetLoStripY((Int_t)localStruct.GetYPos());
183 SetLoDev((Int_t)localStruct.GetXDev());
184 SetLoSdev((Int_t)localStruct.GetSXDev());
185 SetLoTrigY((Int_t)localStruct.GetTrigY());
188 SetLoLpt(localStruct.GetLpt());
189 SetLoHpt(localStruct.GetHpt());
192 SetX1Pattern(localStruct.GetX1());
193 SetX2Pattern(localStruct.GetX2());
194 SetX3Pattern(localStruct.GetX3());
195 SetX4Pattern(localStruct.GetX4());
198 SetY1Pattern(localStruct.GetY1());
199 SetY2Pattern(localStruct.GetY2());
200 SetY3Pattern(localStruct.GetY3());
201 SetY4Pattern(localStruct.GetY4());
205 //----------------------------------------------------------------------
206 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct)
208 /// Set local trigger info from rawdata localStruct (new raw reader)
211 SetLoCircuit(loCircuit);
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());
221 SetLoLpt(localStruct.GetLpt());
222 SetLoHpt(localStruct.GetHpt());
225 SetX1Pattern(localStruct.GetX1());
226 SetX2Pattern(localStruct.GetX2());
227 SetX3Pattern(localStruct.GetX3());
228 SetX4Pattern(localStruct.GetX4());
231 SetY1Pattern(localStruct.GetY1());
232 SetY2Pattern(localStruct.GetY2());
233 SetY3Pattern(localStruct.GetY3());
234 SetY4Pattern(localStruct.GetY4());
240 const char* AsString(Int_t t)
263 //----------------------------------------------------------------------
264 void AliMUONLocalTrigger::Print(Option_t* opt) const
266 /// Printing Local Trigger information
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;
276 if ( sopt.Contains("FULL") ) {
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;
285 //----------------------------------------------------------------------
286 Int_t AliMUONLocalTrigger::GetDeviation() const
290 Int_t deviation = LoDev();
292 if ( !LoSdev() && deviation ) sign=-1;
293 if ( !LoSdev() && !deviation ) sign= 0;
294 if ( LoSdev() == 1 ) sign=+1;
300 //----------------------------------------------------------------------
301 void AliMUONLocalTrigger::SetDeviation(Int_t deviation)
303 /// set LoDev and LoSDev according to deviation
310 SetLoDev(-deviation);
315 //----------------------------------------------------------------------
317 AliMUONLocalTrigger::GetName() const
321 return Form("LocalBoard%3d",LoCircuit());
325 //----------------------------------------------------------------------
326 Bool_t AliMUONLocalTrigger::IsTrigX()
328 /// Trigger response X strips
330 if ( LoSdev()==1 && LoDev()==0 &&
331 LoStripX()==0) xTrig=kFALSE; // no trigger in X
332 else xTrig = kTRUE; // trigger in X
337 //----------------------------------------------------------------------
338 Bool_t AliMUONLocalTrigger::IsTrigY()
340 /// Trigger response Y strips
343 LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y
344 else yTrig = kTRUE; // trigger in Y