CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/DQM/CSCMonitorModule/src/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     return false;
00045   }
00046 
00053   const bool Cache::getEMU(const HistoId& id, MonitorObject*& mo) {
00054     if (data[id]) {
00055       mo = data[id];
00056       return true;
00057     }
00058     return false;
00059   }
00060 
00068   const bool Cache::getDDU(const HistoId& id, const HwId& dduId, MonitorObject*& mo) {
00069 
00071     if (dduPointerValue != dduId) {
00072       dduPointer = dduData.find(dduId);
00073       if (dduPointer == dduData.end()) {
00074         dduPointerValue = 0;
00075         return false;
00076       }
00077       dduPointerValue  = dduId;
00078     } 
00079 
00081     if (dduPointer->second[id]) {
00082       mo = dduPointer->second[id];
00083       return true;
00084     }
00085     return false;
00086 
00087   }
00088 
00097   const bool Cache::getCSC(const HistoId& id, const HwId& crateId, const HwId& dmbId, const HwId& addId, MonitorObject*& mo) {
00098 
00100     if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00101       cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00102     }
00103 
00105     if (cscPointer != cscData.end()) {
00106       CSCHistoMapType::const_iterator hit = cscPointer->mos.find(boost::make_tuple(id, addId));
00107       if (hit != cscPointer->mos.end()) {
00108         mo = const_cast<MonitorObject*>(hit->mo);
00109         return true;
00110       }
00111     }
00112     return false;
00113   }
00114 
00121   const bool Cache::getPar(const HistoId& id, MonitorObject*& mo) {
00122     if (data[id]) {
00123       mo = data[id];
00124       return true;
00125     }
00126     return false;
00127   }
00128 
00135   void Cache::put(const HistoDef& histo, MonitorObject* mo) {
00136 
00137     HistoId id = histo.getId();
00138 
00140     if (typeid(histo) == EMUHistoDefT) {
00141       data[id] = mo;
00142     } else
00143 
00145     if (typeid(histo) == DDUHistoDefT) {
00146 
00147       HwId dduId = histo.getDDUId();
00148 
00149       if (dduPointerValue != dduId) {
00150         dduPointer = dduData.find(dduId);
00151       } 
00152 
00153       if (dduPointer == dduData.end()) {
00154         MonitorObject** mos = new MonitorObject*[h::namesSize];
00155         for (unsigned int i = 0; i < h::namesSize; i++) mos[i] = 0;
00156         dduPointer = dduData.insert(dduData.end(), std::make_pair(dduId, mos));
00157       }
00158 
00159       dduPointer->second[id] = mo;
00160       dduPointerValue = dduId;
00161 
00162     } else
00163 
00165     if (typeid(histo) == CSCHistoDefT) {
00166 
00167       HwId crateId = histo.getCrateId();
00168       HwId dmbId = histo.getDMBId();
00169       HwId addId = histo.getAddId();
00170 
00171       CSCHistoKeyType histoKey(id, addId, mo);
00172 
00173       if (cscPointer == cscData.end() || cscPointer->crateId != crateId || cscPointer->dmbId != dmbId) {
00174         cscPointer = cscData.find(boost::make_tuple(crateId, dmbId));
00175       } 
00176 
00177       if (cscPointer == cscData.end()) {
00178         CSCKeyType cscKey(crateId, dmbId);
00179         cscPointer = cscData.insert(cscData.end(), cscKey);
00180       }
00181       CSCHistoMapType* mos = const_cast<CSCHistoMapType*>(&cscPointer->mos);
00182       mos->insert(histoKey);
00183 
00184     } else
00185 
00187     if (typeid(histo) == ParHistoDefT) {
00188       data[id] = mo;
00189     }
00190 
00191 
00193     if (mo) {
00194       lookupData.insert(lookupData.end(), LookupKeyType(histo, mo));
00195     }
00196 
00197   }
00198 
00206   const bool Cache::nextBookedCSC(unsigned int& n, unsigned int& crateId, unsigned int& dmbId) const {
00207     if (n < cscData.size()) {
00208       CSCMapType::const_iterator iter = cscData.begin();
00209       for (unsigned int i = n; i > 0; i--) iter++;
00210       crateId = iter->crateId;
00211       dmbId   = iter->dmbId;
00212       n++;
00213       return true;
00214     }
00215     return false;
00216   }
00217 
00224   const bool Cache::nextBookedDDU(unsigned int& n, unsigned int& dduId) const {
00225     if (n < dduData.size()) {
00226       DDUMapType::const_iterator iter = dduData.begin();
00227       for (unsigned int i = n; i > 0; i--) iter++;
00228       dduId = iter->first;
00229       n++;
00230       return true;
00231     }
00232     return false;
00233   }
00234 
00241   const bool Cache::isBookedCSC(const HwId& crateId, const HwId& dmbId) const {
00242     CSCMapType::const_iterator it = cscData.find(boost::make_tuple(crateId, dmbId));
00243     if (it != cscData.end()) {
00244       return true;
00245     }
00246     return false;
00247   }
00248 
00254   const bool Cache::isBookedDDU(const HwId& dduId) const {
00255     DDUMapType::const_iterator iter = dduData.find(dduId);
00256     return (iter != dduData.end());
00257   }
00258 
00259 }