CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CandMatcherNew.h
Go to the documentation of this file.
1 #ifndef CandUtils_CandMatcherNew_h
2 #define CandUtils_CandMatcherNew_h
3 /* class CandMatcher
4  *
5  * \author Luca Lista, INFN
6  *
7  */
11 #include <algorithm>
12 #include <iterator>
13 #include <set>
14 
15 namespace reco {
16  namespace utilsNew {
17 
18  template<typename C>
19  class CandMatcher {
20  public:
25  typedef std::vector<const map_type *> map_vector;
27  explicit CandMatcher(const map_vector & maps);
29  explicit CandMatcher(const map_type & map);
31  virtual ~CandMatcher();
35  typename map_type::refprod_type ref() const { return map_.ref(); }
36  protected:
38  map_type map_;
39 
40  private:
41  };
42 
43  template<typename C>
45  map_() {
46  for(typename map_vector::const_iterator i = maps.begin(); i != maps.end(); ++ i)
47  map_ += **i;
48  }
49 
50  template<typename C>
52  map_(map) {
53  }
54 
55  template<typename C>
57  }
58 
59  template<typename C>
61  if (c.hasMasterClone()) {
63  return master->numberOfDaughters() == 0 ? map_[master] : (*this)[*master];
64  }
65  size_t nDau = c.numberOfDaughters();
66  if(nDau == 0) return reference_type();
67  std::set<size_t> momIdx, common, tmp;
68  for(size_t i = 0; i < nDau; ++ i) {
69  const Candidate & d = * c.daughter(i);
70  reference_type m = (*this)[d];
71  if (m.isNull()) return reference_type();
72  momIdx.clear();
73  while(m->numberOfMothers() == 1) {
74  m = m->motherRef();
75  momIdx.insert(m.key());
76  }
77  if(momIdx.size() == 0) return reference_type();
78  if (common.size() == 0) common = momIdx;
79  else {
80  tmp.clear();
81  set_intersection(common.begin(), common.end(),
82  momIdx.begin(), momIdx.end(),
83  inserter(tmp, tmp.begin()));
84  swap(common, tmp);
85  }
86  if (common.size() == 0) return reference_type();
87  }
88  size_t idx = * max_element(common.begin(), common.end());
89  return reference_type(map_.ref(), idx);
90  }
91 
92  }
93 }
94 
95 #endif
std::vector< const map_type * > map_vector
map vector
Definition: CandMatcher.h:25
Map map_
int i
Definition: DBlmapReader.cc:9
refprod_type ref() const
Definition: Association.h:66
virtual const Candidate * daughter(size_type i) const =0
return daughter at a given position, i = 0, ... numberOfDaughters() - 1 (read only mode) ...
CandMatcher(const map_vector &maps)
constructor
std::vector< const map_type * > map_vector
map_type::refprod_type ref() const
reference to matched collection
tuple d
Definition: ztail.py:151
virtual size_type numberOfDaughters() const =0
number of daughters
virtual bool hasMasterClone() const =0
virtual ~CandMatcher()
destructor
map_type map_
match map at leaf level
reference_type operator[](const reco::Candidate &) const
get match from transient reference
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
edm::Association< C >::reference_type reference_type
ref type
edm::RefToBase< Candidate > CandidateBaseRef
persistent reference to an object in a collection of Candidate objects
Definition: CandidateFwd.h:31
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
edm::Association< C > map_type
map type
map_type::key_type reference_type
concrete candidate reference type
Definition: CandMatcher.h:27
void swap(reco::ClusterRemovalInfo &cri1, reco::ClusterRemovalInfo &cri2)
virtual const CandidateBaseRef & masterClone() const =0