File indexing completed on 2024-04-06 12:23:40
0001 #ifndef PhysicsTools_NanoAOD_TriggerOutputFields_h
0002 #define PhysicsTools_NanoAOD_TriggerOutputFields_h
0003
0004 #include "RNTupleFieldPtr.h"
0005
0006 #include "FWCore/Utilities/interface/EDGetToken.h"
0007
0008 namespace edm {
0009 class EventForOutput;
0010 class TriggerResults;
0011 }
0012
0013 class TriggerFieldPtr {
0014 public:
0015 TriggerFieldPtr() = default;
0016 TriggerFieldPtr(std::string name, int index, std::string fieldName, std::string fieldDesc, RNTupleModel& model);
0017 void fill(const edm::TriggerResults& triggers);
0018 const std::string& getTriggerName() const { return m_triggerName; }
0019 void setIndex(int newIndex) { m_triggerIndex = newIndex; }
0020
0021 private:
0022 RNTupleFieldPtr<bool> m_field;
0023
0024 std::string m_triggerName;
0025 int m_triggerIndex = -1;
0026 };
0027
0028 class TriggerOutputFields {
0029 public:
0030 TriggerOutputFields() = default;
0031 explicit TriggerOutputFields(const std::string& processName, const edm::EDGetToken& token)
0032 : m_token(token), m_lastRun(-1), m_processName(processName) {}
0033 void createFields(const edm::EventForOutput& event, RNTupleModel& model);
0034 void fill(const edm::EventForOutput& event);
0035
0036 private:
0037 static std::vector<std::string> getTriggerNames(const edm::TriggerResults& triggerResults);
0038
0039 void updateTriggerFields(const edm::TriggerResults& triggerResults);
0040 void makeUniqueFieldName( RNTupleModel& model, std::string& name);
0041
0042 edm::EDGetToken m_token;
0043 long m_lastRun;
0044 std::string m_processName;
0045 std::vector<TriggerFieldPtr> m_triggerFields;
0046 };
0047
0048 #endif