AliRoot Core  a565103 (a565103)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliMUONRegionalTriggerBoard.cxx
Go to the documentation of this file.
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 //-----------------------------------------------------------------------------
27 //-----------------------------------------------------------------------------
28 
30 
31 #include "AliLog.h"
32 
33 #include "TBits.h"
34 
35 #include <Riostream.h>
36 
37 using std::endl;
38 using std::cout;
42 
43 //___________________________________________
46  fMask(0x0)
47 {
49  for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0;
50 }
51 
52 //___________________________________________
54  : AliMUONTriggerBoard(name, a),
55  fMask(0x0)
56 {
58  for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0;
59 }
60 
61 //___________________________________________
63 {
65 }
66 
67 //___________________________________________
69 {
71 // output from local trigger algorithm
72 // [+, -] * [Hpt, Lpt]
73 // transformed to [+, -, US, LS] * [Hpt, Lpt]
74 
75  if ( IsNull() ) return; // Do nothing if all local responses are null
76 
77  Int_t t[16];
78 
79  for (Int_t i = 0; i < 16; ++i)
80  {
81  if ((fMask >> i) & 0x1)
82  t[i] = fLocalResponse[i];
83  else
84  t[i] = 0;
85  }
86 
87  Int_t rank = 8;
88 
89  for (Int_t i = 0; i < 4; ++i)
90  {
91  Int_t ip = 0;
92 
93  for (Int_t j = 0; j < rank; ++j)
94  {
95  UShort_t lthres = Algo(t[2*j],t[2*j+1],"LPT",i);
96 
97  UShort_t hthres = Algo(t[2*j],t[2*j+1],"HPT",i); hthres <<= 4;
98 
99  t[ip] = lthres | hthres;
100 
101  ip++;
102  }
103 
104  rank /= 2;
105  }
106 
107  fResponse = t[0]; // 8-bit [H4:L4]
108 }
109 
110 //___________________________________________
111 UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, const char *thres, Int_t level)
112 {
116 
119 
120  TBits a(8), b(8); a.Set(8,&i); b.Set(8,&j);
121 
122  TBits trg1(2), trg2(2), trg(2);
123 
124  if (!strcmp(thres,"LPT"))
125  {
126 
127  if (!level)
128  {
129  trg1[0] = a[0]; trg1[1] = a[1];
130  trg2[0] = b[0]; trg2[1] = b[1];
131  }
132  else
133  {
134  trg1[0] = a[2]; trg1[1] = a[3];
135  trg2[0] = b[2]; trg2[1] = b[3];
136  }
137  }
138  else
139  {
140  if (!level)
141  {
142  trg1[0] = a[2]; trg1[1] = a[3];
143  trg2[0] = b[2]; trg2[1] = b[3];
144  }
145  else
146  {
147  trg1[0] = a[6]; trg1[1] = a[7];
148  trg2[0] = b[6]; trg2[1] = b[7];
149  }
150  }
151 
152  TBits trgLS1(1), trgUS1(1), trgLS2(1), trgUS2(1), trgLS(1), trgUS(1);
153 
154  if (!level)
155  {
156  trgLS1[0] = trgUS1[0] = trgLS2[0] = trgUS2[0] = 0;
157  }
158  else
159  {
160  if (!strcmp(thres,"LPT"))
161  {
162  //trgLS1[0] = a[1]; trgUS1[0] = a[0];
163  //trgLS2[0] = b[1]; trgUS2[0] = b[0];
164  trgLS1[0] = a[0]; trgUS1[0] = a[1];
165  trgLS2[0] = b[0]; trgUS2[0] = b[1];
166  }
167  else
168  {
169  //trgLS1[0] = a[5]; trgUS1[0] = a[4];
170  //trgLS2[0] = b[5]; trgUS2[0] = b[4];
171  trgLS1[0] = a[4]; trgUS1[0] = a[5];
172  trgLS2[0] = b[4]; trgUS2[0] = b[5];
173  }
174  }
175 
176  trgLS[0] = ( trg1[0] & trg2[0] ) | ( trg1[1] & trg2[1] ) | trgLS1[0] | trgLS2[0];
177  trgUS[0] = ( trg1[0] & trg2[1] ) | ( trg1[1] & trg2[0] ) | trgUS1[0] | trgUS2[0];
178 
179  trg[0] = trg1[0] | trg2[0];
180  trg[1] = trg1[1] | trg2[1];
181 
182  TBits v(4);
183 
184  //v[0] = trgUS[0];
185  //v[1] = trgLS[0];
186  v[0] = trgLS[0];
187  v[1] = trgUS[0];
188  v[2] = trg[0];
189  v[3] = trg[1];
190  UShort_t rv = 0;
191  v.Get(&rv);
192  return rv;
193 }
194 
195 //___________________________________________
197 {
199 
200  for (Int_t i=0; i<16; i++)
201  {
202  TBits b;
203  b.Set(6,&fLocalResponse[i]);
204 
205  cout << "Entry " << i << " is " << b << endl;
206 
207  }
208 
209 }
210 //___________________________________________
212 {
214 
215  fMask = mask;
216 }
217 
218 //___________________________________________
220 {
222  for (Int_t i=0; i<16; i++) {
223  if ( fLocalResponse[i] ) return kFALSE;
224  }
225  return kTRUE;
226 }
227 
228 
229 //___________________________________________
231 {
233 
234  for (Int_t i=0; i<16; ++i) fLocalResponse[i] = 0;
235 
236  fResponse = 0;
237 
238 }
virtual void Scan(Option_t *option) const
virtual method for derivated classes
UShort_t fResponse
RESPONSE.
void Mask(UShort_t mask)
set local boards enable
Regional trigger - real HW algorithm is implemented.
ClassImp(TPCGenInfo)
Definition: AliTPCCmpNG.C:254
Trigger board base class.
virtual UShort_t Algo(UShort_t i, UShort_t j, const char *thres, Int_t level)
response of the algorithm
UShort_t fLocalResponse[16]
Local trigger inputs.
virtual void Response()
virtual method for derivated classes
virtual void Reset()
virtual method for derivated classes