CMS 3D CMS Logo

DataGetterHelper.h
Go to the documentation of this file.
1 #ifndef DataFormats_FWLite_DataGetterHelper_h
2 #define DataFormats_FWLite_DataGetterHelper_h
3 // -*- C++ -*-
4 //
5 // Package: DataFormats/FWLite
6 // Class : DataGetterHelper
7 //
16 //
17 // Original Author: Eric Vaandering
18 // Created: Fri Jan 29 12:45:17 CST 2010
19 //
20 
21 
22 // user include files
28 
29 #include "Rtypes.h"
30 
31 // system include files
32 #include <cstring>
33 #include <map>
34 #include <memory>
35 #include <typeinfo>
36 #include <vector>
37 #include <functional>
38 
39 // forward declarations
40 class TTreeCache;
41 class TTree;
42 
43 namespace edm {
44  class BranchDescription;
45  class BranchID;
46  class ObjectWithDict;
47  class ProductID;
48  class ThinnedAssociation;
49  class WrapperBase;
50 }
51 
52 namespace fwlite {
54 
55  public:
56 // DataGetterHelper() {};
57  DataGetterHelper(TTree* tree,
58  std::shared_ptr<HistoryGetterBase> historyGetter,
59  std::shared_ptr<BranchMapReader> branchMap = std::shared_ptr<BranchMapReader>(),
60  std::shared_ptr<edm::EDProductGetter> getter = std::shared_ptr<edm::EDProductGetter>(),
61  bool useCache = false, std::function<void (TBranch const&)> baFunc = [](TBranch const&){});
62  virtual ~DataGetterHelper();
63 
64  // ---------- const member functions ---------------------
65  virtual std::string const getBranchNameFor(std::type_info const&,
66  char const*,
67  char const*,
68  char const*) const;
69 
70  // This function should only be called by fwlite::Handle<>
71  virtual bool getByLabel(std::type_info const&, char const*, char const*, char const*, void*, Long_t) const;
72 
73  edm::WrapperBase const* getByProductID(edm::ProductID const& pid, Long_t eventEntry) const;
74  edm::WrapperBase const* getThinnedProduct(edm::ProductID const& pid, unsigned int& key, Long_t eventEntry) const;
75  void getThinnedProducts(edm::ProductID const& pid,
76  std::vector<edm::WrapperBase const*>& foundContainers,
77  std::vector<unsigned int>& keys,
78  Long_t eventEntry) const;
79 
80  // ---------- static member functions --------------------
81 
82  // ---------- member functions ---------------------------
83 
84  void setGetter(std::shared_ptr<edm::EDProductGetter const> getter) {
85  getter_ = getter;
86  }
87 
88  edm::EDProductGetter const* getter() const {
89  return getter_.get();
90  }
91 
92  private:
93 
94  DataGetterHelper(const DataGetterHelper&) = delete; // stop default
95  const DataGetterHelper& operator=(const DataGetterHelper&) = delete; // stop default
96 
97  typedef std::map<internal::DataKey, std::shared_ptr<internal::Data> > KeyToDataMap;
98 
99  internal::Data& getBranchDataFor(std::type_info const&, char const*, char const*, char const*) const;
100  void getBranchData(edm::EDProductGetter const*, Long64_t, internal::Data&) const;
101  bool getByBranchDescription(edm::BranchDescription const&, Long_t eventEntry, KeyToDataMap::iterator&) const;
102  edm::WrapperBase const* getByBranchID(edm::BranchID const& bid, Long_t eventEntry) const;
103  edm::WrapperBase const* wrapperBasePtr(edm::ObjectWithDict const&) const;
104  edm::ThinnedAssociation const* getThinnedAssociation(edm::BranchID const& branchID, Long_t eventEntry) const;
105 
106  // ---------- member data --------------------------------
107  TTree* tree_;
108  mutable std::shared_ptr<BranchMapReader> branchMap_;
109  mutable KeyToDataMap data_;
110  mutable std::vector<char const*> labels_;
111  const edm::ProcessHistory& history() const;
112 
113  mutable std::map<std::pair<edm::ProductID, edm::BranchListIndex>,std::shared_ptr<internal::Data> > idToData_;
114  mutable std::map<edm::BranchID, std::shared_ptr<internal::Data> > bidToData_;
116  std::shared_ptr<edm::EDProductGetter const> getter_;
117  mutable bool tcTrained_;
119  const bool tcUse_;
122  std::function<void (TBranch const&)> branchAccessFunc_;
123  };
124 
125 }
126 
127 #endif
edm::propagate_const< std::shared_ptr< fwlite::HistoryGetterBase > > historyGetter_
std::vector< char const * > labels_
std::map< edm::BranchID, std::shared_ptr< internal::Data > > bidToData_
std::map< std::pair< edm::ProductID, edm::BranchListIndex >, std::shared_ptr< internal::Data > > idToData_
std::function< void(TBranch const &)> branchAccessFunc_
const bool tcUse_
Use internal TTreeCache.
std::map< internal::DataKey, std::shared_ptr< internal::Data > > KeyToDataMap
T const * getThinnedProduct(RefCore const &ref, unsigned int &thinnedKey, EDProductGetter const *prodGetter)
Definition: RefCoreGet.h:129
std::shared_ptr< BranchMapReader > branchMap_
edm::EDProductGetter const * getter() const
HLT enums.
void setGetter(std::shared_ptr< edm::EDProductGetter const > getter)
Definition: tree.py:1
std::shared_ptr< edm::EDProductGetter const > getter_