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