From 97b8054e4ceaca45a8cfd2f7f5e8c1f3d1d1d021 Mon Sep 17 00:00:00 2001 From: mmusich Date: Fri, 29 May 2020 13:50:35 +0200 Subject: [PATCH] Expand BeamSpot Payload Inspector to account for new BeamSpotOnline object, introduce unit test --- .../BeamSpotPayloadInspectorHelper.h | 396 ++++++++++++++++++ .../BeamSpotOnline_PayloadInspector.cc | 181 ++++++++ .../plugins/BeamSpot_PayloadInspector.cc | 330 ++------------- .../BeamSpotPlugins/plugins/BuildFile.xml | 7 + CondCore/BeamSpotPlugins/test/BuildFile.xml | 7 + .../test/testBeamSpotPayloadInspector.cpp | 49 +++ ...tor.sh => testBeamSpotPayloadInspector.sh} | 0 7 files changed, 672 insertions(+), 298 deletions(-) create mode 100644 CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h create mode 100644 CondCore/BeamSpotPlugins/plugins/BeamSpotOnline_PayloadInspector.cc create mode 100644 CondCore/BeamSpotPlugins/test/BuildFile.xml create mode 100644 CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.cpp rename CondCore/BeamSpotPlugins/test/{testBeamsSpotPayloadInspector.sh => testBeamSpotPayloadInspector.sh} (100%) diff --git a/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h b/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h new file mode 100644 index 0000000000000..ba621222b25bb --- /dev/null +++ b/CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h @@ -0,0 +1,396 @@ +#ifndef CONDCORE_BEAMSPOTPLUGINS_BEAMSPOTPAYLOADINSPECTORHELPER_H +#define CONDCORE_BEAMSPOTPLUGINS_BEAMSPOTPAYLOADINSPECTORHELPER_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/BeamSpotObjects/interface/BeamSpotOnlineObjects.h" + +// ROOT includes + +#include +#include +#include "TCanvas.h" +#include "TH2F.h" +#include "TLatex.h" + +namespace BeamSpotPI { + + std::pair unpack(cond::Time_t since) { + auto kLowMask = 0XFFFFFFFF; + auto run = (since >> 32); + auto lumi = (since & kLowMask); + return std::make_pair(run, lumi); + } + + enum parameters { + X, + Y, + Z, + sigmaX, + sigmaY, + sigmaZ, + dxdz, + dydz, + lastLumi, + lastRun, + lastFill, + nTracks, + nPVs, + creationTime, + END_OF_TYPES + }; + + /************************************************/ + std::string getStringFromParamEnum(const parameters& parameter) { + switch (parameter) { + case X: + return "X"; + case Y: + return "Y"; + case Z: + return "Z"; + case sigmaX: + return "sigmaX"; + case sigmaY: + return "sigmaY"; + case sigmaZ: + return "sigmaZ"; + case dxdz: + return "dx/dz"; + case dydz: + return "dy/dz"; + default: + return "should never be here"; + } + } + + /************************************************ + template classes (history) + *************************************************/ + + template + class BeamSpot_history : public cond::payloadInspector::HistoryPlot > { + public: + BeamSpot_history() + : cond::payloadInspector::HistoryPlot >( + getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {} + + std::pair getFromPayload(PayloadType& payload) override { + auto ret = std::make_pair(-9999., -9999.); + + switch (my_param) { + case X: + return std::make_pair(payload.GetX(), payload.GetXError()); + case Y: + return std::make_pair(payload.GetY(), payload.GetYError()); + case Z: + return std::make_pair(payload.GetZ(), payload.GetZError()); + case sigmaX: + return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); + case sigmaY: + return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); + case sigmaZ: + return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); + case dxdz: + return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); + case dydz: + return std::make_pair(payload.Getdydz(), payload.GetdydzError()); + case END_OF_TYPES: + return ret; + default: + return ret; + } + } + }; + + /************************************************ + template classes (run history) + *************************************************/ + + template + class BeamSpot_runhistory : public cond::payloadInspector::RunHistoryPlot > { + public: + BeamSpot_runhistory() + : cond::payloadInspector::RunHistoryPlot >( + getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {} + + std::pair getFromPayload(PayloadType& payload) override { + auto ret = std::make_pair(-9999., -9999.); + + switch (my_param) { + case X: + return std::make_pair(payload.GetX(), payload.GetXError()); + case Y: + return std::make_pair(payload.GetY(), payload.GetYError()); + case Z: + return std::make_pair(payload.GetZ(), payload.GetZError()); + case sigmaX: + return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); + case sigmaY: + return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); + case sigmaZ: + return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); + case dxdz: + return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); + case dydz: + return std::make_pair(payload.Getdydz(), payload.GetdydzError()); + case END_OF_TYPES: + return ret; + default: + return ret; + } + } + }; + + /************************************************ + template classes (time history) + *************************************************/ + + template + class BeamSpot_timehistory : public cond::payloadInspector::TimeHistoryPlot > { + public: + BeamSpot_timehistory() + : cond::payloadInspector::TimeHistoryPlot >( + getStringFromParamEnum(my_param) + " vs time", getStringFromParamEnum(my_param)) {} + + std::pair getFromPayload(PayloadType& payload) override { + auto ret = std::make_pair(-9999., -9999.); + + switch (my_param) { + case X: + return std::make_pair(payload.GetX(), payload.GetXError()); + case Y: + return std::make_pair(payload.GetY(), payload.GetYError()); + case Z: + return std::make_pair(payload.GetZ(), payload.GetZError()); + case sigmaX: + return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); + case sigmaY: + return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); + case sigmaZ: + return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); + case dxdz: + return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); + case dydz: + return std::make_pair(payload.Getdydz(), payload.GetdydzError()); + case END_OF_TYPES: + return ret; + default: + return ret; + } + } + }; + + /************************************************ + X-Y correlation plot + *************************************************/ + template + class xyCorrelation : public cond::payloadInspector::ScatterPlot { + public: + xyCorrelation() : cond::payloadInspector::ScatterPlot("BeamSpot x vs y", "x", "y") {} + + std::tuple getFromPayload(PayloadType& payload) override { + return std::make_tuple(payload.GetX(), payload.GetY()); + } + }; + + /************************************************ + Display of Beam Spot parameters + *************************************************/ + template + class DisplayParameters : public cond::payloadInspector::PlotImage { + public: + DisplayParameters() + : cond::payloadInspector::PlotImage( + "Display of BeamSpot parameters") { + if constexpr (std::is_same_v) { + isOnline_ = true; + } else { + isOnline_ = false; + } + } + + bool fill() override { + auto tag = cond::payloadInspector::PlotBase::getTag<0>(); + auto tagname = tag.name; + auto iov = tag.iovs.front(); + + m_payload = this->fetchPayload(std::get<1>(iov)); + + TCanvas canvas("Beam Spot Parameters Summary", "BeamSpot Parameters summary", isOnline_ ? 1500 : 1000, 1000); + if (isOnline_) { + canvas.Divide(2, 1); + } + canvas.cd(1); + + canvas.cd(1)->SetTopMargin(0.05); + canvas.cd(1)->SetBottomMargin(0.06); + canvas.cd(1)->SetLeftMargin(0.15); + canvas.cd(1)->SetRightMargin(0.03); + canvas.cd(1)->Modified(); + canvas.cd(1)->SetGrid(); + + auto h2_BSParameters = std::unique_ptr(new TH2F("Parameters", "", 2, 0.0, 2.0, 8, 0, 8.)); + h2_BSParameters->SetStats(false); + + std::function cutFunctor = [this](parameters my_param, bool isError) { + double ret(-999.); + if (!isError) { + switch (my_param) { + case X: + return m_payload->GetX(); + case Y: + return m_payload->GetY(); + case Z: + return m_payload->GetZ(); + case sigmaX: + return m_payload->GetBeamWidthX(); + case sigmaY: + return m_payload->GetBeamWidthY(); + case sigmaZ: + return m_payload->GetSigmaZ(); + case dxdz: + return m_payload->Getdxdz(); + case dydz: + return m_payload->Getdydz(); + case END_OF_TYPES: + return ret; + default: + return ret; + } + } else { + switch (my_param) { + case X: + return m_payload->GetXError(); + case Y: + return m_payload->GetYError(); + case Z: + return m_payload->GetZError(); + case sigmaX: + return m_payload->GetBeamWidthXError(); + case sigmaY: + return m_payload->GetBeamWidthYError(); + case sigmaZ: + return m_payload->GetSigmaZError(); + case dxdz: + return m_payload->GetdxdzError(); + case dydz: + return m_payload->GetdydzError(); + case END_OF_TYPES: + return ret; + default: + return ret; + } + } + }; + + h2_BSParameters->GetXaxis()->SetBinLabel(1, "Value"); + h2_BSParameters->GetXaxis()->SetBinLabel(2, "Error"); + + unsigned int yBin = 8; + for (int foo = parameters::X; foo <= parameters::dydz; foo++) { + parameters param = static_cast(foo); + std::string theLabel = getStringFromTypeEnum(param); + h2_BSParameters->GetYaxis()->SetBinLabel(yBin, theLabel.c_str()); + h2_BSParameters->SetBinContent(1, yBin, cutFunctor(param, false)); + h2_BSParameters->SetBinContent(2, yBin, cutFunctor(param, true)); + yBin--; + } + + h2_BSParameters->GetXaxis()->LabelsOption("h"); + h2_BSParameters->GetYaxis()->SetLabelSize(0.05); + h2_BSParameters->GetXaxis()->SetLabelSize(0.05); + h2_BSParameters->SetMarkerSize(1.5); + h2_BSParameters->Draw("TEXT"); + + auto ltx = TLatex(); + ltx.SetTextFont(62); + if (isOnline_) { + ltx.SetTextSize(0.040); + } else { + ltx.SetTextSize(0.032); + } + ltx.SetTextAlign(11); + + auto runLS = BeamSpotPI::unpack(std::get<0>(iov)); + + ltx.DrawLatexNDC( + gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + (tagname + " IOV: #color[4]{" + std::to_string(runLS.first) + "," + std::to_string(runLS.second) + "}") + .c_str()); + + if (isOnline_) { + canvas.cd(2); + canvas.cd(2)->SetTopMargin(0.05); + canvas.cd(2)->SetBottomMargin(0.06); + canvas.cd(2)->SetLeftMargin(0.15); + canvas.cd(2)->SetRightMargin(0.03); + canvas.cd(2)->Modified(); + canvas.cd(2)->SetGrid(); + + auto extras = fillTheExtraHistogram(); + if (extras) { + for (int bin = 1; bin <= extras->GetNbinsY(); bin++) { + edm::LogVerbatim("BeamSpotPayloadInspectorHelper") + << extras->GetYaxis()->GetBinLabel(bin) << ": " << extras->GetBinContent(1, bin) << "\n"; + } + } + extras->Draw("TEXT"); + + ltx.DrawLatexNDC( + gPad->GetLeftMargin(), + 1 - gPad->GetTopMargin() + 0.01, + (tagname + " IOV: #color[4]{" + std::to_string(runLS.first) + "," + std::to_string(runLS.second) + "}") + .c_str()); + + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + } else { + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + } + } + + public: + virtual std::shared_ptr fillTheExtraHistogram() const { return nullptr; } + + protected: + bool isOnline_; + std::shared_ptr m_payload; + + /************************************************/ + virtual std::string getStringFromTypeEnum(const parameters& parameter) const { + switch (parameter) { + case X: + return "X [cm]"; + case Y: + return "Y [cm]"; + case Z: + return "Z [cm]"; + case sigmaX: + return "#sigma_{X} [cm]"; + case sigmaY: + return "#sigma_{Y} [cm]"; + case sigmaZ: + return "#sigma_{Z} [cm]"; + case dxdz: + return "#frac{dX}{dZ} [rad]"; + case dydz: + return "#frac{dY}{dZ} [rad]"; + default: + return "should never be here"; + } + } + }; +} // namespace BeamSpotPI + +#endif diff --git a/CondCore/BeamSpotPlugins/plugins/BeamSpotOnline_PayloadInspector.cc b/CondCore/BeamSpotPlugins/plugins/BeamSpotOnline_PayloadInspector.cc new file mode 100644 index 0000000000000..6a5a087f2b0a0 --- /dev/null +++ b/CondCore/BeamSpotPlugins/plugins/BeamSpotOnline_PayloadInspector.cc @@ -0,0 +1,181 @@ +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h" +#include "CondFormats/BeamSpotObjects/interface/BeamSpotOnlineObjects.h" + +#include + +namespace { + + using namespace BeamSpotPI; + + /************************************************ + history plots + *************************************************/ + typedef BeamSpot_history BeamSpotOnline_HistoryX; + typedef BeamSpot_history BeamSpotOnline_HistoryY; + typedef BeamSpot_history BeamSpotOnline_HistoryZ; + typedef BeamSpot_history BeamSpotOnline_HistorySigmaX; + typedef BeamSpot_history BeamSpotOnline_HistorySigmaY; + typedef BeamSpot_history BeamSpotOnline_HistorySigmaZ; + typedef BeamSpot_history BeamSpotOnline_HistorydXdZ; + typedef BeamSpot_history BeamSpotOnline_HistorydYdZ; + + /************************************************ + run history plots + *************************************************/ + + typedef BeamSpot_runhistory BeamSpotOnline_RunHistoryX; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistoryY; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistoryZ; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistorySigmaX; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistorySigmaY; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistorySigmaZ; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistorydXdZ; + typedef BeamSpot_runhistory BeamSpotOnline_RunHistorydYdZ; + + /************************************************ + time history plots + *************************************************/ + + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistoryX; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistoryY; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistoryZ; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistorySigmaX; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistorySigmaY; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistorySigmaZ; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistorydXdZ; + typedef BeamSpot_timehistory BeamSpotOnline_TimeHistorydYdZ; + + /************************************************ + X-Y correlation plot + *************************************************/ + + typedef xyCorrelation BeamSpotOnline_xy; + + /************************************************ + Display of Beam Spot parameters + *************************************************/ + + class BeamSpotOnlineParameters : public DisplayParameters { + public: + std::shared_ptr fillTheExtraHistogram() const override { + gStyle->SetHistMinimumZero(); + auto h2_ExtraBSParameters = std::make_shared("ExtraParameters", "", 1, 0.0, 1.0, 6, 0, 6.); + h2_ExtraBSParameters->SetStats(false); + + std::function mycutFunctor = [this](parameters my_param) { + int ret(-999.); + switch (my_param) { + case lastLumi: + return this->m_payload->GetLastAnalyzedLumi(); + case lastRun: + return this->m_payload->GetLastAnalyzedRun(); + case lastFill: + return this->m_payload->GetLastAnalyzedFill(); + case nTracks: + return this->m_payload->GetNumTracks(); + case nPVs: + return this->m_payload->GetNumPVs(); + case END_OF_TYPES: + return ret; + default: + return ret; + } + }; + + unsigned int yBin = 6; + for (int foo = parameters::lastLumi; foo != parameters::END_OF_TYPES; foo++) { + parameters param = static_cast(foo); + std::string theLabel = this->getStringFromTypeEnum(param); + h2_ExtraBSParameters->GetYaxis()->SetBinLabel(yBin, theLabel.c_str()); + + edm::LogInfo("BeamSpotOnline_PayloadInspector") + << theLabel.c_str() << " : " << mycutFunctor(param) << std::endl; + + if (param == BeamSpotPI::creationTime) { + h2_ExtraBSParameters->SetBinContent(1, yBin, m_payload->GetCreationTime()); + } else { + h2_ExtraBSParameters->SetBinContent(1, yBin, mycutFunctor(param)); + } + + yBin--; + } + + h2_ExtraBSParameters->GetYaxis()->SetLabelSize(0.05); + h2_ExtraBSParameters->GetXaxis()->SetLabelSize(0.05); + h2_ExtraBSParameters->GetXaxis()->SetBinLabel(1, "Value"); + h2_ExtraBSParameters->SetMarkerSize(2.); + + return h2_ExtraBSParameters; + } + + protected: + /************************************************/ + std::string getStringFromTypeEnum(const parameters& parameter) const override { + switch (parameter) { + case X: + return "X [cm]"; + case Y: + return "Y [cm]"; + case Z: + return "Z [cm]"; + case sigmaX: + return "#sigma_{X} [cm]"; + case sigmaY: + return "#sigma_{Y} [cm]"; + case sigmaZ: + return "#sigma_{Z} [cm]"; + case dxdz: + return "#frac{dX}{dZ} [rad]"; + case dydz: + return "#frac{dY}{dZ} [rad]"; + case lastLumi: + return "last LS"; + case lastRun: + return "last Run"; + case lastFill: + return "last Fill"; + case nTracks: + return "# tracks"; + case nPVs: + return "# PVs"; + case creationTime: + return "time"; + default: + return "should never be here"; + } + } + }; + +} // namespace + +PAYLOAD_INSPECTOR_MODULE(BeamSpotOnline) { + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_xy); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnlineParameters); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistoryX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistoryY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistoryZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistorySigmaX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistorySigmaY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistorySigmaZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistorydXdZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_HistorydYdZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistoryX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistoryY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistoryZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistorySigmaX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistorySigmaY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistorySigmaZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistorydXdZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_RunHistorydYdZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistoryX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistoryY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistoryZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistorySigmaX); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistorySigmaY); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistorySigmaZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistorydXdZ); + PAYLOAD_INSPECTOR_CLASS(BeamSpotOnline_TimeHistorydYdZ); +} diff --git a/CondCore/BeamSpotPlugins/plugins/BeamSpot_PayloadInspector.cc b/CondCore/BeamSpotPlugins/plugins/BeamSpot_PayloadInspector.cc index b15c4eb392a3e..9b51b195f3994 100644 --- a/CondCore/BeamSpotPlugins/plugins/BeamSpot_PayloadInspector.cc +++ b/CondCore/BeamSpotPlugins/plugins/BeamSpot_PayloadInspector.cc @@ -2,40 +2,12 @@ #include "CondCore/Utilities/interface/PayloadInspector.h" #include "CondCore/CondDB/interface/Time.h" +#include "CondCore/BeamSpotPlugins/interface/BeamSpotPayloadInspectorHelper.h" #include "CondFormats/BeamSpotObjects/interface/BeamSpotObjects.h" -#include -#include -#include "TCanvas.h" -#include "TH2F.h" - namespace { - enum parameters { X, Y, Z, sigmaX, sigmaY, sigmaZ, dxdz, dydz, END_OF_TYPES }; - - /************************************************/ - std::string getStringFromParamEnum(const parameters& parameter) { - switch (parameter) { - case X: - return "X"; - case Y: - return "Y"; - case Z: - return "Z"; - case sigmaX: - return "sigmaX"; - case sigmaY: - return "sigmaY"; - case sigmaZ: - return "sigmaZ"; - case dxdz: - return "dx/dz"; - case dydz: - return "dy/dz"; - default: - return "should never be here"; - } - } + using namespace BeamSpotPI; class BeamSpot_hx : public cond::payloadInspector::HistoryPlot > { public: @@ -77,292 +49,54 @@ namespace { }; /************************************************ - template classes (history) + X-Y correlation plot *************************************************/ - template - class BeamSpot_history : public cond::payloadInspector::HistoryPlot > { - public: - BeamSpot_history() - : cond::payloadInspector::HistoryPlot >( - getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {} - - std::pair getFromPayload(BeamSpotObjects& payload) override { - auto ret = std::make_pair(-9999., -9999.); - - switch (my_param) { - case X: - return std::make_pair(payload.GetX(), payload.GetXError()); - case Y: - return std::make_pair(payload.GetY(), payload.GetYError()); - case Z: - return std::make_pair(payload.GetZ(), payload.GetZError()); - case sigmaX: - return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); - case sigmaY: - return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); - case sigmaZ: - return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); - case dxdz: - return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); - case dydz: - return std::make_pair(payload.Getdydz(), payload.GetdydzError()); - case END_OF_TYPES: - return ret; - default: - return ret; - } - } - }; - - typedef BeamSpot_history BeamSpot_HistoryX; - typedef BeamSpot_history BeamSpot_HistoryY; - typedef BeamSpot_history BeamSpot_HistoryZ; - typedef BeamSpot_history BeamSpot_HistorySigmaX; - typedef BeamSpot_history BeamSpot_HistorySigmaY; - typedef BeamSpot_history BeamSpot_HistorySigmaZ; - typedef BeamSpot_history BeamSpot_HistorydXdZ; - typedef BeamSpot_history BeamSpot_HistorydYdZ; + typedef xyCorrelation BeamSpot_xy; /************************************************ - template classes (run history) + history plots *************************************************/ - - template - class BeamSpot_runhistory - : public cond::payloadInspector::RunHistoryPlot > { - public: - BeamSpot_runhistory() - : cond::payloadInspector::RunHistoryPlot >( - getStringFromParamEnum(my_param) + " vs run number", getStringFromParamEnum(my_param)) {} - - std::pair getFromPayload(BeamSpotObjects& payload) override { - auto ret = std::make_pair(-9999., -9999.); - - switch (my_param) { - case X: - return std::make_pair(payload.GetX(), payload.GetXError()); - case Y: - return std::make_pair(payload.GetY(), payload.GetYError()); - case Z: - return std::make_pair(payload.GetZ(), payload.GetZError()); - case sigmaX: - return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); - case sigmaY: - return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); - case sigmaZ: - return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); - case dxdz: - return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); - case dydz: - return std::make_pair(payload.Getdydz(), payload.GetdydzError()); - case END_OF_TYPES: - return ret; - default: - return ret; - } - } - }; - - typedef BeamSpot_runhistory BeamSpot_RunHistoryX; - typedef BeamSpot_runhistory BeamSpot_RunHistoryY; - typedef BeamSpot_runhistory BeamSpot_RunHistoryZ; - typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaX; - typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaY; - typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaZ; - typedef BeamSpot_runhistory BeamSpot_RunHistorydXdZ; - typedef BeamSpot_runhistory BeamSpot_RunHistorydYdZ; + typedef BeamSpot_history BeamSpot_HistoryX; + typedef BeamSpot_history BeamSpot_HistoryY; + typedef BeamSpot_history BeamSpot_HistoryZ; + typedef BeamSpot_history BeamSpot_HistorySigmaX; + typedef BeamSpot_history BeamSpot_HistorySigmaY; + typedef BeamSpot_history BeamSpot_HistorySigmaZ; + typedef BeamSpot_history BeamSpot_HistorydXdZ; + typedef BeamSpot_history BeamSpot_HistorydYdZ; /************************************************ - template classes (time history) + run history plots *************************************************/ - template - class BeamSpot_timehistory - : public cond::payloadInspector::TimeHistoryPlot > { - public: - BeamSpot_timehistory() - : cond::payloadInspector::TimeHistoryPlot >( - getStringFromParamEnum(my_param) + " vs time", getStringFromParamEnum(my_param)) {} - - std::pair getFromPayload(BeamSpotObjects& payload) override { - auto ret = std::make_pair(-9999., -9999.); - - switch (my_param) { - case X: - return std::make_pair(payload.GetX(), payload.GetXError()); - case Y: - return std::make_pair(payload.GetY(), payload.GetYError()); - case Z: - return std::make_pair(payload.GetZ(), payload.GetZError()); - case sigmaX: - return std::make_pair(payload.GetBeamWidthX(), payload.GetBeamWidthXError()); - case sigmaY: - return std::make_pair(payload.GetBeamWidthY(), payload.GetBeamWidthYError()); - case sigmaZ: - return std::make_pair(payload.GetSigmaZ(), payload.GetSigmaZError()); - case dxdz: - return std::make_pair(payload.Getdxdz(), payload.GetdxdzError()); - case dydz: - return std::make_pair(payload.Getdydz(), payload.GetdydzError()); - case END_OF_TYPES: - return ret; - default: - return ret; - } - } - }; - - typedef BeamSpot_timehistory BeamSpot_TimeHistoryX; - typedef BeamSpot_timehistory BeamSpot_TimeHistoryY; - typedef BeamSpot_timehistory BeamSpot_TimeHistoryZ; - typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaX; - typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaY; - typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaZ; - typedef BeamSpot_timehistory BeamSpot_TimeHistorydXdZ; - typedef BeamSpot_timehistory BeamSpot_TimeHistorydYdZ; + typedef BeamSpot_runhistory BeamSpot_RunHistoryX; + typedef BeamSpot_runhistory BeamSpot_RunHistoryY; + typedef BeamSpot_runhistory BeamSpot_RunHistoryZ; + typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaX; + typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaY; + typedef BeamSpot_runhistory BeamSpot_RunHistorySigmaZ; + typedef BeamSpot_runhistory BeamSpot_RunHistorydXdZ; + typedef BeamSpot_runhistory BeamSpot_RunHistorydYdZ; /************************************************ - X-Y correlation plot + time history plots *************************************************/ - class BeamSpot_xy : public cond::payloadInspector::ScatterPlot { - public: - BeamSpot_xy() : cond::payloadInspector::ScatterPlot("BeamSpot x vs y", "x", "y") {} - std::tuple getFromPayload(BeamSpotObjects& payload) override { - return std::make_tuple(payload.GetX(), payload.GetY()); - } - }; + typedef BeamSpot_timehistory BeamSpot_TimeHistoryX; + typedef BeamSpot_timehistory BeamSpot_TimeHistoryY; + typedef BeamSpot_timehistory BeamSpot_TimeHistoryZ; + typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaX; + typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaY; + typedef BeamSpot_timehistory BeamSpot_TimeHistorySigmaZ; + typedef BeamSpot_timehistory BeamSpot_TimeHistorydXdZ; + typedef BeamSpot_timehistory BeamSpot_TimeHistorydYdZ; /************************************************ Display of Beam Spot parameters *************************************************/ - class BeamSpotParameters : public cond::payloadInspector::PlotImage { - public: - BeamSpotParameters() : cond::payloadInspector::PlotImage("Display of BeamSpot parameters") { - setSingleIov(true); - } - - bool fill(const std::vector >& iovs) override { - auto iov = iovs.front(); - std::shared_ptr payload = fetchPayload(std::get<1>(iov)); - - TCanvas canvas("Beam Spot Parameters Summary", "BeamSpot Parameters summary", 1000, 1000); - canvas.cd(); - - canvas.SetTopMargin(0.07); - canvas.SetBottomMargin(0.06); - canvas.SetLeftMargin(0.15); - canvas.SetRightMargin(0.03); - canvas.Modified(); - canvas.SetGrid(); - - auto h2_BSParameters = - std::unique_ptr(new TH2F("Parameters", "BeamSpot parameters summary", 2, 0.0, 2.0, 8, 0, 8.)); - h2_BSParameters->SetStats(false); - std::function cutFunctor = [&payload](parameters my_param, bool isError) { - double ret(-999.); - if (!isError) { - switch (my_param) { - case X: - return payload->GetX(); - case Y: - return payload->GetY(); - case Z: - return payload->GetZ(); - case sigmaX: - return payload->GetBeamWidthX(); - case sigmaY: - return payload->GetBeamWidthY(); - case sigmaZ: - return payload->GetSigmaZ(); - case dxdz: - return payload->Getdxdz(); - case dydz: - return payload->Getdydz(); - case END_OF_TYPES: - return ret; - default: - return ret; - } - } else { - switch (my_param) { - case X: - return payload->GetXError(); - case Y: - return payload->GetYError(); - case Z: - return payload->GetZError(); - case sigmaX: - return payload->GetBeamWidthXError(); - case sigmaY: - return payload->GetBeamWidthYError(); - case sigmaZ: - return payload->GetSigmaZError(); - case dxdz: - return payload->GetdxdzError(); - case dydz: - return payload->GetdydzError(); - case END_OF_TYPES: - return ret; - default: - return ret; - } - } - }; - - h2_BSParameters->GetXaxis()->SetBinLabel(1, "Value"); - h2_BSParameters->GetXaxis()->SetBinLabel(2, "Error"); - - unsigned int yBin = 8; - for (int foo = parameters::X; foo != parameters::END_OF_TYPES; foo++) { - parameters param = static_cast(foo); - std::string theLabel = getStringFromTypeEnum(param); - h2_BSParameters->GetYaxis()->SetBinLabel(yBin, theLabel.c_str()); - h2_BSParameters->SetBinContent(1, yBin, cutFunctor(param, false)); - h2_BSParameters->SetBinContent(2, yBin, cutFunctor(param, true)); - yBin--; - } - - h2_BSParameters->GetXaxis()->LabelsOption("h"); - - h2_BSParameters->GetYaxis()->SetLabelSize(0.05); - h2_BSParameters->GetXaxis()->SetLabelSize(0.05); - - h2_BSParameters->SetMarkerSize(1.5); - h2_BSParameters->Draw("TEXT"); - - std::string fileName(m_imageFileName); - canvas.SaveAs(fileName.c_str()); - - return true; - } - - /************************************************/ - std::string getStringFromTypeEnum(const parameters& parameter) { - switch (parameter) { - case X: - return "X [cm]"; - case Y: - return "Y [cm]"; - case Z: - return "Z [cm]"; - case sigmaX: - return "#sigma_{X} [cm]"; - case sigmaY: - return "#sigma_{Y} [cm]"; - case sigmaZ: - return "#sigma_{Z} [cm]"; - case dxdz: - return "#frac{dX}{dZ} [rad]"; - case dydz: - return "#frac{dY}{dZ} [rad]"; - default: - return "should never be here"; - } - } - }; + typedef DisplayParameters BeamSpotParameters; } // namespace diff --git a/CondCore/BeamSpotPlugins/plugins/BuildFile.xml b/CondCore/BeamSpotPlugins/plugins/BuildFile.xml index 28d0ec562aee8..18bde71a5289c 100644 --- a/CondCore/BeamSpotPlugins/plugins/BuildFile.xml +++ b/CondCore/BeamSpotPlugins/plugins/BuildFile.xml @@ -4,3 +4,10 @@ + + + + + + + diff --git a/CondCore/BeamSpotPlugins/test/BuildFile.xml b/CondCore/BeamSpotPlugins/test/BuildFile.xml new file mode 100644 index 0000000000000..db86ee4a212c7 --- /dev/null +++ b/CondCore/BeamSpotPlugins/test/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.cpp b/CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.cpp new file mode 100644 index 0000000000000..6fc591f7a4be5 --- /dev/null +++ b/CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.cpp @@ -0,0 +1,49 @@ +#include +#include +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/BeamSpotPlugins/plugins/BeamSpot_PayloadInspector.cc" +#include "CondCore/BeamSpotPlugins/plugins/BeamSpotOnline_PayloadInspector.cc" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginManager.h" +#include "FWCore/PluginManager/interface/standard.h" +#include "FWCore/PluginManager/interface/SharedLibrary.h" +#include "FWCore/ServiceRegistry/interface/ServiceRegistry.h" + +int main(int argc, char** argv) { + Py_Initialize(); + + edmplugin::PluginManager::Config config; + edmplugin::PluginManager::configure(edmplugin::standard::config()); + + std::vector psets; + edm::ParameterSet pSet; + pSet.addParameter("@service_type", std::string("SiteLocalConfigService")); + psets.push_back(pSet); + edm::ServiceToken servToken(edm::ServiceRegistry::createSet(psets)); + edm::ServiceRegistry::Operate operate(servToken); + + std::string connectionString("frontier://FrontierProd/CMS_CONDITIONS"); + + // BeamSpot + + std::string tag = "BeamSpotObjects_PCL_byLumi_v0_prompt"; + cond::Time_t start = boost::lexical_cast(1406876667347162); + //cond::Time_t end = boost::lexical_cast(1406876667347162); + + edm::LogPrint("testBeamSpotPayloadInspector") << "## Exercising BeamSpot plots " << std::endl; + + BeamSpotParameters histoParameters; + histoParameters.process(connectionString, PI::mk_input(tag, start, start)); + edm::LogPrint("testBeamSpotPayloadInspector") << histoParameters.data() << std::endl; + + tag = "BeamSpotOnlineTestLegacy"; + start = boost::lexical_cast(1443392479297557); + + edm::LogPrint("testBeamSpotPayloadInspector") << "## Exercising BeamSpotOnline plots " << std::endl; + + BeamSpotOnlineParameters histoOnlineParameters; + histoOnlineParameters.process(connectionString, PI::mk_input(tag, start, start)); + edm::LogPrint("testBeamSpotPayloadInspector") << histoOnlineParameters.data() << std::endl; + + Py_Finalize(); +} diff --git a/CondCore/BeamSpotPlugins/test/testBeamsSpotPayloadInspector.sh b/CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.sh similarity index 100% rename from CondCore/BeamSpotPlugins/test/testBeamsSpotPayloadInspector.sh rename to CondCore/BeamSpotPlugins/test/testBeamSpotPayloadInspector.sh