| 1 | /** @file | 
| 2 | * $Source: /home/cvsmanager/yoda/event/EventCounter.cpp,v $ | 
| 3 | * $Id: EventCounter.cpp,v 4.1 2005/05/28 08:30:01 kusanagi Exp $ | 
| 4 | * $Author: kusanagi $ | 
| 5 | * | 
| 6 | * Implementation of the EventCounter class. | 
| 7 | */ | 
| 8 | #include <log4cxx/logger.h> | 
| 9 | #include <sstream> | 
| 10 |  | 
| 11 | #include "EventCounter.h" | 
| 12 | #include "PscuHeader.h" | 
| 13 |  | 
| 14 |  | 
| 15 | static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.EventCounter")); | 
| 16 | static std::stringstream oss; | 
| 17 | using namespace pamela; | 
| 18 |  | 
| 19 | /** | 
| 20 | * Create a new event counter for a certain run. | 
| 21 | * @param run Run number. | 
| 22 | */ | 
| 23 | EventCounter::EventCounter(int run): | 
| 24 | // New Packets. | 
| 25 | Pscu(0), | 
| 26 | PhysEndRun(0), | 
| 27 | CalibCalPulse1(0), | 
| 28 | CalibCalPulse2(0), | 
| 29 | Physics(0), | 
| 30 | CalibTrk1(0), | 
| 31 | CalibTrk2(0), | 
| 32 | CalibTof(0), | 
| 33 | CalibS4(0), | 
| 34 | CalibCalPed(0), | 
| 35 | Calib1_Ac1(0), | 
| 36 | Calib1_Ac2(0), | 
| 37 | Calib2_Ac1(0), | 
| 38 | Calib2_Ac2(0), | 
| 39 | RunHeader(0), | 
| 40 | RunTrailer(0), | 
| 41 | CalibHeader(0), | 
| 42 | CalibTrailer(0), | 
| 43 | InitHeader(0), | 
| 44 | InitTrailer(0), | 
| 45 | EventTrk(0), | 
| 46 | TestTrk(0), | 
| 47 | TestTof(0), | 
| 48 | Log(0), | 
| 49 | VarDump(0), | 
| 50 | ArrDump(0), | 
| 51 | TabDump(0), | 
| 52 | Tmtc(0), | 
| 53 | Mcmd(0), | 
| 54 | ForcedFECmd(0), | 
| 55 | Ac1Init(0), | 
| 56 | CalInit(0), | 
| 57 | TrkInit(0), | 
| 58 | TofInit(0), | 
| 59 | TrgInit(0), | 
| 60 | NdInit(0), | 
| 61 | S4Init(0), | 
| 62 | Ac2Init(0), | 
| 63 | CalAlarm(0), | 
| 64 | AcAlarm(0), | 
| 65 | TrkAlarm(0), | 
| 66 | TrgAlarm(0), | 
| 67 | TofAlarm(0), | 
| 68 | S4Alarm(0), | 
| 69 | TsbT(0), | 
| 70 | TsbB(0), | 
| 71 | RunNumber(run) { | 
| 72 | CMap.insert(CounterMap::value_type(PacketType::Pscu,            &Pscu)); | 
| 73 | CMap.insert(CounterMap::value_type(PacketType::PhysEndRun,      &PhysEndRun)); | 
| 74 | CMap.insert(CounterMap::value_type(PacketType::CalibCalPulse1,  &CalibCalPulse1)); | 
| 75 | CMap.insert(CounterMap::value_type(PacketType::CalibCalPulse2,  &CalibCalPulse2)); | 
| 76 | CMap.insert(CounterMap::value_type(PacketType::Physics,         &Physics)); | 
| 77 | CMap.insert(CounterMap::value_type(PacketType::CalibTrk1,       &CalibTrk1)); | 
| 78 | CMap.insert(CounterMap::value_type(PacketType::CalibTrk2,       &CalibTrk2)); | 
| 79 | CMap.insert(CounterMap::value_type(PacketType::CalibTof,        &CalibTof)); | 
| 80 | CMap.insert(CounterMap::value_type(PacketType::CalibS4,         &CalibS4)); | 
| 81 | CMap.insert(CounterMap::value_type(PacketType::CalibCalPed,     &CalibCalPed)); | 
| 82 | CMap.insert(CounterMap::value_type(PacketType::Calib1_Ac1,      &Calib1_Ac1)); | 
| 83 | CMap.insert(CounterMap::value_type(PacketType::Calib1_Ac2,      &Calib1_Ac2)); | 
| 84 | CMap.insert(CounterMap::value_type(PacketType::Calib2_Ac1,      &Calib2_Ac1)); | 
| 85 | CMap.insert(CounterMap::value_type(PacketType::Calib2_Ac2,      &Calib2_Ac2)); | 
| 86 | CMap.insert(CounterMap::value_type(PacketType::RunHeader,       &RunHeader)); | 
| 87 | CMap.insert(CounterMap::value_type(PacketType::RunTrailer,      &RunTrailer)); | 
| 88 | CMap.insert(CounterMap::value_type(PacketType::CalibHeader,     &CalibHeader)); | 
| 89 | CMap.insert(CounterMap::value_type(PacketType::CalibTrailer,    &CalibTrailer)); | 
| 90 | CMap.insert(CounterMap::value_type(PacketType::InitHeader,      &InitHeader)); | 
| 91 | CMap.insert(CounterMap::value_type(PacketType::InitTrailer,     &InitTrailer)); | 
| 92 | CMap.insert(CounterMap::value_type(PacketType::EventTrk,        &EventTrk)); | 
| 93 | CMap.insert(CounterMap::value_type(PacketType::TestTrk,         &TestTrk)); | 
| 94 | CMap.insert(CounterMap::value_type(PacketType::TestTof,         &TestTof)); | 
| 95 | CMap.insert(CounterMap::value_type(PacketType::Log,             &Log)); | 
| 96 | CMap.insert(CounterMap::value_type(PacketType::VarDump,         &VarDump)); | 
| 97 | CMap.insert(CounterMap::value_type(PacketType::ArrDump,         &ArrDump)); | 
| 98 | CMap.insert(CounterMap::value_type(PacketType::TabDump,         &TabDump)); | 
| 99 | CMap.insert(CounterMap::value_type(PacketType::Tmtc,            &Tmtc)); | 
| 100 | CMap.insert(CounterMap::value_type(PacketType::Mcmd,            &Mcmd)); | 
| 101 | CMap.insert(CounterMap::value_type(PacketType::ForcedFECmd,     &ForcedFECmd)); | 
| 102 | CMap.insert(CounterMap::value_type(PacketType::Ac1Init,         &Ac1Init)); | 
| 103 | CMap.insert(CounterMap::value_type(PacketType::CalInit,         &CalInit)); | 
| 104 | CMap.insert(CounterMap::value_type(PacketType::TrkInit,         &TrkInit)); | 
| 105 | CMap.insert(CounterMap::value_type(PacketType::TofInit,         &TofInit)); | 
| 106 | CMap.insert(CounterMap::value_type(PacketType::NdInit,          &NdInit)); | 
| 107 | CMap.insert(CounterMap::value_type(PacketType::S4Init,          &S4Init)); | 
| 108 | CMap.insert(CounterMap::value_type(PacketType::Ac2Init,         &Ac2Init)); | 
| 109 | CMap.insert(CounterMap::value_type(PacketType::CalAlarm,        &CalAlarm)); | 
| 110 | CMap.insert(CounterMap::value_type(PacketType::AcAlarm,         &AcAlarm)); | 
| 111 | CMap.insert(CounterMap::value_type(PacketType::TrkAlarm,        &TrkAlarm)); | 
| 112 | CMap.insert(CounterMap::value_type(PacketType::TrgAlarm,        &TrgAlarm)); | 
| 113 | CMap.insert(CounterMap::value_type(PacketType::TofAlarm,        &TofAlarm)); | 
| 114 | CMap.insert(CounterMap::value_type(PacketType::S4Alarm,         &S4Alarm)); | 
| 115 | CMap.insert(CounterMap::value_type(PacketType::TsbT,            &TsbT)); | 
| 116 | CMap.insert(CounterMap::value_type(PacketType::TsbB,            &TsbB)); | 
| 117 | } | 
| 118 |  | 
| 119 | /** | 
| 120 | * Increment the event counter for a certain packet. | 
| 121 | * @param type Event type to be incremented. | 
| 122 | */ | 
| 123 | void EventCounter::Increment(PacketType const * type) throw (NotExistingCounterException){ | 
| 124 | CounterMap::iterator p = CMap.find(type); | 
| 125 | if (p != CMap.end()) { | 
| 126 | int *counter = p->second; | 
| 127 | (*counter)++; | 
| 128 | oss.str(""); | 
| 129 | oss << " Counter." <<  type->GetName() << " = " <<  (*counter); | 
| 130 | logger->info(oss.str().c_str()); | 
| 131 | } else { | 
| 132 | oss.str(""); | 
| 133 | oss << "\n No counter of type  " << type->GetName().c_str(); | 
| 134 | throw NotExistingCounterException(oss.str().c_str()); | 
| 135 | } | 
| 136 | } | 
| 137 |  | 
| 138 | /** | 
| 139 | * Get the counter corresponding to a certain packet type. | 
| 140 | * @param type Event type to be incremented. | 
| 141 | * @return The counter of that packet type. For the current event type, | 
| 142 | * this is the actual event number. For all other types, this is the event | 
| 143 | * number of the last read event of that type. | 
| 144 | * @retval -1 if there was no event of this type. | 
| 145 | */ | 
| 146 | int EventCounter::Get(PacketType const * type) const throw (NotExistingCounterException){ | 
| 147 | const CounterMap::const_iterator p = CMap.find(type); | 
| 148 | if (p != CMap.end()) { | 
| 149 | const int *counter = p->second; | 
| 150 | return *counter; | 
| 151 | } else { | 
| 152 | throw NotExistingCounterException(type->GetName().c_str()); | 
| 153 | return -1; | 
| 154 | } | 
| 155 | } | 
| 156 |  | 
| 157 | /** | 
| 158 | * Get the counter of the next event corresponding to a certain packet type. | 
| 159 | * @param type Event type to be incremented. | 
| 160 | * @return The next counter of that packet type. | 
| 161 | * @retval -1 if there was no event of this type. | 
| 162 | */ | 
| 163 | int EventCounter::Next(PacketType const * type) const throw (NotExistingCounterException){ | 
| 164 | const CounterMap::const_iterator p = CMap.find(type); | 
| 165 | if (p != CMap.end()) { | 
| 166 | const int *counter = p->second; | 
| 167 | return *counter + 1; | 
| 168 | } else { | 
| 169 | throw NotExistingCounterException(type->GetName().c_str()); | 
| 170 | return -1; | 
| 171 | } | 
| 172 | } | 
| 173 |  | 
| 174 | /** | 
| 175 | * Get the all the counters | 
| 176 | * @retval 0 if there was no event of this type. | 
| 177 | */ | 
| 178 | void EventCounter::PrintCounters() const { | 
| 179 | for(CounterMap::const_iterator p = CMap.begin(); p != CMap.end(); p++) { | 
| 180 | oss.str(""); | 
| 181 | oss <<  " Counter." <<  (p->first)->GetName()  <<   " \t \t " <<  (*p->second); | 
| 182 | logger->info(oss.str().c_str()); | 
| 183 | } | 
| 184 | } |