New class AliESDEvent, backward compatibility with the old AliESD (Christian)
[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 /// \class AliMUONLocalTrigger
26 /// Local Trigger algorithm data outputs
27 /// (contains local trigger decision and bit patterns)                \n
28 /// Add SetLocalStruct method for rawdata  (Ch. Finck)
29 /// \author Ph. Crochet
30
31 /// \cond CLASSIMP
32 ClassImp(AliMUONLocalTrigger)
33 /// \endcond
34
35 //----------------------------------------------------------------------
36 AliMUONLocalTrigger::AliMUONLocalTrigger()
37   : TObject(), 
38     fLoCircuit(0),
39     fLoStripX(0),
40     fLoDev(0),
41     fLoSdev(1),
42     fLoTrigY(1),
43     fLoStripY(15),
44     fLoLpt(0),
45     fLoHpt(0),
46     
47     fX1Pattern(0),
48     fX2Pattern(0),
49     fX3Pattern(0),
50     fX4Pattern(0),
51     
52     fY1Pattern(0),
53     fY2Pattern(0),
54     fY3Pattern(0),
55     fY4Pattern(0)
56 {
57 /// Default constructor
58 }
59 //----------------------------------------------------------------------
60 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
61     : TObject(theMUONLocalTrig),
62       fLoCircuit(theMUONLocalTrig.fLoCircuit),
63       fLoStripX(theMUONLocalTrig.fLoStripX),
64       fLoDev(theMUONLocalTrig.fLoDev),
65       fLoSdev(theMUONLocalTrig.fLoSdev),
66       fLoTrigY(theMUONLocalTrig.fLoTrigY),
67       fLoStripY(theMUONLocalTrig.fLoStripY),
68       fLoLpt(theMUONLocalTrig.fLoLpt),
69       fLoHpt(theMUONLocalTrig.fLoHpt),
70       
71       fX1Pattern(theMUONLocalTrig.fX1Pattern),
72       fX2Pattern(theMUONLocalTrig.fX2Pattern),
73       fX3Pattern(theMUONLocalTrig.fX3Pattern),
74       fX4Pattern(theMUONLocalTrig.fX4Pattern),
75       
76       fY1Pattern(theMUONLocalTrig.fY1Pattern),
77       fY2Pattern(theMUONLocalTrig.fY2Pattern),
78       fY3Pattern(theMUONLocalTrig.fY3Pattern),
79       fY4Pattern(theMUONLocalTrig.fY4Pattern)
80 {
81 /// Copy constructor (useful for TClonesArray)
82
83 }
84
85 //----------------------------------------------------------------------
86 AliMUONLocalTrigger::~AliMUONLocalTrigger()
87 {
88 /// Destructor
89 }
90
91 //----------------------------------------------------------------------
92 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
93 {
94 /// Assigment operator;
95 /// equal operator (useful for non-pointer member in TClonesArray)
96
97   if (this == &theMUONLocalTrig)
98     return *this;
99
100   // base class assignement
101   TObject::operator=(theMUONLocalTrig);
102
103   fLoCircuit = theMUONLocalTrig.fLoCircuit;
104   fLoStripX  = theMUONLocalTrig.fLoStripX;         
105   fLoDev     = theMUONLocalTrig.fLoDev;           
106   fLoSdev    = theMUONLocalTrig.fLoSdev;           
107   fLoTrigY   = theMUONLocalTrig.fLoTrigY;           
108   fLoStripY  = theMUONLocalTrig.fLoStripY;           
109   fLoLpt     = theMUONLocalTrig.fLoLpt;
110   fLoHpt     = theMUONLocalTrig.fLoHpt;
111
112   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
113   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
114   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
115   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
116
117   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
118   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
119   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
120   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
121
122   return *this;
123 }
124
125
126 //----------------------------------------------------------------------
127 Char_t AliMUONLocalTrigger::GetLoDecision() const
128 {
129 /// Get local decision 
130 /// from H(L)pt;
131 /// returns local trigger decision
132
133   Char_t rv = (fLoLpt & 0x3);
134   rv |= (fLoHpt << 2) & 0xC;
135
136   return rv;
137 }
138
139 //___________________________________________
140 void AliMUONLocalTrigger::GetXPattern(TArrayS& array) const
141 {
142     /// return array of X pattern
143     Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()};
144     array.Set(4, vec);
145 }
146
147 //___________________________________________
148 void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const
149 {
150     /// return array of Y pattern
151     Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()};
152     array.Set(4, vec);
153 }
154
155 //___________________________________________
156 Bool_t
157 AliMUONLocalTrigger::IsNull() const
158 {
159   /// Whether or not this card has something usefull to say or not
160   return ( fX1Pattern == 0 &&
161            fX2Pattern == 0 &&
162            fX3Pattern == 0 &&
163            fX4Pattern == 0 &&
164            fY1Pattern == 0 &&
165            fY2Pattern == 0 &&
166            fY3Pattern == 0 &&
167            fY4Pattern == 0 );          
168 }
169
170 //----------------------------------------------------------------------
171 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
172 {
173 /// Set local trigger info from rawdata localStruct
174
175   // set id'
176   SetLoCircuit(loCircuit);
177
178   // set X, Y, dev, Sdev and TrigY
179   SetLoStripX((Int_t)localStruct.GetXPos());
180   SetLoStripY((Int_t)localStruct.GetYPos());
181   SetLoDev((Int_t)localStruct.GetXDev());
182   SetLoSdev((Int_t)localStruct.GetSXDev());
183   SetLoTrigY((Int_t)localStruct.GetTriggerY());
184  
185   // set L(H)pt
186   SetLoLpt(localStruct.GetLpt());
187   SetLoHpt(localStruct.GetHpt());
188
189   // set pattern X
190   SetX1Pattern(localStruct.GetX1());
191   SetX2Pattern(localStruct.GetX2());
192   SetX3Pattern(localStruct.GetX3());
193   SetX4Pattern(localStruct.GetX4());
194
195   // set pattern Y
196   SetY1Pattern(localStruct.GetY1());
197   SetY2Pattern(localStruct.GetY2());
198   SetY3Pattern(localStruct.GetY3());
199   SetY4Pattern(localStruct.GetY4());
200
201 }
202
203 namespace
204 {
205   const char* AsString(Int_t t)
206   {
207     switch (t)
208     {
209       case 0:
210         return "no";
211         break;
212       case 1:
213         return "minus";
214         break;
215       case 2:
216         return "plus";
217         break;
218       case 3:
219         return "undef";
220         break;
221       default:
222         return "";
223         break;
224     }
225   }
226 }
227
228 //----------------------------------------------------------------------
229 void AliMUONLocalTrigger::Print(Option_t* opt) const
230 {
231 /// Printing Local Trigger information
232
233   TString sopt(opt);
234   sopt.ToUpper();
235
236   cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s",
237                LoCircuit(), GetLoDecision(),
238                LoStripX(), LoDev(), LoSdev(), LoStripY(),
239                AsString(LoLpt()),AsString(LoHpt()),IsNull()) << endl;
240   
241   if ( sopt.Contains("FULL") ) { 
242
243     cout << Form("Xpatterns = 0x %04x %04x %04x %04x",
244                  fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl;
245     cout << Form("Ypatterns = 0x %04x %04x %04x %04x",
246                  fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl;
247   }
248 }
249
250 //----------------------------------------------------------------------
251 const char*
252 AliMUONLocalTrigger::GetName() const
253 {
254 /// Generate name
255
256   return Form("LocalBoard%3d",LoCircuit());
257 }