Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:23:40

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 #if ROOT_VERSION_CODE < ROOT_VERSION(6, 31, 0)
0016 using ROOT::Experimental::RCollectionNTupleWriter;
0017 #else
0018 #include <ROOT/RNTupleWriter.hxx>
0019 #include <ROOT/RNTupleCollectionWriter.hxx>
0020 using ROOT::Experimental::RNTupleCollectionWriter;
0021 #endif
0022 using ROOT::Experimental::RNTupleWriter;
0023 
0024 #include "EventStringOutputFields.h"
0025 #include "RNTupleFieldPtr.h"
0026 #include "SummaryTableOutputFields.h"
0027 #include "TableOutputFields.h"
0028 #include "TriggerOutputFields.h"
0029 
0030 class LumiNTuple {
0031 public:
0032   LumiNTuple() = default;
0033   void fill(const edm::LuminosityBlockID& id, TFile& file);
0034   void finalizeWrite();
0035 
0036 private:
0037   void createFields(const edm::LuminosityBlockID& id, TFile& file);
0038   std::unique_ptr<RNTupleWriter> m_ntuple;
0039   RNTupleFieldPtr<UInt_t> m_run;
0040   RNTupleFieldPtr<UInt_t> m_luminosityBlock;
0041 };
0042 
0043 class RunNTuple {
0044 public:
0045   RunNTuple() = default;
0046   void registerToken(const edm::EDGetToken& token);
0047   void fill(const edm::RunForOutput& iRun, TFile& file);
0048   void finalizeWrite();
0049 
0050 private:
0051   void createFields(const edm::RunForOutput& iRun, TFile& file);
0052   std::vector<edm::EDGetToken> m_tokens;
0053   std::unique_ptr<RNTupleWriter> m_ntuple;
0054   RNTupleFieldPtr<UInt_t> m_run;
0055   std::vector<SummaryTableOutputFields> m_tables;
0056 };
0057 
0058 class PSetNTuple {
0059 public:
0060   PSetNTuple() = default;
0061   void fill(edm::pset::Registry* pset, TFile& file);
0062   void finalizeWrite();
0063 
0064 private:
0065   // TODO blocked on RNTuple std::pair support
0066   // using PSetType = std::pair<edm::ParameterSetID, edm::ParameterSetBlob>;
0067   // RNTupleFieldPtr<PSetType> m_pset;
0068   void createFields(TFile& file);
0069   // TODO blocked on RNTuple typedef member field support:
0070   // https://github.com/root-project/root/issues/7861
0071   // RNTupleFieldPtr<edm::ParameterSetID> m_psetId;
0072   // RNTupleFieldPtr<edm::ParameterSetBlob> m_psetBlob;
0073 #if ROOT_VERSION_CODE < ROOT_VERSION(6, 31, 0)
0074   std::shared_ptr<RCollectionNTupleWriter> m_collection;
0075 #else
0076   std::shared_ptr<RNTupleCollectionWriter> m_collection;
0077 #endif
0078   RNTupleFieldPtr<std::string> m_psetId;
0079   RNTupleFieldPtr<std::string> m_psetBlob;
0080   std::unique_ptr<RNTupleWriter> m_ntuple;
0081 };
0082 
0083 class MetadataNTuple {
0084 public:
0085   MetadataNTuple() = default;
0086   void fill(const edm::ProcessHistoryRegistry& procHist, TFile& file);
0087   void finalizeWrite();
0088 
0089 private:
0090   void createFields(TFile& file);
0091 #if ROOT_VERSION_CODE < ROOT_VERSION(6, 31, 0)
0092   std::shared_ptr<RCollectionNTupleWriter> m_procHist;
0093 #else
0094   std::shared_ptr<RNTupleCollectionWriter> m_procHist;
0095 #endif
0096 
0097   RNTupleFieldPtr<std::string> m_phId;
0098   std::unique_ptr<RNTupleWriter> m_ntuple;
0099 };
0100 
0101 #endif