DAQMappingPayloadInfo

Macros

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
#ifndef CONDCORE_CTPPSPLUGINS_PPSDAQMAPPINGPAYLOADINSPECTORHELPER_H
#define CONDCORE_CTPPSPLUGINS_PPSDAQMAPPINGPAYLOADINSPECTORHELPER_H

// User includes
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "CondCore/Utilities/interface/PayloadInspectorModule.h"
#include "CondCore/Utilities/interface/PayloadInspector.h"
#include "CondCore/CondDB/interface/Time.h"
#include "CondFormats/PPSObjects/interface/TotemDAQMapping.h"
#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h"

// system includes
#include <memory>
#include <sstream>

// ROOT includes
#include "TCanvas.h"
#include "TStyle.h"
#include "TH2F.h"
#include "TLatex.h"
#include "TGraph.h"

namespace DAQMappingPI {
  inline std::string resolveDetIDForDAQMapping(int detIDNumber) {
    static const std::map<int, std::string> mapping = {{CTPPSDetId::SubDetector::sdTrackingStrip, "Strip"},
                                                       {CTPPSDetId::SubDetector::sdTrackingPixel, "Pixel"},
                                                       {CTPPSDetId::SubDetector::sdTimingDiamond, "Diamond"},
                                                       {CTPPSDetId::SubDetector::sdTimingFastSilicon, "FastSilicon"},
                                                       {CTPPSDetId::SubDetector::sdTotemT2, "TotemT2"}};

    auto it = mapping.find(detIDNumber);
    if (it != mapping.end()) {
      return it->second;
    } else {
      return "not defined";
    }
  }
}  // namespace DAQMappingPI

template <class PayloadType>
class DAQMappingPayloadInfo
    : public cond::payloadInspector::PlotImage<PayloadType, cond::payloadInspector::SINGLE_IOV> {
public:
  DAQMappingPayloadInfo()
      : cond::payloadInspector::PlotImage<PayloadType, cond::payloadInspector::SINGLE_IOV>(
            "DAQMappingPayloadInfo text") {}

  bool fill() override {
    auto tag = cond::payloadInspector::PlotBase::getTag<0>();
    auto tagname = tag.name;
    auto iov = tag.iovs.back();
    auto m_payload = this->fetchPayload(std::get<1>(iov));

    if (m_payload != nullptr) {
      std::stringstream payloadInfo, lineCountStream;
      int subDet = CTPPSDetId(m_payload->VFATMapping.begin()->second.symbolicID.symbolicID).subdetId();
      payloadInfo << "TAG: " << tagname << ", the mapping for: " << DAQMappingPI::resolveDetIDForDAQMapping(subDet)
                  << std::endl;
      payloadInfo << *m_payload;
      lineCountStream << *m_payload;
      std::string line;

      //created to dynamically set canvas height
      int lineCounter = 0;
      while (std::getline(lineCountStream, line)) {
        lineCounter++;
      }

      TCanvas canvas("canvas", "Canvas", 800, 20 * lineCounter);

      TLatex latex;
      latex.SetNDC();
      latex.SetTextSize(0.015);
      double yPos = 0.95;

      while (std::getline(payloadInfo, line)) {
        yPos -= 0.015;
        latex.DrawLatex(0.1, yPos, line.c_str());
      }

      std::string fileName(this->m_imageFileName);
      canvas.SaveAs(fileName.c_str());

      return true;
    } else {
      return false;
    }
  }
};

#endif