Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:10:36

0001 #include "DCCDataMapper.h"
0002 
0003 /*--------------------------------------------*/
0004 /* DCCTBDataMapper::DCCTBDataMapper               */
0005 /* class constructor                          */
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 /* DCCTBDataMapper::~DCCTBDataMapper               */
0033 /* class destructor (free memory)              */
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 /* DCCTBDataMapper::buildDccFields                   */
0093 /* builds raw data header fields                   */
0094 /*-------------------------------------------------*/
0095 void DCCTBDataMapper::buildDCCFields() {
0096   //32 Bit word numb 0
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   //32Bit word numb 1
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   //32Bit word numb 2
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   //32Bit word numb 3
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   //32 Bit word numb 4
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   //32Bit word numb 5
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   //32 Bit word numb 6
0145   dccFields_->insert(
0146       new DCCTBDataField("ORBIT COUNTER", ORBITCOUNTER_WPOSITION, ORBITCOUNTER_BPOSITION, ORBITCOUNTER_MASK));
0147 
0148   //32 Bit word numb 7
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   //add Headers Qualifiers: 8 words with 6 bits each written on the 2nd 32bit words
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     //fill only for empty events
0169     if (i < 3) {
0170       emptyEventFields_->insert(new DCCTBDataField(header, HD_WPOSITION + (i - 1) * 2, HD_BPOSITION, HD_MASK));
0171     }
0172   }
0173 
0174   //add FE_CHSTATUS: 5 words each having 14 FE_CHSTATUS
0175   for (uint32_t wcount = 1; wcount <= 5; wcount++) {
0176     //1st word 32 bit
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     //2nd word 32 bit
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 /* DCCTBDataMapper::buildTCCFields                   */
0194 /* builds raw data TCC block fields                */
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   // Fill block with TT definition
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 // ---> update with the correct number of SRP fields
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     // This method must be modified to take into account the different SRP blocks : 68 SRF in the barrel, 34 ,35 or 36 in the EE
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     //update word count
0290     if (count1 > 8) {
0291       wcount++;
0292       count1 = 1;
0293     }
0294 
0295     //update bit offset
0296     if (count1 > 4) {
0297       factor = 1;
0298     } else {
0299       factor = 0;
0300     }
0301 
0302     //update bit shift
0303     if (count2 > 4) {
0304       count2 = 1;
0305     }
0306   }
0307 }
0308 
0309 /*-------------------------------------------------*/
0310 /* DCCTBDataMapper::buildTowerFields                 */
0311 /* builds raw data Tower Data fields               */
0312 /*-------------------------------------------------*/
0313 void DCCTBDataMapper::buildTowerFields() {
0314   //32bit word numb 1
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   //32 bit word numb 2
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 /* DCCTBDataMapper::buildXtalFields                  */
0329 /* builds raw data Crystal Data fields             */
0330 /*-------------------------------------------------*/
0331 void DCCTBDataMapper::buildXtalFields() {
0332   //32bit word numb 1
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   //first ADC is still on 1st word
0340   xtalFields_->insert(new DCCTBDataField("ADC#1", ADC_WPOSITION, ADCBOFFSET, ADC_MASK));
0341 
0342   //add the rest of the ADCs
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   //the last word has written the test zero suppression flag and the gain decision bit
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 /* DCCTBDataMapper::buildTrailerFields               */
0361 /* builds raw data Trailer words                   */
0362 /*-------------------------------------------------*/
0363 void DCCTBDataMapper::buildTrailerFields() {
0364   //32bit word numb 1
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   //32bit word numb 2
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 }