File indexing completed on 2024-04-06 12:20:46
0001 #include "FWCore/Framework/interface/Frameworkfwd.h"
0002 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/Framework/interface/Event.h"
0005 #include "FWCore/Framework/interface/EventSetup.h"
0006 #include "FWCore/Framework/interface/MakerMacros.h"
0007 #include "FWCore/ServiceRegistry/interface/Service.h"
0008 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0009 #include "L1Trigger/L1THGCalUtilities/interface/HGCalTriggerNtupleBase.h"
0010
0011 #include "FWCore/Framework/interface/ESHandle.h"
0012
0013 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0014 #include "SimGeneral/HepPDTRecord/interface/PDTRecord.h"
0015 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0016
0017 class HGCalTriggerNtupleManager : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
0018 public:
0019 typedef std::unique_ptr<HGCalTriggerNtupleBase> ntuple_ptr;
0020
0021 public:
0022 explicit HGCalTriggerNtupleManager(const edm::ParameterSet& conf);
0023 ~HGCalTriggerNtupleManager() override = default;
0024 void beginRun(const edm::Run&, const edm::EventSetup&) override;
0025 void endRun(const edm::Run&, const edm::EventSetup&) override {}
0026 void analyze(const edm::Event&, const edm::EventSetup&) override;
0027
0028 private:
0029 std::vector<ntuple_ptr> hgc_ntuples_;
0030 TTree* tree_;
0031
0032 HGCalTriggerNtupleEventSetup ntuple_es_;
0033 const edm::ESGetToken<HepPDT::ParticleDataTable, PDTRecord> pdtToken_;
0034 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magfieldToken_;
0035 const edm::ESGetToken<HGCalTriggerGeometryBase, CaloGeometryRecord> triggerGeomToken_;
0036 };
0037
0038 DEFINE_FWK_MODULE(HGCalTriggerNtupleManager);
0039
0040 HGCalTriggerNtupleManager::HGCalTriggerNtupleManager(const edm::ParameterSet& conf)
0041 : pdtToken_(esConsumes<HepPDT::ParticleDataTable, PDTRecord, edm::Transition::BeginRun>()),
0042 magfieldToken_(esConsumes<MagneticField, IdealMagneticFieldRecord, edm::Transition::BeginRun>()),
0043 triggerGeomToken_(esConsumes<HGCalTriggerGeometryBase, CaloGeometryRecord, edm::Transition::BeginRun>()) {
0044 usesResource("TFileService");
0045 edm::Service<TFileService> file_service;
0046 tree_ = file_service->make<TTree>("HGCalTriggerNtuple", "HGCalTriggerNtuple");
0047 const std::vector<edm::ParameterSet>& ntuple_cfgs = conf.getParameterSetVector("Ntuples");
0048 for (const auto& ntuple_cfg : ntuple_cfgs) {
0049 const std::string& ntuple_name = ntuple_cfg.getParameter<std::string>("NtupleName");
0050 hgc_ntuples_.emplace_back(HGCalTriggerNtupleFactory::get()->create(ntuple_name, ntuple_cfg));
0051 hgc_ntuples_.back()->initialize(*tree_, ntuple_cfg, consumesCollector());
0052 }
0053 }
0054
0055 void HGCalTriggerNtupleManager::beginRun(const edm::Run& run, const edm::EventSetup& es) {
0056 ntuple_es_.pdt = es.getHandle(pdtToken_);
0057 ntuple_es_.magfield = es.getHandle(magfieldToken_);
0058 ntuple_es_.geometry = es.getHandle(triggerGeomToken_);
0059 }
0060
0061 void HGCalTriggerNtupleManager::analyze(const edm::Event& e, const edm::EventSetup& es) {
0062 for (auto& hgc_ntuple : hgc_ntuples_) {
0063 if (hgc_ntuple->accessEventSetup()) {
0064 hgc_ntuple->fill(e, es);
0065 } else {
0066 hgc_ntuple->fill(e, ntuple_es_);
0067 }
0068 }
0069
0070 tree_->Fill();
0071 }