Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:58:02

0001 #ifndef PhysicsTools_NanoAOD_NanoAODRNTuples_h
0002 #define PhysicsTools_NanoAOD_NanoAODRNTuples_h
0003 
0004 #include "DataFormats/Provenance/interface/BranchType.h"
0005 #include "DataFormats/Provenance/interface/ParameterSetBlob.h"
0006 #include "DataFormats/Provenance/interface/ParameterSetID.h"
0007 #include "DataFormats/Provenance/interface/ProcessHistoryRegistry.h"
0008 #include "FWCore/Framework/interface/LuminosityBlockForOutput.h"
0009 #include "FWCore/Framework/interface/RunForOutput.h"
0010 #include "FWCore/ParameterSet/interface/Registry.h"
0011 #include "FWCore/Utilities/interface/EDGetToken.h"
0012 
0013 #include "TFile.h"
0014 #include <ROOT/RNTuple.hxx>
0015 using ROOT::Experimental::RCollectionNTupleWriter;
0016 using ROOT::Experimental::RNTupleWriter;
0017 
0018 #include "EventStringOutputFields.h"
0019 #include "RNTupleFieldPtr.h"
0020 #include "SummaryTableOutputFields.h"
0021 #include "TableOutputFields.h"
0022 #include "TriggerOutputFields.h"
0023 
0024 class LumiNTuple {
0025 public:
0026   LumiNTuple() = default;
0027   void fill(const edm::LuminosityBlockID& id, TFile& file);
0028   void finalizeWrite();
0029 
0030 private:
0031   void createFields(const edm::LuminosityBlockID& id, TFile& file);
0032   std::unique_ptr<RNTupleWriter> m_ntuple;
0033   RNTupleFieldPtr<UInt_t> m_run;
0034   RNTupleFieldPtr<UInt_t> m_luminosityBlock;
0035 };
0036 
0037 class RunNTuple {
0038 public:
0039   RunNTuple() = default;
0040   void registerToken(const edm::EDGetToken& token);
0041   void fill(const edm::RunForOutput& iRun, TFile& file);
0042   void finalizeWrite();
0043 
0044 private:
0045   void createFields(const edm::RunForOutput& iRun, TFile& file);
0046   std::vector<edm::EDGetToken> m_tokens;
0047   std::unique_ptr<RNTupleWriter> m_ntuple;
0048   RNTupleFieldPtr<UInt_t> m_run;
0049   std::vector<SummaryTableOutputFields> m_tables;
0050 };
0051 
0052 class PSetNTuple {
0053 public:
0054   PSetNTuple() = default;
0055   void fill(edm::pset::Registry* pset, TFile& file);
0056   void finalizeWrite();
0057 
0058 private:
0059   // TODO blocked on RNTuple std::pair support
0060   // using PSetType = std::pair<edm::ParameterSetID, edm::ParameterSetBlob>;
0061   // RNTupleFieldPtr<PSetType> m_pset;
0062   void createFields(TFile& file);
0063   // TODO blocked on RNTuple typedef member field support:
0064   // https://github.com/root-project/root/issues/7861
0065   // RNTupleFieldPtr<edm::ParameterSetID> m_psetId;
0066   // RNTupleFieldPtr<edm::ParameterSetBlob> m_psetBlob;
0067   std::shared_ptr<RCollectionNTupleWriter> m_collection;
0068   RNTupleFieldPtr<std::string> m_psetId;
0069   RNTupleFieldPtr<std::string> m_psetBlob;
0070   std::unique_ptr<RNTupleWriter> m_ntuple;
0071 };
0072 
0073 class MetadataNTuple {
0074 public:
0075   MetadataNTuple() = default;
0076   void fill(const edm::ProcessHistoryRegistry& procHist, TFile& file);
0077   void finalizeWrite();
0078 
0079 private:
0080   void createFields(TFile& file);
0081   std::shared_ptr<RCollectionNTupleWriter> m_procHist;
0082 
0083   RNTupleFieldPtr<std::string> m_phId;
0084   std::unique_ptr<RNTupleWriter> m_ntuple;
0085 };
0086 
0087 #endif