/** @file * $Source: /home/cvsmanager/yoda/event/EventCounter.cpp,v $ * $Id: EventCounter.cpp,v 1.5 2004/07/29 16:18:53 kusanagi Exp $ * $Author: kusanagi $ * * Implementation of the EventCounter class. */ #include #include "EventCounter.h" #include "PscuHeader.h" static log4cpp::Category& cat = log4cpp::Category::getInstance("pamela.techmodel.EventCounter"); using namespace pamela; /** * Create a new event counter for a certain run. * @param run Run number. */ EventCounter::EventCounter(int run): // New Packets. Pscu(0), PhysEndRun(0), CalibCalPulse1(0), CalibCalPulse2(0), Physics(0), CalibTrkBoth(0), Calib_Trk1(0), Calib_Trk2(0), Calib_Trd(0), Calib_Tof(0), Calib_S4(0), Calib_CalPed(0), Calib_Ac(0), Run_Header(0), Run_Trailer(0), CalibHeader(0), CalibTrailer(0), InitHeader(0), InitTrailer(0), EventTrk(0), TestTrk(0), Log(0), VarDump(0), ArrDump(0), TabDump(0), Tmtc(0), Mcmd(0), ForcedFECmd(0), AcInit(0), CalInit(0), TrkInit(0), TofInit(0), TrgInit(0), RunNumber(run) { CMap.insert(CounterMap::value_type(PacketType::Pscu, &Pscu)); CMap.insert(CounterMap::value_type(PacketType::PhysEndRun, &PhysEndRun)); CMap.insert(CounterMap::value_type(PacketType::CalibCalPulse2, &CalibCalPulse1)); CMap.insert(CounterMap::value_type(PacketType::CalibCalPulse2, &CalibCalPulse2)); CMap.insert(CounterMap::value_type(PacketType::Physics, &Physics)); CMap.insert(CounterMap::value_type(PacketType::CalibTrkBoth, &CalibTrkBoth)); CMap.insert(CounterMap::value_type(PacketType::CalibTrk1, &Calib_Trk1)); CMap.insert(CounterMap::value_type(PacketType::CalibTrk2, &Calib_Trk2)); CMap.insert(CounterMap::value_type(PacketType::CalibTrd, &Calib_Trd)); CMap.insert(CounterMap::value_type(PacketType::CalibTof, &Calib_Tof)); CMap.insert(CounterMap::value_type(PacketType::CalibS4, &Calib_S4)); CMap.insert(CounterMap::value_type(PacketType::CalibCalPed, &Calib_CalPed)); CMap.insert(CounterMap::value_type(PacketType::CalibAc, &Calib_Ac)); CMap.insert(CounterMap::value_type(PacketType::RunHeader, &Run_Header)); CMap.insert(CounterMap::value_type(PacketType::RunTrailer, &Run_Trailer)); CMap.insert(CounterMap::value_type(PacketType::CalibHeader, &CalibHeader)); CMap.insert(CounterMap::value_type(PacketType::CalibTrailer, &CalibTrailer)); CMap.insert(CounterMap::value_type(PacketType::InitHeader, &InitHeader)); CMap.insert(CounterMap::value_type(PacketType::InitTrailer, &InitTrailer)); CMap.insert(CounterMap::value_type(PacketType::EventTrk, &EventTrk)); CMap.insert(CounterMap::value_type(PacketType::TestTrk, &TestTrk)); CMap.insert(CounterMap::value_type(PacketType::Log, &Log)); CMap.insert(CounterMap::value_type(PacketType::VarDump, &VarDump)); CMap.insert(CounterMap::value_type(PacketType::ArrDump, &ArrDump)); CMap.insert(CounterMap::value_type(PacketType::TabDump, &TabDump)); CMap.insert(CounterMap::value_type(PacketType::Tmtc, &Tmtc)); CMap.insert(CounterMap::value_type(PacketType::Mcmd, &Mcmd)); CMap.insert(CounterMap::value_type(PacketType::ForcedFECmd, &ForcedFECmd)); CMap.insert(CounterMap::value_type(PacketType::AcInit, &AcInit)); CMap.insert(CounterMap::value_type(PacketType::CalInit, &CalInit)); CMap.insert(CounterMap::value_type(PacketType::TrkInit, &TrkInit)); CMap.insert(CounterMap::value_type(PacketType::TofInit, &TofInit)); CMap.insert(CounterMap::value_type(PacketType::TrgInit, &TrgInit)); } /** * Increment the event counter for a certain packet. * @param type Event type to be incremented. */ void EventCounter::Increment(PacketType const * type) { CounterMap::iterator p = CMap.find(type); if (p != CMap.end()) { int *counter = p->second; (*counter)++; cat << log4cpp::Priority::DEBUG << " Counter." << type->GetName() << " = " << (*counter) << "\n " << log4cpp::CategoryStream::ENDLINE; } else { cat << log4cpp::Priority::WARN << " No counter for packet type " << type->GetName() << "\n " << log4cpp::CategoryStream::ENDLINE; } } /** * Get the counter corresponding to a certain packet type. * @param type Event type to be incremented. * @return The counter of that packet type. For the current event type, * this is the actual event number. For all other types, this is the event * number of the last read event of that type. * @retval -1 if there was no event of this type. */ int EventCounter::Get(PacketType const * type) const { const CounterMap::const_iterator p = CMap.find(type); if (p != CMap.end()) { const int *counter = p->second; return *counter; } else { cat << log4cpp::Priority::WARN << " No counter for packet type " << type->GetName() << "\n " << log4cpp::CategoryStream::ENDLINE; return -1; } } /** * Get the counter of the next event corresponding to a certain packet type. * @param type Event type to be incremented. * @return The next counter of that packet type. * @retval -1 if there was no event of this type. */ int EventCounter::Next(PacketType const * type) const { const CounterMap::const_iterator p = CMap.find(type); if (p != CMap.end()) { const int *counter = p->second; return *counter + 1; } else { cat << log4cpp::Priority::WARN << " No counter for packet type " << type->GetName() << "\n " << log4cpp::CategoryStream::ENDLINE; return -1; } } /** * Get the all the counters * @retval -1 if there was no event of this type. */ void EventCounter::PrintCounters() const { for(CounterMap::const_iterator p = CMap.begin(); p != CMap.end(); p++) { cat << log4cpp::Priority::INFO << " Counter." << (p->first)->GetName() << " = " << (*p->second) << "\n " << log4cpp::CategoryStream::ENDLINE; } }