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 "AliMUONRawStreamTriggerHP.h"
23 #include <Riostream.h>
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 //-----------------------------------------------------------------------------
37 ClassImp(AliMUONLocalTrigger)
40 //----------------------------------------------------------------------
41 AliMUONLocalTrigger::AliMUONLocalTrigger()
62 fHitPatternFromResponse(0xFF),
63 fTriggerWithoutChamber(0)
65 /// Default constructor
67 //----------------------------------------------------------------------
68 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
69 : TObject(theMUONLocalTrig),
70 fLoCircuit(theMUONLocalTrig.fLoCircuit),
71 fLoStripX(theMUONLocalTrig.fLoStripX),
72 fLoDev(theMUONLocalTrig.fLoDev),
73 fLoSdev(theMUONLocalTrig.fLoSdev),
74 fLoTrigY(theMUONLocalTrig.fLoTrigY),
75 fLoStripY(theMUONLocalTrig.fLoStripY),
76 fLoLpt(theMUONLocalTrig.fLoLpt),
77 fLoHpt(theMUONLocalTrig.fLoHpt),
79 fX1Pattern(theMUONLocalTrig.fX1Pattern),
80 fX2Pattern(theMUONLocalTrig.fX2Pattern),
81 fX3Pattern(theMUONLocalTrig.fX3Pattern),
82 fX4Pattern(theMUONLocalTrig.fX4Pattern),
84 fY1Pattern(theMUONLocalTrig.fY1Pattern),
85 fY2Pattern(theMUONLocalTrig.fY2Pattern),
86 fY3Pattern(theMUONLocalTrig.fY3Pattern),
87 fY4Pattern(theMUONLocalTrig.fY4Pattern),
89 fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse),
90 fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber)
92 /// Copy constructor (useful for TClonesArray)
96 //----------------------------------------------------------------------
97 AliMUONLocalTrigger::~AliMUONLocalTrigger()
102 //----------------------------------------------------------------------
103 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
105 /// Assigment operator;
106 /// equal operator (useful for non-pointer member in TClonesArray)
108 if (this == &theMUONLocalTrig)
111 // base class assignement
112 TObject::operator=(theMUONLocalTrig);
114 fLoCircuit = theMUONLocalTrig.fLoCircuit;
115 fLoStripX = theMUONLocalTrig.fLoStripX;
116 fLoDev = theMUONLocalTrig.fLoDev;
117 fLoSdev = theMUONLocalTrig.fLoSdev;
118 fLoTrigY = theMUONLocalTrig.fLoTrigY;
119 fLoStripY = theMUONLocalTrig.fLoStripY;
120 fLoLpt = theMUONLocalTrig.fLoLpt;
121 fLoHpt = theMUONLocalTrig.fLoHpt;
123 fX1Pattern = theMUONLocalTrig.fX1Pattern;
124 fX2Pattern = theMUONLocalTrig.fX2Pattern;
125 fX3Pattern = theMUONLocalTrig.fX3Pattern;
126 fX4Pattern = theMUONLocalTrig.fX4Pattern;
128 fY1Pattern = theMUONLocalTrig.fY1Pattern;
129 fY2Pattern = theMUONLocalTrig.fY2Pattern;
130 fY3Pattern = theMUONLocalTrig.fY3Pattern;
131 fY4Pattern = theMUONLocalTrig.fY4Pattern;
133 fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse;
134 fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber;
140 //----------------------------------------------------------------------
141 Char_t AliMUONLocalTrigger::GetLoDecision() const
143 /// Get local decision
145 /// returns local trigger decision
147 Char_t rv = (fLoLpt & 0x3);
148 rv |= (fLoHpt << 2) & 0xC;
153 //___________________________________________
154 void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
156 /// return array of X pattern
157 Short_t vec[4] = {static_cast<Short_t>(GetX1Pattern()), static_cast<Short_t>(GetX2Pattern()), static_cast<Short_t>(GetX3Pattern()), static_cast<Short_t>(GetX4Pattern())};
161 //___________________________________________
162 void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
164 /// return array of Y pattern
165 Short_t vec[4] = {static_cast<Short_t>(GetY1Pattern()), static_cast<Short_t>(GetY2Pattern()), static_cast<Short_t>(GetY3Pattern()), static_cast<Short_t>(GetY4Pattern())};
169 //___________________________________________
171 AliMUONLocalTrigger::IsNull() const
173 /// Whether or not this card has something usefull to say or not
174 return ( fX1Pattern == 0 &&
184 //----------------------------------------------------------------------
185 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
187 /// Set local trigger info from rawdata localStruct
190 SetLoCircuit(loCircuit);
192 // set X, Y, dev, Sdev and TrigY
193 SetLoStripX((Int_t)localStruct.GetXPos());
194 SetLoStripY((Int_t)localStruct.GetYPos());
195 SetLoDev((Int_t)localStruct.GetXDev());
196 SetLoSdev((Int_t)localStruct.GetSXDev());
197 SetLoTrigY((Int_t)localStruct.GetTrigY());
200 SetLoLpt(localStruct.GetLpt());
201 SetLoHpt(localStruct.GetHpt());
204 SetX1Pattern(localStruct.GetX1());
205 SetX2Pattern(localStruct.GetX2());
206 SetX3Pattern(localStruct.GetX3());
207 SetX4Pattern(localStruct.GetX4());
210 SetY1Pattern(localStruct.GetY1());
211 SetY2Pattern(localStruct.GetY2());
212 SetY3Pattern(localStruct.GetY3());
213 SetY4Pattern(localStruct.GetY4());
217 //----------------------------------------------------------------------
218 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct)
220 /// Set local trigger info from rawdata localStruct (new raw reader)
223 SetLoCircuit(loCircuit);
225 // set X, Y, dev, Sdev and TrigY
226 SetLoStripX((Int_t)localStruct.GetXPos());
227 SetLoStripY((Int_t)localStruct.GetYPos());
228 SetLoDev((Int_t)localStruct.GetXDev());
229 SetLoSdev((Int_t)localStruct.GetSXDev());
230 SetLoTrigY((Int_t)localStruct.GetTrigY());
233 SetLoLpt(localStruct.GetLpt());
234 SetLoHpt(localStruct.GetHpt());
237 SetX1Pattern(localStruct.GetX1());
238 SetX2Pattern(localStruct.GetX2());
239 SetX3Pattern(localStruct.GetX3());
240 SetX4Pattern(localStruct.GetX4());
243 SetY1Pattern(localStruct.GetY1());
244 SetY2Pattern(localStruct.GetY2());
245 SetY3Pattern(localStruct.GetY3());
246 SetY4Pattern(localStruct.GetY4());
252 const char* AsString(Int_t t)
275 //----------------------------------------------------------------------
276 void AliMUONLocalTrigger::Print(Option_t* opt) const
278 /// Printing Local Trigger information
283 cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s",
284 LoCircuit(), GetLoDecision(),
285 LoStripX(), LoDev(), LoSdev(), LoStripY(),
286 AsString(LoLpt()),AsString(LoHpt())) << endl;
288 if ( sopt.Contains("FULL") ) {
290 cout << Form("Xpatterns = 0x %04x %04x %04x %04x",
291 fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl;
292 cout << Form("Ypatterns = 0x %04x %04x %04x %04x",
293 fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl;
297 //----------------------------------------------------------------------
298 Int_t AliMUONLocalTrigger::GetDeviation() const
302 Int_t deviation = LoDev();
304 if ( !LoSdev() && deviation ) sign=-1;
305 if ( !LoSdev() && !deviation ) sign= 0;
306 if ( LoSdev() == 1 ) sign=+1;
312 //----------------------------------------------------------------------
313 void AliMUONLocalTrigger::SetDeviation(Int_t deviation)
315 /// set LoDev and LoSDev according to deviation
322 SetLoDev(-deviation);
327 //----------------------------------------------------------------------
329 AliMUONLocalTrigger::GetName() const
333 return Form("LocalBoard%3d",LoCircuit());
337 //----------------------------------------------------------------------
338 Bool_t AliMUONLocalTrigger::IsTrigX() const
340 /// Trigger response X strips
342 if ( LoSdev()==1 && LoDev()==0 &&
343 LoStripX()==0) xTrig=kFALSE; // no trigger in X
344 else xTrig = kTRUE; // trigger in X
349 //----------------------------------------------------------------------
350 Bool_t AliMUONLocalTrigger::IsTrigY() const
352 /// Trigger response Y strips
355 LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y
356 else yTrig = kTRUE; // trigger in Y