]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONLocalTrigger.cxx
fix BxByBz - testing
[u/mrichter/AliRoot.git] / MUON / AliMUONLocalTrigger.cxx
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 <Riostream.h>
23 #include <TArrayS.h>
24
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 //-----------------------------------------------------------------------------
32
33 /// \cond CLASSIMP
34 ClassImp(AliMUONLocalTrigger)
35 /// \endcond
36
37 //----------------------------------------------------------------------
38 AliMUONLocalTrigger::AliMUONLocalTrigger()
39   : TObject(), 
40     fLoCircuit(0),
41     fLoStripX(0),
42     fLoDev(0),
43     fLoSdev(1),
44     fLoTrigY(1),
45     fLoStripY(15),
46     fLoLpt(0),
47     fLoHpt(0),
48     
49     fX1Pattern(0),
50     fX2Pattern(0),
51     fX3Pattern(0),
52     fX4Pattern(0),
53     
54     fY1Pattern(0),
55     fY2Pattern(0),
56     fY3Pattern(0),
57     fY4Pattern(0)
58 {
59 /// Default constructor
60 }
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),
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),
81       fY4Pattern(theMUONLocalTrig.fY4Pattern)
82 {
83 /// Copy constructor (useful for TClonesArray)
84
85 }
86
87 //----------------------------------------------------------------------
88 AliMUONLocalTrigger::~AliMUONLocalTrigger()
89 {
90 /// Destructor
91 }
92
93 //----------------------------------------------------------------------
94 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
95 {
96 /// Assigment operator;
97 /// equal operator (useful for non-pointer member in TClonesArray)
98
99   if (this == &theMUONLocalTrig)
100     return *this;
101
102   // base class assignement
103   TObject::operator=(theMUONLocalTrig);
104
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;
113
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
124   return *this;
125 }
126
127
128 //----------------------------------------------------------------------
129 Char_t AliMUONLocalTrigger::GetLoDecision() const
130 {
131 /// Get local decision 
132 /// from H(L)pt;
133 /// returns local trigger decision
134
135   Char_t rv = (fLoLpt & 0x3);
136   rv |= (fLoHpt << 2) & 0xC;
137
138   return rv;
139 }
140
141 //___________________________________________
142 void 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 //___________________________________________
150 void 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 }
156
157 //___________________________________________
158 Bool_t
159 AliMUONLocalTrigger::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
172 //----------------------------------------------------------------------
173 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
174 {
175 /// Set local trigger info from rawdata localStruct
176
177   // set id'
178   SetLoCircuit(loCircuit);
179
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());
186  
187   // set L(H)pt
188   SetLoLpt(localStruct.GetLpt());
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 //----------------------------------------------------------------------
206 void 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());
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 }
237
238 namespace
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
263 //----------------------------------------------------------------------
264 void AliMUONLocalTrigger::Print(Option_t* opt) const
265 {
266 /// Printing Local Trigger information
267
268   TString sopt(opt);
269   sopt.ToUpper();
270
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") ) { 
277
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;
282   }
283 }
284
285 //----------------------------------------------------------------------
286 Int_t AliMUONLocalTrigger::GetDeviation() const
287 {
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 //----------------------------------------------------------------------
301 void 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   }
313 }
314
315 //----------------------------------------------------------------------
316 const char*
317 AliMUONLocalTrigger::GetName() const
318 {
319 /// Generate name
320
321   return Form("LocalBoard%3d",LoCircuit());
322 }
323
324
325 //----------------------------------------------------------------------
326 Bool_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 //----------------------------------------------------------------------
338 Bool_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 }