Go to the documentation of this file.00001 #include "Validation/RecoParticleFlow/plugins/GenericBenchmarkAnalyzer.h"
00002
00003
00004
00005
00006
00007
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009 #include "FWCore/ServiceRegistry/interface/Service.h"
00010
00011 #include "FWCore/Framework/interface/Event.h"
00012 #include "DataFormats/Common/interface/Handle.h"
00013 #include "FWCore/Framework/interface/ESHandle.h"
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015 #include "FWCore/Utilities/interface/InputTag.h"
00016
00017
00018 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00019 #include "DataFormats/Candidate/interface/Candidate.h"
00020
00021 #include "DQMServices/Core/interface/DQMStore.h"
00022
00023 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00024 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00025
00026 #include <vector>
00027 #include <ostream>
00028 #include <fstream>
00029 #include <iostream>
00030 #include <algorithm>
00031 #include <cmath>
00032 #include <memory>
00033
00034 using namespace reco;
00035 using namespace edm;
00036 using namespace std;
00037
00038 GenericBenchmarkAnalyzer::GenericBenchmarkAnalyzer(const edm::ParameterSet& iConfig)
00039 {
00040
00041 inputTruthLabel_ = iConfig.getParameter<edm::InputTag>("InputTruthLabel");
00042 inputRecoLabel_ = iConfig.getParameter<edm::InputTag>("InputRecoLabel");
00043 outputFile_ = iConfig.getUntrackedParameter<std::string>("OutputFile");
00044 benchmarkLabel_ = iConfig.getParameter<std::string>("BenchmarkLabel");
00045 startFromGen_ = iConfig.getParameter<bool>("StartFromGen");
00046 plotAgainstRecoQuantities_ = iConfig.getParameter<bool>("PlotAgainstRecoQuantities");
00047 onlyTwoJets_ = iConfig.getParameter<bool>("OnlyTwoJets");
00048 recPt_cut = iConfig.getParameter<double>("recPt");
00049 minEta_cut = iConfig.getParameter<double>("minEta");
00050 maxEta_cut = iConfig.getParameter<double>("maxEta");
00051 deltaR_cut = iConfig.getParameter<double>("deltaRMax");
00052
00053 minDeltaEt_ = iConfig.getParameter<double>("minDeltaEt");
00054 maxDeltaEt_ = iConfig.getParameter<double>("maxDeltaEt");
00055 minDeltaPhi_ = iConfig.getParameter<double>("minDeltaPhi");
00056 maxDeltaPhi_ = iConfig.getParameter<double>("maxDeltaPhi");
00057 doMetPlots_ = iConfig.getParameter<bool>("doMetPlots");
00058
00059 if (outputFile_.size() > 0)
00060 edm::LogInfo("OutputInfo") << " ParticleFLow Task histograms will be saved to '" << outputFile_.c_str()<< "'";
00061 else edm::LogInfo("OutputInfo") << " ParticleFlow Task histograms will NOT be saved";
00062
00063 }
00064
00065 GenericBenchmarkAnalyzer::~GenericBenchmarkAnalyzer() { }
00066
00067 void
00068 GenericBenchmarkAnalyzer::beginJob()
00069 {
00070
00071
00072 dbe_ = edm::Service<DQMStore>().operator->();
00073
00074 if (dbe_) {
00075
00076 string path = "PFTask/Benchmarks/" + benchmarkLabel_ + "/";
00077 if (plotAgainstRecoQuantities_) path += "Reco"; else path += "Gen";
00078 dbe_->setCurrentFolder(path.c_str());
00079 setup(dbe_, plotAgainstRecoQuantities_, minDeltaEt_, maxDeltaEt_, minDeltaPhi_, maxDeltaPhi_, doMetPlots_);
00080
00081 }
00082
00083 }
00084
00085 void
00086 GenericBenchmarkAnalyzer::analyze(const edm::Event& iEvent,
00087 const edm::EventSetup& iSetup)
00088 {
00089
00090
00091 typedef edm::View<reco::Candidate> candidateCollection ;
00092 typedef edm::View<reco::Candidate> candidateCollection ;
00093
00094 const candidateCollection *truth_candidates;
00095 const candidateCollection *reco_candidates;
00096
00097
00098
00099
00100
00101 {
00102
00103 Handle<candidateCollection> truth_hnd;
00104 bool isGen = iEvent.getByLabel(inputTruthLabel_, truth_hnd);
00105 if ( !isGen ) {
00106 std::cout << "Warning : no Gen jets in input !" << std::endl;
00107 return;
00108 }
00109
00110 truth_candidates = truth_hnd.product();
00111
00112
00113 Handle<candidateCollection> reco_hnd;
00114 bool isReco = iEvent.getByLabel(inputRecoLabel_, reco_hnd);
00115 if ( !isReco ) {
00116 std::cout << "Warning : no Reco jets in input !" << std::endl;
00117 return;
00118 }
00119 reco_candidates = reco_hnd.product();
00120
00121
00122
00123
00124
00125
00126 }
00127 if (!truth_candidates || !reco_candidates) {
00128
00129 edm::LogInfo("OutputInfo") << " failed to retrieve data required by ParticleFlow Task";
00130 edm::LogInfo("OutputInfo") << " ParticleFlow Task cannot continue...!";
00131 return;
00132
00133 }
00134
00135
00136
00137
00138
00139 fill(reco_candidates,truth_candidates,
00140 startFromGen_, plotAgainstRecoQuantities_,
00141 onlyTwoJets_, recPt_cut, minEta_cut, maxEta_cut, deltaR_cut);
00142 }
00143
00144 void GenericBenchmarkAnalyzer::endJob()
00145 {
00146
00147
00148 if (outputFile_.size() != 0)
00149 dbe_->save(outputFile_);
00150 }