Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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 }