]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONLocalTrigger.cxx
Regenerated with modifying geometry (adding mother volumes)
[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
d1525c79 18// ------------------
19// Class AliMUONLocalTrigger
20// ------------------
21// Local Trigger algorithm data outputs
22// (contains local trigger decision and bit patterns)
23
a9e2aefa 24#include "AliMUONLocalTrigger.h"
2be06f1e 25#include <assert.h>
26#include "AliLog.h"
a9e2aefa 27
925e6570 28ClassImp(AliMUONLocalTrigger)
a9e2aefa 29//----------------------------------------------------------------------
30AliMUONLocalTrigger::AliMUONLocalTrigger()
2be06f1e 31 : TObject(), fDigits(0)
a9e2aefa 32{
33// constructor
34 fLoCircuit = 0;
35 fLoStripX = 0;
36 fLoDev = 0;
37 fLoStripY = 0;
38 fLoLpt = 0;
39 fLoHpt = 0;
40 fLoApt = 0;
6dc7fcdf 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;
a9e2aefa 53}
e9b63742 54//----------------------------------------------------------------------
30178c30 55AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
56 : TObject(theMUONLocalTrig)
e9b63742 57{
58// copy constructor (useful for TClonesArray)
30178c30 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;
6dc7fcdf 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;
2be06f1e 78
79 fDigits = theMUONLocalTrig.fDigits;
e9b63742 80}
81//----------------------------------------------------------------------
30178c30 82AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
e9b63742 83{
84// equal operator (useful for non-pointer member in TClonesArray)
30178c30 85 if (this == &theMUONLocalTrig)
e9b63742 86 return *this;
87
30178c30 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;
e9b63742 98
6dc7fcdf 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
2be06f1e 111 fDigits = theMUONLocalTrig.fDigits;
112
e9b63742 113 return *this;
114}
115
a9e2aefa 116//----------------------------------------------------------------------
2be06f1e 117AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
a9e2aefa 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];
6dc7fcdf 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];
2be06f1e 138
139 fDigits = digits;
a9e2aefa 140}
6dc7fcdf 141//----------------------------------------------------------------------
142Char_t AliMUONLocalTrigger::GetLoDecision()
143{
d1525c79 144// returns local trigger decision
6dc7fcdf 145 fLoDecision = (fLoLpt & 0x3);
146 fLoDecision |= (fLoHpt << 2) & 0xC;
402fb06e 147
6dc7fcdf 148 return fLoDecision;
149}
2be06f1e 150
151//----------------------------------------------------------------------
152void AliMUONLocalTrigger::GetDigit(
d8e8484f 153 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
2be06f1e 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);
b8fdc4dd 162}
2be06f1e 163
164//----------------------------------------------------------------------
165Int_t AliMUONLocalTrigger::EncodeDigitNumber(
d8e8484f 166 Int_t chamber, Int_t cathode, Int_t digit
2be06f1e 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;
b8fdc4dd 186}
2be06f1e 187
188//----------------------------------------------------------------------
189void AliMUONLocalTrigger::DecodeDigitNumber(
d8e8484f 190 Int_t digitnumber,
2be06f1e 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;
b8fdc4dd 201}
2be06f1e 202