/** @file CbmTbDaqBuffer.cxx ** @author Volker Friese ** @date 13 December 2013 **/ #include #include #include "TString.h" #include "FairLogger.h" #include "CbmTbDaqBuffer.h" using std::multimap; using std::pair; using std::fixed; using std::setprecision; // ----- Initialisation of static variables ------------------------------ CbmTbDaqBuffer* CbmTbDaqBuffer::fgInstance = NULL; // --------------------------------------------------------------------------- // ----- Constructor ----------------------------------------------------- CbmTbDaqBuffer::CbmTbDaqBuffer() : fData() { } // --------------------------------------------------------------------------- // ----- Destructor ------------------------------------------------------ CbmTbDaqBuffer::~CbmTbDaqBuffer() { } // --------------------------------------------------------------------------- // ----- Access to next data --------------------------------------------- CbmDigi* CbmTbDaqBuffer::GetNextData(Double_t time) { // --- Check for empty buffer if ( ! fData.size() ) return NULL; // --- Get data from buffer CbmDigi* digi = NULL; multimap::iterator it = fData.begin(); CbmDigi* test = it->second; if ( test->GetTime() < time ) { digi = test; fData.erase(it); } return digi; } // --------------------------------------------------------------------------- // ----- Insert data into buffer ----------------------------------------- void CbmTbDaqBuffer::InsertData(CbmDigi* digi) { if ( ! digi ) LOG(fatal) << "DaqBuffer: invalid digi pointer"; pair value (digi->GetTime(), digi); fData.insert(value); LOG(debug2) << "DaqBuffer: Inserting digi, detectorID " << digi->GetAddress() << ", time " << digi->GetTime(); } // --------------------------------------------------------------------------- // ----- Instance -------------------------------------------------------- CbmTbDaqBuffer* CbmTbDaqBuffer::Instance() { if ( ! fgInstance ) fgInstance = new CbmTbDaqBuffer(); return fgInstance; } // --------------------------------------------------------------------------- // ----- Print status ---------------------------------------------------- void CbmTbDaqBuffer::PrintStatus() const { TString sysName; Int_t size = GetSize(); std::stringstream ss; ss << "DaqBuffer: Status "; if ( ! size ) { LOG(info) << ss.str() << "empty"; return; } LOG(info) << ss.str() << GetSize() << " digis from " << fixed << setprecision(9) << GetTimeFirst() * 1.e-9 << " s to " << GetTimeLast() *1.e-9 << " s"; } // ---------------------------------------------------------------------------