File indexing completed on 2023-03-17 10:47:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "CondTools/DT/test/validate/DTStatusFlagValidateHandler.h"
0014
0015
0016
0017
0018 #include "CondFormats/DTObjects/interface/DTStatusFlag.h"
0019
0020
0021
0022
0023 #include <iostream>
0024 #include <fstream>
0025 #include <sstream>
0026
0027
0028
0029
0030
0031
0032
0033
0034 DTStatusFlagValidateHandler::DTStatusFlagValidateHandler(const edm::ParameterSet& ps)
0035 : firstRun(ps.getParameter<unsigned int>("firstRun")),
0036 lastRun(ps.getParameter<unsigned int>("lastRun")),
0037 dataVersion(ps.getParameter<std::string>("version")),
0038 dataFileName(ps.getParameter<std::string>("outFile")),
0039 elogFileName(ps.getParameter<std::string>("logFile")) {
0040 std::ofstream logFile(elogFileName.c_str());
0041 }
0042
0043
0044
0045
0046 DTStatusFlagValidateHandler::~DTStatusFlagValidateHandler() {}
0047
0048
0049
0050
0051 void DTStatusFlagValidateHandler::getNewObjects() {
0052 int runNumber = firstRun;
0053 while (runNumber <= lastRun)
0054 addNewObject(runNumber++);
0055 return;
0056 }
0057
0058 void DTStatusFlagValidateHandler::addNewObject(int runNumber) {
0059 DTStatusFlag* sf = new DTStatusFlag(dataVersion);
0060
0061 std::stringstream run_fn;
0062 run_fn << "run" << runNumber << dataFileName;
0063
0064 int status = 0;
0065 std::ofstream outFile(run_fn.str().c_str());
0066 std::ofstream logFile(elogFileName.c_str(), std::ios_base::app);
0067 int whe;
0068 int sta;
0069 int sec;
0070 int qua;
0071 int lay;
0072 int cel;
0073
0074 bool noiseFlag;
0075 bool feMask;
0076 bool tdcMask;
0077 bool trigMask;
0078 bool deadFlag;
0079 bool nohvFlag;
0080 bool cknoiseFlag;
0081 bool ckfeMask;
0082 bool cktdcMask;
0083 bool cktrigMask;
0084 bool ckdeadFlag;
0085 bool cknohvFlag;
0086
0087 int sampleLimit = 100;
0088
0089 whe = 3;
0090 while (--whe >= -2) {
0091 sta = 5;
0092 while (--sta) {
0093 if (sta == 4)
0094 sec = 15;
0095 else
0096 sec = 13;
0097 while (--sec) {
0098 qua = 4;
0099 while (--qua) {
0100 if ((sta == 4) && (qua == 2))
0101 continue;
0102 lay = 5;
0103 while (--lay) {
0104 cel = 48;
0105 while (--cel) {
0106 noiseFlag = ((random() & 0x0000ffff) < 500);
0107 feMask = ((random() & 0x0000ffff) < 500);
0108 tdcMask = ((random() & 0x0000ffff) < 500);
0109 trigMask = ((random() & 0x0000ffff) < 500);
0110 deadFlag = ((random() & 0x0000ffff) < 500);
0111 nohvFlag = ((random() & 0x0000ffff) < 500);
0112 cknoiseFlag = ckfeMask = cktdcMask = cktrigMask = ckdeadFlag = cknohvFlag = false;
0113 if (noiseFlag || feMask || tdcMask || trigMask || deadFlag || nohvFlag) {
0114 if (sampleLimit--) {
0115 status =
0116 sf->set(whe, sta, sec, qua, lay, cel, noiseFlag, feMask, tdcMask, trigMask, deadFlag, nohvFlag);
0117 } else {
0118 status = sf->setCellNoise(whe, sta, sec, qua, lay, cel, noiseFlag);
0119 status = sf->setCellFEMask(whe, sta, sec, qua, lay, cel, feMask);
0120 status = sf->setCellTDCMask(whe, sta, sec, qua, lay, cel, tdcMask);
0121 status = sf->setCellTrigMask(whe, sta, sec, qua, lay, cel, trigMask);
0122 status = sf->setCellDead(whe, sta, sec, qua, lay, cel, deadFlag);
0123 status = sf->setCellNoHV(whe, sta, sec, qua, lay, cel, nohvFlag);
0124 }
0125 } else {
0126 status = 0;
0127 }
0128
0129 outFile << whe << " " << sta << " " << sec << " " << qua << " " << lay << " " << cel << " " << noiseFlag
0130 << " " << feMask << " " << tdcMask << " " << trigMask << " " << deadFlag << " " << nohvFlag
0131 << std::endl;
0132 if (status)
0133 logFile << "ERROR while setting cell flags " << whe << " " << sta << " " << sec << " " << qua << " "
0134 << lay << " " << cel << " , status = " << status << std::endl;
0135 if (noiseFlag || feMask || tdcMask || trigMask || deadFlag || nohvFlag)
0136 status = sf->get(
0137 whe, sta, sec, qua, lay, cel, cknoiseFlag, ckfeMask, cktdcMask, cktrigMask, ckdeadFlag, cknohvFlag);
0138 else
0139 status = 0;
0140 if (status)
0141 logFile << "ERROR while checking cell flags " << whe << " " << sta << " " << sec << " " << qua << " "
0142 << lay << " " << cel << " , status = " << status << std::endl;
0143 if ((cknoiseFlag != noiseFlag) || (ckfeMask != feMask) || (cktdcMask != tdcMask) ||
0144 (cktrigMask != trigMask) || (ckdeadFlag != deadFlag) || (cknohvFlag != nohvFlag))
0145 logFile << "MISMATCH WHEN WRITING cell flags " << whe << " " << sta << " " << sec << " " << qua << " "
0146 << lay << " " << cel << " : " << noiseFlag << " " << feMask << " " << tdcMask << " " << trigMask
0147 << " " << deadFlag << " " << nohvFlag << " -> " << cknoiseFlag << " " << ckfeMask << " "
0148 << cktdcMask << " " << cktrigMask << " " << ckdeadFlag << " " << cknohvFlag << std::endl;
0149
0150 }
0151 }
0152 }
0153 }
0154 }
0155 }
0156
0157 cond::Time_t snc = runNumber;
0158 m_to_transfer.push_back(std::make_pair(sf, snc));
0159
0160 return;
0161 }
0162
0163 std::string DTStatusFlagValidateHandler::id() const { return dataVersion; }