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
0066
0067
0068 void createFields(TFile& file);
0069
0070
0071
0072
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