CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SelectionAdderTrait.h
Go to the documentation of this file.
1 #ifndef UtilAlgos_SelectionAdderTrait_h
2 #define UtilAlgos_SelectionAdderTrait_h
3 /* \class SelectionAdderTrait
4  *
5  * \author Luca Lista, INFN
6  */
14 #include <boost/static_assert.hpp>
15 
16 namespace helper {
17 
18  template<typename StoreContainer>
19  struct SelectionCopyAdder {
20  template<typename C>
21  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
22  selected.push_back( ( * c )[ idx ] );
23  }
24  };
25 
26  template<typename StoreContainer>
27  struct SelectionPointerAdder {
28  template<typename C>
29  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
30  selected.push_back( & ( * c )[ idx ] );
31  }
32  };
33 
34  template<typename StoreContainer>
35  struct SelectionPointerDerefAdder {
36  template<typename C>
37  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
38  selected.push_back( & * ( * c )[ idx ] );
39  }
40  };
41 
42  template<typename StoreContainer>
43  struct SelectionFirstPointerAdder {
44  template<typename C>
45  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
46  selected.push_back( & * ( ( * c )[ idx ].first ) );
47  }
48  };
49 
50  template<typename StoreContainer>
51  struct SelectionFirstRefAdder {
52  template<typename C>
53  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
54  selected.push_back( ( * c )[ idx ].first );
55  }
56  };
57 
58  template<typename StoreContainer>
59  struct SelectionRefAdder {
60  template<typename C>
61  void operator()( StoreContainer & selected, const edm::Handle<C> & c, size_t idx ) {
62  selected.push_back( edm::Ref<C>( c, idx ) );
63  }
64  };
65 
66  template<typename T>
67  struct SelectionRefViewAdder {
68  void operator()( edm::RefToBaseVector<T> & selected, const edm::Handle<edm::View<T> > & c, size_t idx ) {
69  selected.push_back( c->refAt( idx ) );
70  }
71  };
72 
73  template<typename T>
74  struct SelectionPtrViewAdder {
75  void operator()( edm::PtrVector<T> & selected, const edm::Handle<edm::View<T> > & c, size_t idx ) {
76  selected.push_back( c->ptrAt( idx ) );
77  }
78  };
79 
80  template<typename InputCollection, typename StoreContainer>
81  struct SelectionAdderTrait {
82  BOOST_STATIC_ASSERT(sizeof(InputCollection) == 0);
83  };
84 
85  template<typename InputCollection, typename T>
86  struct SelectionAdderTrait<InputCollection, std::vector<const T *> > {
88  };
89 
90  template<typename InputCollection, typename C>
93  };
94 
95  template<typename C>
96  struct SelectionAdderTrait<edm::RefVector<C>, edm::RefVector<C> > {
98  };
99 
100  template<typename C, typename T>
101  struct SelectionAdderTrait<edm::RefVector<C>, std::vector<const T *> > {
103  };
104 
105  template<typename T>
108  };
109 
110  template<typename T>
111  struct SelectionAdderTrait<edm::RefToBaseVector<T>, std::vector<const T *> > {
113  };
114 
115  template<typename K, typename C, typename T>
116  struct SelectionAdderTrait<edm::AssociationVector<edm::RefProd<K>, C>, std::vector<const T *> > {
118  };
119 
120  template<typename C, typename T>
121  struct SelectionAdderTrait<edm::AssociationVector<edm::RefToBaseProd<T>, C>, std::vector<const T *> > {
123  };
124 
125  template<typename K, typename C>
126  struct SelectionAdderTrait<edm::AssociationVector<edm::RefProd<K>, C>, edm::RefVector<K> > {
128  };
129 
130  template<typename T, typename C>
131  struct SelectionAdderTrait<edm::AssociationVector<edm::RefToBaseProd<T>, C>,
132  edm::RefToBaseVector<T> > {
134  };
135 
136  template<typename T>
137  struct SelectionAdderTrait<edm::View<T>, edm::RefToBaseVector<T> > {
139  };
140 
141  template<typename T>
142  struct SelectionAdderTrait<edm::View<T>, edm::PtrVector<T> > {
144  };
145 
146 }
147 
148 #endif
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
void push_back(Ptr< T > const &iPtr)
Definition: PtrVector.h:141
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
void operator()(edm::RefToBaseVector< T > &selected, const edm::Handle< edm::View< T > > &c, size_t idx)
BOOST_STATIC_ASSERT(sizeof(InputCollection)==0)
void operator()(edm::PtrVector< T > &selected, const edm::Handle< edm::View< T > > &c, size_t idx)
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
void operator()(StoreContainer &selected, const edm::Handle< C > &c, size_t idx)
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
void push_back(const RefToBase< T > &)
edm::RefVector< Container > RefVector