File indexing completed on 2024-04-06 12:27:58
0001 #include "RecoTBCalo/HcalTBObjectUnpacker/interface/HcalTBTriggerDataUnpacker.h"
0002 #include "TBDataFormats/HcalTBObjects/interface/HcalTBTriggerData.h"
0003 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
0004 #include <iostream>
0005
0006 using namespace std;
0007
0008
0009
0010 struct oldTriggerDataFormat {
0011 uint32_t cdfHeader[4];
0012 uint32_t triggerWord;
0013 uint32_t triggerNumber;
0014 uint32_t triggerTime_usec;
0015 uint32_t triggerTime_base;
0016 uint32_t spillNumber;
0017 uint32_t runNumber;
0018 char runNumberSequenceId[16];
0019 uint32_t orbitNumber;
0020 uint32_t bunchNumber;
0021 uint32_t eventStatus;
0022 uint32_t filler1;
0023 uint32_t cdfTrailer[2];
0024 };
0025
0026
0027
0028
0029
0030 typedef struct StandardTrgMsgBlkStruct {
0031 uint32_t orbitNumber;
0032 uint32_t eventNumber;
0033 uint32_t flags_daq_ttype;
0034 uint32_t algo_bits_3;
0035 uint32_t algo_bits_2;
0036 uint32_t algo_bits_1;
0037 uint32_t algo_bits_0;
0038 uint32_t tech_bits;
0039 uint32_t gps_1234;
0040 uint32_t gps_5678;
0041 } StandardTrgMsgBlk;
0042
0043 typedef struct newExtendedTrgMsgBlkStruct {
0044 StandardTrgMsgBlk stdBlock;
0045 uint32_t triggerWord;
0046 uint32_t triggerTime_usec;
0047 uint32_t triggerTime_base;
0048 uint32_t spillNumber;
0049 uint32_t runNumber;
0050 char runNumberSequenceId[16];
0051 uint32_t eventStatus;
0052 } newExtendedTrgMsgBlk;
0053
0054 namespace hcaltb {
0055
0056 void HcalTBTriggerDataUnpacker::unpack(const FEDRawData &raw, HcalTBTriggerData &htbtd) const {
0057
0058
0059 if (raw.size() == 80) {
0060
0061 const oldTriggerDataFormat *oldtrgblk = (const oldTriggerDataFormat *)(raw.data());
0062 htbtd.setStandardData(oldtrgblk->orbitNumber,
0063 oldtrgblk->triggerNumber,
0064 oldtrgblk->bunchNumber,
0065 0,
0066 0,
0067 0,
0068 0,
0069 0,
0070 0,
0071 0,
0072 0
0073 );
0074
0075 htbtd.setExtendedData(oldtrgblk->triggerWord,
0076 oldtrgblk->triggerTime_usec,
0077 oldtrgblk->triggerTime_base,
0078 oldtrgblk->spillNumber,
0079 oldtrgblk->runNumber,
0080 oldtrgblk->runNumberSequenceId);
0081 } else {
0082 const newExtendedTrgMsgBlk *newtrgblk;
0083
0084 if (raw.size() == 96)
0085
0086 newtrgblk = (const newExtendedTrgMsgBlk *)(raw.data() + 8);
0087
0088 else if (raw.size() == 104)
0089
0090 newtrgblk = (const newExtendedTrgMsgBlk *)(raw.data() + 16);
0091 else {
0092 cerr << "HcalTBtdUnpacker.unpack: data of unknown size ";
0093 cerr << raw.size() << endl;
0094 return;
0095 }
0096
0097
0098
0099 const uint32_t *cdflow = (const uint32_t *)raw.data();
0100 int bunch_id = (*cdflow) >> 20;
0101
0102 htbtd.setStandardData(newtrgblk->stdBlock.orbitNumber,
0103 newtrgblk->stdBlock.eventNumber,
0104 bunch_id,
0105 newtrgblk->stdBlock.flags_daq_ttype,
0106 newtrgblk->stdBlock.algo_bits_3,
0107 newtrgblk->stdBlock.algo_bits_2,
0108 newtrgblk->stdBlock.algo_bits_1,
0109 newtrgblk->stdBlock.algo_bits_0,
0110 newtrgblk->stdBlock.tech_bits,
0111 newtrgblk->stdBlock.gps_1234,
0112 newtrgblk->stdBlock.gps_5678);
0113
0114 htbtd.setExtendedData(newtrgblk->triggerWord,
0115 newtrgblk->triggerTime_usec,
0116 newtrgblk->triggerTime_base,
0117 newtrgblk->spillNumber,
0118 newtrgblk->runNumber,
0119 newtrgblk->runNumberSequenceId);
0120 }
0121 }
0122 }