Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

/*----------------------------------------------------------------------

Toy EDAnalyzer for testing purposes only.

----------------------------------------------------------------------*/

#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/Framework/interface/ESHandle.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include <cmath>
#include <fstream>
#include <iostream>
#include <map>
#include <sstream>
#include <stdexcept>
#include <string>

#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "CondTools/DT/test/validate/DTROMapValidateDBRead.h"
#include "CondFormats/DTObjects/interface/DTReadOutMapping.h"
#include "CondFormats/DataRecord/interface/DTReadOutMappingRcd.h"

DTROMapValidateDBRead::DTROMapValidateDBRead(edm::ParameterSet const& p)
    : dataFileName(p.getParameter<std::string>("chkFile")),
      elogFileName(p.getParameter<std::string>("logFile")),
      dtreadoutmappingToken_(esConsumes()) {}

DTROMapValidateDBRead::DTROMapValidateDBRead(int i) : dtreadoutmappingToken_(esConsumes()) {}

void DTROMapValidateDBRead::analyze(const edm::Event& e, const edm::EventSetup& context) {
  using namespace edm::eventsetup;
  // Context is not used.
  std::cout << " I AM IN RUN NUMBER " << e.id().run() << std::endl;
  std::cout << " ---EVENT NUMBER " << e.id().event() << std::endl;
  std::stringstream run_fn;
  //  run_fn << "run" << e.id().run() << dataFileName;
  //  std::ifstream chkFile( run_fn.str().c_str() );
  std::ifstream chkFile(dataFileName.c_str());
  std::ofstream logFile(elogFileName.c_str(), std::ios_base::app);
  auto ro = context.getHandle(dtreadoutmappingToken_);
  std::cout << ro->mapRobRos() << " " << ro->mapCellTdc() << std::endl;
  std::cout << std::distance(ro->begin(), ro->end()) << " data in the container" << std::endl;
  int whe;
  int sta;
  int sec;
  int qua;
  int lay;
  int cel;
  int ddu;
  int ros;
  int rob;
  int tdc;
  int cha;
  int ckwhe;
  int cksta;
  int cksec;
  int ckqua;
  int cklay;
  int ckcel;
  int ckddu;
  int ckros;
  int ckrob;
  int cktdc;
  int ckcha;
  int status;
  DTReadOutMapping::const_iterator iter = ro->begin();
  DTReadOutMapping::const_iterator iend = ro->end();
  while (iter != iend) {
    const DTReadOutGeometryLink& link = *iter;
    status = ro->readOutToGeometry(
        link.dduId, link.rosId, link.robId, link.tdcId, link.channelId, whe, sta, sec, qua, lay, cel);
    if (status)
      logFile << "ERROR while getting chan->cell map " << link.dduId << " " << link.rosId << " " << link.robId << " "
              << link.tdcId << " " << link.channelId << " , status = " << status << std::endl;
    if ((link.wheelId != whe) || (link.stationId != sta) || (link.sectorId != sec) || (link.slId != qua) ||
        (link.layerId != lay) || (link.cellId != cel))
      logFile << "MISMATCH WHEN READING chan->cell  " << link.dduId << " " << link.rosId << " " << link.robId << " "
              << link.tdcId << " " << link.channelId << " : " << link.wheelId << " " << link.stationId << " "
              << link.sectorId << " " << link.slId << " " << link.layerId << " " << link.cellId << " -> " << whe << " "
              << sta << " " << sec << " " << qua << " " << lay << " " << cel << std::endl;
    status = ro->geometryToReadOut(
        link.wheelId, link.stationId, link.sectorId, link.slId, link.layerId, link.cellId, ddu, ros, rob, tdc, cha);
    if (status)
      logFile << "ERROR while getting cell->chan map " << link.wheelId << " " << link.stationId << " " << link.sectorId
              << " " << link.slId << " " << link.layerId << " " << link.cellId << " , status = " << status << std::endl;
    if ((link.dduId != ddu) || (link.rosId != ros) || (link.robId != rob) || (link.tdcId != tdc) ||
        (link.channelId != cha))
      logFile << "MISMATCH WHEN READING cell->chan  " << link.wheelId << " " << link.stationId << " " << link.sectorId
              << " " << link.slId << " " << link.layerId << " " << link.cellId << " : " << link.dduId << " "
              << link.rosId << " " << link.robId << " " << link.tdcId << " " << link.channelId << " -> " << ddu << " "
              << ros << " " << rob << " " << tdc << " " << cha << std::endl;
    iter++;
  }

  while (chkFile >> ckddu >> ckros >> ckrob >> cktdc >> ckcha >> ckwhe >> cksta >> cksec >> ckqua >> cklay >> ckcel) {
    status = ro->readOutToGeometry(ckddu, ckros, ckrob, cktdc, ckcha, whe, sta, sec, qua, lay, cel);
    if ((ckwhe != whe) || (cksta != sta) || (cksec != sec) || (ckqua != qua) || (cklay != lay) || (ckcel != cel))
      logFile << "MISMATCH IN WRITING AND READING chan->cell map " << ckddu << " " << ckros << " " << ckrob << " "
              << cktdc << " " << ckcha << " : " << ckwhe << " " << cksta << " " << cksec << " " << ckqua << " " << cklay
              << " " << ckcel << " -> " << whe << " " << sta << " " << sec << " " << qua << " " << lay << " " << cel
              << std::endl;
    status = ro->geometryToReadOut(ckwhe, cksta, cksec, ckqua, cklay, ckcel, ddu, ros, rob, tdc, cha);
    if ((ckddu != ddu) || (ckros != ros) || (ckrob != rob) || (cktdc != tdc) || (ckcha != cha))
      logFile << "MISMATCH IN WRITING AND READING cell->chan map " << ckwhe << " " << cksta << " " << cksec << " "
              << ckqua << " " << cklay << " " << ckcel << " : " << ckddu << " " << ckros << " " << ckrob << " " << cktdc
              << " " << ckcha << " -> " << ddu << " " << ros << " " << rob << " " << tdc << " " << cha << std::endl;
  }
}

void DTROMapValidateDBRead::endJob() {
  std::ifstream logFile(elogFileName.c_str());
  char* line = new char[1000];
  int errors = 0;
  std::cout << "ReadOut Map validation result:" << std::endl;
  while (logFile.getline(line, 1000)) {
    std::cout << line << std::endl;
    errors++;
  }
  if (!errors) {
    std::cout << " ********************************* " << std::endl;
    std::cout << " ***                           *** " << std::endl;
    std::cout << " ***      NO ERRORS FOUND      *** " << std::endl;
    std::cout << " ***                           *** " << std::endl;
    std::cout << " ********************************* " << std::endl;
  }
  return;
}

DEFINE_FWK_MODULE(DTROMapValidateDBRead);