]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONLocalTrigger.cxx
- Adding option for ownership of sector
[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
a9e2aefa 19#include "AliMUONLocalTrigger.h"
2be06f1e 20#include <assert.h>
21#include "AliLog.h"
8d7dfec2 22#include "AliMUONLocalStruct.h"
a9e2aefa 23
5398f946 24/// \class AliMUONLocalTrigger
8d7dfec2 25/// Local Trigger algorithm data outputs
5398f946 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
31ClassImp(AliMUONLocalTrigger)
32/// \endcond
8d7dfec2 33
a9e2aefa 34//----------------------------------------------------------------------
35AliMUONLocalTrigger::AliMUONLocalTrigger()
8d7dfec2 36 : TObject(),
37 fLoCircuit(0),
38 fLoStripX(0),
39 fLoDev(0),
40 fLoStripY(0),
41 fLoLpt(0),
42 fLoHpt(0),
8d7dfec2 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)
a9e2aefa 56{
5398f946 57/// Default constructor
a9e2aefa 58}
e9b63742 59//----------------------------------------------------------------------
30178c30 60AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
1657f946 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),
1657f946 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)
e9b63742 81{
5398f946 82/// Copy constructor (useful for TClonesArray)
83
e9b63742 84}
85//----------------------------------------------------------------------
30178c30 86AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
e9b63742 87{
5398f946 88/// Assigment operator;
89/// equal operator (useful for non-pointer member in TClonesArray)
8d7dfec2 90
30178c30 91 if (this == &theMUONLocalTrig)
e9b63742 92 return *this;
93
30178c30 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;
e9b63742 103
6dc7fcdf 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
2be06f1e 116 fDigits = theMUONLocalTrig.fDigits;
117
e9b63742 118 return *this;
119}
120
a9e2aefa 121//----------------------------------------------------------------------
da3d7180 122AliMUONLocalTrigger::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]),
ad705f30 129 // keep on with this way
da3d7180 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)
a9e2aefa 142{
da3d7180 143/// Add a local trigger object
a9e2aefa 144}
1657f946 145
6dc7fcdf 146//----------------------------------------------------------------------
147Char_t AliMUONLocalTrigger::GetLoDecision()
148{
5398f946 149/// Get local decision
150/// from H(L)pt;
151/// returns local trigger decision
8d7dfec2 152
6dc7fcdf 153 fLoDecision = (fLoLpt & 0x3);
154 fLoDecision |= (fLoHpt << 2) & 0xC;
402fb06e 155
6dc7fcdf 156 return fLoDecision;
157}
2be06f1e 158
159//----------------------------------------------------------------------
160void AliMUONLocalTrigger::GetDigit(
8d7dfec2 161 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
2be06f1e 162{
5398f946 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 ]
2be06f1e 166
167 Int_t digitnumber = fDigits[i];
168 DecodeDigitNumber(digitnumber, chamber, cathode, digit);
b8fdc4dd 169}
2be06f1e 170
171//----------------------------------------------------------------------
8d7dfec2 172Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode,
173 Int_t digit)
2be06f1e 174{
5398f946 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.
2be06f1e 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;
b8fdc4dd 192}
2be06f1e 193
194//----------------------------------------------------------------------
8d7dfec2 195void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber,
196 Int_t& cathode, Int_t& digit)
2be06f1e 197{
5398f946 198/// Decodes a digit number into information about the digit.
199/// One can subsequently fetch the digit with
200/// AliMUONDataInterface::Digit(chamber, cathode, digit)
2be06f1e 201
202 cathode = (digitnumber >> 31) & 0x1;
203 chamber = (digitnumber >> 27) & 0xF;
204 digit = digitnumber & 0x7FFFFFF;
b8fdc4dd 205}
2be06f1e 206
8d7dfec2 207//----------------------------------------------------------------------
208void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
209{
5398f946 210/// Set local trigger info from rawdata localStruct
8d7dfec2 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}
eba3379e 237
238//----------------------------------------------------------------------
239void 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
ad705f30 249 printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt());
eba3379e 250
251 }
252}
253