File indexing completed on 2024-09-07 04:35:44
0001 #include <iostream>
0002 #include <fstream>
0003 #include <string>
0004 #include <sstream>
0005 #include <xercesc/dom/DOMNode.hpp>
0006 #include <xercesc/dom/DOM.hpp>
0007 #include <xercesc/parsers/XercesDOMParser.hpp>
0008 #include "Utilities/Xerces/interface/Xerces.h"
0009 #include <xercesc/util/XMLString.hpp>
0010 #include <xercesc/sax/SAXException.hpp>
0011 #include <xercesc/framework/LocalFileFormatTarget.hpp>
0012
0013 #include "CondTools/Ecal/interface/EcalSRPHandler.h"
0014 #include "CondTools/Ecal/interface/EcalCondHeader.h"
0015 #include "CondTools/Ecal/interface/DOMHelperFunctions.h"
0016 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0017 #include "CondFormats/EcalObjects/interface/EcalSRSettings.h"
0018
0019 #include "OnlineDB/EcalCondDB/interface/RunConfigDat.h"
0020 #include "OnlineDB/EcalCondDB/interface/ODRunConfigInfo.h"
0021 #include "OnlineDB/EcalCondDB/interface/ODRunConfigSeqInfo.h"
0022
0023 #include "OnlineDB/EcalCondDB/interface/FEConfigMainInfo.h"
0024 #include "OnlineDB/EcalCondDB/interface/FEConfigBadTTInfo.h"
0025
0026 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0027
0028 #include "SimCalorimetry/EcalSelectiveReadoutProducers/interface/EcalSRCondTools.h"
0029
0030 using namespace XERCES_CPP_NAMESPACE;
0031 using namespace xuti;
0032
0033 popcon::EcalSRPHandler::EcalSRPHandler(const edm::ParameterSet& ps)
0034 : m_name(ps.getUntrackedParameter<std::string>("name", "EcalSRPHandler")) {
0035 m_firstRun = (unsigned long)atoi(ps.getParameter<std::string>("firstRun").c_str());
0036 m_lastRun = (unsigned long)atoi(ps.getParameter<std::string>("lastRun").c_str());
0037 m_sid = ps.getParameter<std::string>("OnlineDBSID");
0038 m_user = ps.getParameter<std::string>("OnlineDBUser");
0039 m_pass = ps.getParameter<std::string>("OnlineDBPassword");
0040 m_location = ps.getParameter<std::string>("location");
0041 m_runtype = ps.getParameter<std::string>("runtype");
0042 m_gentag = ps.getParameter<std::string>("gentag");
0043 m_i_tag = "";
0044 m_debug = ps.getParameter<bool>("debug");
0045 m_i_version = 0;
0046 }
0047
0048 popcon::EcalSRPHandler::~EcalSRPHandler() {}
0049
0050 void popcon::EcalSRPHandler::getNewObjects() {
0051 std::ostringstream ss;
0052 ss << "ECAL ";
0053
0054 unsigned long long max_since = 1;
0055
0056
0057 max_since = tagInfo().lastInterval.since;
0058
0059
0060 Ref srp_db = lastPayload();
0061 if (m_debug)
0062 std::cout << " max_since : " << max_since << "\n retrieved last payload " << std::endl;
0063
0064
0065 EcalSRSettings* sref = new EcalSRSettings();
0066 sref->deltaEta_ = srp_db->deltaEta_;
0067 sref->deltaPhi_ = srp_db->deltaPhi_;
0068 sref->ecalDccZs1stSample_ = srp_db->ecalDccZs1stSample_;
0069 sref->ebDccAdcToGeV_ = srp_db->ebDccAdcToGeV_;
0070 sref->eeDccAdcToGeV_ = srp_db->eeDccAdcToGeV_;
0071 sref->dccNormalizedWeights_ = srp_db->dccNormalizedWeights_;
0072 sref->symetricZS_ = srp_db->symetricZS_;
0073 sref->srpLowInterestChannelZS_ = srp_db->srpLowInterestChannelZS_;
0074 sref->srpHighInterestChannelZS_ = srp_db->srpHighInterestChannelZS_;
0075 sref->actions_ = srp_db->actions_;
0076 sref->tccMasksFromConfig_ = srp_db->tccMasksFromConfig_;
0077 sref->srpMasksFromConfig_ = srp_db->srpMasksFromConfig_;
0078 sref->dccMasks_ = srp_db->dccMasks_;
0079 sref->srfMasks_ = srp_db->srfMasks_;
0080 sref->substitutionSrfs_ = srp_db->substitutionSrfs_;
0081 sref->testerTccEmuSrpIds_ = srp_db->testerTccEmuSrpIds_;
0082 sref->testerSrpEmuSrpIds_ = srp_db->testerSrpEmuSrpIds_;
0083 sref->testerDccTestSrpIds_ = srp_db->testerDccTestSrpIds_;
0084 sref->testerSrpTestSrpIds_ = srp_db->testerSrpTestSrpIds_;
0085 sref->bxOffsets_ = srp_db->bxOffsets_;
0086 sref->bxGlobalOffset_ = srp_db->bxGlobalOffset_;
0087 sref->automaticMasks_ = srp_db->automaticMasks_;
0088 sref->automaticSrpSelect_ = srp_db->automaticSrpSelect_;
0089
0090
0091
0092 std::cout << "Retrieving DAQ status from OMDS DB ... " << std::endl;
0093 econn = new EcalCondDBInterface(m_sid, m_user, m_pass);
0094 std::cout << "Connection done" << std::endl;
0095
0096 if (!econn) {
0097 std::cout << " Problem with OMDS: connection parameters " << m_sid << "/" << m_user << std::endl;
0098 throw cms::Exception("OMDS not available");
0099 }
0100
0101 LocationDef my_locdef;
0102 my_locdef.setLocation(m_location);
0103
0104 RunTypeDef my_rundef;
0105 my_rundef.setRunType(m_runtype);
0106
0107 RunTag my_runtag;
0108 my_runtag.setLocationDef(my_locdef);
0109 my_runtag.setRunTypeDef(my_rundef);
0110 my_runtag.setGeneralTag(m_gentag);
0111
0112
0113 int min_run = 0;
0114 if (m_firstRun <= (unsigned long)max_since) {
0115 min_run = (int)max_since + 1;
0116 } else {
0117 min_run = (int)m_firstRun;
0118 }
0119
0120 int max_run = (int)m_lastRun;
0121 if (m_debug)
0122 std::cout << "min_run " << min_run << " max_run " << max_run << std::endl;
0123
0124 std::ofstream fout;
0125 if (m_debug) {
0126 char outfile[800];
0127 sprintf(outfile, "SRP_run%d.txt", min_run);
0128 fout.open(outfile, std::fstream::out);
0129 fout << " ORCOFF last run max_since : " << max_since << std::endl;
0130 PrintPayload(*sref, fout);
0131 }
0132
0133 RunList my_list;
0134 my_list = econn->fetchRunListByLocation(my_runtag, min_run, max_run, my_locdef);
0135
0136 std::vector<RunIOV> run_vec = my_list.getRuns();
0137 int num_runs = run_vec.size();
0138
0139 if (m_debug) {
0140 fout << " number of runs is : " << num_runs << std::endl;
0141 }
0142 unsigned long irun = 0;
0143 if (num_runs > 0) {
0144 int fe_conf_id_old = 0;
0145
0146
0147 for (int kr = 0; kr < num_runs; kr++) {
0148 irun = (unsigned long)run_vec[kr].getRunNumber();
0149 std::string geneTag = run_vec[kr].getRunTag().getGeneralTag();
0150 if (geneTag != "GLOBAL") {
0151 if (m_debug)
0152 fout << "\n New run " << irun << " with tag " << geneTag << " giving up " << std::endl;
0153 continue;
0154 }
0155 if (m_debug)
0156 fout << "\n New run " << irun << " geneTag " << geneTag << std::endl;
0157
0158
0159 std::map<EcalLogicID, RunConfigDat> dataset;
0160 econn->fetchDataSet(&dataset, &run_vec[kr]);
0161 std::string myconfig_tag = "";
0162 int myconfig_version = 0;
0163 std::map<EcalLogicID, RunConfigDat>::const_iterator it;
0164 if (dataset.size() != 1) {
0165 std::cout << "\n\n run " << irun << " strange number of dataset " << dataset.size() << std::endl;
0166 if (m_debug)
0167 fout << "\n\n run " << irun << " strange number of dataset " << dataset.size() << " giving up " << std::endl;
0168 continue;
0169 }
0170
0171 it = dataset.begin();
0172 RunConfigDat dat = it->second;
0173 myconfig_tag = dat.getConfigTag();
0174
0175 if (myconfig_tag.substr(0, 15) == "ZeroSuppression" || myconfig_tag.substr(0, 11) == "FullReadout" ||
0176 myconfig_tag.substr(0, 11) == "AlmostEmpty") {
0177 if (m_debug)
0178 fout << " run " << irun << " tag " << myconfig_tag << " giving up " << std::endl;
0179 continue;
0180 }
0181
0182
0183 typedef std::map<EcalLogicID, RunFEConfigDat>::const_iterator feConfIter;
0184 std::map<EcalLogicID, RunFEConfigDat> feconfig;
0185 econn->fetchDataSet(&feconfig, &run_vec[kr]);
0186 if (feconfig.size() != 1) {
0187 if (m_debug)
0188 fout << "\n\n run " << irun << " strange number of FE config " << feconfig.size() << " giving up "
0189 << std::endl;
0190 continue;
0191 }
0192 RunFEConfigDat rd_fe;
0193 int fe_conf_id = 0;
0194 feConfIter p = feconfig.begin();
0195 rd_fe = p->second;
0196 fe_conf_id = rd_fe.getConfigId();
0197
0198 myconfig_version = dat.getConfigVersion();
0199 if (m_debug)
0200 fout << " run " << irun << " tag " << myconfig_tag << " version " << myconfig_version << " Fe config "
0201 << fe_conf_id << std::endl;
0202
0203 if (myconfig_tag != m_i_tag || myconfig_version != m_i_version || fe_conf_id != fe_conf_id_old) {
0204 if (m_debug)
0205 fout << " run= " << irun << " different tag ... retrieving last config set from DB" << std::endl;
0206
0207 bool FromCLOB = false;
0208 EcalSRSettings* sr = new EcalSRSettings;
0209 sr->ebDccAdcToGeV_ = 0.035;
0210 sr->eeDccAdcToGeV_ = 0.060;
0211 sr->symetricZS_.push_back(0);
0212
0213 ODRunConfigInfo od_run_info;
0214 od_run_info.setTag(myconfig_tag);
0215 od_run_info.setVersion(myconfig_version);
0216
0217 try {
0218 econn->fetchConfigSet(&od_run_info);
0219 int config_id = od_run_info.getId();
0220
0221 ODRunConfigSeqInfo seq;
0222 seq.setEcalConfigId(config_id);
0223 seq.setSequenceNumber(0);
0224 econn->fetchConfigSet(&seq);
0225 int sequenceid = seq.getSequenceId();
0226
0227 ODEcalCycle ecal_cycle;
0228 ecal_cycle.setSequenceId(sequenceid);
0229 econn->fetchConfigSet(&ecal_cycle);
0230 int cycle_id = ecal_cycle.getId();
0231 int srp_id = ecal_cycle.getSRPId();
0232 if (srp_id == 0) {
0233 if (m_debug)
0234 fout << " no SRP config for this run, give up " << std::endl;
0235 delete sr;
0236 continue;
0237 }
0238 int dcc_id = ecal_cycle.getDCCId();
0239 if (m_debug)
0240 fout << " cycleid " << cycle_id << " SRP id " << srp_id << " DCC id " << dcc_id << std::endl;
0241
0242
0243
0244 ODSRPConfig srp;
0245 srp.setId(srp_id);
0246 econn->fetchConfigSet(&srp);
0247
0248 unsigned char* cbuffer = srp.getSRPClob();
0249 unsigned int SRPClobSize = srp.getSRPClobSize();
0250 std::string srpstr((char*)cbuffer, SRPClobSize);
0251 std::string SRPClob = srpstr;
0252 std::fstream myfile;
0253 myfile.open("srp.txt", std::fstream::out);
0254 for (std::string::iterator it = SRPClob.begin(); it < SRPClob.end(); it++)
0255 myfile << *it;
0256 myfile.close();
0257 std::ifstream f("srp.txt");
0258 if (!f.good()) {
0259 throw cms::Exception("EcalSRPHandler") << " Failed to open file srp.txt";
0260 if (m_debug)
0261 fout << " Failed to open file srp.txt" << std::endl;
0262 }
0263 EcalSRCondTools::importSrpConfigFile(*sr, f, m_debug);
0264 f.close();
0265 int rv = system("rm srp.txt");
0266 if (m_debug && rv != 0)
0267 fout << "rm srp.txt result code: " << rv << "\n";
0268
0269 sr->bxGlobalOffset_ = srp.getSRP0BunchAdjustPosition();
0270 sr->automaticMasks_ = srp.getAutomaticMasks();
0271 sr->automaticSrpSelect_ = srp.getAutomaticSrpSelect();
0272
0273
0274
0275 ODDCCConfig dcc;
0276 dcc.setId(dcc_id);
0277 econn->fetchConfigSet(&dcc);
0278 std::string weightsMode = dcc.getDCCWeightsMode();
0279 if (m_debug)
0280 fout << " DCC weightsMode " << weightsMode << std::endl
0281 << " weight size beg " << sr->dccNormalizedWeights_.size() << std::endl;
0282 if (weightsMode == "CLOB") {
0283 FromCLOB = true;
0284 if (m_debug)
0285 fout << " will read weights from DCC CLOB " << std::endl;
0286 }
0287 cbuffer = dcc.getDCCClob();
0288 unsigned int DCCClobSize = dcc.getDCCClobSize();
0289 std::string dccstr((char*)cbuffer, DCCClobSize);
0290 std::string DCCClob = dccstr;
0291 std::ostringstream osd;
0292 osd << "dcc.txt";
0293 std::string fname = osd.str();
0294 myfile.open(fname.c_str(), std::fstream::out);
0295 for (std::string::iterator it = DCCClob.begin(); it < DCCClob.end(); it++)
0296 myfile << *it;
0297 myfile.close();
0298 importDccConfigFile(*sr, fname, FromCLOB);
0299 if (m_debug)
0300 fout << " weight size after CLOB " << sr->dccNormalizedWeights_.size() << std::endl;
0301 rv = system("rm dcc.txt");
0302 if (m_debug && rv != 0)
0303 fout << "rm dcc.txt result code: " << rv << "\n";
0304 } catch (std::exception& e) {
0305
0306 std::cout << "ERROR: This config does not exist: tag " << myconfig_tag << " version " << myconfig_version
0307 << std::endl;
0308 if (m_debug)
0309 fout << "ERROR: This config does not exist: tag " << myconfig_tag << " version " << myconfig_version
0310 << std::endl;
0311
0312 }
0313 if (m_debug)
0314 fout << " FromCLOB " << FromCLOB << std::endl;
0315 if (!FromCLOB) {
0316
0317 ODFEDAQConfig myconfig;
0318 myconfig.setId(fe_conf_id);
0319 econn->fetchConfigSet(&myconfig);
0320
0321
0322 int mywei = myconfig.getWeightId();
0323 if (m_debug)
0324 fout << " WEI_ID " << mywei << std::endl;
0325
0326 if (mywei != 0) {
0327 ODWeightsSamplesDat samp;
0328 samp.setId(mywei);
0329 econn->fetchConfigSet(&samp);
0330 int mySample = samp.getSampleId();
0331 if (m_debug)
0332 fout << " SAMPLE_ID " << mySample << std::endl;
0333 sr->ecalDccZs1stSample_.push_back(mySample);
0334
0335 ODWeightsDat weights;
0336 weights.setId(mywei);
0337 econn->fetchConfigSet(&weights);
0338
0339 std::vector<std::vector<float> > my_dccw = weights.getWeight();
0340 int imax = my_dccw.size();
0341 if (m_debug)
0342 fout << " weight size before check " << imax << std::endl;
0343 if (imax == 75848) {
0344 bool WeightsChange = false, WeightsChangeEB = false, WeightsChangeEE = false;
0345 for (int i = 1; i < 61200; i++)
0346 for (int ich = 0; ich < 6; ich++)
0347 if (my_dccw[i][ich] != my_dccw[0][ich])
0348 WeightsChangeEB = true;
0349 if (m_debug)
0350 fout << " WeightsChangeEB " << WeightsChangeEB << std::endl;
0351 for (int i = 61201; i < 75848; i++)
0352 for (int ich = 0; ich < 6; ich++)
0353 if (my_dccw[i][ich] != my_dccw[61200][ich])
0354 WeightsChangeEE = true;
0355 if (m_debug)
0356 fout << " WeightsChangeEE " << WeightsChangeEE << std::endl;
0357 for (int ich = 0; ich < 6; ich++)
0358 if (my_dccw[0][ich] != my_dccw[61200][ich])
0359 WeightsChange = true;
0360 if (m_debug)
0361 fout << " WeightsChange " << WeightsChange << std::endl;
0362
0363 if (WeightsChangeEB || WeightsChangeEE)
0364 sr->dccNormalizedWeights_ = my_dccw;
0365 else if (WeightsChange) {
0366 std::vector<float> dccwRowEB, dccwRowEE;
0367 for (int ich = 0; ich < 6; ich++) {
0368 dccwRowEB.push_back(my_dccw[0][ich]);
0369 dccwRowEE.push_back(my_dccw[61200][ich]);
0370 }
0371 sr->dccNormalizedWeights_.push_back(dccwRowEB);
0372 sr->dccNormalizedWeights_.push_back(dccwRowEE);
0373 } else {
0374 std::vector<float> dccwRow;
0375 dccwRow.reserve(6);
0376 for (int ich = 0; ich < 6; ich++) {
0377 dccwRow.push_back(my_dccw[0][ich]);
0378 }
0379 sr->dccNormalizedWeights_.push_back(dccwRow);
0380 if (m_debug) {
0381 fout << " weight ";
0382 for (int ich = 0; ich < 6; ich++)
0383 fout << " ch " << ich << " " << sr->dccNormalizedWeights_[0][ich];
0384 fout << std::endl;
0385 }
0386 }
0387 }
0388 else {
0389 sr->dccNormalizedWeights_ = my_dccw;
0390 }
0391 if (m_debug)
0392 fout << " weight size after DB " << sr->dccNormalizedWeights_.size() << std::endl;
0393 }
0394 }
0395
0396
0397 if (sr->dccNormalizedWeights_.empty()) {
0398
0399 float def[] = {-1215, 20, 297, 356, 308, 232};
0400 std::vector<float> dccw(def, def + 6);
0401 if (m_debug)
0402 fout << " default weights ";
0403 for (int i = 0; i < 6; i++) {
0404 if (m_debug)
0405 fout << " i " << i << " def " << def[i] << " dccw " << dccw[i] << " \n";
0406 }
0407 sr->dccNormalizedWeights_.push_back(dccw);
0408 }
0409
0410 int imax = sr->dccNormalizedWeights_.size();
0411 if (m_debug)
0412 fout << " weight size " << imax << " normalized weights : " << std::endl;
0413 for (int i = 0; i < imax; i++)
0414 for (int ich = 0; ich < 6; ich++) {
0415 sr->dccNormalizedWeights_[i][ich] /= 1024.;
0416 if (m_debug && i == 0)
0417 fout << " ch " << ich << " weight " << sr->dccNormalizedWeights_[i][ich] << std::endl;
0418 }
0419
0420
0421
0422
0423 if (m_debug)
0424 fout << " checking for change " << std::endl;
0425 bool nochange = true;
0426 int imaxref, imaxnew;
0427
0428 if (sref->deltaEta_ != sr->deltaEta_) {
0429 nochange = false;
0430 if (m_debug) {
0431 imaxref = sref->deltaEta_.size();
0432 imaxnew = sr->deltaEta_.size();
0433 if (imaxref != imaxnew) {
0434 fout << " deltaEta_ size ref " << imaxref << " now " << imaxnew << std::endl;
0435 } else {
0436 for (int i = 0; i < imaxref; i++) {
0437 if (sref->deltaEta_[i] != sr->deltaEta_[i]) {
0438 fout << " deltaEta_[" << i << "] ref " << sref->deltaEta_[i] << " now " << sr->deltaEta_[i]
0439 << std::endl;
0440 }
0441 }
0442 }
0443 }
0444 }
0445
0446 if (sref->deltaPhi_ != sr->deltaPhi_) {
0447 nochange = false;
0448 if (m_debug) {
0449 imaxref = sref->deltaPhi_.size();
0450 imaxnew = sr->deltaPhi_.size();
0451 if (imaxref != imaxnew) {
0452 fout << " deltaPhi size ref " << imaxref << " now " << imaxnew << std::endl;
0453 } else {
0454 for (int i = 0; i < imaxref; i++) {
0455 if (sref->deltaPhi_[i] != sr->deltaPhi_[i]) {
0456 fout << " deltaPhi[" << i << "] ref " << sref->deltaPhi_[i] << " now " << sr->deltaPhi_[i]
0457 << std::endl;
0458 }
0459 }
0460 }
0461 }
0462 }
0463
0464 if (sref->ecalDccZs1stSample_ != sr->ecalDccZs1stSample_) {
0465 nochange = false;
0466 if (m_debug) {
0467 imaxref = sref->ecalDccZs1stSample_.size();
0468 imaxnew = sr->ecalDccZs1stSample_.size();
0469 if (imaxref != imaxnew) {
0470 fout << " ecalDccZs1stSample size ref " << imaxref << " now " << imaxnew << std::endl;
0471 } else {
0472 for (int i = 0; i < imaxref; i++) {
0473 if (sref->ecalDccZs1stSample_[i] != sr->ecalDccZs1stSample_[i]) {
0474 fout << " ecalDccZs1stSample_[" << i << "] ref " << sref->ecalDccZs1stSample_[i] << " now "
0475 << sr->ecalDccZs1stSample_[i] << std::endl;
0476 }
0477 }
0478 }
0479 }
0480 }
0481
0482 if (sref->ebDccAdcToGeV_ != sr->ebDccAdcToGeV_ || sref->eeDccAdcToGeV_ != sr->eeDccAdcToGeV_) {
0483 nochange = false;
0484 if (m_debug)
0485 fout << " ebDccAdcToGeV ref " << sref->ebDccAdcToGeV_ << " ee " << sref->eeDccAdcToGeV_ << " now "
0486 << sr->ebDccAdcToGeV_ << " ee " << sr->eeDccAdcToGeV_ << std::endl;
0487 }
0488
0489 if (sref->dccNormalizedWeights_ != sr->dccNormalizedWeights_) {
0490 nochange = false;
0491 if (m_debug) {
0492 imaxref = sref->dccNormalizedWeights_.size();
0493 imaxnew = sr->dccNormalizedWeights_.size();
0494 if (imaxref != imaxnew) {
0495 fout << " dccNormalizedWeights size ref " << imaxref << " now " << imaxnew << std::endl;
0496 } else {
0497 int i = 0;
0498 for (int ich = 0; ich < 6; ich++) {
0499 if (sref->dccNormalizedWeights_[i][ich] != sr->dccNormalizedWeights_[i][ich]) {
0500 fout << " dccNormalizedWeights_[" << i << "][" << ich << "] ref "
0501 << sref->dccNormalizedWeights_[i][ich] << " now " << sr->dccNormalizedWeights_[i][ich]
0502 << std::endl;
0503 }
0504 }
0505 }
0506 }
0507 }
0508
0509 if (sref->symetricZS_ != sr->symetricZS_) {
0510 nochange = false;
0511 if (m_debug) {
0512 imaxref = sref->symetricZS_.size();
0513 imaxnew = sr->symetricZS_.size();
0514 if (imaxref != imaxnew) {
0515 fout << " symetricZS size ref " << imaxref << " now " << imaxnew << std::endl;
0516 } else {
0517 for (int i = 0; i < imaxref; i++) {
0518 if (sref->symetricZS_[i] != sr->symetricZS_[i]) {
0519 fout << " symetricZS[" << i << "] ref " << sref->symetricZS_[i] << " now " << sr->symetricZS_[i]
0520 << std::endl;
0521 }
0522 }
0523 }
0524 }
0525 }
0526
0527 if (sref->srpLowInterestChannelZS_ != sr->srpLowInterestChannelZS_) {
0528 nochange = false;
0529 if (m_debug) {
0530 imaxref = sref->srpLowInterestChannelZS_.size();
0531 imaxnew = sr->srpLowInterestChannelZS_.size();
0532 if (imaxref != imaxnew) {
0533 fout << " srpLowInterestChannelZS size ref " << imaxref << " now " << imaxnew << std::endl;
0534 } else {
0535 for (int i = 0; i < imaxref; i++) {
0536 if (sref->srpLowInterestChannelZS_[i] != sr->srpLowInterestChannelZS_[i]) {
0537 fout << " srpLowInterestChannelZS[" << i << "] ref " << sref->srpLowInterestChannelZS_[i] << " now "
0538 << sr->srpLowInterestChannelZS_[i] << std::endl;
0539 }
0540 }
0541 }
0542 }
0543 }
0544
0545 if (sref->srpHighInterestChannelZS_ != sr->srpHighInterestChannelZS_) {
0546 nochange = false;
0547 if (m_debug) {
0548 imaxref = sref->srpHighInterestChannelZS_.size();
0549 imaxnew = sr->srpHighInterestChannelZS_.size();
0550 if (imaxref != imaxnew) {
0551 fout << " srpHighInterestChannelZS size ref " << imaxref << " now " << imaxnew << std::endl;
0552 } else {
0553 for (int i = 0; i < imaxref; i++) {
0554 if (sref->srpHighInterestChannelZS_[i] != sr->srpHighInterestChannelZS_[i]) {
0555 fout << " srpHighInterestChannelZS[" << i << "] ref " << sref->srpHighInterestChannelZS_[i] << " now "
0556 << sr->srpHighInterestChannelZS_[i] << std::endl;
0557 }
0558 }
0559 }
0560 }
0561 }
0562
0563 if (sref->actions_ != sr->actions_) {
0564 nochange = false;
0565 if (m_debug) {
0566 for (int i = 0; i < 4; i++) {
0567 if (sref->actions_[i] != sr->actions_[i]) {
0568 fout << " actions " << i << " ref " << sref->actions_[i] << " now " << sr->actions_[i] << std::endl;
0569 }
0570 }
0571 }
0572 }
0573
0574 if (sref->tccMasksFromConfig_ != sr->tccMasksFromConfig_) {
0575 nochange = false;
0576 if (m_debug) {
0577 for (int i = 0; i < 108; i++) {
0578 if (sref->tccMasksFromConfig_[i] != sr->tccMasksFromConfig_[i]) {
0579 fout << " tccMasks " << i << " ref " << sref->tccMasksFromConfig_[i] << " now "
0580 << sr->tccMasksFromConfig_[i] << std::endl;
0581 }
0582 }
0583 }
0584 }
0585
0586 if (sref->srpMasksFromConfig_ != sr->srpMasksFromConfig_) {
0587 nochange = false;
0588 if (m_debug) {
0589 for (int i = 0; i < 12; i++) {
0590 for (int ich = 0; ich < 8; ich++) {
0591 if (sref->srpMasksFromConfig_[i][ich] != sr->srpMasksFromConfig_[i][ich]) {
0592 fout << " srpMasks " << i << " " << ich << " ref " << sref->srpMasksFromConfig_[i][ich] << " now "
0593 << sr->srpMasksFromConfig_[i][ich] << std::endl;
0594 }
0595 }
0596 }
0597 }
0598 }
0599
0600 if (sref->dccMasks_ != sr->dccMasks_) {
0601 nochange = false;
0602 if (m_debug) {
0603 for (int i = 0; i < 54; i++) {
0604 if (sref->dccMasks_[i] != sr->dccMasks_[i]) {
0605 fout << " dccMasks " << i << " ref " << sref->dccMasks_[i] << " now " << sr->dccMasks_[i] << std::endl;
0606 }
0607 }
0608 }
0609 }
0610
0611 if (sref->srfMasks_ != sr->srfMasks_) {
0612 nochange = false;
0613 if (m_debug) {
0614 for (int i = 0; i < 12; i++) {
0615 if (sref->srfMasks_[i] != sr->srfMasks_[i]) {
0616 fout << " srfMasks " << i << " ref " << sref->srfMasks_[i] << " now " << sr->srfMasks_[i] << std::endl;
0617 }
0618 }
0619 }
0620 }
0621
0622 if (sref->substitutionSrfs_ != sr->substitutionSrfs_) {
0623 nochange = false;
0624 if (m_debug) {
0625 for (int i = 0; i < 12; i++) {
0626 for (int ich = 0; ich < 68; ich++) {
0627 if (sref->substitutionSrfs_[i][ich] != sr->substitutionSrfs_[i][ich]) {
0628 fout << " substitutionSrfs " << i << " " << ich << " ref " << sref->substitutionSrfs_[i][ich]
0629 << " now " << sr->substitutionSrfs_[i][ich] << std::endl;
0630 }
0631 }
0632 }
0633 }
0634 }
0635
0636 if (sref->testerTccEmuSrpIds_ != sr->testerTccEmuSrpIds_) {
0637 nochange = false;
0638 if (m_debug) {
0639 for (int i = 0; i < 12; i++) {
0640 fout << " testerTccEmuSrpIds " << i << " ref " << sref->testerTccEmuSrpIds_[i] << " now "
0641 << sr->testerTccEmuSrpIds_[i] << std::endl;
0642 }
0643 }
0644 }
0645
0646 if (sref->testerSrpEmuSrpIds_ != sr->testerSrpEmuSrpIds_) {
0647 nochange = false;
0648 if (m_debug)
0649 for (int i = 0; i < 12; i++) {
0650 fout << " testerSrpEmuSrpIds " << i << " ref " << sref->testerSrpEmuSrpIds_[i] << " now "
0651 << sr->testerSrpEmuSrpIds_[i] << std::endl;
0652 }
0653 }
0654
0655 if (sref->testerDccTestSrpIds_ != sr->testerDccTestSrpIds_) {
0656 nochange = false;
0657 if (m_debug)
0658 for (int i = 0; i < 12; i++) {
0659 fout << " testerDccTestSrpIds " << i << " ref " << sref->testerDccTestSrpIds_[i] << " now "
0660 << sr->testerDccTestSrpIds_[i] << std::endl;
0661 }
0662 }
0663
0664 if (sref->testerSrpTestSrpIds_ != sr->testerSrpTestSrpIds_) {
0665 nochange = false;
0666 if (m_debug)
0667 for (int i = 0; i < 12; i++) {
0668 fout << " testerSrpTestSrpIds " << i << " ref " << sref->testerSrpTestSrpIds_[i] << " now "
0669 << sr->testerSrpTestSrpIds_[i] << std::endl;
0670 }
0671 }
0672
0673 if (sref->bxOffsets_ != sr->bxOffsets_) {
0674 nochange = false;
0675 if (m_debug)
0676 for (int i = 0; i < 12; i++) {
0677 fout << " bxOffsets " << i << " ref " << sref->bxOffsets_[i] << " now " << sr->bxOffsets_[i] << std::endl;
0678 }
0679 }
0680
0681 if (sref->bxGlobalOffset_ != sr->bxGlobalOffset_) {
0682 nochange = false;
0683 if (m_debug)
0684 fout << " bxGlobalOffset ref " << sr->bxGlobalOffset_ << " now " << sr->bxGlobalOffset_ << std::endl;
0685 }
0686
0687 if (sref->automaticMasks_ != sr->automaticMasks_) {
0688 nochange = false;
0689 if (m_debug)
0690 fout << " automaticMasks ref " << sref->automaticMasks_ << " now " << sr->automaticMasks_ << std::endl;
0691 }
0692
0693 if (sref->automaticSrpSelect_ != sr->automaticSrpSelect_) {
0694 nochange = false;
0695 if (m_debug)
0696 fout << " automaticSrpSelect ref " << sref->automaticSrpSelect_ << " now " << sr->automaticSrpSelect_
0697 << std::endl;
0698 }
0699
0700 if (nochange) {
0701 if (m_debug)
0702 fout << " no change has been found " << std::endl;
0703 std::ostringstream ss;
0704 ss << "Run=" << irun << "_SRPunchanged_" << std::endl;
0705 m_userTextLog = ss.str() + ";";
0706 } else {
0707 if (m_debug) {
0708 fout << " Change has been found !\n New payload :" << std::endl;
0709 PrintPayload(*sr, fout);
0710 }
0711 ChangePayload(*sref, *sr);
0712
0713 EcalSRSettings* srp_pop = new EcalSRSettings();
0714 ChangePayload(*srp_pop, *sr);
0715 m_to_transfer.push_back(std::make_pair(srp_pop, irun));
0716
0717 std::ostringstream ss;
0718 ss << "Run=" << irun << "_SRPchanged_" << std::endl;
0719 m_userTextLog = ss.str() + ";";
0720
0721 if (m_to_transfer.size() >= 20)
0722 break;
0723 }
0724 delete sr;
0725 m_i_tag = myconfig_tag;
0726 m_i_version = myconfig_version;
0727 fe_conf_id_old = fe_conf_id;
0728 }
0729 }
0730 }
0731
0732
0733 delete econn;
0734 fout.close();
0735 }
0736
0737 void popcon::EcalSRPHandler::importDccConfigFile(EcalSRSettings& sr, const std::string& filename, bool useCLOB) {
0738 cms::concurrency::xercesInitialize();
0739
0740 XercesDOMParser* parser = new XercesDOMParser;
0741 parser->setValidationScheme(XercesDOMParser::Val_Never);
0742 parser->setDoNamespaces(false);
0743 parser->setDoSchema(false);
0744
0745 parser->parse(filename.c_str());
0746
0747 DOMDocument* xmlDoc = parser->getDocument();
0748 if (!xmlDoc) {
0749 std::cout << "importDccConfigFile Error parsing document" << std::endl;
0750 }
0751
0752 DOMElement* element = xmlDoc->getDocumentElement();
0753 std::string type = cms::xerces::toString(element->getTagName());
0754
0755
0756 int EBEE = -1;
0757 int L1ZS[2] = {0, 0}, L2ZS[2] = {0, 0};
0758 for (DOMNode* childNode = element->getFirstChild(); childNode; childNode = childNode->getNextSibling()) {
0759 if (childNode->getNodeType() == DOMNode::ELEMENT_NODE) {
0760 const std::string foundName = cms::xerces::toString(childNode->getNodeName());
0761 DOMElement* child = static_cast<DOMElement*>(childNode);
0762 DOMNamedNodeMap* attributes = child->getAttributes();
0763 unsigned int numAttributes = attributes->getLength();
0764 for (unsigned int j = 0; j < numAttributes; ++j) {
0765 DOMNode* attributeNode = attributes->item(j);
0766 DOMAttr* attribute = static_cast<DOMAttr*>(attributeNode);
0767 const std::string info = cms::xerces::toString(attribute->getName());
0768 const std::string scope = cms::xerces::toString(attribute->getValue());
0769 if (info == "_scope") {
0770 if (scope.substr(0, 2) == "EE")
0771 EBEE = 1;
0772 else
0773 EBEE = 0;
0774 }
0775 }
0776
0777 for (DOMNode* subchildNode = childNode->getFirstChild(); subchildNode;
0778 subchildNode = subchildNode->getNextSibling()) {
0779 if (subchildNode->getNodeType() == DOMNode::ELEMENT_NODE) {
0780 const std::string subName = cms::xerces::toString(subchildNode->getNodeName());
0781
0782 for (DOMNode* subsubchildNode = subchildNode->getFirstChild(); subsubchildNode;
0783 subsubchildNode = subsubchildNode->getNextSibling()) {
0784 if (subsubchildNode->getNodeType() == DOMNode::ELEMENT_NODE) {
0785 const std::string subName = cms::xerces::toString(subsubchildNode->getNodeName());
0786 if (subName == "L1ZSUPPRESSION")
0787 GetNodeData(subsubchildNode, L1ZS[EBEE]);
0788 if (subName == "L2ZSUPPRESSION")
0789 GetNodeData(subsubchildNode, L2ZS[EBEE]);
0790 if (subName == "FIRSTZSSAMPLE") {
0791 int ZS;
0792 GetNodeData(subsubchildNode, ZS);
0793 if (useCLOB)
0794 sr.ecalDccZs1stSample_.push_back(ZS);
0795 }
0796 if (subName == "CXTALWEIGHTS") {
0797 std::vector<float> dcc(6);
0798 float w;
0799 for (int iw = 0; iw < 6; iw++) {
0800 GetNodeData(subsubchildNode, w);
0801 dcc.push_back(w);
0802 }
0803 if (useCLOB)
0804 sr.dccNormalizedWeights_.push_back(dcc);
0805 }
0806 }
0807 }
0808 }
0809 }
0810 }
0811 }
0812 sr.srpLowInterestChannelZS_.push_back(L1ZS[0] * 0.035 / 4);
0813 sr.srpLowInterestChannelZS_.push_back(L1ZS[1] * 0.060 / 4);
0814 sr.srpHighInterestChannelZS_.push_back(L2ZS[0] * 0.035 / 4);
0815 sr.srpHighInterestChannelZS_.push_back(L2ZS[1] * 0.060 / 4);
0816 delete parser;
0817 cms::concurrency::xercesTerminate();
0818 }
0819
0820 void popcon::EcalSRPHandler::PrintPayload(EcalSRSettings& sr, std::ofstream& fout) {
0821 int imax = sr.deltaEta_.size();
0822 fout << " deltaEta[" << imax << "] ";
0823 for (int i = 0; i < imax; i++) {
0824 fout << sr.deltaEta_[i] << " ";
0825 }
0826 fout << std::endl;
0827
0828 imax = sr.deltaPhi_.size();
0829 fout << " deltaPhi[" << imax << "] ";
0830 for (int i = 0; i < imax; i++) {
0831 fout << sr.deltaPhi_[i] << " ";
0832 }
0833 fout << std::endl;
0834
0835 imax = sr.ecalDccZs1stSample_.size();
0836 fout << " ecalDccZs1stSample[" << imax << "] ";
0837 for (int i = 0; i < imax; i++) {
0838 fout << sr.ecalDccZs1stSample_[i] << " ";
0839 }
0840 fout << std::endl;
0841
0842 fout << " ebDccAdcToGeV " << sr.ebDccAdcToGeV_ << std::endl;
0843
0844 fout << " eeDccAdcToGeV " << sr.eeDccAdcToGeV_ << std::endl;
0845
0846 fout << " dccNormalizedWeights" << std::endl;
0847 for (int i = 0; i < (int)sr.dccNormalizedWeights_.size(); ++i) {
0848 fout << " Channel " << i;
0849 for (int j = 0; j < (int)sr.dccNormalizedWeights_[i].size(); ++j)
0850 fout << " " << sr.dccNormalizedWeights_[i][j];
0851 fout << std::endl;
0852 }
0853
0854 imax = sr.symetricZS_.size();
0855 fout << " symetricZS[" << imax << "] ";
0856 for (int i = 0; i < imax; i++) {
0857 fout << sr.symetricZS_[i] << " ";
0858 }
0859 fout << std::endl;
0860
0861 imax = sr.srpLowInterestChannelZS_.size();
0862 fout << " srpLowInterestChannelZS[" << imax << "] ";
0863 for (int i = 0; i < imax; i++) {
0864 fout << sr.srpLowInterestChannelZS_[i] << " ";
0865 }
0866 fout << std::endl;
0867
0868 imax = sr.srpHighInterestChannelZS_.size();
0869 fout << " srpHighInterestChannelZS[" << imax << "] ";
0870 for (int i = 0; i < imax; i++) {
0871 fout << sr.srpHighInterestChannelZS_[i] << " ";
0872 }
0873 fout << std::endl;
0874
0875 imax = sr.actions_.size();
0876 fout << " actions[" << imax << "] ";
0877 for (int i = 0; i < imax; i++) {
0878 fout << sr.actions_[i] << " ";
0879 }
0880 fout << std::endl;
0881
0882 imax = sr.tccMasksFromConfig_.size();
0883 fout << " tccMasksFromConfig[" << imax << "] ";
0884 for (int i = 0; i < imax; i++) {
0885 fout << sr.tccMasksFromConfig_[i] << " ";
0886 }
0887 fout << std::endl;
0888
0889 fout << " srpMasksFromConfig" << std::endl;
0890 for (int i = 0; i < (int)sr.srpMasksFromConfig_.size(); ++i) {
0891 for (int j = 0; j < (int)sr.srpMasksFromConfig_[i].size(); ++j)
0892 fout << sr.srpMasksFromConfig_[i][j] << " ";
0893 fout << std::endl;
0894 }
0895
0896 imax = sr.dccMasks_.size();
0897 fout << " dccMasks[" << imax << "] ";
0898 for (int i = 0; i < imax; i++) {
0899 fout << sr.dccMasks_[i] << " ";
0900 }
0901 fout << std::endl;
0902
0903 imax = sr.srfMasks_.size();
0904 fout << " srfMasks[" << imax << "] ";
0905 for (int i = 0; i < imax; i++) {
0906 fout << sr.srfMasks_[i] << " ";
0907 }
0908 fout << std::endl;
0909
0910 fout << "substitutionSrfs" << std::endl;
0911 for (int i = 0; i < (int)sr.substitutionSrfs_.size(); ++i) {
0912 for (int j = 0; j < (int)sr.substitutionSrfs_[i].size(); ++j)
0913 fout << sr.substitutionSrfs_[i][j] << " ";
0914 fout << std::endl;
0915 }
0916
0917 imax = sr.testerTccEmuSrpIds_.size();
0918 fout << " testerTccEmuSrpIds[" << imax << "] ";
0919 for (int i = 0; i < imax; i++) {
0920 fout << sr.testerTccEmuSrpIds_[i] << " ";
0921 }
0922 fout << std::endl;
0923
0924 imax = sr.testerSrpEmuSrpIds_.size();
0925 fout << " testerSrpEmuSrpIds[" << imax << "] ";
0926 for (int i = 0; i < imax; i++) {
0927 fout << sr.testerSrpEmuSrpIds_[i] << " ";
0928 }
0929 fout << std::endl;
0930
0931 imax = sr.testerDccTestSrpIds_.size();
0932 fout << " testerDccTestSrpIds[" << imax << "] ";
0933 for (int i = 0; i < imax; i++) {
0934 fout << sr.testerDccTestSrpIds_[i] << " ";
0935 }
0936 fout << std::endl;
0937
0938 imax = sr.testerSrpTestSrpIds_.size();
0939 fout << " testerSrpTestSrpIds[" << imax << "] ";
0940 for (int i = 0; i < imax; i++) {
0941 fout << sr.testerSrpTestSrpIds_[i] << " ";
0942 }
0943 fout << std::endl;
0944
0945 imax = sr.bxOffsets_.size();
0946 fout << " bxOffsets[" << imax << "] ";
0947 for (int i = 0; i < imax; i++) {
0948 fout << sr.bxOffsets_[i] << " ";
0949 }
0950 fout << std::endl;
0951
0952 fout << " bxGlobalOffset " << sr.bxGlobalOffset_ << std::endl;
0953 fout << " automaticMasks " << sr.automaticMasks_ << std::endl;
0954 fout << " automaticSrpSelect " << sr.automaticSrpSelect_ << std::endl;
0955 }
0956
0957 void popcon::EcalSRPHandler::ChangePayload(EcalSRSettings& sref, EcalSRSettings& sr) {
0958 sref.deltaEta_ = sr.deltaEta_;
0959 sref.deltaPhi_ = sr.deltaPhi_;
0960 sref.ecalDccZs1stSample_ = sr.ecalDccZs1stSample_;
0961 sref.ebDccAdcToGeV_ = sr.ebDccAdcToGeV_;
0962 sref.eeDccAdcToGeV_ = sr.eeDccAdcToGeV_;
0963 sref.dccNormalizedWeights_ = sr.dccNormalizedWeights_;
0964 sref.symetricZS_ = sr.symetricZS_;
0965 sref.srpLowInterestChannelZS_ = sr.srpLowInterestChannelZS_;
0966 sref.srpHighInterestChannelZS_ = sr.srpHighInterestChannelZS_;
0967 sref.actions_ = sr.actions_;
0968 sref.tccMasksFromConfig_ = sr.tccMasksFromConfig_;
0969 sref.srpMasksFromConfig_ = sr.srpMasksFromConfig_;
0970 sref.dccMasks_ = sr.dccMasks_;
0971 sref.srfMasks_ = sr.srfMasks_;
0972 sref.substitutionSrfs_ = sr.substitutionSrfs_;
0973 sref.testerTccEmuSrpIds_ = sr.testerTccEmuSrpIds_;
0974 sref.testerSrpEmuSrpIds_ = sr.testerSrpEmuSrpIds_;
0975 sref.testerDccTestSrpIds_ = sr.testerDccTestSrpIds_;
0976 sref.testerSrpTestSrpIds_ = sr.testerSrpTestSrpIds_;
0977 sref.bxOffsets_ = sr.bxOffsets_;
0978 sref.bxGlobalOffset_ = sr.bxGlobalOffset_;
0979 sref.automaticMasks_ = sr.automaticMasks_;
0980 sref.automaticSrpSelect_ = sr.automaticSrpSelect_;
0981 }