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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157

#include "DQM/SiStripCommissioningDbClients/plugins/SiStripCommissioningOfflineDbClient.h"
#include "DataFormats/SiStripCommon/interface/SiStripEnumsAndStrings.h"
#include "DataFormats/SiStripCommon/interface/SiStripHistoTitle.h"
#include "DataFormats/SiStripCommon/interface/SiStripFecKey.h"
#include "DQM/SiStripCommissioningDbClients/interface/FastFedCablingHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/ApvTimingHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/OptoScanHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/VpspScanHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/PedestalsHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/PedsOnlyHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/NoiseHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/PedsFullNoiseHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/DaqScopeModeHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/LatencyHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/FineDelayHistosUsingDb.h"
#include "DQM/SiStripCommissioningDbClients/interface/CalibrationHistosUsingDb.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "DQMServices/Core/interface/DQMStore.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "OnlineDB/SiStripConfigDb/interface/SiStripConfigDb.h"

using namespace sistrip;

// -----------------------------------------------------------------------------
//
SiStripCommissioningOfflineDbClient::SiStripCommissioningOfflineDbClient(const edm::ParameterSet& pset)
    : SiStripCommissioningOfflineClient(pset),
      uploadAnal_(pset.getUntrackedParameter<bool>("UploadAnalyses", false)),
      uploadConf_(pset.getUntrackedParameter<bool>("UploadHwConfig", false)),
      tTopoToken_{esConsumes<edm::Transition::BeginRun>()},
      tkGeomToken_{esConsumes<edm::Transition::BeginRun>()} {
  LogTrace(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                         << " Constructing object...";
  if (!uploadConf_) {
    edm::LogWarning(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                  << " ===> TEST only! No hardware configurations"
                                  << " will be uploaded to the DB...";
  }
  if (!uploadAnal_) {
    edm::LogWarning(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                  << " ===> TEST only! No analysis descriptions"
                                  << " will be uploaded to the DB...";
  }
}

// -----------------------------------------------------------------------------
//
SiStripCommissioningOfflineDbClient::~SiStripCommissioningOfflineDbClient() {
  LogTrace(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                         << " Destructing object...";
}

// -----------------------------------------------------------------------------
//
void SiStripCommissioningOfflineDbClient::createHistos(const edm::ParameterSet& pset, const edm::EventSetup& setup) {
  // Check pointer
  if (histos_) {
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " CommissioningHistogram object already exists!"
                                << " Aborting...";
    return;
  }

  // Check pointer to BEI
  // is this needed here? bei_ = edm::Service<DQMStore>().operator->();
  if (!bei_) {
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " NULL pointer to DQMStore!";
    return;
  }

  // Create DB connection
  SiStripConfigDb* db = edm::Service<SiStripConfigDb>().operator->();  //@@ NOT GUARANTEED TO BE THREAD SAFE!
  LogTrace(mlCabling_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                       << " Nota bene: using the SiStripConfigDb API"
                       << " as a \"service\" does not presently guarantee"
                       << " thread-safe behaviour!...";

  // Check DB connection
  if (!db) {
    edm::LogError(mlCabling_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                              << " NULL pointer to SiStripConfigDb!"
                              << " Aborting...";
    return;
  }

  // Create corresponding "commissioning histograms" object
  if (runType_ == sistrip::FAST_CABLING) {
    histos_ = new FastFedCablingHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::APV_TIMING) {
    histos_ = new ApvTimingHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::OPTO_SCAN) {
    histos_ = new OptoScanHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::VPSP_SCAN) {
    histos_ = new VpspScanHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::PEDESTALS) {
    histos_ = new PedestalsHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::PEDS_ONLY) {
    histos_ = new PedsOnlyHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::PEDS_FULL_NOISE) {
    histos_ = new PedsFullNoiseHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::NOISE) {
    histos_ = new NoiseHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::APV_LATENCY) {
    histos_ = new LatencyHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::FINE_DELAY) {
    histos_ = new FineDelayHistosUsingDb(pset, bei_, db, tTopoToken_, tkGeomToken_);
  } else if (runType_ == sistrip::CALIBRATION || runType_ == sistrip::CALIBRATION_DECO ||
             runType_ == sistrip::CALIBRATION_SCAN || runType_ == sistrip::CALIBRATION_SCAN_DECO) {
    histos_ = new CalibrationHistosUsingDb(pset, bei_, db, tTopoToken_, runType_);
  } else if (runType_ == sistrip::DAQ_SCOPE_MODE) {
    histos_ = new DaqScopeModeHistosUsingDb(pset, bei_, db, tTopoToken_);
  } else if (runType_ == sistrip::UNDEFINED_RUN_TYPE) {
    histos_ = nullptr;
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " Undefined run type!";
    return;
  } else if (runType_ == sistrip::UNKNOWN_RUN_TYPE) {
    histos_ = nullptr;
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " Unknown run type!";
    return;
  }
  histos_->configure(pset, setup);

  CommissioningHistosUsingDb* tmp = dynamic_cast<CommissioningHistosUsingDb*>(histos_);
  if (tmp) {
    tmp->doUploadConf(uploadConf_);
    tmp->doUploadAnal(uploadAnal_);
    std::stringstream ss;
    ss << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]" << std::endl
       << " Uploading hardware configurations?    : " << (tmp->doUploadConf() ? "true" : "false") << std::endl
       << " Uploading calibrations from analysis? : " << (tmp->doUploadAnal() ? "true" : "false") << std::endl;
    edm::LogVerbatim(mlDqmClient_) << ss.str();
  } else {
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " NULL pointer to CommissioningHistosUsingDb!";
  }
}

// -----------------------------------------------------------------------------
//
void SiStripCommissioningOfflineDbClient::uploadToConfigDb() {
  edm::LogVerbatim(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                 << " Uploading parameters to database...";
  CommissioningHistosUsingDb* tmp = dynamic_cast<CommissioningHistosUsingDb*>(histos_);
  if (tmp) {
    tmp->uploadToConfigDb();
    edm::LogVerbatim(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                   << " Uploaded parameters to database!";
  } else {
    edm::LogError(mlDqmClient_) << "[SiStripCommissioningOfflineDbClient::" << __func__ << "]"
                                << " NULL pointer to CommissioningHistosUsingDb object!"
                                << " Upload aborted!...";
  }
}