#include <EventFilter/EcalTBRawToDigi/src/MatacqDataFormatter.h>
Public Member Functions | |
void | interpretRawData (const FEDRawData &data, EcalMatacqDigiCollection &matacqDigiCollection) |
Callback method for decoding raw data. | |
MatacqTBDataFormatter () | |
virtual | ~MatacqTBDataFormatter () |
Private Member Functions | |
void | printData (std::ostream &out, const MatacqTBRawEvent &event) const |
Definition at line 15 of file MatacqDataFormatter.h.
MatacqTBDataFormatter::MatacqTBDataFormatter | ( | ) | [inline] |
virtual MatacqTBDataFormatter::~MatacqTBDataFormatter | ( | ) | [inline, virtual] |
Definition at line 18 of file MatacqDataFormatter.h.
References LogDebug.
00018 {LogDebug("EcalTBRawToDigi") << "@SUB=MatacqTBDataFormatter" << "\n"; };
void MatacqTBDataFormatter::interpretRawData | ( | const FEDRawData & | data, | |
EcalMatacqDigiCollection & | matacqDigiCollection | |||
) |
Callback method for decoding raw data.
data | raw data | |
matacqDigiCollection | [out] digi collection object to fill with the decoded data |
Definition at line 20 of file MatacqDataFormatter.cc.
References edm::SortedCollection< T, SORT >::back(), edmNew::copy(), GenMuonPlsPt100GeV_cfg::cout, FEDRawData::data(), empty, i, int, max, printData(), edm::SortedCollection< T, SORT >::push_back(), FEDRawData::size(), and version().
Referenced by EcalDCCTB07UnpackingModule::produce(), and EcalDCCTBUnpackingModule::produce().
00020 { 00021 #if MATACQ_DEBUG 00022 std::cout << "****************************************************************\n"; 00023 std::cout << "********************** MATACQ decoder **************************\n"; 00024 std::cout << "****************************************************************\n"; 00025 std::cout << "FEDRawData: \n"; 00026 char oldPad = std::cout.fill('0'); 00027 for(int i=0; i < max(100, (int)data.size()); ++i){ 00028 std::cout << std::hex << std::setw(2) << (int)(data.data()[i]) 00029 << ((i+1)%8?" ":"\n") ; 00030 } 00031 std::cout.fill(oldPad); 00032 std::cout << "======================================================================\n"; 00033 #endif //MATACQ_DEBUG defined 00034 00035 MatacqTBRawEvent matacq(data.data(), data.size()); 00036 00037 #if MATACQ_DEBUG 00038 printData(std::cout, matacq); 00039 #endif //MATACQ_DEBUG defined 00040 00041 const double ns = 1.e-9; //ns->s 00042 const double ps = 1.e-12;//ps->s 00043 double ts = ns/matacq.getFreqGHz(); 00044 double tTrig = matacq.getTTrigPs()<.5*std::numeric_limits<int>::max()? 00045 ps*matacq.getTTrigPs():999.; 00046 int version = matacq.getMatacqDataFormatVersion(); 00047 00048 std::vector<int16_t> samples; 00049 //FIXME: the interpretRawData method should fill an EcalMatacqDigiCollection 00050 //instead of an EcalMatacqDigi because Matacq channels are several. 00051 //In the meamtime copy only the first channel appearing in data: 00052 const std::vector<MatacqTBRawEvent::ChannelData>& chData = matacq.getChannelData(); 00053 for(unsigned iCh=0; iCh < chData.size(); ++iCh){ 00054 //copy time samples into a vector: 00055 samples.resize(chData[iCh].nSamples); 00056 copy(chData[iCh].samples, chData[iCh].samples+chData[iCh].nSamples, 00057 samples.begin()); 00058 int chId = chData[iCh].chId; 00059 std::vector<int16_t> empty; 00060 EcalMatacqDigi matacqDigi(empty, chId, ts, version, tTrig); 00061 matacqDigiCollection.push_back(matacqDigi); 00062 matacqDigiCollection.back().swap(samples); //swap is more efficient than a copy 00063 } 00064 }
void MatacqTBDataFormatter::printData | ( | std::ostream & | out, | |
const MatacqTBRawEvent & | event | |||
) | const [private] |
Definition at line 66 of file MatacqDataFormatter.cc.
References ecalMGPA::adc(), GenMuonPlsPt100GeV_cfg::cout, MatacqTBRawEvent::getBxId(), MatacqTBRawEvent::getChannelCount(), MatacqTBRawEvent::getChannelData(), MatacqTBRawEvent::getDccErrors(), MatacqTBRawEvent::getDccLen(), MatacqTBRawEvent::getEventId(), MatacqTBRawEvent::getFedId(), MatacqTBRawEvent::getFov(), MatacqTBRawEvent::getFreqGHz(), MatacqTBRawEvent::getMatacqDataFormatVersion(), MatacqTBRawEvent::getRunNum(), MatacqTBRawEvent::getStatus(), MatacqTBRawEvent::getTimeStamp(), MatacqTBRawEvent::getTriggerType(), and i.
Referenced by interpretRawData().
00066 { 00067 std::cout << "FED id: " << std::hex << "0x" << matacq.getFedId() << std::dec << "\n"; 00068 std::cout << "Event id (lv1): " 00069 << std::hex << "0x" << matacq.getEventId() << std::dec << "\n"; 00070 std::cout << "FOV: " << std::hex << "0x" << matacq.getFov() << std::dec << "\n"; 00071 std::cout << "BX id: " << std::hex << "0x" << matacq.getBxId() << std::dec << "\n"; 00072 std::cout << "Trigger type: " 00073 << std::hex << "0x" << matacq.getTriggerType() << std::dec << "\n"; 00074 std::cout << "DCC Length: " << matacq.getDccLen() << "\n"; 00075 std::cout << "Run number: " << matacq.getRunNum() << "\n"; 00076 std::cout << "Field 'DCC errors': " 00077 << std::hex << "0x" << matacq.getDccErrors() << std::dec << "\n"; 00078 00079 if(matacq.getStatus()){ 00080 std::cout << "Error in matacq data. Errot code: " 00081 << std::hex << "0x" << matacq.getStatus() << std::dec << "\n"; 00082 } 00083 00084 std::cout << "MATACQ data format version: " << matacq.getMatacqDataFormatVersion() 00085 << "\n"; 00086 std::cout << "Sampling frequency: " << matacq.getFreqGHz() << " GHz\n"; 00087 std::cout << "MATACQ channel count: " << matacq.getChannelCount() << "\n"; 00088 time_t timeStamp = matacq.getTimeStamp(); 00089 std::cout << "Data acquired on : " << ctime(&timeStamp); 00090 00091 const std::vector<MatacqTBRawEvent::ChannelData>& channels = matacq.getChannelData(); 00092 for(unsigned i=0; i< channels.size(); ++i){ 00093 std::cout << "-------------------------------------- Channel " 00094 << channels[i].chId 00095 << ": " << std::setw(4) << channels[i].nSamples 00096 << " samples --------------------------------------\n"; 00097 00098 for(int iSample = 0; iSample<channels[i].nSamples; ++iSample){ 00099 MatacqTBRawEvent::int16le_t adc = (channels[i].samples)[iSample]; 00100 std::cout << std::setw(4) << adc 00101 << ((iSample%20==19)?"\n":" "); 00102 } 00103 } 00104 std::cout << "==================================================" 00105 "==================================================\n\n"; 00106 }