File indexing completed on 2024-04-06 12:10:36
0001 #include "DCCDataMapper.h"
0002
0003
0004
0005
0006
0007 DCCTBDataMapper::DCCTBDataMapper(DCCTBDataParser *myParser) : parser_(myParser) {
0008 dccFields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0009 emptyEventFields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0010
0011 tcc68Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0012 tcc32Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0013 tcc16Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0014
0015 srp68Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0016 srp32Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0017 srp16Fields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0018
0019 towerFields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0020 xtalFields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0021 trailerFields_ = new std::set<DCCTBDataField *, DCCTBDataFieldComparator>;
0022
0023 buildDCCFields();
0024 buildTCCFields();
0025 buildSRPFields();
0026 buildTowerFields();
0027 buildXtalFields();
0028 buildTrailerFields();
0029 }
0030
0031
0032
0033
0034
0035 DCCTBDataMapper::~DCCTBDataMapper() {
0036 std::set<DCCTBDataField *, DCCTBDataFieldComparator>::iterator it;
0037
0038 for (it = dccFields_->begin(); it != dccFields_->end(); it++) {
0039 delete (*it);
0040 }
0041 for (it = emptyEventFields_->begin(); it != emptyEventFields_->end(); it++) {
0042 delete (*it);
0043 }
0044
0045 for (it = tcc68Fields_->begin(); it != tcc68Fields_->end(); it++) {
0046 delete (*it);
0047 }
0048 for (it = tcc32Fields_->begin(); it != tcc32Fields_->end(); it++) {
0049 delete (*it);
0050 }
0051 for (it = tcc16Fields_->begin(); it != tcc16Fields_->end(); it++) {
0052 delete (*it);
0053 }
0054
0055 for (it = srp68Fields_->begin(); it != srp68Fields_->end(); it++) {
0056 delete (*it);
0057 }
0058 for (it = srp32Fields_->begin(); it != srp32Fields_->end(); it++) {
0059 delete (*it);
0060 }
0061 for (it = srp16Fields_->begin(); it != srp16Fields_->end(); it++) {
0062 delete (*it);
0063 }
0064
0065 for (it = towerFields_->begin(); it != towerFields_->end(); it++) {
0066 delete (*it);
0067 }
0068 for (it = xtalFields_->begin(); it != xtalFields_->end(); it++) {
0069 delete (*it);
0070 }
0071 for (it = trailerFields_->begin(); it != trailerFields_->end(); it++) {
0072 delete (*it);
0073 }
0074
0075 delete dccFields_;
0076 delete emptyEventFields_;
0077
0078 delete tcc68Fields_;
0079 delete tcc32Fields_;
0080 delete tcc16Fields_;
0081
0082 delete srp68Fields_;
0083 delete srp32Fields_;
0084 delete srp16Fields_;
0085
0086 delete towerFields_;
0087 delete xtalFields_;
0088 delete trailerFields_;
0089 }
0090
0091
0092
0093
0094
0095 void DCCTBDataMapper::buildDCCFields() {
0096
0097 dccFields_->insert(new DCCTBDataField("H", H_WPOSITION, H_BPOSITION, H_MASK));
0098 emptyEventFields_->insert(new DCCTBDataField("H", H_WPOSITION, H_BPOSITION, H_MASK));
0099
0100 dccFields_->insert(new DCCTBDataField("FOV", FOV_WPOSITION, FOV_BPOSITION, FOV_MASK));
0101 emptyEventFields_->insert(new DCCTBDataField("FOV", FOV_WPOSITION, FOV_BPOSITION, FOV_MASK));
0102
0103 dccFields_->insert(new DCCTBDataField("FED/DCC ID", DCCID_WPOSITION, DCCID_BPOSITION, DCCID_MASK));
0104 emptyEventFields_->insert(new DCCTBDataField("FED/DCC ID", DCCID_WPOSITION, DCCID_BPOSITION, DCCID_MASK));
0105
0106 dccFields_->insert(new DCCTBDataField("BX", DCCBX_WPOSITION, DCCBX_BPOSITION, DCCBX_MASK));
0107 emptyEventFields_->insert(new DCCTBDataField("BX", DCCBX_WPOSITION, DCCBX_BPOSITION, DCCBX_MASK));
0108
0109
0110 dccFields_->insert(new DCCTBDataField("LV1", DCCL1_WPOSITION, DCCL1_BPOSITION, DCCL1_MASK));
0111 emptyEventFields_->insert(new DCCTBDataField("LV1", DCCL1_WPOSITION, DCCL1_BPOSITION, DCCL1_MASK));
0112
0113 dccFields_->insert(
0114 new DCCTBDataField("TRIGGER TYPE", TRIGGERTYPE_WPOSITION, TRIGGERTYPE_BPOSITION, TRIGGERTYPE_MASK));
0115 emptyEventFields_->insert(
0116 new DCCTBDataField("TRIGGER TYPE", TRIGGERTYPE_WPOSITION, TRIGGERTYPE_BPOSITION, TRIGGERTYPE_MASK));
0117
0118 dccFields_->insert(new DCCTBDataField("BOE", BOE_WPOSITION, BOE_BPOSITION, BOE_MASK));
0119 emptyEventFields_->insert(new DCCTBDataField("BOE", BOE_WPOSITION, BOE_BPOSITION, BOE_MASK));
0120
0121
0122 dccFields_->insert(
0123 new DCCTBDataField("EVENT LENGTH", EVENTLENGTH_WPOSITION, EVENTLENGTH_BPOSITION, EVENTLENGTH_MASK));
0124 emptyEventFields_->insert(
0125 new DCCTBDataField("EVENT LENGTH", EVENTLENGTH_WPOSITION, EVENTLENGTH_BPOSITION, EVENTLENGTH_MASK));
0126
0127 dccFields_->insert(new DCCTBDataField("DCC ERRORS", DCCERRORS_WPOSITION, DCCERRORS_BPOSITION, DCCERRORS_MASK));
0128 emptyEventFields_->insert(new DCCTBDataField("DCC ERRORS", DCCERRORS_WPOSITION, DCCERRORS_BPOSITION, DCCERRORS_MASK));
0129
0130
0131 dccFields_->insert(new DCCTBDataField("RUN NUMBER", RNUMB_WPOSITION, RNUMB_BPOSITION, RNUMB_MASK));
0132 emptyEventFields_->insert(new DCCTBDataField("RUN NUMBER", RNUMB_WPOSITION, RNUMB_BPOSITION, RNUMB_MASK));
0133
0134
0135 dccFields_->insert(new DCCTBDataField("RUN TYPE", RUNTYPE_WPOSITION, RUNTYPE_BPOSITION, RUNTYPE_MASK));
0136 emptyEventFields_->insert(new DCCTBDataField("RUN TYPE", RUNTYPE_WPOSITION, RUNTYPE_BPOSITION, RUNTYPE_MASK));
0137
0138
0139 dccFields_->insert(
0140 new DCCTBDataField("DETAILED TRIGGER TYPE", DETAILEDTT_WPOSITION, DETAILEDTT_BPOSITION, DETAILEDTT_MASK));
0141 emptyEventFields_->insert(
0142 new DCCTBDataField("DETAILED TRIGGER TYPE", DETAILEDTT_WPOSITION, DETAILEDTT_BPOSITION, DETAILEDTT_MASK));
0143
0144
0145 dccFields_->insert(
0146 new DCCTBDataField("ORBIT COUNTER", ORBITCOUNTER_WPOSITION, ORBITCOUNTER_BPOSITION, ORBITCOUNTER_MASK));
0147
0148
0149 dccFields_->insert(new DCCTBDataField("SR", SR_WPOSITION, SR_BPOSITION, SR_MASK));
0150 dccFields_->insert(new DCCTBDataField("ZS", ZS_WPOSITION, ZS_BPOSITION, ZS_MASK));
0151 dccFields_->insert(new DCCTBDataField("TZS", TZS_WPOSITION, TZS_BPOSITION, TZS_MASK));
0152
0153 dccFields_->insert(new DCCTBDataField("SR_CHSTATUS", SR_CHSTATUS_WPOSITION, SR_CHSTATUS_BPOSITION, SR_CHSTATUS_MASK));
0154 dccFields_->insert(
0155 new DCCTBDataField("TCC_CHSTATUS#1", TCC_CHSTATUS_WPOSITION, TCC_CHSTATUS_BPOSITION, TCC_CHSTATUS_MASK));
0156 dccFields_->insert(
0157 new DCCTBDataField("TCC_CHSTATUS#2", TCC_CHSTATUS_WPOSITION, TCC_CHSTATUS_BPOSITION + 4, TCC_CHSTATUS_MASK));
0158 dccFields_->insert(
0159 new DCCTBDataField("TCC_CHSTATUS#3", TCC_CHSTATUS_WPOSITION, TCC_CHSTATUS_BPOSITION + 8, TCC_CHSTATUS_MASK));
0160 dccFields_->insert(
0161 new DCCTBDataField("TCC_CHSTATUS#4", TCC_CHSTATUS_WPOSITION, TCC_CHSTATUS_BPOSITION + 12, TCC_CHSTATUS_MASK));
0162
0163
0164 for (uint32_t i = 1; i <= 8; i++) {
0165 std::string header = std::string("H") + parser_->getDecString(i);
0166 dccFields_->insert(new DCCTBDataField(header, HD_WPOSITION + (i - 1) * 2, HD_BPOSITION, HD_MASK));
0167
0168
0169 if (i < 3) {
0170 emptyEventFields_->insert(new DCCTBDataField(header, HD_WPOSITION + (i - 1) * 2, HD_BPOSITION, HD_MASK));
0171 }
0172 }
0173
0174
0175 for (uint32_t wcount = 1; wcount <= 5; wcount++) {
0176
0177 for (uint32_t i = 1; i <= 8; i++) {
0178 std::string chStatus = std::string("FE_CHSTATUS#") + parser_->getDecString((wcount - 1) * 14 + i);
0179 dccFields_->insert(
0180 new DCCTBDataField(chStatus, FE_CHSTATUS_WPOSITION + (wcount - 1) * 2, 4 * (i - 1), FE_CHSTATUS_MASK));
0181 }
0182
0183
0184 for (uint32_t i = 9; i <= 14; i++) {
0185 std::string chStatus = std::string("FE_CHSTATUS#") + parser_->getDecString((wcount - 1) * 14 + i);
0186 dccFields_->insert(
0187 new DCCTBDataField(chStatus, FE_CHSTATUS_WPOSITION + (wcount - 1) * 2 + 1, 4 * (i - 9), FE_CHSTATUS_MASK));
0188 }
0189 }
0190 }
0191
0192
0193
0194
0195
0196 void DCCTBDataMapper::buildTCCFields() {
0197 std::vector<std::set<DCCTBDataField *, DCCTBDataFieldComparator> *> pVector;
0198 pVector.push_back(tcc16Fields_);
0199 pVector.push_back(tcc32Fields_);
0200 pVector.push_back(tcc68Fields_);
0201
0202 for (int i = 0; i < ((int)(pVector.size())); i++) {
0203 (pVector[i])->insert(new DCCTBDataField("TCC ID", TCCID_WPOSITION, TCCID_BPOSITION, TCCID_MASK));
0204 (pVector[i])->insert(new DCCTBDataField("BX", TCCBX_WPOSITION, TCCBX_BPOSITION, TCCBX_MASK));
0205 (pVector[i])->insert(new DCCTBDataField("E0", TCCE0_WPOSITION, TCCE0_BPOSITION, TCCE0_MASK));
0206 (pVector[i])->insert(new DCCTBDataField("LV1", TCCL1_WPOSITION, TCCL1_BPOSITION, TCCL1_MASK));
0207 (pVector[i])->insert(new DCCTBDataField("E1", TCCE1_WPOSITION, TCCE1_BPOSITION, TCCE1_MASK));
0208 (pVector[i])->insert(new DCCTBDataField("#TT", NTT_WPOSITION, NTT_BPOSITION, NTT_MASK));
0209 (pVector[i])->insert(new DCCTBDataField("#TIME SAMPLES", TCCTSAMP_WPOSITION, TCCTSAMP_BPOSITION, TCCTSAMP_MASK));
0210 (pVector[i])->insert(new DCCTBDataField("LE0", TCCLE0_WPOSITION, TCCLE0_BPOSITION, TCCLE0_MASK));
0211 (pVector[i])->insert(new DCCTBDataField("LE1", TCCLE1_WPOSITION, TCCLE1_BPOSITION, TCCLE1_MASK));
0212 }
0213
0214 uint32_t nTSamples = parser_->numbTriggerSamples();
0215
0216 uint32_t totalTT = 68 * nTSamples;
0217
0218 uint32_t filter1 = 16 * nTSamples;
0219 uint32_t filter2 = 32 * nTSamples;
0220
0221 uint32_t count(2);
0222
0223
0224 for (uint32_t tt = 1; tt <= totalTT; tt++) {
0225 std::string tpg = std::string("TPG#") + parser_->getDecString(tt);
0226 std::string ttFlag = std::string("TTF#") + parser_->getDecString(tt);
0227
0228 if (tt <= filter1) {
0229 tcc16Fields_->insert(
0230 new DCCTBDataField(tpg, TPG_WPOSITION - 1 + count / 2, TPG_BPOSITION + 16 * ((count + 2) % 2), TPG_MASK));
0231 tcc16Fields_->insert(
0232 new DCCTBDataField(ttFlag, TTF_WPOSITION - 1 + count / 2, TTF_BPOSITION + 16 * ((count + 2) % 2), TTF_MASK));
0233 }
0234 if (tt <= filter2) {
0235 tcc32Fields_->insert(
0236 new DCCTBDataField(tpg, TPG_WPOSITION - 1 + count / 2, TPG_BPOSITION + 16 * ((count + 2) % 2), TPG_MASK));
0237 tcc32Fields_->insert(
0238 new DCCTBDataField(ttFlag, TTF_WPOSITION - 1 + count / 2, TTF_BPOSITION + 16 * ((count + 2) % 2), TTF_MASK));
0239 }
0240
0241 tcc68Fields_->insert(
0242 new DCCTBDataField(tpg, TPG_WPOSITION - 1 + count / 2, TPG_BPOSITION + 16 * ((count + 2) % 2), TPG_MASK));
0243 tcc68Fields_->insert(
0244 new DCCTBDataField(ttFlag, TTF_WPOSITION - 1 + count / 2, TTF_BPOSITION + 16 * ((count + 2) % 2), TTF_MASK));
0245 count++;
0246 }
0247 }
0248
0249
0250 void DCCTBDataMapper::buildSRPFields() {
0251 std::vector<std::set<DCCTBDataField *, DCCTBDataFieldComparator> *> pVector;
0252 pVector.push_back(srp68Fields_);
0253 pVector.push_back(srp32Fields_);
0254 pVector.push_back(srp16Fields_);
0255
0256 for (int i = 0; i < ((int)(pVector.size())); i++) {
0257
0258 (pVector[i])->insert(new DCCTBDataField("SRP ID", SRPID_WPOSITION, SRPID_BPOSITION, SRPID_MASK));
0259 (pVector[i])->insert(new DCCTBDataField("BX", SRPBX_WPOSITION, SRPBX_BPOSITION, SRPBX_MASK));
0260 (pVector[i])->insert(new DCCTBDataField("E0", SRPE0_WPOSITION, SRPE0_BPOSITION, SRPE0_MASK));
0261
0262 (pVector[i])->insert(new DCCTBDataField("LV1", SRPL1_WPOSITION, SRPL1_BPOSITION, SRPL1_MASK));
0263 (pVector[i])->insert(new DCCTBDataField("E1", SRPE1_WPOSITION, SRPE1_BPOSITION, SRPE1_MASK));
0264 (pVector[i])->insert(new DCCTBDataField("#SR FLAGS", NSRF_WPOSITION, NSRF_BPOSITION, NSRF_MASK));
0265 (pVector[i])->insert(new DCCTBDataField("LE0", SRPLE0_WPOSITION, SRPLE0_BPOSITION, SRPLE0_MASK));
0266 (pVector[i])->insert(new DCCTBDataField("LE1", SRPLE1_WPOSITION, SRPLE1_BPOSITION, SRPLE1_MASK));
0267 }
0268
0269 uint32_t srpFlags(68);
0270
0271 uint32_t count1(1), count2(1), srSize(3), factor(0), wcount(0);
0272 for (uint32_t nsr = 1; nsr <= srpFlags; nsr++) {
0273 std::string sr = std::string("SR#") + parser_->getDecString(nsr);
0274
0275 srp68Fields_->insert(new DCCTBDataField(
0276 sr, SRF_WPOSITION + wcount, SRF_BPOSITION + SRPBOFFSET * factor + (count2 - 1) * srSize, SRF_MASK));
0277 if (nsr <= 32) {
0278 srp32Fields_->insert(new DCCTBDataField(
0279 sr, SRF_WPOSITION + wcount, SRF_BPOSITION + SRPBOFFSET * factor + (count2 - 1) * srSize, SRF_MASK));
0280 }
0281 if (nsr <= 16) {
0282 srp16Fields_->insert(new DCCTBDataField(
0283 sr, SRF_WPOSITION + wcount, SRF_BPOSITION + SRPBOFFSET * factor + (count2 - 1) * srSize, SRF_MASK));
0284 }
0285
0286 count1++;
0287 count2++;
0288
0289
0290 if (count1 > 8) {
0291 wcount++;
0292 count1 = 1;
0293 }
0294
0295
0296 if (count1 > 4) {
0297 factor = 1;
0298 } else {
0299 factor = 0;
0300 }
0301
0302
0303 if (count2 > 4) {
0304 count2 = 1;
0305 }
0306 }
0307 }
0308
0309
0310
0311
0312
0313 void DCCTBDataMapper::buildTowerFields() {
0314
0315 towerFields_->insert(new DCCTBDataField("TT/SC ID", TOWERID_WPOSITION, TOWERID_BPOSITION, TOWERID_MASK));
0316 towerFields_->insert(new DCCTBDataField("#TIME SAMPLES", XSAMP_WPOSITION, XSAMP_BPOSITION, XSAMP_MASK));
0317 towerFields_->insert(new DCCTBDataField("BX", TOWERBX_WPOSITION, TOWERBX_BPOSITION, TOWERBX_MASK));
0318 towerFields_->insert(new DCCTBDataField("E0", TOWERE0_WPOSITION, TOWERE0_BPOSITION, TOWERE0_MASK));
0319
0320
0321 towerFields_->insert(new DCCTBDataField("LV1", TOWERL1_WPOSITION, TOWERL1_BPOSITION, TOWERL1_MASK));
0322 towerFields_->insert(new DCCTBDataField("E1", TOWERE1_WPOSITION, TOWERE1_BPOSITION, TOWERE1_MASK));
0323 towerFields_->insert(
0324 new DCCTBDataField("BLOCK LENGTH", TOWERLENGTH_WPOSITION, TOWERLENGTH_BPOSITION, TOWERLENGTH_MASK));
0325 }
0326
0327
0328
0329
0330
0331 void DCCTBDataMapper::buildXtalFields() {
0332
0333 xtalFields_->insert(new DCCTBDataField("STRIP ID", STRIPID_WPOSITION, STRIPID_BPOSITION, STRIPID_MASK));
0334 xtalFields_->insert(new DCCTBDataField("XTAL ID", XTALID_WPOSITION, XTALID_BPOSITION, XTALID_MASK));
0335 xtalFields_->insert(new DCCTBDataField("M", M_WPOSITION, M_BPOSITION, M_MASK));
0336 xtalFields_->insert(new DCCTBDataField("SMF", SMF_WPOSITION, SMF_BPOSITION, SMF_MASK));
0337 xtalFields_->insert(new DCCTBDataField("GMF", GMF_WPOSITION, GMF_BPOSITION, GMF_MASK));
0338
0339
0340 xtalFields_->insert(new DCCTBDataField("ADC#1", ADC_WPOSITION, ADCBOFFSET, ADC_MASK));
0341
0342
0343 for (uint32_t i = 2; i <= parser_->numbXtalSamples(); i++) {
0344 std::string adc = std::string("ADC#") + parser_->getDecString(i);
0345 if (i % 2) {
0346 xtalFields_->insert(new DCCTBDataField(adc, ADC_WPOSITION + i / 2, ADCBOFFSET, ADC_MASK));
0347 } else {
0348 xtalFields_->insert(new DCCTBDataField(adc, ADC_WPOSITION + i / 2, 0, ADC_MASK));
0349 }
0350 }
0351
0352
0353 uint32_t tzsOffset_ = parser_->numbXtalSamples() / 2;
0354 xtalFields_->insert(new DCCTBDataField("TZS", XTAL_TZS_WPOSITION + tzsOffset_, XTAL_TZS_BPOSITION, XTAL_TZS_MASK));
0355 xtalFields_->insert(new DCCTBDataField(
0356 "GDECISION", XTAL_GDECISION_WPOSITION + tzsOffset_, XTAL_GDECISION_BPOSITION, XTAL_GDECISION_MASK));
0357 }
0358
0359
0360
0361
0362
0363 void DCCTBDataMapper::buildTrailerFields() {
0364
0365 trailerFields_->insert(new DCCTBDataField("T", T_WPOSITION, T_BPOSITION, T_MASK));
0366 trailerFields_->insert(new DCCTBDataField("TTS", TTS_WPOSITION, TTS_BPOSITION, TTS_MASK));
0367 trailerFields_->insert(new DCCTBDataField("EVENT STATUS", ESTAT_WPOSITION, ESTAT_BPOSITION, ESTAT_MASK));
0368 trailerFields_->insert(new DCCTBDataField("CRC", CRC_WPOSITION, CRC_BPOSITION, CRC_MASK));
0369
0370
0371 trailerFields_->insert(new DCCTBDataField("EVENT LENGTH", TLENGTH_WPOSITION, TLENGTH_BPOSITION, TLENGTH_MASK));
0372 trailerFields_->insert(new DCCTBDataField("EOE", EOE_WPOSITION, EOE_BPOSITION, EOE_MASK));
0373 }