#include <MatacqDataFormatter.h>
Public Member Functions | |
void | interpretRawData (const FEDRawData &data, EcalMatacqDigiCollection &matacqDigiCollection) |
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] |
Definition at line 17 of file MatacqDataFormatter.h.
{};
virtual MatacqTBDataFormatter::~MatacqTBDataFormatter | ( | ) | [inline, virtual] |
Definition at line 18 of file MatacqDataFormatter.h.
References LogDebug.
{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 19 of file MatacqDataFormatter.cc.
References edm::SortedCollection< T, SORT >::back(), filterCSVwithJSON::copy, gather_cfg::cout, FEDRawData::data(), relativeConstraints::empty, i, max(), printData(), edm::SortedCollection< T, SORT >::push_back(), ExpressReco_HICollisions_FallBack::samples, FEDRawData::size(), and AlCaRecoCosmics_cfg::version.
Referenced by EcalDCCTB07UnpackingModule::produce(), and EcalDCCTBUnpackingModule::produce().
{ #if MATACQ_DEBUG std::cout << "****************************************************************\n"; std::cout << "********************** MATACQ decoder **************************\n"; std::cout << "****************************************************************\n"; std::cout << "FEDRawData: \n"; char oldPad = std::cout.fill('0'); for(int i=0; i < max(100, (int)data.size()); ++i){ std::cout << std::hex << std::setw(2) << (int)(data.data()[i]) << ((i+1)%8?" ":"\n") ; } std::cout.fill(oldPad); std::cout << "======================================================================\n"; #endif //MATACQ_DEBUG defined MatacqTBRawEvent matacq(data.data(), data.size()); #if MATACQ_DEBUG printData(std::cout, matacq); #endif //MATACQ_DEBUG defined const double ns = 1.e-9; //ns->s const double ps = 1.e-12;//ps->s double ts = ns/matacq.getFreqGHz(); double tTrig = matacq.getTTrigPs()<.5*std::numeric_limits<int>::max()? ps*matacq.getTTrigPs():999.; int version = matacq.getMatacqDataFormatVersion(); std::vector<int16_t> samples; //FIXME: the interpretRawData method should fill an EcalMatacqDigiCollection //instead of an EcalMatacqDigi because Matacq channels are several. //In the meamtime copy only the first channel appearing in data: const std::vector<MatacqTBRawEvent::ChannelData>& chData = matacq.getChannelData(); for(unsigned iCh=0; iCh < chData.size(); ++iCh){ //copy time samples into a vector: samples.resize(chData[iCh].nSamples); copy(chData[iCh].samples, chData[iCh].samples+chData[iCh].nSamples, samples.begin()); int chId = chData[iCh].chId; std::vector<int16_t> empty; EcalMatacqDigi matacqDigi(empty, chId, ts, version, tTrig); matacqDigiCollection.push_back(matacqDigi); matacqDigiCollection.back().swap(samples); //swap is more efficient than a copy } }
void MatacqTBDataFormatter::printData | ( | std::ostream & | out, |
const MatacqTBRawEvent & | event | ||
) | const [private] |
Definition at line 87 of file MatacqDataFormatter.cc.
References ecalMGPA::adc(), gather_cfg::cout, MatacqRawEvent::getBxId(), MatacqRawEvent::getChannelCount(), MatacqRawEvent::getChannelData(), MatacqRawEvent::getDccErrors(), MatacqRawEvent::getDccLen(), MatacqRawEvent::getEventId(), MatacqRawEvent::getFedId(), MatacqRawEvent::getFov(), MatacqRawEvent::getFreqGHz(), MatacqRawEvent::getMatacqDataFormatVersion(), MatacqRawEvent::getRunNum(), MatacqRawEvent::getStatus(), MatacqRawEvent::getTimeStamp(), MatacqRawEvent::getTriggerType(), i, and stor::utils::timeStamp().
Referenced by interpretRawData().
{ cout << "FED id: " << hex << "0x" << matacq.getFedId() << dec << "\n"; cout << "Event id (lv1): " << hex << "0x" << matacq.getEventId() << dec << "\n"; cout << "FOV: " << hex << "0x" << matacq.getFov() << dec << "\n"; cout << "BX id: " << hex << "0x" << matacq.getBxId() << dec << "\n"; cout << "Trigger type: " << hex << "0x" << matacq.getTriggerType() << dec << "\n"; cout << "DCC Length: " << matacq.getDccLen() << "\n"; cout << "Run number: " << matacq.getRunNum() << "\n"; cout << "Field 'DCC errors': " << hex << "0x" << matacq.getDccErrors() << dec << "\n"; if(matacq.getStatus()){ cout << "Error in matacq data. Errot code: " << hex << "0x" << matacq.getStatus() << dec << "\n"; } cout << "MATACQ data format version: " << matacq.getMatacqDataFormatVersion() << "\n"; cout << "Sampling frequency: " << matacq.getFreqGHz() << " GHz\n"; cout << "MATACQ channel count: " << matacq.getChannelCount() << "\n"; time_t timeStamp = matacq.getTimeStamp(); cout << "Data acquired on : " << ctime(&timeStamp); const vector<MatacqRawEvent::ChannelData>& channels = matacq.getChannelData(); for(unsigned i=0; i< channels.size(); ++i){ cout << "-------------------------------------- Channel " << channels[i].chId << ": " << setw(4) << channels[i].nSamples << " samples --------------------------------------\n"; for(int iSample = 0; iSample<channels[i].nSamples; ++iSample){ MatacqRawEvent::int16le_t adc = (channels[i].samples)[iSample]; cout << setw(4) << adc << ((iSample%20==19)?"\n":" "); } } cout << "==================================================" "==================================================\n\n"; }