CMS 3D CMS Logo

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 "DQM/CSCMonitorModule/interface/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) == DDUHistoDefT) {
00035       return getDDU(histo.getId(), histo.getDDUId(), mo);
00036     } else
00037     if (typeid(histo) == CSCHistoDefT) {
00038       return getCSC(histo.getId(), histo.getCrateId(), histo.getDMBId(), histo.getAddId(), mo);
00039     } else
00040     if (typeid(histo) == ParHistoDefT) {
00041       return getPar(histo.getId(), mo);
00042     }
00043 
00044     /*
00045     if (found) {
00046         LOG_DEBUG << "CACHE: histo " << histo << " key " << key << " found in cache: " << mo;
00047     } else {
00048         LOG_DEBUG << "CACHE: histo " << histo << " key " << key << " NOT found in cache.";
00049     }
00050     */
00051     
00052     return false;
00053   }
00054 
00055   const bool Cache::getEMU(const HistoId& id, MonitorObject*& mo) {
00056     if (data[id]) {
00057       mo = data[id];
00058       return true;
00059     }
00060     return false;
00061   }
00062 
00063   const bool Cache::getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo) {
00064 
00065     if (dduPointerValue != dduId) {
00066       dduPointer = dduData.find(dduId);
00067       if (dduPointer == dduData.end()) {
00068         dduPointerValue = 0;
00069         return false;
00070       }
00071       dduPointerValue  = dduId;
00072     } 
00073 
00074     if (dduPointer->second[id]) {
00075       mo = dduPointer->second[id];
00076       return true;
00077     }
00078     return false;
00079 
00080   }
00081 
00082   const bool Cache::getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo) {
00083 
00084     if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00085       cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00086     }
00087 
00088     if (cscPointer != cscData.end()) {
00089       CSCHistoMapType::const_iterator hit = cscPointer->mos.find(boost::make_tuple(id, addId));
00090       if (hit != cscPointer->mos.end()) {
00091         mo = const_cast<MonitorObject*>(hit->mo);
00092         return true;
00093       }
00094     }
00095     return false;
00096   }
00097 
00098   const bool Cache::getPar(const HistoId& id, MonitorObject*& mo) {
00099     if (data[id]) {
00100       mo = data[id];
00101       return true;
00102     }
00103     return false;
00104   }
00105 
00112   void Cache::put(const HistoDef& histo, MonitorObject* mo) {
00113 
00114     HistoId id = histo.getId();
00115 
00116     if (typeid(histo) == EMUHistoDefT) {
00117       data[id] = mo;
00118     } else
00119 
00120     if (typeid(histo) == DDUHistoDefT) {
00121 
00122       HwId dduId = histo.getDDUId();
00123 
00124       if (dduPointerValue != dduId) {
00125         dduPointer = dduData.find(dduId);
00126       } 
00127 
00128       if (dduPointer == dduData.end()) {
00129         MonitorObject** mos = new MonitorObject*[h::namesSize];
00130         for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00131         dduPointer = dduData.insert(dduData.end(), std::make_pair(dduId, mos));
00132       }
00133 
00134       dduPointer->second[id] = mo;
00135       dduPointerValue = dduId;
00136 
00137     } else
00138 
00139     if (typeid(histo) == CSCHistoDefT) {
00140 
00141       HwId crateId = histo.getCrateId();
00142       HwId dmbId = histo.getDMBId();
00143       HwId addId = histo.getAddId();
00144 
00145       CSCHistoKeyType histoKey(id, addId, mo);
00146 
00147       if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00148         cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00149       } 
00150 
00151       if (cscPointer == cscData.end()) {
00152         CSCKeyType cscKey(crateId, dmbId);
00153         cscPointer = cscData.insert(cscData.end(), cscKey);
00154       }
00155       CSCHistoMapType* mos = const_cast<CSCHistoMapType*>(&cscPointer->mos);
00156       mos->insert(histoKey);
00157 
00158     } else
00159 
00160     if (typeid(histo) == ParHistoDefT) {
00161       data[id] = mo;
00162     }
00163 
00164   }
00165 
00166   const bool Cache::nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const {
00167     if (n < cscData.size()) {
00168       CSCMapType::const_iterator iter = cscData.begin();
00169       for (unsigned int i = n; i > 0; i--) iter++;
00170       crateId = iter->crateId;
00171       dmbId   = iter->dmbId;
00172       n++;
00173       return true;
00174     }
00175     return false;
00176   }
00177 
00178   const bool Cache::nextBookedDDU(unsigned int& n, unsigned int& dduId) const {
00179     if (n < dduData.size()) {
00180       DDUMapType::const_iterator iter = dduData.begin();
00181       for (unsigned int i = n; i > 0; i--) iter++;
00182       dduId = iter->first;
00183       n++;
00184       return true;
00185     }
00186     return false;
00187   }
00188 
00189   const bool Cache::isBookedCSC(const HwId& crateId, const HwId& dmbId) const {
00190     CSCMapType::const_iterator it = cscData.find(boost::make_tuple(crateId, dmbId));
00191     if (it != cscData.end()) {
00192       return true;
00193     }
00194     return false;
00195   }
00196 
00197   const bool Cache::isBookedDDU(const HwId& dduId) const {
00198     DDUMapType::const_iterator iter = dduData.find(dduId);
00199     return (iter != dduData.end());
00200   }
00201 
00202 }

Generated on Tue Jun 9 17:32:32 2009 for CMSSW by  doxygen 1.5.4