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

Add a way to access other analyses from analyzers #62

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion interface/Analyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,22 @@
#include <map>

class CategoryManager;
class AnalyzersManager;
class ExTreeMaker;

namespace Framework {

class Analyzer {
friend class ::ExTreeMaker;

public:

Analyzer(const std::string& name, const ROOT::TreeGroup& tree_, const edm::ParameterSet& config):
m_name(name),
tree(tree_) {
}

virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const CategoryManager&) = 0;
virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const AnalyzersManager&, const CategoryManager&) = 0;
virtual void doConsumes(const edm::ParameterSet&, edm::ConsumesCollector&& collector) {}

virtual void registerCategories(CategoryManager& manager, const edm::ParameterSet& config) {}
Expand All @@ -47,6 +52,17 @@ namespace Framework {
protected:
std::string m_name;
ROOT::TreeGroup tree;

private:
bool hasRun() const {
return m_run;
}

void setRun(bool run) {
m_run = run;
}

bool m_run; //< A flag indicating if the analyzer has already been run for this event
};

}
Expand Down
2 changes: 1 addition & 1 deletion interface/BTagsAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class BTagsAnalyzer: public Framework::Analyzer {
m_discr_name(config.getUntrackedParameter<std::string>("discr_name"))
{ }

virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const CategoryManager&) override;
virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const AnalyzersManager&, const CategoryManager&) override;

BRANCH(indices, std::vector<uint8_t>);

Expand Down
2 changes: 1 addition & 1 deletion interface/DileptonAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class DileptonAnalyzer: public Framework::Analyzer {
m_electron_tight_wp_name = config.getUntrackedParameter<std::string>("electrons_tight_wp_name", "cutBasedElectronID-Spring15-50ns-V1-standalone-tight");
}

virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const CategoryManager&) override;
virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const AnalyzersManager&, const CategoryManager&) override;

virtual void registerCategories(CategoryManager& manager, const edm::ParameterSet&) override;

Expand Down
15 changes: 15 additions & 0 deletions interface/Producer.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@
#include <vector>
#include <map>

class ExTreeMaker;

namespace Framework {

class Producer {
friend class ::ExTreeMaker;

public:
Producer(const std::string& name, const ROOT::TreeGroup& tree_, const edm::ParameterSet& config):
m_name(name),
Expand All @@ -41,6 +45,17 @@ namespace Framework {
protected:
std::string m_name;
ROOT::TreeGroup tree;

private:
bool hasRun() const {
return m_run;
}

void setRun(bool run) {
m_run = run;
}

bool m_run; //< A flag indicating if the analyzer has already been run for this event
};

}
Expand Down
2 changes: 1 addition & 1 deletion interface/TestAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class TestAnalyzer: public Framework::Analyzer {

}

virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const CategoryManager&) override;
virtual void analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager&, const AnalyzersManager&, const CategoryManager&) override;

virtual void registerCategories(CategoryManager& manager, const edm::ParameterSet& config) {
manager.new_category<TwoMuonsCategory>("two_muons", "At least two muons category", config);
Expand Down
6 changes: 5 additions & 1 deletion plugins/TestAnalyzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
#include <cp3_llbb/Framework/interface/GenParticlesProducer.h>
#include <cp3_llbb/Framework/interface/JetsProducer.h>

#include <cp3_llbb/Framework/interface/DileptonAnalyzer.h>

void TestAnalyzer::analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager& producers, const CategoryManager& categories) {

void TestAnalyzer::analyze(const edm::Event&, const edm::EventSetup&, const ProducersManager& producers, const AnalyzersManager& analyzers, const CategoryManager& categories) {

const JetsProducer& jets = producers.get<JetsProducer>("jets");

const DileptonAnalyzer& di = analyzers.get<DileptonAnalyzer>("dilepton");

/*
if (producers.exists("gen_particles")) {
const GenParticlesProducer& gp = dynamic_cast<const GenParticlesProducer&>(producers.get("gen_particles"));
Expand Down
2 changes: 1 addition & 1 deletion src/BTagsAnalyzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include <cp3_llbb/Framework/interface/JetsProducer.h>

void BTagsAnalyzer::analyze(const edm::Event& event, const edm::EventSetup&, const ProducersManager& producers, const CategoryManager& categories) {
void BTagsAnalyzer::analyze(const edm::Event& event, const edm::EventSetup&, const ProducersManager& producers, const AnalyzersManager& analyzers, const CategoryManager& categories) {

const JetsProducer& jets = producers.get<JetsProducer>("jets");

Expand Down
2 changes: 1 addition & 1 deletion src/DileptonAnalyzer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void DileptonAnalyzer::registerCategories(CategoryManager& manager, const edm::P
}
}

void DileptonAnalyzer::analyze(const edm::Event& event, const edm::EventSetup&, const ProducersManager& producers, const CategoryManager& categories) {
void DileptonAnalyzer::analyze(const edm::Event& event, const edm::EventSetup&, const ProducersManager& producers, const AnalyzersManager& analyzers, const CategoryManager& categories) {

// ***** ***** *****
// Get all dilepton objects out of the event
Expand Down
34 changes: 29 additions & 5 deletions src/Framework.cc
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,10 @@ void ExTreeMaker::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
if (! should_continue)
return;

for (auto& producer: m_producers)
for (auto& producer: m_producers) {
producer.second->produce(iEvent, iSetup);
producer.second->setRun(true);
}

should_continue = m_categories->evaluate_pre_analyzers(*m_producers_manager);
if (! should_continue) {
Expand All @@ -189,15 +191,23 @@ void ExTreeMaker::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
return;
}

for (auto& analyzer: m_analyzers)
analyzer->analyze(iEvent, iSetup, *m_producers_manager, *m_categories);
for (auto& analyzer: m_analyzers) {
analyzer->analyze(iEvent, iSetup, *m_producers_manager, *m_analyzers_manager, *m_categories);
analyzer->setRun(true);
}

if (m_categories->evaluate_post_analyzers(*m_producers_manager, *m_analyzers_manager))
m_wrapper->fill();
else
m_wrapper->reset();

m_categories->reset();

for (auto& analyzer: m_analyzers)
analyzer->setRun(false);

for (auto& producer: m_producers)
producer.second->setRun(false);
}


Expand Down Expand Up @@ -289,7 +299,14 @@ const Framework::Producer& ExTreeMaker::getProducer(const std::string& name) con
throw edm::Exception(edm::errors::NotFound, details.str());
}

return *producer->second;
Framework::Producer& p = *producer->second;
if (! p.hasRun()) {
std::stringstream details;
details << "Producer '" << name << "' has not been run yet for this event. Please check the scheduling of your producers";
throw edm::Exception(edm::errors::NotFound, details.str());
}

return p;
}

bool ExTreeMaker::producerExists(const std::string& name) const {
Expand All @@ -305,7 +322,14 @@ const Framework::Analyzer& ExTreeMaker::getAnalyzer(const std::string& name) con
throw edm::Exception(edm::errors::NotFound, details.str());
}

return *m_analyzers[std::distance(m_analyzers_name.begin(), it)];
Framework::Analyzer& analyzer = *m_analyzers[std::distance(m_analyzers_name.begin(), it)];
if (! analyzer.hasRun()) {
std::stringstream details;
details << "Analyzer '" << name << "' has not been run yet for this event. Please check the scheduling of your analyzers";
throw edm::Exception(edm::errors::NotFound, details.str());
}

return analyzer;
}

bool ExTreeMaker::analyzerExists(const std::string& name) const {
Expand Down