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
0060
0061
0062 void createFields(TFile& file);
0063
0064
0065
0066
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