--- chewbacca/event/EventCounter.cpp 2009/07/24 13:53:49 1.2 +++ chewbacca/event/EventCounter.cpp 2009/08/04 13:58:16 1.4 @@ -1,6 +1,6 @@ /** @file * $Source: /afs/ba.infn.it/user/pamela/src/CVS/chewbacca/event/EventCounter.cpp,v $ - * $Id: EventCounter.cpp,v 1.1.1.1 2008/09/23 07:19:51 mocchiut Exp $ + * $Id: EventCounter.cpp,v 1.3 2009/07/29 15:47:19 mocchiut Exp $ * $Author: mocchiut $ * * Implementation of the EventCounter class. @@ -15,14 +15,81 @@ //marco ////static log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger(_T("pamela.techmodel.EventCounter")); static std::stringstream oss; + using namespace pamela; + +mapval::mapval(): count(0), name(""){ } + +mapval::mapval(TString n, Int_t *i): count(i), name(n){ } + +mappa::mappa(){ + val = 0; + this->Clear(); +} + +void mappa::Clear(Option_t *t){ + // cout << " mappa clear" << endl; + t=""; + if ( val ){ + val->Delete(); + val = 0; + }; + fend = false; + entries = 0; +} + +void mappa::Set(){ + // cout << " in mappa set" << endl; + if (!val) val = new TClonesArray("pamela::mapval",47); + // cout << " out mappa set" << endl; +} + +void mappa::Delete(Option_t *t){ + // cout << " mappa del" << endl; + if ( val ){ + val->Delete(); + val = 0; + // delete val; + }; + delete this; +} + +void mappa::Insert(TString nme, Int_t *valu){ + // cout << " mappa insert " << nme.Data() << " valu " << *valu << endl; + if ( !val ) this->Set(); + TClonesArray &t = *val; + new(t[entries]) mapval(nme,valu); + entries++; +} + +mapval::mapval(const mapval &t){ + name = t.name; + count = t.count; +} + +mapval* mappa::Find(TString n){ + Bool_t fo = false; + fend = false; + mapval *c = NULL; + for (Int_t i=0; i < entries; i++){ + c = (mapval*)val->At(i); + if ( c && !strcmp(c->name.Data(),n.Data()) ){ + fo = true; + break; + }; + }; + if ( !fo ) fend = true; + return c; +} + /** * Create a new event counter for a certain run. * @param run Run number. */ EventCounter::EventCounter(int run): // New Packets. + RunNumber(run), Pscu(0), PhysEndRun(0), CalibCalPulse1(0), @@ -69,56 +136,56 @@ S4Alarm(0), Ac2Alarm(0), TsbT(0), - TsbB(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::CalibCalPulse1, &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, &CalibTrk1)); - CMap.insert(CounterMap::value_type(PacketType::CalibTrk2, &CalibTrk2)); - CMap.insert(CounterMap::value_type(PacketType::CalibTof, &CalibTof)); - CMap.insert(CounterMap::value_type(PacketType::CalibS4, &CalibS4)); - CMap.insert(CounterMap::value_type(PacketType::CalibCalPed, &CalibCalPed)); - CMap.insert(CounterMap::value_type(PacketType::Calib1_Ac1, &Calib1_Ac1)); - CMap.insert(CounterMap::value_type(PacketType::Calib2_Ac1, &Calib2_Ac1)); - CMap.insert(CounterMap::value_type(PacketType::Calib1_Ac2, &Calib1_Ac2)); - CMap.insert(CounterMap::value_type(PacketType::Calib2_Ac2, &Calib2_Ac2)); - CMap.insert(CounterMap::value_type(PacketType::CalibCal, &CalibCal)); - CMap.insert(CounterMap::value_type(PacketType::RunHeader, &RunHeader)); - CMap.insert(CounterMap::value_type(PacketType::RunTrailer, &RunTrailer)); - 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::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::Ac1Init, &Ac1Init)); - 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::NdInit, &NdInit)); - CMap.insert(CounterMap::value_type(PacketType::S4Init, &S4Init)); - CMap.insert(CounterMap::value_type(PacketType::Ac2Init, &Ac2Init)); - CMap.insert(CounterMap::value_type(PacketType::CalAlarm, &CalAlarm)); - CMap.insert(CounterMap::value_type(PacketType::Ac1Alarm, &Ac1Alarm)); - CMap.insert(CounterMap::value_type(PacketType::TrkAlarm, &TrkAlarm)); - CMap.insert(CounterMap::value_type(PacketType::TrgAlarm, &TrgAlarm)); - CMap.insert(CounterMap::value_type(PacketType::TofAlarm, &TofAlarm)); - CMap.insert(CounterMap::value_type(PacketType::S4Alarm, &S4Alarm)); - CMap.insert(CounterMap::value_type(PacketType::Ac2Alarm, &Ac2Alarm)); - CMap.insert(CounterMap::value_type(PacketType::TsbT, &TsbT)); - CMap.insert(CounterMap::value_type(PacketType::TsbB, &TsbB)); - + TsbB(0) { + CMap.Set(); + CMap.Insert(PacketType::Physics->GetName(), &Physics); + CMap.Insert(PacketType::Pscu->GetName(), &Pscu); + CMap.Insert(PacketType::RunHeader->GetName(), &RunHeader); + CMap.Insert(PacketType::RunTrailer->GetName(), &RunTrailer); + CMap.Insert(PacketType::PhysEndRun->GetName(), &PhysEndRun); + CMap.Insert(PacketType::InitHeader->GetName(), &InitHeader); + CMap.Insert(PacketType::InitTrailer->GetName(), &InitTrailer); + CMap.Insert(PacketType::Log->GetName(), &Log); + CMap.Insert(PacketType::VarDump->GetName(), &VarDump); + CMap.Insert(PacketType::ArrDump->GetName(), &ArrDump); + CMap.Insert(PacketType::TabDump->GetName(), &TabDump); + CMap.Insert(PacketType::Tmtc->GetName(), &Tmtc); + CMap.Insert(PacketType::Mcmd->GetName(), &Mcmd); + CMap.Insert(PacketType::TsbT->GetName(), &TsbT); + CMap.Insert(PacketType::TsbB->GetName(), &TsbB); + CMap.Insert(PacketType::CalibHeader->GetName(), &CalibHeader); + CMap.Insert(PacketType::CalibTrailer->GetName(), &CalibTrailer); + CMap.Insert(PacketType::CalibCalPulse1->GetName(), &CalibCalPulse1); + CMap.Insert(PacketType::CalibCalPulse2->GetName(), &CalibCalPulse2); + CMap.Insert(PacketType::CalibTrkBoth->GetName(), &CalibTrkBoth); + CMap.Insert(PacketType::CalibTrk1->GetName(), &CalibTrk1); + CMap.Insert(PacketType::CalibTrk2->GetName(), &CalibTrk2); + CMap.Insert(PacketType::CalibS4->GetName(), &CalibS4); + CMap.Insert(PacketType::CalibCalPed->GetName(), &CalibCalPed); + CMap.Insert(PacketType::Calib1_Ac1->GetName(), &Calib1_Ac1); + CMap.Insert(PacketType::Calib2_Ac1->GetName(), &Calib2_Ac1); + CMap.Insert(PacketType::Calib1_Ac2->GetName(), &Calib1_Ac2); + CMap.Insert(PacketType::Calib2_Ac2->GetName(), &Calib2_Ac2); + CMap.Insert(PacketType::CalibCal->GetName(), &CalibCal); + CMap.Insert(PacketType::EventTrk->GetName(), &EventTrk); + CMap.Insert(PacketType::Ac1Init->GetName(), &Ac1Init); + CMap.Insert(PacketType::CalInit->GetName(), &CalInit); + CMap.Insert(PacketType::TrkInit->GetName(), &TrkInit); + CMap.Insert(PacketType::TofInit->GetName(), &TofInit); + CMap.Insert(PacketType::TrgInit->GetName(), &TrgInit); + CMap.Insert(PacketType::NdInit->GetName(), &NdInit); + CMap.Insert(PacketType::S4Init->GetName(), &S4Init); + CMap.Insert(PacketType::Ac2Init->GetName(), &Ac2Init); + CMap.Insert(PacketType::CalAlarm->GetName(), &CalAlarm); + CMap.Insert(PacketType::Ac1Alarm->GetName(), &Ac1Alarm); + CMap.Insert(PacketType::TrkAlarm->GetName(), &TrkAlarm); + CMap.Insert(PacketType::TrgAlarm->GetName(), &TrgAlarm); + CMap.Insert(PacketType::TofAlarm->GetName(), &TofAlarm); + CMap.Insert(PacketType::S4Alarm->GetName(), &S4Alarm); + CMap.Insert(PacketType::Ac2Alarm->GetName(), &Ac2Alarm); + CMap.Insert(PacketType::ForcedFECmd->GetName(), &ForcedFECmd); + CMap.Insert(PacketType::CalibTof->GetName(), &CalibTof); + } /** @@ -126,23 +193,16 @@ * @param type Event type to be incremented. */ void EventCounter::Increment(PacketType const * type) throw (NotExistingCounterException){ - CounterMap::iterator p = CMap.find(type); - if (p != CMap.end()) { - - int *counter = p->second; - (*counter)++; + // cout << " increment "<< endl; + mapval *p = CMap.Find(type->GetName()); + if ( !CMap.end()) { + // cout << " A Counter." << type->GetName() << " = " << (*(&p->count)) << endl; + (*(p->count))++; + //(*(&p->count))++; + // cout << " B Counter." << type->GetName() << " = " << (*(&p->count)) << endl; + } else { oss.str(""); - oss << " Counter." << type->GetName() << " = " << (*counter); - //marco - //std::cout<info(oss.str().c_str()); - } else { - - oss.str(""); - // oss << "\n No counter of type " << type->GetName().c_str(); oss << "\n No counter of type " << type->GetName(); - //std::cout<second; - return *counter; +int EventCounter::Get(PacketType const * type) throw (NotExistingCounterException){ + // cout << " get "<< endl; + mapval *p = CMap.Find(type->GetName()); + if ( !CMap.end()) { + // cout << " C Counter." << type->GetName() << " = " << (*(p->count)) << endl; + return ((*(p->count))); + // return ((*(&p->count))); } else { - // throw NotExistingCounterException(type->GetName().c_str()); throw NotExistingCounterException(type->GetName()); return -1; } @@ -173,13 +234,15 @@ * @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 throw (NotExistingCounterException){ - const CounterMap::const_iterator p = CMap.find(type); - if (p != CMap.end()) { - const int *counter = p->second; - return *counter + 1; +int EventCounter::Next(PacketType const * type) throw (NotExistingCounterException){ + // cout << " next "<< endl; + mapval *p = CMap.Find(type->GetName()); + if ( !CMap.end()) { + // cout << " NEXT Counter." << type->GetName() << " = " << (*(p->count))+1 << endl; + return ((*(p->count)) + 1); + // return ((*(&p->count)) + 1); + // return ((&(p->count)) + 1); } else { - // throw NotExistingCounterException(type->GetName().c_str()); throw NotExistingCounterException(type->GetName()); return -1; } @@ -189,16 +252,19 @@ * Get the all the counters * @retval 0 if there was no event of this type. */ -void EventCounter::PrintCounters() const { - std::cout<<"PrintCounters:"<first)->GetName() << " \t \t " << (*p->second); - std::cout<info(oss.str().c_str()); - } +void EventCounter::PrintCounters(){ + std::cout<<"PrintCounters:"<name).Data() << " \t \t " << (*(p->count)); + // oss << " Counter." << (p->name).Data() << " \t \t " << (*(&p->count)); + // oss << " Counter." << (p->name).Data() << " \t \t " << (&(p->count)); + std::cout<