CMS 3D CMS Logo

DTBtiChipSelTrig.cc
Go to the documentation of this file.
1 //-----------------------------------------------------------------
2 //
3 // Class: DTBtiChip
4 //
5 // Description: Implementation of DTBtiChip
6 // trigger algorithm
7 // (Trigger selection implementation)
8 //
9 //
10 // Author List:
11 // C. Grandi
12 // Modifications:
13 // 23/X/02 Sara Vanini : asymmetric acceptance added for H trig
14 // 07/I/03 SV: sort patterns for equivalence with bti manual
15 // 13/I/03 SV: fixed for Keq in manual form
16 // 30/IX/03 SV: redundancies for xA xB xC xD low trigs included
17 // 22/VI/04 SV: last trigger code update
18 //----------------------------------------------------------------
19 
20 //-----------------------
21 // This Class's Header --
22 //-----------------------
24 
25 //-------------------------------
26 // Collaborating Class Headers --
27 //-------------------------------
29 
30 //---------------
31 // C++ Headers --
32 //---------------
33 #include<iostream>
34 #include<cmath>
35 #include<iomanip>
36 
37 using namespace std;
38 
39 void
41 
42  if(config()->debug()>3){
43  cout << "DTBtiChip::findTrig called" << endl;
44  }
45 
46  //pattern type: 1 = normal
47  // 2 = 1L1
48  // 3 = 11L
49  // 4 = L11
50  // 5 = 1H1
51  // 6 = 11H
52  // 7 = H11
53 
54 // int accpatB = config()->AccPattB(); //default +-1
55 // int accpatA = config()->AccPattA(); //default +-2
56 // int tiKes = config()->XON();
57  int RON = config()->RONflag(); //default 1, redundant patterns enabled
58  int PTMS[32];
59  for(int i=0; i<32; i++){
60  PTMS[i] = config()->PTMSflag(i);
61  }
62 
63  //Triggers (same order as manual):
64  for(int hl=0;hl<2;hl++){ //hl=0 high hl=1 low
65  if( RON==1 ){
66  if( keepTrigPatt(PTMS[0],0,1,hl) ) return; // 1324A --> 0 - 1L3L2R4L: nor
67  }
68  if( keepTrigPatt(PTMS[1],1,2,hl) ) return; // 1324B --> 1 - 1L3L2R4R: 1L1
69  if( keepTrigPatt(PTMS[2],2,1,hl) ) return; // 1324C --> 2 - 1R3L2R4L: nor
70  if( keepTrigPatt(PTMS[3],3,1,hl) ) return; // 1324D --> 3 - 1R3L2R4R: nor
71  if( keepTrigPatt(PTMS[4],4,3,hl) ) return; // 1364A --> 4 - 1L3L6L4R: 11L
72  if( keepTrigPatt(PTMS[5],5,1,hl) ) return; // 1364B --> 5 - 1R3L6L4R: nor
73  if( keepTrigPatt(PTMS[6],6,1,hl) ) return; // 1364C --> 6 - 1R3R6L4R: nor
74  if( keepTrigPatt(PTMS[7],7,5,hl) ) return; // 1368A --> 7 - 1R3R6L8L: 1H1
75  if( keepTrigPatt(PTMS[8],8,6,hl) ) return; // 1368B --> 8 - 1R3R6R8L: 11H
76  if( keepTrigPatt(PTMS[9],9,7,hl) ) return; // 1368C --> 9 - 1R3L6L8L: H11
77  if( keepTrigPatt(PTMS[10],10,1,hl) ) return; // 5324A --> 10 - 5L3L2R4L: nor
78  if( keepTrigPatt(PTMS[11],11,1,hl) ) return; // 5324B --> 11 - 5L3R2R4L: nor
79  if( keepTrigPatt(PTMS[12],12,6,hl) ) return; // 5324C --> 12 - 5R3R2R4L: 11H
80  if( keepTrigPatt(PTMS[13],13,1,hl) ) return; // 5364A --> 13 - 5L3R6L4L: nor
81  if( keepTrigPatt(PTMS[14],14,1,hl) ) return; // 5364B --> 14 - 5L3R6L4R: nor
82  if( keepTrigPatt(PTMS[15],15,5,hl) ) return; // 5364C --> 15 - 5R3R6L4L: 1H1
83  if( keepTrigPatt(PTMS[16],16,1,hl) ) return; // 5364D --> 16 - 5R3R6L4R: nor
84  if( keepTrigPatt(PTMS[17],17,1,hl) ) return; // 5368A --> 17 - 5L3R6L8L: nor
85  if( keepTrigPatt(PTMS[18],18,1,hl) ) return; // 5368B --> 18 - 5L3R6R8L: nor
86  if( keepTrigPatt(PTMS[19],19,4,hl) ) return; // 5368C --> 19 - 5L3R6R8R: L11
87  if( keepTrigPatt(PTMS[20],20,1,hl) ) return; // 5764A --> 20 - 5R7L6L4R: nor
88  if( keepTrigPatt(PTMS[21],21,1,hl) ) return; // 5764B --> 21 - 5R7L6R4R: nor
89  if( keepTrigPatt(PTMS[22],22,7,hl) ) return; // 5764C --> 22 - 5R7L6L4L: H11
90  if( keepTrigPatt(PTMS[23],23,3,hl) ) return; // 9764A --> 23 - 9L7L6L4R: 11L
91  if( keepTrigPatt(PTMS[24],24,2,hl) ) return; // 9764B --> 24 - 9L7L6R4R: 1L1
92  if( keepTrigPatt(PTMS[25],25,4,hl) ) return; // 9764C --> 25 - 9L7R6R4R: L11
93  if( keepTrigPatt(PTMS[26],26,1,hl) ) return; // 5768A --> 26 - 5L7L6R8L: nor
94  if( RON==1 ){
95  if( keepTrigPatt(PTMS[27],27,2,hl) ) return; // 5768B --> 27 - 5L7L6R8R: 1L1
96  if( keepTrigPatt(PTMS[28],28,1,hl) ) return; // 5768C --> 28 - 5R7L6R8L: nor
97  if( keepTrigPatt(PTMS[29],29,1,hl) ) return; // 5768D --> 29 - 5R7L6R8R: nor
98  if( keepTrigPatt(PTMS[30],30,1,hl) ) return; // 9768A --> 30 - 9L7L6R8L: nor
99  if( keepTrigPatt(PTMS[31],31,1,hl) ) return; // 9768B --> 31 - 9L7R6R8L: nor
100  }
101 
102  }//end h/l loop
103 
104 
105 
106 /*
107  for(int hl=0;hl<2;hl++){ //hl=0 high hl=1 low
108  if( keepTrigPatt(PTMS[0],0,1,hl) ) return; // 5768A --> 0 - 5L7L6R8L: nor
109  if( RON==1 ){
110  if( keepTrigPatt(PTMS[1],1,2,hl) ) return; // 5768B --> 1 - 5L7L6R8R: 1L1
111  if( keepTrigPatt(PTMS[2],2,1,hl) ) return; // 5768C --> 2 - 5R7L6R8L: nor
112  if( keepTrigPatt(PTMS[3],3,1,hl) ) return; // 5768D --> 3 - 5R7L6R8R: nor
113  }
114  if( keepTrigPatt(PTMS[4],4,3,hl) ) return; // 1364A --> 4 - 1L3L6L4R: 11L
115  if( keepTrigPatt(PTMS[5],5,1,hl) ) return; // 1364B --> 5 - 1R3L6L4R: nor
116  if( keepTrigPatt(PTMS[6],6,1,hl) ) return; // 1364C --> 6 - 1R3R6L4R: nor
117  if( keepTrigPatt(PTMS[7],7,5,hl) ) return; // 1368A --> 7 - 1R3R6L8L: 1H1
118  if( keepTrigPatt(PTMS[8],8,6,hl) ) return; // 1368B --> 8 - 1R3R6R8L: 11H
119  if( keepTrigPatt(PTMS[9],9,7,hl) ) return; // 1368C --> 9 - 1R3L6L8L: H11
120  if( keepTrigPatt(PTMS[10],10,1,hl) ) return; // 5324A --> 10 - 5L3L2R4L: nor
121  if( keepTrigPatt(PTMS[11],11,1,hl) ) return; // 5324B --> 11 - 5L3R2R4L: nor
122  if( keepTrigPatt(PTMS[12],12,6,hl) ) return; // 5324C --> 12 - 5R3R2R4L: 11H
123  if( keepTrigPatt(PTMS[13],13,1,hl) ) return; // 5364A --> 13 - 5L3R6L4L: nor
124  if( keepTrigPatt(PTMS[14],14,1,hl) ) return; // 5364B --> 14 - 5L3R6L4R: nor
125  if( keepTrigPatt(PTMS[15],15,5,hl) ) return; // 5364C --> 15 - 5R3R6L4L: 1H1
126  if( keepTrigPatt(PTMS[16],16,1,hl) ) return; // 5364D --> 16 - 5R3R6L4R: nor
127  if( keepTrigPatt(PTMS[17],17,1,hl) ) return; // 5368A --> 17 - 5L3R6L8L: nor
128  if( keepTrigPatt(PTMS[18],18,1,hl) ) return; // 5368B --> 18 - 5L3R6R8L: nor
129  if( keepTrigPatt(PTMS[19],19,4,hl) ) return; // 5368C --> 19 - 5L3R6R8R: L11
130  if( keepTrigPatt(PTMS[20],20,1,hl) ) return; // 5764A --> 20 - 5R7L6L4R: nor
131  if( keepTrigPatt(PTMS[21],21,1,hl) ) return; // 5764B --> 21 - 5R7L6R4R: nor
132  if( keepTrigPatt(PTMS[22],22,7,hl) ) return; // 5764C --> 22 - 5R7L6L4L: H11
133  if( keepTrigPatt(PTMS[23],23,3,hl) ) return; // 9764A --> 23 - 9L7L6L4R: 11L
134  if( keepTrigPatt(PTMS[24],24,2,hl) ) return; // 9764B --> 24 - 9L7L6R4R: 1L1
135  if( keepTrigPatt(PTMS[25],25,4,hl) ) return; // 9764C --> 25 - 9L7R6R4R: L11
136  if( RON==1 ){
137  if( keepTrigPatt(PTMS[26],26,1,hl) ) return; // 1324A --> 26 - 1L3L2R4L: nor
138  }
139  if( keepTrigPatt(PTMS[27],27,2,hl) ) return; // 1324B --> 27 - 1L3L2R4R: 1L1
140  if( keepTrigPatt(PTMS[28],28,1,hl) ) return; // 1324C --> 28 - 1R3L2R4L: nor
141  if( keepTrigPatt(PTMS[29],29,1,hl) ) return; // 1324D --> 29 - 1R3L2R4R: nor
142  if( RON==1 ){
143  if( keepTrigPatt(PTMS[30],30,1,hl) ) return; // 9768A --> 30 - 9L7L6R8L: nor
144  }
145  if( keepTrigPatt(PTMS[31],31,1,hl) ) return; // 9768B --> 31 - 9L7R6R8L: nor
146 
147  }//end h/l loop
148 
149 */
150 
151 /*
152  // High level triggers:
153  if( keepTrig( 1,accpatB,8) ) return; // 5768B --> 1 - acc. patt. B
154  if( keepTrig( 2,accpatA,8) ) return; // 5768C --> 2 - acc. patt. A
155  if( keepTrig( 3,accpatA,8) ) return; // 5768D --> 3 - acc. patt. A
156  if( keepTrig( 4,accpatB,8) ) return; // 1364A --> 4 - acc. patt. B
157  if( keepTrig( 5,accpatA,8) ) return; // 1364B --> 5 - acc. patt. A
158  if( keepTrig( 6,accpatA,8) ) return; // 1364C --> 6 - acc. patt. A
159  if( keepTrig( 7,accpatB,8) ) return; // 1368A --> 7 - acc. patt. B
160  if( keepTrig( 8,accpatB,8) ) return; // 1368B --> 8 - acc. patt. B
161  if( keepTrig( 9,accpatB,8) ) return; // 1368C --> 9 - acc. patt. B
162  if( keepTrig(10,accpatA,8) ) return; // 5324A --> 10 - acc. patt. A
163  if( keepTrig(11,accpatA,8) ) return; // 5324B --> 11 - acc. patt. A
164  if( keepTrig(12,accpatB,8) ) return; // 5324C --> 12 - acc. patt. B
165  if( keepTrig(13,accpatA,8) ) return; // 5364A --> 13 - acc. patt. A
166  if( keepTrig(14,accpatA,8) ) return; // 5364B --> 14 - acc. patt. A
167  if( keepTrig(15,accpatB,8) ) return; // 5364C --> 15 - acc. patt. B
168  if( keepTrig(16,accpatA,8) ) return; // 5364D --> 16 - acc. patt. A
169  if( keepTrig(17,accpatA,8) ) return; // 5368A --> 17 - acc. patt. A
170  if( keepTrig(18,accpatA,8) ) return; // 5368B --> 18 - acc. patt. A
171  if( keepTrig(19,accpatB,8) ) return; // 5368C --> 19 - acc. patt. B
172  if( keepTrig(20,accpatA,8) ) return; // 5764A --> 20 - acc. patt. A
173  if( keepTrig(21,accpatA,8) ) return; // 5764B --> 21 - acc. patt. A
174  if( keepTrig(22,accpatB,8) ) return; // 5764C --> 22 - acc. patt. B
175  if( keepTrig(23,accpatB,8) ) return; // 9764A --> 23 - acc. patt. B
176  if( keepTrig(24,accpatB,8) ) return; // 9764B --> 24 - acc. patt. B
177  if( keepTrig(25,accpatB,8) ) return; // 9764C --> 25 - acc. patt. B
178  if( keepTrig( 0,accpatA,8) ) return; // 5768A --> 0 - acc. patt. A
179  */
180  /*
181  // Low level triggers -B
182  if( keepTrig( 1,accpatB,2) ) return; // 5768B --> 1 - acc. patt. B
183  if( keepTrig( 2,accpatA,2) ) return; // 5768C --> 2 - acc. patt. A
184  if(tiKes==1) {
185  if( keepTrig( 3,accpatA,2) ) return; // 5768D --> 3 - acc. patt. A
186  }
187  if( keepTrig( 4,accpatB,2) ) return; // 1364A --> 4 - acc. patt. B
188  if( keepTrig( 5,accpatA,2) ) return; // 1364B --> 5 - acc. patt. A
189  if( keepTrig( 6,accpatA,2) ) return; // 1364C --> 6 - acc. patt. A
190  if( keepTrig( 7,accpatB,2) ) return; // 1368A --> 7 - acc. patt. B
191  if( keepTrig( 8,accpatB,2) ) return; // 1368B --> 8 - acc. patt. B
192  if( keepTrig( 9,accpatB,2) ) return; // 1368C --> 9 - acc. patt. B
193  if( keepTrig(10,accpatA,2) ) return; // 5324A --> 10 - acc. patt. A
194  if( keepTrig(11,accpatA,2) ) return; // 5324B --> 11 - acc. patt. A
195  if( keepTrig(12,accpatB,2) ) return; // 5324C --> 12 - acc. patt. B
196  if(tiKes==1) {
197  if( keepTrig(13,accpatA,2) ) return; // 5364A --> 13 - acc. patt. A
198  }
199  if( keepTrig(14,accpatA,2) ) return; // 5364B --> 14 - acc. patt. A
200  if( keepTrig(15,accpatB,2) ) return; // 5364C --> 15 - acc. patt. B
201  if( keepTrig(16,accpatA,2) ) return; // 5364D --> 16 - acc. patt. A
202  if(tiKes==1) {
203  if( keepTrig(17,accpatA,2) ) return; // 5368A --> 17 - acc. patt. A
204  }
205  if( keepTrig(18,accpatA,2) ) return; // 5368B --> 18 - acc. patt. A
206  if( keepTrig(19,accpatB,2) ) return; // 5368C --> 19 - acc. patt. B
207  if( keepTrig(20,accpatA,2) ) return; // 5764A --> 20 - acc. patt. A
208  if(tiKes==1) {
209  if( keepTrig(21,accpatA,2) ) return; // 5764B --> 21 - acc. patt. A
210  }
211  if( keepTrig(22,accpatB,2) ) return; // 5764C --> 22 - acc. patt. B
212  if( keepTrig(23,accpatB,2) ) return; // 9764A --> 23 - acc. patt. B
213  if( keepTrig(24,accpatB,2) ) return; // 9764B --> 24 - acc. patt. B
214  if( keepTrig(25,accpatB,2) ) return; // 9764C --> 25 - acc. patt. B
215  if( keepTrig( 0,accpatA,2) ) return; // 5768A --> 0 - acc. patt. A
216 
217  // Low level triggers -C
218  if( keepTrig( 1,accpatB,3) ) return; // 5768B --> 1 - acc. patt. B
219  if( keepTrig( 2,accpatA,3) ) return; // 5768C --> 2 - acc. patt. A
220  if( keepTrig( 3,accpatA,3) ) return; // 5768D --> 3 - acc. patt. A
221  if( keepTrig( 4,accpatB,3) ) return; // 1364A --> 4 - acc. patt. B
222  if( keepTrig( 5,accpatA,3) ) return; // 1364B --> 5 - acc. patt. A
223  if(tiKes==1) {
224  if( keepTrig( 6,accpatA,3) ) return; // 1364C --> 6 - acc. patt. A
225  }
226  if( keepTrig( 7,accpatB,3) ) return; // 1368A --> 7 - acc. patt. B
227  if( keepTrig( 8,accpatB,3) ) return; // 1368B --> 8 - acc. patt. B
228  if( keepTrig( 9,accpatB,3) ) return; // 1368C --> 9 - acc. patt. B
229  if(tiKes==1) {
230  if( keepTrig(10,accpatA,3) ) return; // 5324A --> 10 - acc. patt. A
231  }
232  if( keepTrig(11,accpatA,3) ) return; // 5324B --> 11 - acc. patt. A
233  if( keepTrig(12,accpatB,3) ) return; // 5324C --> 12 - acc. patt. B
234  if( keepTrig(13,accpatA,3) ) return; // 5364A --> 13 - acc. patt. A
235  if( keepTrig(14,accpatA,3) ) return; // 5364B --> 14 - acc. patt. A
236  if( keepTrig(15,accpatB,3) ) return; // 5364C --> 15 - acc. patt. B
237  if(tiKes==1) {
238  if( keepTrig(16,accpatA,3) ) return; // 5364D --> 16 - acc. patt. A
239  }
240  if( keepTrig(17,accpatA,3) ) return; // 5368A --> 17 - acc. patt. A
241  if( keepTrig(18,accpatA,3) ) return; // 5368B --> 18 - acc. patt. A
242  if( keepTrig(19,accpatB,3) ) return; // 5368C --> 19 - acc. patt. B
243  if( keepTrig(20,accpatA,3) ) return; // 5764A --> 20 - acc. patt. A
244  if( keepTrig(21,accpatA,3) ) return; // 5764B --> 21 - acc. patt. A
245  if( keepTrig(22,accpatB,3) ) return; // 5764C --> 22 - acc. patt. B
246  if( keepTrig(23,accpatB,3) ) return; // 9764A --> 23 - acc. patt. B
247  if( keepTrig(24,accpatB,3) ) return; // 9764B --> 24 - acc. patt. B
248  if( keepTrig(25,accpatB,3) ) return; // 9764C --> 25 - acc. patt. B
249  if(tiKes==1) {
250  if( keepTrig( 0,accpatA,3) ) return; // 5768A --> 0 - acc. patt. A
251  }
252 
253  // Low level triggers -A
254  if( keepTrig( 1,accpatB,1) ) return; // 5768B --> 1 - acc. patt. B
255  if( keepTrig( 2,accpatA,1) ) return; // 5768C --> 2 - acc. patt. A
256  if( keepTrig( 3,accpatA,1) ) return; // 5768D --> 3 - acc. patt. A
257  if( keepTrig( 4,accpatB,1) ) return; // 1364A --> 4 - acc. patt. B
258  if( keepTrig( 5,accpatA,1) ) return; // 1364B --> 5 - acc. patt. A
259  if( keepTrig( 6,accpatA,1) ) return; // 1364C --> 6 - acc. patt. A
260  if( keepTrig( 7,accpatB,1) ) return; // 1368A --> 7 - acc. patt. B
261  if( keepTrig( 8,accpatB,1) ) return; // 1368B --> 8 - acc. patt. B
262  if(tiKes==1) {
263  if( keepTrig( 9,accpatB,1) ) return; // 1368C --> 9 - acc. patt. B
264  }
265  if( keepTrig(10,accpatA,1) ) return; // 5324A --> 10 - acc. patt. A
266  if( keepTrig(11,accpatA,1) ) return; // 5324B --> 11 - acc. patt. A
267  if( keepTrig(12,accpatB,1) ) return; // 5324C --> 12 - acc. patt. B
268  if( keepTrig(13,accpatA,1) ) return; // 5364A --> 13 - acc. patt. A
269  if( keepTrig(14,accpatA,1) ) return; // 5364B --> 14 - acc. patt. A
270  if( keepTrig(15,accpatB,1) ) return; // 5364C --> 15 - acc. patt. B
271  if( keepTrig(16,accpatA,1) ) return; // 5364D --> 16 - acc. patt. A
272  if( keepTrig(17,accpatA,1) ) return; // 5368A --> 17 - acc. patt. A
273  if( keepTrig(18,accpatA,1) ) return; // 5368B --> 18 - acc. patt. A
274  if(tiKes==1) {
275  if( keepTrig(19,accpatB,1) ) return; // 5368C --> 19 - acc. patt. B
276  }
277  if( keepTrig(20,accpatA,1) ) return; // 5764A --> 20 - acc. patt. A
278  if( keepTrig(21,accpatA,1) ) return; // 5764B --> 21 - acc. patt. A
279  if(tiKes==1) {
280  if( keepTrig(22,accpatB,1) ) return; // 5764C --> 22 - acc. patt. B
281  }
282  if( keepTrig(23,accpatB,1) ) return; // 9764A --> 23 - acc. patt. B
283  if( keepTrig(24,accpatB,1) ) return; // 9764B --> 24 - acc. patt. B
284  if(tiKes==1) {
285  if( keepTrig(25,accpatB,1) ) return; // 9764C --> 25 - acc. patt. B
286  }
287  if( keepTrig( 0,accpatA,1) ) return; // 5768A --> 0 - acc. patt. A
288 
289  // Low level triggers -D
290  if( keepTrig( 0,accpatA,4) ) return; // 5768A --> 0 - acc. patt. A
291  if( keepTrig( 1,accpatB,4) ) return; // 5768B --> 1 - acc. patt. B
292  if( keepTrig( 2,accpatA,4) ) return; // 5768C --> 2 - acc. patt. A
293  if( keepTrig( 3,accpatA,4) ) return; // 5768D --> 3 - acc. patt. A
294  if(tiKes==1) {
295  if( keepTrig( 4,accpatB,4) ) return; // 1364A --> 4 - acc. patt. B
296  }
297  if( keepTrig( 5,accpatA,4) ) return; // 1364B --> 5 - acc. patt. A
298  if( keepTrig( 6,accpatA,4) ) return; // 1364C --> 6 - acc. patt. A
299  if( keepTrig( 7,accpatB,4) ) return; // 1368A --> 7 - acc. patt. B
300  if(tiKes==1) {
301  if( keepTrig( 8,accpatB,4) ) return; // 1368B --> 8 - acc. patt. B
302  }
303  if( keepTrig( 9,accpatB,4) ) return; // 1368C --> 9 - acc. patt. B
304  if( keepTrig(10,accpatA,4) ) return; // 5324A --> 10 - acc. patt. A
305  if( keepTrig(11,accpatA,4) ) return; // 5324B --> 11 - acc. patt. A
306  if(tiKes==1) {
307  if( keepTrig(12,accpatB,4) ) return; // 5324C --> 12 - acc. patt. B
308  }
309  if( keepTrig(13,accpatA,4) ) return; // 5364A --> 13 - acc. patt. A
310  if( keepTrig(14,accpatA,4) ) return; // 5364B --> 14 - acc. patt. A
311  if( keepTrig(15,accpatB,4) ) return; // 5364C --> 15 - acc. patt. B
312  if( keepTrig(16,accpatA,4) ) return; // 5364D --> 16 - acc. patt. A
313  if( keepTrig(17,accpatA,4) ) return; // 5368A --> 17 - acc. patt. A
314  if( keepTrig(18,accpatA,4) ) return; // 5368B --> 18 - acc. patt. A
315  if( keepTrig(19,accpatB,4) ) return; // 5368C --> 19 - acc. patt. B
316  if( keepTrig(20,accpatA,4) ) return; // 5764A --> 20 - acc. patt. A
317  if( keepTrig(21,accpatA,4) ) return; // 5764B --> 21 - acc. patt. A
318  if( keepTrig(22,accpatB,4) ) return; // 5764C --> 22 - acc. patt. B
319  if(tiKes==1) {
320  if( keepTrig(23,accpatB,4) ) return; // 9764A --> 23 - acc. patt. B
321  }
322  if( keepTrig(24,accpatB,4) ) return; // 9764B --> 24 - acc. patt. B
323  if( keepTrig(25,accpatB,4) ) return; // 9764C --> 25 - acc. patt. B
324 */
325 }
326 
327 int DTBtiChip::keepTrigPatt(const int flag,const int eq,const int pattType, int hlflag) {
328  //if pattern is not enabled, return
329  if(flag==0)
330  return 0;
331 
332  int AC1 = config()->AccPattAC1(); //default 0
333  int AC2 = config()->AccPattAC2(); //default 3
334  int ACH = config()->AccPattACH(); //default 1
335  int ACL = config()->AccPattACL(); //default 2
336  int tiKes = config()->XON();
337 
338  if(config()->debug()>4){
339  cout << "DTBtiChip::keepTrigPatt called with arguments: ";
340  cout << eq << ", " << pattType << ", " << hlflag << endl;
341  cout<<"AC1,AC2,ACH,ACL="<<AC1<<" "<<AC2<<" "<<ACH<<" "<<ACL<<endl;
342  }
343 
344  BitArray<80> val0, val1, val2, val3, val4, val5;
345  int mm[6];
346 
347  //NB _Keq = (Kman - K0)/2 where K0=tmax*2 --->OBSOLETE, now Keq=Kman
348  //int K0 = 2 * (config()->ST()/2.);
349  int K0 = int (config()->ST());
350 
351  int i=0;
352  float Keqfloat[6] = {0,0,0,0,0,0};
353  for(i=0;i<6;i++){
354  mm[i] = -1;
355  int mk = (int)(_Keq[eq][i] - K0);
356  //if(abs(mk) > config()->KCut(_id.superlayer()-1))continue;
357  if(abs(mk) > 2*K0) continue;
358  Keqfloat[i]=_Keq[eq][i];
359  mm[i]=(int)(_Keq[eq][i]);
360  // if(_Keq[eq][i]<0){
361  // mm[i]=_Keq[eq][i]*2-0.5+KCen;
362  // } else {
363  // mm[i]=_Keq[eq][i]*2+KCen;
364  // }
365  }
366 
367  switch(pattType)
368  {
369  case 1: //normal pattern
370  //if(hlflag==1 && (eq!=2 && eq!=14 && eq!=28) ){ //test for L
371 /* if(hlflag==1){ //test for L
372  acceptMask(&val0,mm[0],AC1); //eqAB
373  acceptMask(&val1,mm[1],AC1); //eqBC
374  acceptMask(&val2,mm[2],AC1); //eqCD
375  }
376  else
377 */
378  {
379  acceptMask(&val0,mm[0],AC2); //eqAB
380  acceptMask(&val1,mm[1],AC2); //eqBC
381  acceptMask(&val2,mm[2],AC2); //eqCD
382  }
383  break;
384 
385  case 2: //1L1 pattern
386  acceptMask(&val0,mm[0],AC1); //eqAB
387  acceptMask(&val1,mm[1],ACL); //eqBC
388  acceptMask(&val2,mm[2],AC1); //eqCD
389  break;
390 
391  case 3: //11L pattern
392  acceptMask(&val0,mm[0],AC1); //eqAB
393  acceptMask(&val1,mm[1],AC1); //eqBC
394  acceptMask(&val2,mm[2],ACL); //eqCD
395  break;
396 
397  case 4: //L11 pattern
398  acceptMask(&val0,mm[0],ACL); //eqAB
399  acceptMask(&val1,mm[1],AC1); //eqBC
400  acceptMask(&val2,mm[2],AC1); //eqCD
401  break;
402 
403  case 5: //1H1 pattern
404  acceptMask(&val0,mm[0],AC1); //eqAB
405  acceptMask(&val1,mm[1],ACH); //eqBC
406  acceptMask(&val2,mm[2],AC1); //eqCD
407  break;
408 
409  case 6: //11H pattern
410  acceptMask(&val0,mm[0],AC1); //eqAB
411  acceptMask(&val1,mm[1],AC1); //eqBC
412  acceptMask(&val2,mm[2],ACH); //eqCD
413  break;
414 
415  case 7: //H11 pattern
416  acceptMask(&val0,mm[0],ACH); //eqAB
417  acceptMask(&val1,mm[1],AC1); //eqBC
418  acceptMask(&val2,mm[2],AC1); //eqCD
419  break;
420 
421  default:
422  acceptMask(&val0,mm[0],AC2); //eqAB
423  acceptMask(&val1,mm[1],AC2); //eqBC
424  acceptMask(&val2,mm[2],AC2); //eqCD
425  break;
426  }
427 
428  //eq. AC and BD acceptance are always +-1 ->code 00
429  int acc = 0;
430  acceptMask(&val3,mm[3],acc); //eq.AC
431  acceptMask(&val4,mm[4],acc); //eq.BD
432 
433  //eq. AD is the reference value!
434  if(mm[5]>0){
435  val5.set(mm[5]);
436  }
437 
438  // debugging: print() method prints from last to first bit!
439  if(config()->debug()>4){
440  cout << " dump of val arrays: " << endl;
441  // cout << val0.to_string() << endl;
442  // cout << val1.to_string() << endl;
443  // cout << val2.to_string() << endl;
444  // cout << val3.to_string() << endl;
445  // cout << val4.to_string() << endl;
446  // cout << val5.to_string() << endl;
447  val0.print();
448  cout << endl;
449  val1.print();
450  cout << endl;
451  val2.print();
452  cout << endl;
453  val3.print();
454  cout << endl;
455  val4.print();
456  cout << endl;
457  val5.print();
458  cout << endl;
459  }
460  // end debugging
461 
462  //search for High trigger:
463  if(hlflag==0){
464  int code = 0;
465  int KMax = 0;
466  int LKMax = -1;
467  for(i=0;i<80;i++){
468  int val = val0.element(i)+val1.element(i)+val2.element(i)+
469  val3.element(i)+val4.element(i)+val5.element(i);
470  if(val>KMax) {
471  KMax=val;
472  LKMax=i;
473  }
474  }
475 
476  //SV: K value is stored in 6 bits, so K=64->0, etc
477  if(LKMax>63)
478  LKMax-=64;
479 
480  if(KMax==6) {
481  code=8;
482  int X;
483  if( eq==0 ) //store Xbc only for patt 0, else store Xad
484  X=int(_Xeq[eq][0]);
485  else
486  X=int(_Xeq[eq][1]);
487  store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1],
488  Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]);
489  return 1;
490  }
491  return 0;
492  } //end H
493 
494  //search for Low triggers:
495  if(hlflag==1){
496  int code = 0;
497  int RON = config()->RONflag();
498 
499 
500  //hit in B is missing
501  if(config()->debug()>4)
502  cout << "SelTrig: searching low-B" << endl;
503  int LKMax = -1;
504  for(i=0;i<80;i++){
505  int val = val2.element(i)+val3.element(i)+val5.element(i);
506  if(val==3){ //Ref. is eqAD
507  code=2;
508  LKMax=i;
509  int storefg = 1;
510 
511  //SV - XON time-ind.Keq suppr. XON=0 do not abilitate patterns
512  if(tiKes==0) {
513  if(eq==3 || eq==13 || eq==17 || eq==21 || eq==29){
514  if(config()->debug()>3)
515  cout << "SelTrig: doing XON suppression!"<<endl;
516  storefg = 0;
517  }
518  }
519 
520  //SV - RON suppression for low triggers
521  if( RON==0 ){
522  if( eq==19 ){
523  if(config()->debug()>3)
524  cout << "SelTrig: doing RON low triggers suppression!"<<endl;
525  storefg = 0;
526  }
527  }
528 
529  if(storefg){
530  //SV: K value is stored in 6 bits, so K=64->0, etc
531  if(LKMax>63)
532  LKMax-=64;
533  int X;
534  if( eq==0 )
535  X=int(_Xeq[eq][0]);
536  else
537  X=int(_Xeq[eq][1]);
538  store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1],
539  Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]);
540  return 1;
541  }
542  }
543  } //end -B Low
544 
545  //hit in C is missing
546  if(config()->debug()>3)
547  cout << "SelTrig: searching low-C" << endl;
548  for(i=0;i<80;i++){
549  int val = val0.element(i)+val4.element(i)+val5.element(i);
550  if(val==3){ //Ref. is eqAD
551  code=3;
552  LKMax=i;
553  int storefg = 1;
554 
555  //SV - XON time-ind.Keq suppr.
556  if(tiKes==0) {
557  if(eq==0 || eq==6 || eq==10 || eq==16 || eq==26 || eq==30){
558  if(config()->debug()>3)
559  cout << "SelTrig: doing XON suppression!"<<endl;
560  storefg = 0;
561  }
562  }
563 
564  if(storefg){
565  //SV: K value is stored in 6 bits, so K=64->0, etc
566  if(LKMax>63)
567  LKMax-=64;
568 
569  int X;
570  if( eq==0 )
571  X=int(_Xeq[eq][0]);
572  else
573  X=int(_Xeq[eq][1]);
574  store(eq,code,LKMax,X,Keqfloat[0],Keqfloat[1],
575  Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]);
576  return 1;
577  }
578  }
579  } // end -C Low
580 
581  //for -A and -D low acceptance is +-1
582 // if(pattType==1){
583  val0.reset();
584  val1.reset();
585  val2.reset();
586  acceptMask(&val0,mm[0],AC1); //eqAB
587  acceptMask(&val1,mm[1],AC1); //eqBC
588  acceptMask(&val2,mm[2],AC1); //eqCD
589 // }
590 
591  //hit in A is missing
592  if(config()->debug()>4)
593  cout << "SelTrig: searching low-A" << endl;
594  for(i=0;i<80;i++){
595  int val = val1.element(i)+val2.element(i)+val4.element(i);
596  if(val==3 && i==mm[4]){ //Ref. is eqBD
597  code=1;
598  LKMax=i;
599  int storefg = 1;
600 
601  //SV - XON time-ind.Keq suppr.
602  if(tiKes==0) {
603  if(eq==9 || eq==19 || eq==22 || eq==25 ){
604  if(config()->debug()>3)
605  cout << "SelTrig: doing low-A XON suppression!"<<endl;
606  storefg = 0;
607  }
608  }
609 
610  if( RON==0 ){ //SV - RON suppression
611  if( eq==26 ){
612  if(config()->debug()>3)
613  cout << "SelTrig: doing RON low triggers suppression!"<<endl;
614  storefg = 0;
615  }
616  }
617 
618  if(storefg){
619  //SV: K value is stored in 6 bits, so K=64->0, etc
620  if(LKMax>63)
621  LKMax-=64;
622 
623  store(eq,code,LKMax,int(_Xeq[eq][0]),Keqfloat[0],Keqfloat[1],
624  Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]);
625  return 1;
626  }
627  }
628  } //end -A Low
629 
630 
631  //hit in D is missing
632  if(config()->debug()>4)
633  cout << "SelTrig: searching low-D" << endl;
634  for(i=0;i<80;i++){
635  int val = val0.element(i)+val1.element(i)+val3.element(i);
636  if(val==3 && i==mm[3]){ //Ref. is eqAC
637  code=4;
638  LKMax=i;
639  int storefg = 1;
640 
641  //SV - XON time-ind.Keq suppr.
642  if(tiKes==0){
643  if(eq==4 || eq==8 || eq==12 || eq==23){
644  if(config()->debug()>3)
645  cout << "SelTrig: doing XON suppression!"<<endl;
646  storefg = 0;
647  }
648  }
649 
650  //SV - RON suppression for low triggers
651  if( RON==0 ){
652  if(eq==1 || eq==2 || eq==3 || eq==24 || eq==25){
653  if(config()->debug()>3)
654  cout << "SelTrig: doing RON low triggers suppression!"<<endl;
655  storefg = 0;
656  }
657  }
658 
659  if(storefg){ // && _Xeq[eq][1] >=0){
660  //SV: K value is stored in 6 bits, so K=64->0, etc
661  if(LKMax>63)
662  LKMax-=64;
663 
664  store(eq,code,LKMax,int(_Xeq[eq][0]),Keqfloat[0],Keqfloat[1],
665  Keqfloat[2],Keqfloat[3],Keqfloat[4],Keqfloat[5]);
666  return 1;
667  }
668  }
669  } //end -D Low
670 
671  return 0;
672  } //end Low
673  return 0;
674 }
675 
676 
677 void
678 DTBtiChip::acceptMask(BitArray<80> * BitArrPtr,int k,int accep)
679 {
680  if(k>=0&&k<78){
681  if(config()->debug()>4)
682  cout<<"DTBtiChip::acceptMask -> Setting acceptance for k="<<k<<endl;
683 
684  if(accep==0){ //code 00
685  if(k>=1)
686  BitArrPtr->set(k-1);
687  BitArrPtr->set(k);
688  BitArrPtr->set(k+1);
689  }
690  if(accep==1){ //code 01
691  BitArrPtr->set(k);
692  BitArrPtr->set(k+1);
693  BitArrPtr->set(k+2);
694  }
695  if(accep==2){ //code 10
696  if(k>1)
697  BitArrPtr->set(k-2);
698  if(k>=1)
699  BitArrPtr->set(k-1);
700  BitArrPtr->set(k);
701  }
702  if(accep==3){ //code 11
703  if(k>1)
704  BitArrPtr->set(k-2);
705  if(k>=1)
706  BitArrPtr->set(k-1);
707  BitArrPtr->set(k);
708  BitArrPtr->set(k+1);
709  BitArrPtr->set(k+2);
710  }
711  }
712 
713 
714  if(config()->debug()>4)
715  cout<<"DTBtiChip::acceptMask -> END "<<endl;
716 
717 }
718 
719 
720 
721 int
722 DTBtiChip::keepTrig(const int eq, const int acp, const int code) {
723 
724  if(config()->debug()>4){
725  cout << "DTBtiChip::keepTrig called with arguments: ";
726  cout << eq << ", " << acp << ", " << code << endl;
727  }
728 
729  int const KCen = 40; // Arrays will start from 0 --> use 40 instead of 41
730  BitArray<80> val0, val1, val2, val3, val4, val5;
731  int mm[6];
732 
733  int i=0;
734  for(i=0;i<6;i++){
735  mm[i]=0;
736  int mk = (int)(2*_Keq[eq][i]);
737  if(abs(mk) > config()->KCut() )
738  continue;
739  mm[i]=(int)(_Keq[eq][i]*2)+KCen;
740  // if(_Keq[eq][i]<0){
741  // mm[i]=_Keq[eq][i]*2-0.5+KCen;
742  // } else {
743  // mm[i]=_Keq[eq][i]*2+KCen;
744  // }
745  }
746 
747  if(mm[0]>0 && (code==8 || code==3 || code==4) ){
748  val0.set(mm[0]-1);
749  val0.set(mm[0]);
750  val0.set(mm[0]+1);
751  if(acp==2 && (code==8 || code==3) ) {
752  val0.set(mm[0]-2);
753  val0.set(mm[0]+2);
754  }
755  }
756 
757  if(mm[1]>0 && (code==8 || code==1 || code==4) ){
758  val1.set(mm[1]-1);
759  val1.set(mm[1]);
760  val1.set(mm[1]+1);
761  if(acp==2 && code==8 ) {
762  val1.set(mm[1]-2);
763  val1.set(mm[1]+2);
764  }
765  }
766 
767  if(mm[2]>0 && (code==8 || code==1 || code==2) ){
768  val2.set(mm[2]-1);
769  val2.set(mm[2]);
770  val2.set(mm[2]+1);
771  if(acp==2 && (code==8 || code==2) ) {
772  val2.set(mm[2]-2);
773  val2.set(mm[2]+2);
774  }
775  }
776 
777  if(mm[3]>0 && (code==8 || code==2 || code==4) ){
778  val3.set(mm[3]-1);
779  val3.set(mm[3]);
780  val3.set(mm[3]+1);
781  }
782 
783  if(mm[4]>0 && (code==8 || code==1 || code==3) ){
784  val4.set(mm[4]-1);
785  val4.set(mm[4]);
786  val4.set(mm[4]+1);
787  }
788 
789  if(mm[5]>0 && (code==8 || code==2 || code==3) ){
790  val5.set(mm[5]);
791  }
792 
793  // debugging
794  if(config()->debug()>4){
795  cout << " dump of val arrays: " << endl;
796  // cout << val0.to_string() << endl;
797  // cout << val1.to_string() << endl;
798  // cout << val2.to_string() << endl;
799  // cout << val3.to_string() << endl;
800  // cout << val4.to_string() << endl;
801  // cout << val5.to_string() << endl;
802  val0.print();
803  cout << endl;
804  val1.print();
805  cout << endl;
806  val2.print();
807  cout << endl;
808  val3.print();
809  cout << endl;
810  val4.print();
811  cout << endl;
812  val5.print();
813  cout << endl;
814  }
815  // end debugging
816 
817  int KMax = 0;
818  int LKMax = -1;
819  for(i=0;i<80;i++){
820  int val = val0.element(i)+val1.element(i)+val2.element(i)+
821  val3.element(i)+val4.element(i)+val5.element(i);
822  // int val = val0.test(i)+val1.test(i)+val2.test(i)+
823  // val3.test(i)+val4.test(i)+val5.test(i);
824  if(val>KMax) {
825  KMax=val;
826  LKMax=i;
827  }
828  }
829 
830  // Note that all bits in val are shifted by one w.r.t. FORTRAN version
831  // The output K will be the same because of the different value of Kcen
832 
833  if (KMax==6 && code==8) {
834  store(eq,8,LKMax-KCen,int(_Xeq[eq][1]));
835  return 1;
836  } else if (KMax==3 && code!=8) {
837  if(code==1 || code==4) {
838  store(eq,code,LKMax-KCen,int(_Xeq[eq][0]));
839  } else {
840  store(eq,code,LKMax-KCen,int(_Xeq[eq][1]));
841  }
842  return 1;
843  }
844  return 0;
845  // return value is ITFL of FORTRAN version
846 }
int keepTrig(const int eq, const int acp, const int code)
#define X(str)
Definition: MuonsGrabber.cc:48
void reset()
Definition: BitArray.h:221
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int k[5][pyjets_maxn]
#define debug
Definition: HDRShower.cc:19
int element(const int pos) const
Definition: BitArray.h:210
int keepTrigPatt(int flag, const int eq, const int pattType, int hlflag)
std::ostream & print(std::ostream &o=std::cout) const
Definition: BitArray.h:345
void acceptMask(BitArray< 80 > *BitArrPtr, int k, int accep)
void set(const int i)
Definition: BitArray.h:230