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
00045
00046
00047
00048
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 }