File indexing completed on 2024-04-06 12:04:09
0001 #ifndef DataFormats_FWLite_Event_h
0002 #define DataFormats_FWLite_Event_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 #include <typeinfo>
0047 #include <map>
0048 #include <vector>
0049 #include <memory>
0050 #include <cstring>
0051 #include <string>
0052 #include <functional>
0053
0054 #include "Rtypes.h"
0055
0056
0057 #include "DataFormats/FWLite/interface/EventBase.h"
0058 #include "DataFormats/FWLite/interface/EntryFinder.h"
0059 #include "DataFormats/FWLite/interface/LuminosityBlock.h"
0060 #include "DataFormats/FWLite/interface/Run.h"
0061 #include "DataFormats/FWLite/interface/InternalDataKey.h"
0062 #include "DataFormats/Provenance/interface/ProcessHistoryRegistry.h"
0063 #include "DataFormats/Provenance/interface/EventProcessHistoryID.h"
0064 #include "DataFormats/Provenance/interface/EventAuxiliary.h"
0065 #include "DataFormats/Provenance/interface/EventID.h"
0066 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0067
0068
0069 namespace edm {
0070 class WrapperBase;
0071 class ProductRegistry;
0072 class BranchDescription;
0073 class EDProductGetter;
0074 class EventAux;
0075 class Timestamp;
0076 class TriggerResults;
0077 class TriggerNames;
0078 class TriggerResultsByName;
0079 }
0080 class TCut;
0081
0082 namespace fwlite {
0083 class BranchMapReader;
0084 class HistoryGetterBase;
0085 class DataGetterHelper;
0086 class RunFactory;
0087 class ChainEvent;
0088 class MultiChainEvent;
0089
0090 class Event : public EventBase {
0091 public:
0092 friend class ChainEvent;
0093 friend class MultiChainEvent;
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103 Event(
0104 TFile* iFile, bool useCache = true, std::function<void(TBranch const&)> baFunc = [](TBranch const&) {});
0105
0106 Event(Event const&) = delete;
0107
0108 Event const& operator=(Event const&) = delete;
0109
0110 ~Event() override;
0111
0112
0113 Event const& operator++() override;
0114
0115
0116 Long64_t indexFromEventId(edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event);
0117
0118
0119 bool to(Long64_t iIndex);
0120
0121
0122 bool to(const edm::EventID& id);
0123 bool to(edm::RunNumber_t run, edm::EventNumber_t event);
0124 bool to(edm::RunNumber_t run, edm::LuminosityBlockNumber_t lumi, edm::EventNumber_t event);
0125
0126
0127 Event const& toBegin() override;
0128
0129
0130
0131 std::string const getBranchNameFor(std::type_info const&,
0132 char const* iModuleLabel,
0133 char const* iProductInstanceLabel,
0134 char const* iProcessName) const override;
0135
0136 template <typename T>
0137 edm::EDGetTokenT<T> consumes(edm::InputTag const& iTag) const {
0138 auto bid =
0139 dataHelper_.getBranchIDFor(typeid(T), iTag.label().c_str(), iTag.instance().c_str(), iTag.process().c_str());
0140 if (bid) {
0141 return this->makeTokenUsing<T>(bid.value().id());
0142 }
0143 return {};
0144 }
0145 using fwlite::EventBase::getByLabel;
0146
0147 bool getByLabel(std::type_info const&, char const*, char const*, char const*, void*) const override;
0148
0149
0150
0151 void draw(Option_t* opt);
0152 Long64_t draw(char const* varexp,
0153 const TCut& selection,
0154 Option_t* option = "",
0155 Long64_t nentries = 1000000000,
0156 Long64_t firstentry = 0);
0157 Long64_t draw(char const* varexp,
0158 char const* selection,
0159 Option_t* option = "",
0160 Long64_t nentries = 1000000000,
0161 Long64_t firstentry = 0);
0162 Long64_t scan(char const* varexp = "",
0163 char const* selection = "",
0164 Option_t* option = "",
0165 Long64_t nentries = 1000000000,
0166 Long64_t firstentry = 0);
0167
0168 bool isValid() const;
0169 operator bool() const;
0170 bool atEnd() const override;
0171
0172
0173 Long64_t size() const;
0174
0175 edm::EventAuxiliary const& eventAuxiliary() const override;
0176
0177 std::vector<edm::BranchDescription> const& getBranchDescriptions() const {
0178 return branchMap_.getBranchDescriptions();
0179 }
0180 std::vector<std::string> const& getProcessHistory() const;
0181 TFile* getTFile() const { return branchMap_.getFile(); }
0182
0183 edm::ParameterSet const* parameterSet(edm::ParameterSetID const& psID) const override;
0184
0185 edm::WrapperBase const* getByProductID(edm::ProductID const&) const override;
0186 std::optional<std::tuple<edm::WrapperBase const*, unsigned int>> getThinnedProduct(edm::ProductID const& pid,
0187 unsigned int key) const;
0188 void getThinnedProducts(edm::ProductID const& pid,
0189 std::vector<edm::WrapperBase const*>& foundContainers,
0190 std::vector<unsigned int>& keys) const;
0191 edm::OptionalThinnedKey getThinnedKeyFrom(edm::ProductID const& parent,
0192 unsigned int key,
0193 edm::ProductID const& thinned) const;
0194
0195 edm::TriggerNames const& triggerNames(edm::TriggerResults const& triggerResults) const override;
0196
0197 edm::TriggerResultsByName triggerResultsByName(edm::TriggerResults const& triggerResults) const override;
0198
0199 edm::ProcessHistory const& processHistory() const override { return history(); }
0200
0201 fwlite::LuminosityBlock const& getLuminosityBlock() const;
0202 fwlite::Run const& getRun() const;
0203
0204
0205 static void throwProductNotFoundException(std::type_info const&, char const*, char const*, char const*);
0206
0207 private:
0208 bool getByTokenImp(edm::EDGetToken, edm::WrapperBase const*&) const override;
0209 friend class internal::ProductGetter;
0210 friend class ChainEvent;
0211 friend class EventHistoryGetter;
0212
0213 edm::ProcessHistory const& history() const;
0214 void updateAux(Long_t eventIndex) const;
0215 void fillParameterSetRegistry() const;
0216 void setGetter(std::shared_ptr<edm::EDProductGetter const> getter) { return dataHelper_.setGetter(getter); }
0217
0218
0219
0220 CMS_SA_ALLOW mutable TFile* file_;
0221
0222 TTree* eventHistoryTree_;
0223
0224 CMS_SA_ALLOW mutable std::shared_ptr<fwlite::LuminosityBlock> lumi_;
0225 CMS_SA_ALLOW mutable std::shared_ptr<fwlite::Run> run_;
0226 CMS_SA_ALLOW mutable fwlite::BranchMapReader branchMap_;
0227
0228
0229 CMS_SA_ALLOW mutable std::vector<char const*> labels_;
0230 CMS_SA_ALLOW mutable edm::ProcessHistoryMap historyMap_;
0231 CMS_SA_ALLOW mutable std::vector<edm::EventProcessHistoryID> eventProcessHistoryIDs_;
0232 CMS_SA_ALLOW mutable std::vector<std::string> procHistoryNames_;
0233 CMS_SA_ALLOW mutable edm::EventAuxiliary aux_;
0234 CMS_SA_ALLOW mutable EntryFinder entryFinder_;
0235 edm::EventAuxiliary const* pAux_;
0236 edm::EventAux const* pOldAux_;
0237 TBranch* auxBranch_;
0238 int fileVersion_;
0239 CMS_SA_ALLOW mutable bool parameterSetRegistryFilled_;
0240
0241 fwlite::DataGetterHelper dataHelper_;
0242 CMS_SA_ALLOW mutable std::shared_ptr<RunFactory> runFactory_;
0243 };
0244
0245 }
0246 #endif