Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate DQMEDAnalyzers from stream to one modules #22218

Merged
merged 2 commits into from Feb 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
127 changes: 55 additions & 72 deletions DQMServices/Core/interface/DQMEDAnalyzer.h
@@ -1,80 +1,63 @@
#ifndef CORE_DQMED_ANALYZER_H
# define CORE_DQMED_ANALYZER_H
#ifndef DQMServices_Core_DQMEDAnalyzer_h
#define DQMServices_Core_DQMEDAnalyzer_h

//<<<<<< INCLUDES >>>>>>
#include "FWCore/Framework/interface/stream/EDAnalyzer.h"
#include "FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h"
#include "DQMServices/Core/interface/DQMStore.h"
//<<<<<< PUBLIC DEFINES >>>>>>
//<<<<<< PUBLIC CONSTANTS >>>>>>
//<<<<<< PUBLIC TYPES >>>>>>
//<<<<<< PUBLIC VARIABLES >>>>>>
//<<<<<< PUBLIC FUNCTIONS >>>>>>
//<<<<<< CLASS DECLARATIONS >>>>>>

namespace edm {class StreamID;}

namespace dqmDetails {struct NoCache {};}


class DQMEDAnalyzer
: public edm::stream::EDAnalyzer<edm::RunSummaryCache<dqmDetails::NoCache>,
edm::LuminosityBlockSummaryCache<dqmDetails::NoCache> >
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/LuminosityBlock.h"
#include "FWCore/Framework/interface/Run.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"
#include "FWCore/ServiceRegistry/interface/Service.h"

class DQMEDAnalyzer : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::WatchLuminosityBlocks>
{
public:
DQMEDAnalyzer();
// implicit copy constructor
// implicit assignment operator
// implicit destructor
void beginStream(edm::StreamID id) final;
void beginRun(edm::Run const &, edm::EventSetup const&) final;
static std::shared_ptr<dqmDetails::NoCache> globalBeginRunSummary(edm::Run const&,
edm::EventSetup const&,
RunContext const*);
void endRunSummary(edm::Run const&,
edm::EventSetup const&,
dqmDetails::NoCache*) const final;
static void globalEndRunSummary(edm::Run const&,
edm::EventSetup const&,
RunContext const*,
dqmDetails::NoCache*);
static std::shared_ptr<dqmDetails::NoCache> globalBeginLuminosityBlockSummary(edm::LuminosityBlock const&,
edm::EventSetup const&,
LuminosityBlockContext const*);
void endLuminosityBlockSummary(edm::LuminosityBlock const&,
edm::EventSetup const&,
dqmDetails::NoCache*) const final;
static void globalEndLuminosityBlockSummary(edm::LuminosityBlock const&,
edm::EventSetup const&,
LuminosityBlockContext const*,
dqmDetails::NoCache*);
uint32_t streamId() const {return stream_id_;}
DQMEDAnalyzer() = default;
~DQMEDAnalyzer() override = default;
DQMEDAnalyzer(DQMEDAnalyzer const&) = delete;
DQMEDAnalyzer(DQMEDAnalyzer &&) = delete;

void beginRun(edm::Run const& run, edm::EventSetup const& setup) final
{
dqmBeginRun(run, setup);
edm::Service<DQMStore>()->bookTransaction(
[this, &run, &setup](DQMStore::IBooker & booker)
{
booker.cd();
this->bookHistograms(booker, run, setup);
},
run.run(),
run.moduleCallingContext()->moduleDescription()->id());
}

void endRun(edm::Run const& run, edm::EventSetup const& setup) override
{ }

void beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& setup) override
{ }

void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override
{ }

/* uncomment this after the migration to
* edm::one::EDProducer<edm::Accumulator,
* edm::one::WatchLuminosityBlocks,
* edm::EndLuminosityBlockProducer,
* edm::one::WatchRuns,
* edm::EndRunProducer>
*
void endLuminosityBlockProduce(edm::LuminosityBlock & lumi, edm::EventSetup const& setup) final
{
edm::Service<DQMStore>()->cloneLumiHistograms(
lumi.run(),
lumi.luminosityBlock(),
lumi.moduleCallingContext()->moduleDescription()->id());
}
*/

virtual void dqmBeginRun(edm::Run const&, edm::EventSetup const&) {}
virtual void bookHistograms(DQMStore::IBooker &i, edm::Run const&, edm::EventSetup const&) = 0;

private:
uint32_t stream_id_;
};

//<<<<<< INLINE PUBLIC FUNCTIONS >>>>>>
//<<<<<< INLINE MEMBER FUNCTIONS >>>>>>

//############################## ONLY NEEDED IN THE TRANSITION PERIOD ################################
//here the thread_unsafe (simplified) carbon copy of the DQMEDAnalyzer

#include "FWCore/Framework/interface/EDAnalyzer.h"

namespace thread_unsafe {
class DQMEDAnalyzer: public edm::EDAnalyzer
{
public:
DQMEDAnalyzer();
void beginRun(edm::Run const &, edm::EventSetup const&) final;
virtual void dqmBeginRun(edm::Run const&, edm::EventSetup const&) {}
virtual void bookHistograms(DQMStore::IBooker &i, edm::Run const&, edm::EventSetup const&) = 0;

private:
};
} //thread_unsafe namespace

#endif // CORE_DQMED_ANALYZER_H
#endif // DQMServices_Core_DQMEDAnalyzer_h
38 changes: 9 additions & 29 deletions DQMServices/Core/interface/DQMStore.h
Expand Up @@ -352,27 +352,18 @@ class DQMStore
// into the DQMStore via a public API. The central mutex is acquired
// *before* invoking and automatically released upon returns.
template <typename iFunc>
void bookTransaction(iFunc f,
uint32_t run,
uint32_t streamId,
uint32_t moduleId) {
void bookTransaction(iFunc f, uint32_t run, uint32_t moduleId) {
std::lock_guard<std::mutex> guard(book_mutex_);
/* If enableMultiThread is not enabled we do not set run_,
streamId_ and moduleId_ to 0, since we rely on their default
initialization in DQMStore constructor. */
/* Set the run number and module id only if multithreading is enabled */
if (enableMultiThread_) {
run_ = run;
streamId_ = streamId;
moduleId_ = moduleId;
}
f(*ibooker_);

/* Initialize to 0 the run_, streamId_ and moduleId_ variables
in case we run in mixed conditions with DQMEDAnalyzers and
legacy modules */
/* Reset the run number and module id only if multithreading is enabled */
if (enableMultiThread_) {
run_ = 0;
streamId_ = 0;
moduleId_ = 0;
}
}
Expand All @@ -382,16 +373,14 @@ class DQMStore
template <typename iFunc>
void bookConcurrentTransaction(iFunc f, uint32_t run) {
std::lock_guard<std::mutex> guard(book_mutex_);
/* Even if enableMultiThread_ is enabled, keep the streamId_
and moduleId_ to 0, since we want to book global histograms. */
/* Set the run_ member only if enableMultiThread is enabled */
if (enableMultiThread_) {
run_ = run;
}
ConcurrentBooker booker(this);
f(booker);

/* Set back to 0 the run_ in case we run in mixed conditions
with DQMEDAnalyzers and legacy modules */
/* Reset the run_ member only if enableMultiThread is enabled */
if (enableMultiThread_) {
run_ = 0;
}
Expand Down Expand Up @@ -691,9 +680,9 @@ class DQMStore
bool mtEnabled() { return enableMultiThread_; };


public:
// -------------------------------------------------------------------------
// ---------------------- Public print methods -----------------------------
public:
void showDirStructure() const;

// ---------------------- Public check options -----------------------------
Expand Down Expand Up @@ -741,7 +730,6 @@ class DQMStore
const std::string &name,
const uint32_t run = 0,
const uint32_t lumi = 0,
const uint32_t streamId = 0,
const uint32_t moduleId = 0) const;

void get_info(const dqmstorepb::ROOTFilePB_Histo &,
Expand All @@ -756,18 +744,11 @@ class DQMStore
uint32_t lumi = 0) const;
std::vector<MonitorElement*> getMatchingContents(const std::string &pattern, lat::Regexp::Syntax syntaxType = lat::Regexp::Wildcard) const;

// Multithread SummaryCache manipulations
void mergeAndResetMEsRunSummaryCache(uint32_t run,
uint32_t streamId,
uint32_t moduleId);
void mergeAndResetMEsLuminositySummaryCache(uint32_t run,
uint32_t lumi,
uint32_t streamId,
uint32_t moduleId);

// lumisection based histograms manipulations
void cloneLumiHistograms(uint32_t run, uint32_t lumi, uint32_t moduleId);
void deleteUnusedLumiHistograms(uint32_t run, uint32_t lumi);
private:

private:
// ---------------- Miscellaneous -----------------------------
void initializeFrom(const edm::ParameterSet&);
void reset();
Expand Down Expand Up @@ -866,7 +847,6 @@ class DQMStore
bool forceResetOnBeginLumi_;
std::string readSelectedDirectory_;
uint32_t run_;
uint32_t streamId_;
uint32_t moduleId_;
std::ofstream * stream_;

Expand Down
24 changes: 24 additions & 0 deletions DQMServices/Core/interface/Standalone.h
@@ -1,10 +1,12 @@
#ifndef DQMSERVICES_CORE_STANDALONE_H
# define DQMSERVICES_CORE_STANDALONE_H
# if !WITHOUT_CMS_FRAMEWORK
# include "DataFormats/Provenance/interface/ModuleDescription.h"
# include "FWCore/MessageLogger/interface/JobReport.h"
# include "FWCore/ParameterSet/interface/ParameterSet.h"
# include "FWCore/ServiceRegistry/interface/ActivityRegistry.h"
# include "FWCore/ServiceRegistry/interface/GlobalContext.h"
# include "FWCore/ServiceRegistry/interface/ModuleCallingContext.h"
# include "FWCore/ServiceRegistry/interface/Service.h"
# include "FWCore/ServiceRegistry/interface/ServiceRegistry.h"
# include "FWCore/ServiceRegistry/interface/SystemBounds.h"
Expand Down Expand Up @@ -98,6 +100,12 @@ namespace edm
template <typename T>
void watchPostGlobalEndLumi(void*, T) {}

template <typename T>
void watchPostModuleGlobalEndLumi(void*, T) {}

template <typename F>
void watchPostModuleGlobalEndLumi(F) {}

PreallocationSignal preallocateSignal_;
};

Expand All @@ -114,6 +122,22 @@ namespace edm
LuminosityBlockID luminosityBlockID() const { return LuminosityBlockID(); }
};

class ModuleDescription
{
public:
unsigned int id() const {return 0;}
};

class ModuleCallingContext
{
public:
ModuleDescription const* moduleDescription() const
{
static ModuleDescription md;
return &md;
}
};

class JobReport
{
public:
Expand Down
109 changes: 0 additions & 109 deletions DQMServices/Core/src/DQMEDAnalyzer.cc

This file was deleted.