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