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 134 135 136 137 138 139 140 141
#include "DQM/SiStripCommissioningSummary/interface/SummaryPlotFactoryBase.h"
#include "DQM/SiStripCommissioningSummary/interface/SummaryGenerator.h"
#include "DataFormats/SiStripCommon/interface/SiStripEnumsAndStrings.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include <iostream>

using namespace sistrip;

// -----------------------------------------------------------------------------
//
SummaryPlotFactoryBase::SummaryPlotFactoryBase()
    : mon_(sistrip::UNKNOWN_MONITORABLE),
      pres_(sistrip::UNKNOWN_PRESENTATION),
      view_(sistrip::UNKNOWN_VIEW),
      level_(sistrip::root_),
      gran_(sistrip::UNKNOWN_GRAN),
      generator_(nullptr) {
  ;
}

// -----------------------------------------------------------------------------
//
SummaryPlotFactoryBase::~SummaryPlotFactoryBase() {
  if (generator_) {
    delete generator_;
  }
}

// -----------------------------------------------------------------------------
//
void SummaryPlotFactoryBase::init(const sistrip::Monitorable& mon,
                                  const sistrip::Presentation& pres,
                                  const sistrip::View& view,
                                  const std::string& level,
                                  const sistrip::Granularity& gran) {
  // Create generator object
  if (generator_) {
    delete generator_;
    generator_ = nullptr;
  }
  generator_ = SummaryGenerator::instance(view);

  // Check if generator object exists
  if (!generator_) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " NULL pointer to generator object!";
    return;
  }

  // Clear map used to build histogram
  generator_->clearMap();

  // Set parameters
  mon_ = mon;
  pres_ = pres;
  view_ = view;
  level_ = level;
  gran_ = gran;

  // Some checks
  if (mon_ == sistrip::UNKNOWN_MONITORABLE || mon_ == sistrip::UNDEFINED_MONITORABLE) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected monitorable: " << SiStripEnumsAndStrings::monitorable(mon_);
  }

  if (pres_ == sistrip::UNKNOWN_PRESENTATION || pres_ == sistrip::UNDEFINED_PRESENTATION) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected presentation: " << SiStripEnumsAndStrings::presentation(pres_);
  }

  if (view_ == sistrip::UNKNOWN_VIEW || view_ == sistrip::UNDEFINED_VIEW) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected view: " << SiStripEnumsAndStrings::view(view_);
  }

  if (level_.empty() || level_.find(sistrip::unknownView_) != std::string::npos ||
      level_.find(sistrip::undefinedView_) != std::string::npos) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected top-level directory: \"" << level_ << "\"";
  }

  if ((gran_ == sistrip::UNKNOWN_GRAN || gran_ == sistrip::UNDEFINED_GRAN) && pres != sistrip::HISTO_1D) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected granularity: " << SiStripEnumsAndStrings::granularity(gran_);
  }

  //   ss << "[SummaryPlotFactoryBase::" << __func__ << "]"
  //      << " Dump of parameters defining summary plot:" << std::endl
  //      << " Monitorable   : " << SiStripEnumsAndStrings::monitorable( mon_ ) << std::endl
  //      << " Presentation  : " << SiStripEnumsAndStrings::presentation( pres_ ) << std::endl
  //      << " Logical view  : " << SiStripEnumsAndStrings::view( view_ ) << std::endl
  //      << " Top level dir : " << level_ << std::endl
  //      << " Granularity   : " << SiStripEnumsAndStrings::granularity( gran_ );
  //   LogTrace(mlSummaryPlots_) << ss.str();
}

// -----------------------------------------------------------------------------
//
void SummaryPlotFactoryBase::fill(TH1& summary_histo) {
  // Check if instance of generator class exists
  if (!generator_) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " NULL pointer to SummaryGenerator object!";
    return;
  }

  // Check if map is filled
  if (!generator_->nBins()) {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Zero bins returned by SummaryGenerator!";
    return;
  }

  // Print contents of map for histogram
  //generator_->printMap();

  // Generate appropriate summary histogram
  if (pres_ == sistrip::HISTO_1D) {
    generator_->histo1D(summary_histo);
  } else if (pres_ == sistrip::HISTO_2D_SUM) {
    generator_->histo2DSum(summary_histo);
  } else if (pres_ == sistrip::HISTO_2D_SCATTER) {
    generator_->histo2DScatter(summary_histo);
  } else if (pres_ == sistrip::PROFILE_1D) {
    generator_->profile1D(summary_histo);
  } else {
    edm::LogWarning(mlSummaryPlots_) << "[SummaryPlotFactoryBase::" << __func__ << "]"
                                     << " Unexpected presentation type: "
                                     << SiStripEnumsAndStrings::presentation(pres_);
    return;
  }

  // Histogram formatting
  generator_->format(sistrip::UNKNOWN_RUN_TYPE,  //@@ not used
                     mon_,
                     pres_,
                     view_,
                     level_,
                     gran_,
                     summary_histo);
}