/** @file * $Source: /home/cvsmanager/yoda/event/EventCounter.cpp,v $ * $Id: EventCounter.cpp,v 1.7 2004/09/21 20:23:37 kusanagi Exp $ * $Author: kusanagi $ * * Implementation of the EventCounter class. */ #include #include #include "EventCounter.h" #include "PscuHeader.h" static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.EventCounter")); static std::stringstream oss; 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), TestTof(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), CalAlarm(0), AcAlarm(0), TrkAlarm(0), TrgAlarm(0), TofAlarm(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::TestTof, &TestTof)); 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)); CMap.insert(CounterMap::value_type(PacketType::CalAlarm, &CalAlarm)); CMap.insert(CounterMap::value_type(PacketType::AcAlarm, &AcAlarm)); CMap.insert(CounterMap::value_type(PacketType::TrkAlarm, &TrkAlarm)); CMap.insert(CounterMap::value_type(PacketType::TrgAlarm, &TrgAlarm)); CMap.insert(CounterMap::value_type(PacketType::TofAlarm, &TofAlarm)); } /** * 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)++; oss.flush(); oss << " Counter." << type->GetName() << " = " << (*counter); logger->debug(oss.str().c_str()); } else { oss.flush(); oss << " No counter for packet type " << type->GetName(); logger->warn(oss.str().c_str()); } } /** * 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 { oss.flush(); oss << " No counter for packet type " << type->GetName(); logger->warn(oss.str().c_str()); 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 { oss.flush(); oss << " No counter for packet type " << type->GetName(); logger->warn(oss.str().c_str()); return -1; } } /** * Get the all the counters * @retval 0 if there was no event of this type. */ void EventCounter::PrintCounters() const { for(CounterMap::const_iterator p = CMap.begin(); p != CMap.end(); p++) { oss.flush(); oss << " Counter." << (p->first)->GetName() << " = " << (*p->second); logger->warn(oss.str().c_str()); std::cout << " Counter." << (p->first)->GetName() << "\t = \t" << (*p->second) << "\n"; } }