Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:13

0001 // -*- C++ -*-
0002 //
0003 // Package:    L1Trigger/L1Ntuples
0004 // Class:      L1HOTreeProducer
0005 //
0006 
0007 // system include files
0008 #include <memory>
0009 
0010 // framework
0011 #include "FWCore/Framework/interface/Frameworkfwd.h"
0012 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/MakerMacros.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 
0018 // data formats
0019 #include "DataFormats/Common/interface/SortedCollection.h"
0020 #include "DataFormats/HcalDigi/interface/HODataFrame.h"
0021 
0022 // ROOT output stuff
0023 #include "FWCore/ServiceRegistry/interface/Service.h"
0024 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0025 #include "TTree.h"
0026 
0027 #include "L1Trigger/L1TNtuples/interface/L1AnalysisL1HO.h"
0028 
0029 //
0030 // class declaration
0031 //
0032 
0033 class L1HOTreeProducer : public edm::one::EDAnalyzer<edm::one::SharedResources> {
0034 public:
0035   explicit L1HOTreeProducer(const edm::ParameterSet&);
0036   ~L1HOTreeProducer() override = default;
0037 
0038 private:
0039   void beginJob(void) override;
0040   void analyze(const edm::Event&, const edm::EventSetup&) override;
0041   void endJob() override;
0042 
0043 public:
0044   L1Analysis::L1AnalysisL1HO l1HO;
0045   L1Analysis::L1AnalysisL1HODataFormat* l1HOData;
0046 
0047 private:
0048   // output file
0049   edm::Service<TFileService> fs_;
0050 
0051   // tree
0052   TTree* tree_;
0053 
0054   // EDM input tags
0055   const edm::EDGetTokenT<edm::SortedCollection<HODataFrame>> hoDataFrameToken_;
0056 };
0057 
0058 L1HOTreeProducer::L1HOTreeProducer(const edm::ParameterSet& iConfig)
0059     : hoDataFrameToken_(consumes<edm::SortedCollection<HODataFrame>>(
0060           iConfig.getUntrackedParameter<edm::InputTag>("hoDataFrameToken"))) {
0061   l1HOData = l1HO.getData();
0062   usesResource(TFileService::kSharedResource);
0063 
0064   // set up output
0065   tree_ = fs_->make<TTree>("L1HOTree", "L1HOTree");
0066   tree_->Branch("L1HO", "L1Analysis::L1AnalysisL1HODataFormat", &l1HOData, 32000, 3);
0067 }
0068 
0069 //
0070 // member functions
0071 //
0072 
0073 // ------------ method called to for each event  ------------
0074 void L1HOTreeProducer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0075   l1HO.Reset();
0076 
0077   edm::Handle<edm::SortedCollection<HODataFrame>> hoDataFrame;
0078 
0079   iEvent.getByToken(hoDataFrameToken_, hoDataFrame);
0080 
0081   if (hoDataFrame.isValid()) {
0082     l1HO.SetHO(*hoDataFrame);
0083   } else {
0084     edm::LogWarning("MissingProduct") << "HODataFrame not found. Branch will not be filled" << std::endl;
0085   }
0086 
0087   tree_->Fill();
0088 }
0089 
0090 // ------------ method called once each job just before starting event loop  ------------
0091 void L1HOTreeProducer::beginJob(void) {}
0092 
0093 // ------------ method called once each job just after ending the event loop  ------------
0094 void L1HOTreeProducer::endJob() {}
0095 
0096 //define this as a plug-in
0097 DEFINE_FWK_MODULE(L1HOTreeProducer);