Changed default OCDB from 2009 to 2010
[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 "AliMUONRawStreamTriggerHP.h"
23 #include <Riostream.h>
24 #include <TArrayS.h>
25
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 //-----------------------------------------------------------------------------
33
34 /// \cond CLASSIMP
35 ClassImp(AliMUONLocalTrigger)
36 /// \endcond
37
38 //----------------------------------------------------------------------
39 AliMUONLocalTrigger::AliMUONLocalTrigger()
40   : TObject(), 
41     fLoCircuit(0),
42     fLoStripX(0),
43     fLoDev(0),
44     fLoSdev(1),
45     fLoTrigY(1),
46     fLoStripY(15),
47     fLoLpt(0),
48     fLoHpt(0),
49     
50     fX1Pattern(0),
51     fX2Pattern(0),
52     fX3Pattern(0),
53     fX4Pattern(0),
54     
55     fY1Pattern(0),
56     fY2Pattern(0),
57     fY3Pattern(0),
58     fY4Pattern(0),
59
60     fHitPatternFromResponse(0xFF),
61     fTriggerWithoutChamber(0)
62 {
63 /// Default constructor
64 }
65 //----------------------------------------------------------------------
66 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
67     : TObject(theMUONLocalTrig),
68       fLoCircuit(theMUONLocalTrig.fLoCircuit),
69       fLoStripX(theMUONLocalTrig.fLoStripX),
70       fLoDev(theMUONLocalTrig.fLoDev),
71       fLoSdev(theMUONLocalTrig.fLoSdev),
72       fLoTrigY(theMUONLocalTrig.fLoTrigY),
73       fLoStripY(theMUONLocalTrig.fLoStripY),
74       fLoLpt(theMUONLocalTrig.fLoLpt),
75       fLoHpt(theMUONLocalTrig.fLoHpt),
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),
85       fY4Pattern(theMUONLocalTrig.fY4Pattern),
86
87       fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse),
88       fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber)
89 {
90 /// Copy constructor (useful for TClonesArray)
91
92 }
93
94 //----------------------------------------------------------------------
95 AliMUONLocalTrigger::~AliMUONLocalTrigger()
96 {
97 /// Destructor
98 }
99
100 //----------------------------------------------------------------------
101 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
102 {
103 /// Assigment operator;
104 /// equal operator (useful for non-pointer member in TClonesArray)
105
106   if (this == &theMUONLocalTrig)
107     return *this;
108
109   // base class assignement
110   TObject::operator=(theMUONLocalTrig);
111
112   fLoCircuit = theMUONLocalTrig.fLoCircuit;
113   fLoStripX  = theMUONLocalTrig.fLoStripX;         
114   fLoDev     = theMUONLocalTrig.fLoDev;           
115   fLoSdev    = theMUONLocalTrig.fLoSdev;           
116   fLoTrigY   = theMUONLocalTrig.fLoTrigY;           
117   fLoStripY  = theMUONLocalTrig.fLoStripY;           
118   fLoLpt     = theMUONLocalTrig.fLoLpt;
119   fLoHpt     = theMUONLocalTrig.fLoHpt;
120
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
131   fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse;
132   fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber;
133
134   return *this;
135 }
136
137
138 //----------------------------------------------------------------------
139 Char_t AliMUONLocalTrigger::GetLoDecision() const
140 {
141 /// Get local decision 
142 /// from H(L)pt;
143 /// returns local trigger decision
144
145   Char_t rv = (fLoLpt & 0x3);
146   rv |= (fLoHpt << 2) & 0xC;
147
148   return rv;
149 }
150
151 //___________________________________________
152 void 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 //___________________________________________
160 void 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 }
166
167 //___________________________________________
168 Bool_t
169 AliMUONLocalTrigger::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
182 //----------------------------------------------------------------------
183 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
184 {
185 /// Set local trigger info from rawdata localStruct
186
187   // set id'
188   SetLoCircuit(loCircuit);
189
190   // set X, Y, dev, Sdev and TrigY
191   SetLoStripX((Int_t)localStruct.GetXPos());
192   SetLoStripY((Int_t)localStruct.GetYPos());
193   SetLoDev((Int_t)localStruct.GetXDev());
194   SetLoSdev((Int_t)localStruct.GetSXDev());
195   SetLoTrigY((Int_t)localStruct.GetTrigY());
196  
197   // set L(H)pt
198   SetLoLpt(localStruct.GetLpt());
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 //----------------------------------------------------------------------
216 void 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());
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 }
247
248 namespace
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
273 //----------------------------------------------------------------------
274 void AliMUONLocalTrigger::Print(Option_t* opt) const
275 {
276 /// Printing Local Trigger information
277
278   TString sopt(opt);
279   sopt.ToUpper();
280
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(),
284                AsString(LoLpt()),AsString(LoHpt()),IsNull()) << endl;
285   
286   if ( sopt.Contains("FULL") ) { 
287
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;
292   }
293 }
294
295 //----------------------------------------------------------------------
296 Int_t AliMUONLocalTrigger::GetDeviation() const
297 {
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 //----------------------------------------------------------------------
311 void 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   }
323 }
324
325 //----------------------------------------------------------------------
326 const char*
327 AliMUONLocalTrigger::GetName() const
328 {
329 /// Generate name
330
331   return Form("LocalBoard%3d",LoCircuit());
332 }
333
334
335 //----------------------------------------------------------------------
336 Bool_t AliMUONLocalTrigger::IsTrigX()
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 //----------------------------------------------------------------------
348 Bool_t AliMUONLocalTrigger::IsTrigY()
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 }