File indexing completed on 2023-03-17 11:13:00
0001
0002 #include <memory>
0003
0004
0005 #include <fmt/printf.h>
0006
0007
0008 #include <TTree.h>
0009
0010
0011 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0012 #include "CondFormats/DataRecord/interface/L1TUtmTriggerMenuRcd.h"
0013 #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h"
0014 #include "DataFormats/L1TGlobal/interface/GlobalAlgBlk.h"
0015 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0016 #include "FWCore/Framework/interface/ESHandle.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/EventSetup.h"
0019 #include "FWCore/Framework/interface/Frameworkfwd.h"
0020 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0022 #include "FWCore/ServiceRegistry/interface/Service.h"
0023
0024
0025
0026
0027
0028 class L1uGTTreeProducer : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0029 public:
0030 explicit L1uGTTreeProducer(edm::ParameterSet const &);
0031 ~L1uGTTreeProducer() override = default;
0032
0033 private:
0034 void beginJob() override;
0035 void analyze(edm::Event const &, edm::EventSetup const &) override;
0036 void endJob() override;
0037
0038 private:
0039
0040 edm::Service<TFileService> fs_;
0041
0042
0043 GlobalAlgBlk const *results_;
0044
0045
0046 TTree *tree_;
0047
0048
0049 const edm::EDGetTokenT<GlobalAlgBlkBxCollection> ugtToken_;
0050 const edm::ESGetToken<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd> l1GtMenuToken_;
0051
0052
0053 unsigned long long cache_id_;
0054 };
0055
0056 L1uGTTreeProducer::L1uGTTreeProducer(edm::ParameterSet const &config)
0057 : results_(nullptr),
0058 tree_(nullptr),
0059 ugtToken_(consumes<GlobalAlgBlkBxCollection>(config.getParameter<edm::InputTag>("ugtToken"))),
0060 l1GtMenuToken_(esConsumes<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd>()),
0061 cache_id_(0) {
0062 usesResource(TFileService::kSharedResource);
0063
0064 tree_ = fs_->make<TTree>("L1uGTTree", "L1uGTTree");
0065 tree_->Branch("L1uGT", "GlobalAlgBlk", &results_, 32000, 3);
0066 }
0067
0068
0069
0070
0071
0072
0073 void L1uGTTreeProducer::analyze(edm::Event const &event, edm::EventSetup const &setup) {
0074 unsigned long long id = setup.get<L1TUtmTriggerMenuRcd>().cacheIdentifier();
0075 if (id != cache_id_) {
0076 cache_id_ = id;
0077 edm::ESHandle<L1TUtmTriggerMenu> menu;
0078 menu = setup.getHandle(l1GtMenuToken_);
0079
0080 for (auto const &keyval : menu->getAlgorithmMap()) {
0081 std::string const &name = keyval.second.getName();
0082 unsigned int index = keyval.second.getIndex();
0083
0084 tree_->SetAlias(name.c_str(), fmt::sprintf("L1uGT.m_algoDecisionInitial[%d]", index).c_str());
0085 }
0086 }
0087
0088 edm::Handle<GlobalAlgBlkBxCollection> ugt;
0089 event.getByToken(ugtToken_, ugt);
0090 if (ugt.isValid() && ugt.product()->size() != 0) {
0091 results_ = &ugt->at(0, 0);
0092 } else {
0093 edm::LogWarning("MissingProduct")
0094 << "L1uGTTree or L1uGTTestcrateTree GlobalAlgBlkBxCollection not found. Branch will not be filled.\n"
0095 << "Please note that the L1uGTTestcrateTree is not expected to exist in MC, so this warning can be ignored!"
0096 << std::endl;
0097 }
0098
0099 tree_->Fill();
0100 }
0101
0102
0103 void L1uGTTreeProducer::beginJob(void) {}
0104
0105
0106 void L1uGTTreeProducer::endJob() {}
0107
0108
0109 #include "FWCore/Framework/interface/MakerMacros.h"
0110 DEFINE_FWK_MODULE(L1uGTTreeProducer);