File indexing completed on 2024-04-06 12:32:35
0001 #include <string>
0002 #include <unordered_map>
0003
0004
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "DQMServices/Core/interface/DQMGlobalEDAnalyzer.h"
0007
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/MakerMacros.h"
0010
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012
0013 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
0014 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
0015
0016
0017
0018
0019
0020 struct Histogram_TICLPFValidation {
0021 dqm::reco::MonitorElement* type_;
0022 dqm::reco::MonitorElement* energy_;
0023 dqm::reco::MonitorElement* pt_;
0024 dqm::reco::MonitorElement* eta_;
0025 dqm::reco::MonitorElement* phi_;
0026 dqm::reco::MonitorElement* charge_;
0027 dqm::reco::MonitorElement* vect_sum_pt_;
0028 };
0029
0030 using Histograms_TICLPFValidation = std::unordered_map<int, Histogram_TICLPFValidation>;
0031
0032 class TICLPFValidation : public DQMGlobalEDAnalyzer<Histograms_TICLPFValidation> {
0033 public:
0034 explicit TICLPFValidation(const edm::ParameterSet&);
0035 ~TICLPFValidation() override;
0036
0037 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0038
0039 private:
0040 void bookHistograms(DQMStore::IBooker&,
0041 edm::Run const&,
0042 edm::EventSetup const&,
0043 Histograms_TICLPFValidation&) const override;
0044
0045 void dqmAnalyze(edm::Event const&, edm::EventSetup const&, Histograms_TICLPFValidation const&) const override;
0046
0047
0048 std::string folder_;
0049 edm::EDGetTokenT<reco::PFCandidateCollection> pfCandidates_;
0050 };
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063 TICLPFValidation::TICLPFValidation(const edm::ParameterSet& iConfig)
0064 : folder_(iConfig.getParameter<std::string>("folder")),
0065 pfCandidates_(consumes<reco::PFCandidateCollection>(iConfig.getParameter<edm::InputTag>("ticlPFCandidates"))) {
0066
0067 }
0068
0069 TICLPFValidation::~TICLPFValidation() {
0070
0071
0072 }
0073
0074
0075
0076
0077
0078
0079
0080 void TICLPFValidation::dqmAnalyze(edm::Event const& iEvent,
0081 edm::EventSetup const& iSetup,
0082 Histograms_TICLPFValidation const& histos) const {
0083 using namespace edm;
0084
0085 Handle<reco::PFCandidateCollection> pfCandidatesHandle;
0086 iEvent.getByToken(pfCandidates_, pfCandidatesHandle);
0087 reco::PFCandidateCollection const& pfCandidates = *pfCandidatesHandle;
0088
0089
0090 double ptx_tot = 0.;
0091 double pty_tot = 0.;
0092 for (auto const& pfc : pfCandidates) {
0093 size_t type = pfc.particleId();
0094 ptx_tot += pfc.px();
0095 pty_tot += pfc.py();
0096 histos.at(0).type_->Fill(type);
0097 auto& histo = histos.at(type);
0098 histo.energy_->Fill(pfc.energy());
0099 histo.pt_->Fill(pfc.pt());
0100 histo.eta_->Fill(pfc.eta());
0101 histo.phi_->Fill(pfc.phi());
0102 histo.charge_->Fill(pfc.charge());
0103 }
0104 auto& histo = histos.at(0);
0105 histo.vect_sum_pt_->Fill(std::sqrt(ptx_tot * ptx_tot + pty_tot * pty_tot));
0106 }
0107
0108 void TICLPFValidation::bookHistograms(DQMStore::IBooker& ibook,
0109 edm::Run const& run,
0110 edm::EventSetup const& iSetup,
0111 Histograms_TICLPFValidation& histos) const {
0112 ibook.setCurrentFolder(folder_ + "TICLPFCandidates/");
0113 histos[0].type_ = ibook.book1D("Type", "Type", 10, -0.5, 9.5);
0114 histos[0].vect_sum_pt_ = ibook.book1D("PtVectSum", "PtVectSum", 200, 0., 200.);
0115 for (size_t type = reco::PFCandidate::X; type <= reco::PFCandidate::egamma_HF; type++) {
0116 ibook.setCurrentFolder(folder_ + "TICLPFCandidates/" + std::to_string(type));
0117 auto& histo = histos[type];
0118 histo.energy_ = ibook.book1D("Energy", "Energy", 250, 0., 250.);
0119 histo.pt_ = ibook.book1D("Pt", "Pt", 250, 0., 250.);
0120 histo.eta_ = ibook.book1D("Eta", "Eta", 100, -5., 5.);
0121 histo.phi_ = ibook.book1D("Phi", "Phi", 100, -4., 4.);
0122 histo.charge_ = ibook.book1D("Charge", "Charge", 3, -1.5, 1.5);
0123 }
0124 }
0125
0126
0127 void TICLPFValidation::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0128
0129
0130 edm::ParameterSetDescription desc;
0131 desc.add<std::string>("folder", "HGCAL/");
0132 desc.add<edm::InputTag>("ticlPFCandidates", edm::InputTag("pfTICL"));
0133 descriptions.add("ticlPFValidationDefault", desc);
0134 }
0135
0136
0137 DEFINE_FWK_MODULE(TICLPFValidation);