10 #include "UCTLogging.hh" 15 if(region >= NRegionsInCard) {
16 return processHFTower();
18 if(ecalET > etInputMax) ecalET = etInputMax;
19 if(hcalET > etInputMax) hcalET = etInputMax;
20 uint32_t calibratedECALET = ecalET;
21 uint32_t logECALET = (uint32_t) log2((
double) ecalET);
22 if(logECALET > erMaxV) logECALET = erMaxV;
23 if(ecalLUT !=
nullptr) {
24 uint32_t etaAddress = region * NEtaInRegion + iEta;
25 uint32_t fbAddress = 0;
26 if(ecalFG) fbAddress = 1;
27 uint32_t
value = (*ecalLUT)[etaAddress][fbAddress][ecalET];
28 calibratedECALET = value & etInputMax;
29 logECALET = (value & 0x7000) >> 12;
31 uint32_t calibratedHCALET = hcalET;
32 uint32_t logHCALET = (uint32_t) log2((
double) hcalET);
33 if(logHCALET > erMaxV) logHCALET = erMaxV;
34 if(hcalLUT !=
nullptr) {
35 uint32_t etaAddress = region * NEtaInRegion + iEta;
36 uint32_t fbAddress = 0;
37 if((hcalFB & 0
x1) != 0) fbAddress = 1;
38 uint32_t
value = (*hcalLUT)[etaAddress][fbAddress][hcalET];
39 calibratedHCALET = value & etInputMax;
40 logHCALET = (value & 0x7000) >> 12;
45 if(calibratedECALET==0xFF && calibratedHCALET==0xFF)
47 else if(calibratedECALET==0xFF)
49 else if(calibratedHCALET==0xFF)
52 towerData = calibratedECALET + calibratedHCALET;
54 towerData = calibratedECALET + calibratedHCALET;
57 if(towerData > etMask) towerData = etMask;
59 if(calibratedECALET == 0 || calibratedHCALET == 0) {
61 towerData |= zeroFlagMask;
62 if(calibratedHCALET == 0 && calibratedECALET != 0)
63 towerData |= eohrFlagMask;
65 else if(calibratedECALET == calibratedHCALET) {
67 towerData |= eohrFlagMask;
69 else if(calibratedECALET > calibratedHCALET) {
70 er = logECALET - logHCALET;
71 if(er > erMaxV) er = erMaxV;
72 towerData |= eohrFlagMask;
75 er = logHCALET - logECALET;
76 if(er > erMaxV) er = erMaxV;
78 towerData |= (er << erShift);
83 if((hcalFB & 0
x1) != 0) towerData |= hcalFlagMask;
84 if(ecalFG) towerData |= ecalFlagMask;
86 towerData |= (calibratedECALET << ecalShift);
87 towerData |= (calibratedHCALET << hcalShift);
92 bool UCTTower::processHFTower() {
94 uint32_t calibratedET = hcalET;
95 if(hfLUT !=
nullptr) {
96 uint32_t etaAddress = (region - NRegionsInCard) * NHFEtaInRegion + iEta;
97 const std::array< uint32_t, 256>&
a = hfLUT->at(etaAddress);
98 calibratedET = a[hcalET] & 0x1FF;
100 towerData = calibratedET | zeroFlagMask;
101 if((hcalFB & 0x1) == 0x1) towerData |= ecalFlagMask;
102 if((hcalFB & 0
x2) == 0x2) towerData |= hcalFlagMask;
105 uint32_t calibratedET = hcalET;
106 if(hfLUT !=
nullptr) {
107 uint32_t etaAddress = (region - NRegionsInCard) * NHFEtaInRegion + iEta;
108 const std::array< uint32_t, 256>& a = hfLUT->at(etaAddress);
109 calibratedET = a[hcalET] & 0xFF;
111 uint32_t absCaloEta =
abs(caloEta());
112 if(absCaloEta > 29 && absCaloEta < 40) {
116 else if(absCaloEta == 40 || absCaloEta == 41) {
120 towerData = calibratedET | zeroFlagMask;
121 if((hcalFB & 0x1) == 0x1) towerData |= ecalFlagMask;
122 if((hcalFB & 0
x2) == 0x2) towerData |= hcalFlagMask;
127 bool UCTTower::setECALData(
bool eFG, uint32_t eET) {
130 if(eET > etInputMax) {
131 LOG_ERROR <<
"UCTTower::setData - ecalET too high " << eET <<
"; Pegged to etInputMax" << std::endl;
137 bool UCTTower::setHCALData(uint32_t hFB, uint32_t hET) {
140 if(hET > etInputMax) {
141 LOG_ERROR <<
"UCTTower::setData - hcalET too high " << hET <<
"; Pegged to etInputMax" << std::endl;
145 LOG_ERROR <<
"UCTTower::setData - too many hcalFeatureBits " << std::hex << hFB
146 <<
"; Used only bottom 6 bits" << std::endl;
152 bool UCTTower::setHFData(uint32_t fbIn, uint32_t etIn) {
157 if(etIn > etInputMax) {
158 LOG_ERROR <<
"UCTTower::setData - HF ET too high " << etIn <<
"; Pegged to etInputMax" << std::endl;
162 LOG_ERROR <<
"UCTTower::setData - too many HF FeatureBits " << std::hex << fbIn
163 <<
"; Used only bottom 2 bits" << std::endl;
169 const uint16_t UCTTower::location()
const {
171 if(negativeEta) l = 0x8000;
180 UCTTower::UCTTower(uint16_t location,
int fwv) :
182 if((location & 0x8000) != 0) negativeEta =
true;
183 crate = (location & 0x1800) >> 11;
184 card = (location & 0x0700) >> 8;
185 region = (location & 0x00F0) >> 4;
186 iEta = (location & 0x000C) >> 2;
187 iPhi = (location & 0x0003);
191 const uint64_t UCTTower::extendedData()
const {
201 os <<
"Side Crt Crd Rgn iEta iPhi cEta cPhi eET eFG hET hFB Summary" << std::endl;
205 if(t.negativeEta) side =
"-eta ";
207 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
209 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
211 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
213 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
215 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
217 << std::setw(4) << std::setfill(
' ') <<
std::dec 218 << g.getCaloEtaIndex(t.negativeEta, t.region, t.iEta) <<
" " 219 << std::setw(4) << std::setfill(
' ') <<
std::dec 220 << g.getCaloPhiIndex(t.crate, t.card, t.region, t.iPhi) <<
" " 221 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
223 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
225 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
227 << std::showbase << std::internal << std::setfill(
'0') << std::setw(4) << std::hex
229 << std::showbase << std::internal << std::setfill(
'0') << std::setw(10) << std::hex
std::ostream & operator<<(std::ostream &os, const UCTTower &t)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Abs< T >::type abs(const T &t)
unsigned long long uint64_t