StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
DSMAlgo_EE101_2009.cc
1 #include "DSM.hh"
2 #include "DSMAlgo_EE101_2009.hh"
3 
4 void DSMAlgo_EE101_2009::operator()(DSM& dsm)
5 {
6  // INPUT:
7 
8  // EE101 - ch0 - EE001
9  // ch1 - EE002 - (0-15) jp0 anti-clockwise
10  // ch2 - EE002 - (16-31) jp1 clockwise
11  // ch3 - EE003
12  // ch4 - EE004
13  // ch5 - EE005 - (0-15) jp0 anti-clockwise
14 
15  // From E001/003/004:
16 
17  // (0-5) TP sum for low-eta group (6)
18  // (6-11) TP sum for high-eta group (6)
19  // (12-13) HT bits (2)
20  // (14-15) Unused (2)
21 
22  // From E002/005:
23 
24  // (0-5) TP sum (6)
25  // (6-11) Unused (2)
26  // (12-13) HT bits (2)
27  // (14-15) Unused (2)
28 
29  // REGISTERS:
30 
31  // R0: EEMC-Jet-Patch-Th0 (8)
32  // R1: EEMC-Jet-Patch-Th1 (8)
33  // R2: EEMC-Jet-Patch-Th2 (8)
34 
35  // ACTION:
36 
37  // Make jet patch sums
38 
39  int lowEtaSumA = dsm.channels[0] & 0x3f; // 4 o'clock
40  int lowEtaSumB = dsm.channels[3] & 0x3f; // 6 o'clock
41  int lowEtaSumC = dsm.channels[4] & 0x3f; // 8 o'clock
42 
43  int highEtaSumA = (dsm.channels[0] >> 6 & 0x3f) + (dsm.channels[1] & 0x3f); // 4 o'clock
44  int highEtaSumB = (dsm.channels[3] >> 6 & 0x3f) + (dsm.channels[2] & 0x3f); // 6 o'clock
45  int highEtaSumC = (dsm.channels[4] >> 6 & 0x3f) + (dsm.channels[5] & 0x3f); // 8 o'clock
46 
47  int jpa = lowEtaSumA + highEtaSumA; // JP3 - 4 o'clock
48  int jpb = lowEtaSumB + highEtaSumB; // JP4 - 6 o'clock
49  int jpc = lowEtaSumC + highEtaSumC; // JP5 - 8 o'clock
50 
51  // Place jet patch thresholds on sums
52 
53  int jpaBits = 0;
54 
55  if ((jpa > dsm.registers[0]) && !(jpa > dsm.registers[1]) && !(jpa > dsm.registers[2])) jpaBits = 1;
56  if ((jpa > dsm.registers[0]) && (jpa > dsm.registers[1]) && !(jpa > dsm.registers[2])) jpaBits = 2;
57  if ((jpa > dsm.registers[0]) && (jpa > dsm.registers[1]) && (jpa > dsm.registers[2])) jpaBits = 3;
58 
59  int jpbBits = 0;
60 
61  if ((jpb > dsm.registers[0]) && !(jpb > dsm.registers[1]) && !(jpb > dsm.registers[2])) jpbBits = 1;
62  if ((jpb > dsm.registers[0]) && (jpb > dsm.registers[1]) && !(jpb > dsm.registers[2])) jpbBits = 2;
63  if ((jpb > dsm.registers[0]) && (jpb > dsm.registers[1]) && (jpb > dsm.registers[2])) jpbBits = 3;
64 
65  int jpcBits = 0;
66 
67  if ((jpc > dsm.registers[0]) && !(jpc > dsm.registers[1]) && !(jpc > dsm.registers[2])) jpcBits = 1;
68  if ((jpc > dsm.registers[0]) && (jpc > dsm.registers[1]) && !(jpc > dsm.registers[2])) jpcBits = 2;
69  if ((jpc > dsm.registers[0]) && (jpc > dsm.registers[1]) && (jpc > dsm.registers[2])) jpcBits = 3;
70  //printf("ee101 jpa=%d jpb=%d jpc=%d\n", jpa, jpb, jpc);
71  //printf("ee101 r0=%d r1=%d r2=%d\n", dsm.registers[0], dsm.registers[1], dsm.registers[2]);
72  // OR HT bits
73 
74  int highTowerBits = 0;
75 
76  for (int ch = 0; ch < 6; ++ch)
77  highTowerBits |= dsm.channels[ch] >> 12 & 0xf;
78 
79  // Find largest sum for 1.09 < eta < 1.4 (low eta)
80  //printf("ee101 lowEtaSumA=%d lowEtaSumB=%d lowEtaSumC=%d", lowEtaSumA, lowEtaSumB, lowEtaSumC);
81  int maxA = (lowEtaSumA > lowEtaSumB) && !(lowEtaSumC > lowEtaSumA);
82  int maxB = (lowEtaSumB > lowEtaSumC) && !(lowEtaSumA > lowEtaSumB);
83  int maxC = (lowEtaSumC > lowEtaSumA) && !(lowEtaSumB > lowEtaSumC);
84 
85  int maxId;
86  int maxSum;
87 
88  if (maxA) {
89  maxId = 1;
90  maxSum = lowEtaSumA;
91  }
92  else if (maxB) {
93  maxId = 2;
94  maxSum = lowEtaSumB;
95  }
96  else if (maxC) {
97  maxId = 3;
98  maxSum = lowEtaSumC;
99  }
100  else {
101  maxId = 1;
102  maxSum = lowEtaSumA;
103  }
104  //printf("maxId=%d", maxId);
105  // If overflow, set to max
106 
107  if (maxSum > 63) maxSum = 63;
108 
109  // OUTPUT (16):
110 
111  // (0-1) JPA threshold bits (2)
112  // (2-3) JPB threshold bits (2)
113  // (4-5) JPC threshold bits (2)
114  // (6-11) Selected partial jet patch sum (6)
115  // (12-13) Partial jet patch ID (2)
116  // (14-15) HT bits (2)
117 
118  dsm.output = jpaBits;
119  dsm.output |= jpbBits << 2;
120  dsm.output |= jpcBits << 4;
121  dsm.output |= maxSum << 6;
122  dsm.output |= maxId << 12;
123  dsm.output |= highTowerBits << 14;
124 
125  // INFO:
126 
127  // I0: JP3 (4 o'clock) ADC sum
128  // I1: JP4 (6 o'clock) ADC sum
129  // I2: JP5 (8 o'clock) ADC sum
130 
131  dsm.info[0] = jpa;
132  dsm.info[1] = jpb;
133  dsm.info[2] = jpc;
134 
135  //low partial eta sum
136  dsm.info[3] = lowEtaSumA; //4 o'clock
137  dsm.info[4] = lowEtaSumB; //6 o'clock
138  dsm.info[5] = lowEtaSumC; //8 o'clock
139 }
Definition: DSM.hh:16