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