]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONLocalTrigger.cxx
Set higher precision magnetic field integration method,
[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 // Class AliMUONLocalTrigger
20 // ------------------
21 // Local Trigger algorithm data outputs
22 // (contains local trigger decision and bit patterns)
23
24 #include "AliMUONLocalTrigger.h"
25 #include <assert.h>
26 #include "AliLog.h"
27
28 ClassImp(AliMUONLocalTrigger)
29 //----------------------------------------------------------------------
30 AliMUONLocalTrigger::AliMUONLocalTrigger()
31   : TObject(), fDigits(0)
32 {
33 // constructor
34   fLoCircuit = 0;
35   fLoStripX  = 0;
36   fLoDev     = 0;
37   fLoStripY  = 0;
38   fLoLpt     = 0;
39   fLoHpt     = 0;
40   fLoApt     = 0;
41
42   fX1Pattern  = 0;
43   fX2Pattern  = 0;
44   fX3Pattern  = 0;
45   fX4Pattern  = 0;
46
47   fY1Pattern  = 0;
48   fY2Pattern  = 0;
49   fY3Pattern  = 0;
50   fY4Pattern  = 0;
51
52   fLoDecision = 0;
53 }
54 //----------------------------------------------------------------------
55 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
56   : TObject(theMUONLocalTrig)
57 {
58 // copy constructor (useful for TClonesArray)
59   fLoCircuit = theMUONLocalTrig.fLoCircuit;
60   fLoStripX  = theMUONLocalTrig.fLoStripX;         
61   fLoDev     = theMUONLocalTrig.fLoDev;           
62   fLoStripY  = theMUONLocalTrig.fLoStripY;           
63   fLoLpt     = theMUONLocalTrig.fLoLpt;
64   fLoHpt     = theMUONLocalTrig.fLoHpt;
65   fLoApt     = theMUONLocalTrig.fLoApt;
66
67   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
68   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
69   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
70   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
71
72   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
73   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
74   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
75   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
76
77   fLoDecision =  theMUONLocalTrig.fLoDecision;
78
79   fDigits = theMUONLocalTrig.fDigits;
80 }
81 //----------------------------------------------------------------------
82 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
83 {
84 // equal operator (useful for non-pointer member in TClonesArray)
85   if (this == &theMUONLocalTrig)
86     return *this;
87
88   // base class assignement
89   TObject::operator=(theMUONLocalTrig);
90
91   fLoCircuit = theMUONLocalTrig.fLoCircuit;
92   fLoStripX  = theMUONLocalTrig.fLoStripX;         
93   fLoDev     = theMUONLocalTrig.fLoDev;           
94   fLoStripY  = theMUONLocalTrig.fLoStripY;           
95   fLoLpt     = theMUONLocalTrig.fLoLpt;
96   fLoHpt     = theMUONLocalTrig.fLoHpt;
97   fLoApt     = theMUONLocalTrig.fLoApt;
98
99   fX1Pattern  = theMUONLocalTrig.fX1Pattern;
100   fX2Pattern  = theMUONLocalTrig.fX2Pattern;
101   fX3Pattern  = theMUONLocalTrig.fX3Pattern;
102   fX4Pattern  = theMUONLocalTrig.fX4Pattern;
103
104   fY1Pattern  = theMUONLocalTrig.fY1Pattern;
105   fY2Pattern  = theMUONLocalTrig.fY2Pattern;
106   fY3Pattern  = theMUONLocalTrig.fY3Pattern;
107   fY4Pattern  = theMUONLocalTrig.fY4Pattern;
108
109   fLoDecision =  theMUONLocalTrig.fLoDecision;
110
111   fDigits = theMUONLocalTrig.fDigits;
112
113   return *this;
114 }
115
116 //----------------------------------------------------------------------
117 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
118 {
119 // add a local trigger object 
120   fLoCircuit = localtr[0];
121   fLoStripX  = localtr[1];         
122   fLoDev     = localtr[2];           
123   fLoStripY  = localtr[3];           
124   fLoLpt     = localtr[4];
125   fLoHpt     = localtr[5];
126   fLoApt     = localtr[6];
127
128   // keep on with this way
129   fX1Pattern = (UShort_t)localtr[7];
130   fX2Pattern = (UShort_t)localtr[8];
131   fX3Pattern = (UShort_t)localtr[9];
132   fX4Pattern = (UShort_t)localtr[10];
133
134   fY1Pattern = (UShort_t)localtr[11];
135   fY2Pattern = (UShort_t)localtr[12];
136   fY3Pattern = (UShort_t)localtr[13];
137   fY4Pattern = (UShort_t)localtr[14];
138
139   fDigits = digits;
140 }
141 //----------------------------------------------------------------------
142 Char_t AliMUONLocalTrigger::GetLoDecision()
143 {
144 // returns local trigger decision
145   fLoDecision  = (fLoLpt & 0x3);
146   fLoDecision |= (fLoHpt << 2) & 0xC;
147
148   return fLoDecision;
149 }
150
151 //----------------------------------------------------------------------
152 void AliMUONLocalTrigger::GetDigit(
153                 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
154         ) const
155 {
156 // Returns the i'th digit that fired this circuit.
157 // The number of digits can be found with NumberOfDigits(), that is 
158 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
159
160         Int_t digitnumber = fDigits[i];
161         DecodeDigitNumber(digitnumber, chamber, cathode, digit);
162 }
163
164 //----------------------------------------------------------------------
165 Int_t AliMUONLocalTrigger::EncodeDigitNumber(
166                 Int_t chamber, Int_t cathode, Int_t digit
167         )
168 {
169 // Encodes a 32-bit digit number from digit information to be stored
170 // in internal integer arrays. Note that the value of the digit parameter
171 // can not be larger than 0x07FFFFFF.
172
173         assert( 0 <= cathode && cathode <= 1 );
174         assert( 0 <= chamber && chamber <= 13 );
175
176         if ((digit & 0xF8000000) != 0)
177         {
178                 AliErrorGeneral("AliMUONLocalTrigger", Form(
179                         "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
180                         cathode, chamber, digit
181                 ));
182                 return -1;
183         };
184
185         return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
186 }
187
188 //----------------------------------------------------------------------
189 void AliMUONLocalTrigger::DecodeDigitNumber(
190                 Int_t digitnumber,
191                 Int_t& chamber, Int_t& cathode, Int_t& digit
192         )
193 {
194 // Decodes a digit number into information about the digit.
195 // One can subsequently fetch the digit with
196 // AliMUONDataInterface::Digit(chamber, cathode, digit)
197
198         cathode = (digitnumber >> 31) & 0x1;
199         chamber = (digitnumber >> 27) & 0xF;
200         digit = digitnumber & 0x7FFFFFF;
201 }
202