]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONLocalTrigger.cxx
b47b8e787096fec5c295d263395d1e23d728f49e
[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 <assert.h>
21 #include "AliLog.h"
22 #include "AliMUONLocalStruct.h"
23
24 ClassImp(AliMUONLocalTrigger)
25
26 /// ------------------
27 /// Class AliMUONLocalTrigger
28 /// ------------------
29 /// Local Trigger algorithm data outputs
30 /// (contains local trigger decision and bit patterns)
31 /// Ph. Crochet
32 ///
33 /// add SetLocalStruct method for rawdata
34 /// Ch. Finck
35
36 //----------------------------------------------------------------------
37 AliMUONLocalTrigger::AliMUONLocalTrigger()
38   : TObject(), 
39     fLoCircuit(0),
40     fLoStripX(0),
41     fLoDev(0),
42     fLoStripY(0),
43     fLoLpt(0),
44     fLoHpt(0),
45     fLoApt(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     fLoDecision(0),
58     fDigits(0)
59 {
60   //
61   // constructor
62   //
63 }
64 //----------------------------------------------------------------------
65 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
66   : TObject(theMUONLocalTrig)
67 {
68   //
69   // copy constructor (useful for TClonesArray)
70   //
71   fLoCircuit = theMUONLocalTrig.fLoCircuit;
72   fLoStripX  = theMUONLocalTrig.fLoStripX;         
73   fLoDev     = theMUONLocalTrig.fLoDev;           
74   fLoStripY  = theMUONLocalTrig.fLoStripY;           
75   fLoLpt     = theMUONLocalTrig.fLoLpt;
76   fLoHpt     = theMUONLocalTrig.fLoHpt;
77   fLoApt     = theMUONLocalTrig.fLoApt;
78
79   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
80   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
81   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
82   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
83
84   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
85   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
86   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
87   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
88
89   fLoDecision =  theMUONLocalTrig.fLoDecision;
90
91   fDigits = theMUONLocalTrig.fDigits;
92 }
93 //----------------------------------------------------------------------
94 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
95 {
96   // assigment operator
97   //
98   // equal operator (useful for non-pointer member in TClonesArray)
99
100   if (this == &theMUONLocalTrig)
101     return *this;
102
103   // base class assignement
104   TObject::operator=(theMUONLocalTrig);
105
106   fLoCircuit = theMUONLocalTrig.fLoCircuit;
107   fLoStripX  = theMUONLocalTrig.fLoStripX;         
108   fLoDev     = theMUONLocalTrig.fLoDev;           
109   fLoStripY  = theMUONLocalTrig.fLoStripY;           
110   fLoLpt     = theMUONLocalTrig.fLoLpt;
111   fLoHpt     = theMUONLocalTrig.fLoHpt;
112   fLoApt     = theMUONLocalTrig.fLoApt;
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   fLoDecision =  theMUONLocalTrig.fLoDecision;
125
126   fDigits = theMUONLocalTrig.fDigits;
127
128   return *this;
129 }
130
131 //----------------------------------------------------------------------
132 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
133 {
134   //
135   // add a local trigger object 
136   //
137   fLoCircuit = localtr[0];
138   fLoStripX  = localtr[1];         
139   fLoDev     = localtr[2];           
140   fLoStripY  = localtr[3];           
141   fLoLpt     = localtr[4];
142   fLoHpt     = localtr[5];
143   fLoApt     = localtr[6];
144
145   // keep on with this way
146   fX1Pattern = (UShort_t)localtr[7];
147   fX2Pattern = (UShort_t)localtr[8];
148   fX3Pattern = (UShort_t)localtr[9];
149   fX4Pattern = (UShort_t)localtr[10];
150
151   fY1Pattern = (UShort_t)localtr[11];
152   fY2Pattern = (UShort_t)localtr[12];
153   fY3Pattern = (UShort_t)localtr[13];
154   fY4Pattern = (UShort_t)localtr[14];
155
156   fDigits = digits;
157 }
158 //----------------------------------------------------------------------
159 Char_t AliMUONLocalTrigger::GetLoDecision()
160 {
161   // get local decision 
162   // from H(L)pt
163   // returns local trigger decision
164
165   fLoDecision  = (fLoLpt & 0x3);
166   fLoDecision |= (fLoHpt << 2) & 0xC;
167
168   return fLoDecision;
169 }
170
171 //----------------------------------------------------------------------
172 void AliMUONLocalTrigger::GetDigit(
173                 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
174 {
175 // Returns the i'th digit that fired this circuit.
176 // The number of digits can be found with NumberOfDigits(), that is 
177 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
178
179         Int_t digitnumber = fDigits[i];
180         DecodeDigitNumber(digitnumber, chamber, cathode, digit);
181 }
182
183 //----------------------------------------------------------------------
184 Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, 
185                                              Int_t digit)
186 {
187 // Encodes a 32-bit digit number from digit information to be stored
188 // in internal integer arrays. Note that the value of the digit parameter
189 // can not be larger than 0x07FFFFFF.
190
191         assert( 0 <= cathode && cathode <= 1 );
192         assert( 0 <= chamber && chamber <= 13 );
193
194         if ((digit & 0xF8000000) != 0)
195         {
196                 AliErrorGeneral("AliMUONLocalTrigger", Form(
197                         "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
198                         cathode, chamber, digit
199                 ));
200                 return -1;
201         };
202
203         return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
204 }
205
206 //----------------------------------------------------------------------
207 void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, 
208                                             Int_t& cathode, Int_t& digit)
209 {
210 // Decodes a digit number into information about the digit.
211 // One can subsequently fetch the digit with
212 // AliMUONDataInterface::Digit(chamber, cathode, digit)
213
214         cathode = (digitnumber >> 31) & 0x1;
215         chamber = (digitnumber >> 27) & 0xF;
216         digit = digitnumber & 0x7FFFFFF;
217 }
218
219 //----------------------------------------------------------------------
220 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
221 {
222   //
223   // Set local trigger info from rawdata localStruct
224   //
225
226   // set id'
227   SetLoCircuit(loCircuit);
228
229   // set X, Y dev  
230   SetLoStripX((Int_t)localStruct.GetXPos());
231   SetLoStripY((Int_t)localStruct.GetYPos());
232   SetLoDev((Int_t)localStruct.GetXDev());
233  
234   // set L(H)pt
235   SetLoLpt(localStruct.GetLpt());
236   SetLoHpt(localStruct.GetHpt());
237
238   // set pattern X
239   SetX1Pattern(localStruct.GetX1());
240   SetX2Pattern(localStruct.GetX2());
241   SetX3Pattern(localStruct.GetX3());
242   SetX4Pattern(localStruct.GetX4());
243
244   // set pattern Y
245   SetY1Pattern(localStruct.GetY1());
246   SetY2Pattern(localStruct.GetY2());
247   SetY3Pattern(localStruct.GetY3());
248   SetY4Pattern(localStruct.GetY4());
249
250 }
251
252 //----------------------------------------------------------------------
253 void AliMUONLocalTrigger::Print(Option_t* opt) const
254 {
255   //
256   // Printing Local Trigger information
257   //
258   TString sopt(opt);
259   sopt.ToUpper();
260  
261   if ( sopt.Contains("FULL") ) { 
262
263       printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d Apt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt(),LoApt());
264
265   }
266 }
267