CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/DQM/CSCMonitorModule/plugins/CSCDQM_Cache.cc

Go to the documentation of this file.
00001 /*
00002  * =====================================================================================
00003  *
00004  *       Filename:  CSCDQM_Cache.cc
00005  *
00006  *    Description:  MonitorObject cache implementation
00007  *
00008  *        Version:  1.0
00009  *        Created:  12/01/2008 11:36:11 AM
00010  *       Revision:  none
00011  *       Compiler:  gcc
00012  *
00013  *         Author:  Valdas Rapsevicius (VR), valdas.rapsevicius@cern.ch
00014  *        Company:  CERN, CH
00015  *
00016  * =====================================================================================
00017  */
00018 
00019 #include "CSCDQM_Cache.h"
00020 
00021 namespace cscdqm {
00022 
00029   const bool Cache::get(const HistoDef& histo, MonitorObject*& mo) {
00030 
00031     if (typeid(histo) == EMUHistoDefT) {
00032       return getEMU(histo.getId(), mo);
00033     } else
00034     if (typeid(histo) == FEDHistoDefT) {
00035       return getFED(histo.getId(), histo.getFEDId(), mo);
00036     } else
00037     if (typeid(histo) == DDUHistoDefT) {
00038       return getDDU(histo.getId(), histo.getDDUId(), mo);
00039     } else
00040     if (typeid(histo) == CSCHistoDefT) {
00041       return getCSC(histo.getId(), histo.getCrateId(), histo.getDMBId(), histo.getAddId(), mo);
00042     } else
00043     if (typeid(histo) == ParHistoDefT) {
00044       return getPar(histo.getId(), mo);
00045     }
00046 
00047     return false;
00048   }
00049 
00056   const bool Cache::getEMU(const HistoId& id, MonitorObject*& mo) {
00057     if (data[id]) {
00058       mo = data[id];
00059       return true;
00060     }
00061     return false;
00062   }
00063 
00071   const bool Cache::getFED(const HistoId& id, const HwId& fedId, MonitorObject*& mo) {
00072 
00074     if (fedPointerValue != fedId) {
00075       fedPointer = fedData.find(fedId);
00076       if (fedPointer == fedData.end()) {
00077         fedPointerValue = 0;
00078         return false;
00079       }
00080       fedPointerValue  = fedId;
00081     }
00082 
00084     if (fedPointer->second[id]) {
00085       mo = fedPointer->second[id];
00086       return true;
00087     }
00088     return false;
00089 
00090   }
00091 
00092 
00100   const bool Cache::getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo) {
00101 
00103     if (dduPointerValue != dduId) {
00104       dduPointer = dduData.find(dduId);
00105       if (dduPointer == dduData.end()) {
00106         dduPointerValue = 0;
00107         return false;
00108       }
00109       dduPointerValue  = dduId;
00110     } 
00111 
00113     if (dduPointer->second[id]) {
00114       mo = dduPointer->second[id];
00115       return true;
00116     }
00117     return false;
00118 
00119   }
00120 
00129   const bool Cache::getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo) {
00130 
00132     if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00133       cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00134     }
00135 
00137     if (cscPointer != cscData.end()) {
00138       CSCHistoMapType::const_iterator hit = cscPointer->mos.find(boost::make_tuple(id, addId));
00139       if (hit != cscPointer->mos.end()) {
00140         mo = const_cast<MonitorObject*>(hit->mo);
00141         return true;
00142       }
00143     }
00144     return false;
00145   }
00146 
00153   const bool Cache::getPar(const HistoId& id, MonitorObject*& mo) {
00154     if (data[id]) {
00155       mo = data[id];
00156       return true;
00157     }
00158     return false;
00159   }
00160 
00167   void Cache::put(const HistoDef& histo, MonitorObject* mo) {
00168 
00169     HistoId id = histo.getId();
00170 
00172     if (typeid(histo) == EMUHistoDefT) {
00173       data[id] = mo;
00174     } else
00175 
00177     if (typeid(histo) == FEDHistoDefT) {
00178       
00179       HwId fedId = histo.getFEDId();
00180         
00181       if (fedPointerValue != fedId) {
00182         fedPointer = fedData.find(fedId);
00183       }
00184 
00185       if (fedPointer == fedData.end()) {
00186         MonitorObject** mos = new MonitorObject*[h::namesSize];
00187         for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00188         fedPointer = fedData.insert(fedData.end(), std::make_pair(fedId, mos));
00189       }
00190     
00191       fedPointer->second[id] = mo;
00192       fedPointerValue = fedId;
00193 
00194     } else
00195 
00197     if (typeid(histo) == DDUHistoDefT) {
00198 
00199       HwId dduId = histo.getDDUId();
00200 
00201       if (dduPointerValue != dduId) {
00202         dduPointer = dduData.find(dduId);
00203       } 
00204 
00205       if (dduPointer == dduData.end()) {
00206         MonitorObject** mos = new MonitorObject*[h::namesSize];
00207         for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00208         dduPointer = dduData.insert(dduData.end(), std::make_pair(dduId, mos));
00209       }
00210 
00211       dduPointer->second[id] = mo;
00212       dduPointerValue = dduId;
00213 
00214     } else
00215 
00217     if (typeid(histo) == CSCHistoDefT) {
00218 
00219       HwId crateId = histo.getCrateId();
00220       HwId dmbId = histo.getDMBId();
00221       HwId addId = histo.getAddId();
00222 
00223       CSCHistoKeyType histoKey(id, addId, mo);
00224 
00225       if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00226         cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00227       } 
00228 
00229       if (cscPointer == cscData.end()) {
00230         CSCKeyType cscKey(crateId, dmbId);
00231         cscPointer = cscData.insert(cscData.end(), cscKey);
00232       }
00233       CSCHistoMapType* mos = const_cast<CSCHistoMapType*>(&cscPointer->mos);
00234       mos->insert(histoKey);
00235 
00236     } else
00237 
00239     if (typeid(histo) == ParHistoDefT) {
00240       data[id] = mo;
00241     }
00242 
00243 
00245     if (mo) {
00246       lookupData.insert(lookupData.end(), LookupKeyType(histo, mo));
00247     }
00248 
00249   }
00250 
00258   const bool Cache::nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const {
00259     if (n < cscData.size()) {
00260       CSCMapType::const_iterator iter = cscData.begin();
00261       for (unsigned int i = n; i > 0; i--) iter++;
00262       crateId = iter->crateId;
00263       dmbId   = iter->dmbId;
00264       n++;
00265       return true;
00266     }
00267     return false;
00268   }
00269 
00276   const bool Cache::nextBookedFED(unsigned int& n, unsigned int& fedId) const {
00277     if (n < fedData.size()) {
00278       FEDMapType::const_iterator iter = fedData.begin();
00279       for (unsigned int i = n; i > 0; i--) iter++;
00280       fedId = iter->first;
00281       n++;
00282       return true;
00283     }
00284     return false;
00285   }
00286 
00287 
00294   const bool Cache::nextBookedDDU(unsigned int& n, unsigned int& dduId) const {
00295     if (n < dduData.size()) {
00296       DDUMapType::const_iterator iter = dduData.begin();
00297       for (unsigned int i = n; i > 0; i--) iter++;
00298       dduId = iter->first;
00299       n++;
00300       return true;
00301     }
00302     return false;
00303   }
00304 
00311   const bool Cache::isBookedCSC(const HwId& crateId, const HwId& dmbId) const {
00312     CSCMapType::const_iterator it = cscData.find(boost::make_tuple(crateId, dmbId));
00313     if (it != cscData.end()) {
00314       return true;
00315     }
00316     return false;
00317   }
00318 
00324   const bool Cache::isBookedFED(const HwId& fedId) const {
00325     FEDMapType::const_iterator iter = fedData.find(fedId);
00326     return (iter != fedData.end());
00327   }
00328 
00334   const bool Cache::isBookedDDU(const HwId& dduId) const {
00335     DDUMapType::const_iterator iter = dduData.find(dduId);
00336     return (iter != dduData.end());
00337   }
00338 
00339 }