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