template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
class reco::modules::MatcherBase< C1, C2, M >
Definition at line 21 of file Matcher.h.
template<typename C1 , typename C2 , typename M >
Implements edm::EDProducer.
Definition at line 87 of file Matcher.h.
References trackerHits::c, first, edm::Event::getByLabel(), edm::getRef(), m, match(), edm::Event::put(), benchmark_cfg::select, and v.
{
using namespace edm;
using namespace std;
Handle<C2> matched;
evt.getByLabel( matched_, matched );
Handle<C1> cands;
evt.getByLabel( src_, cands );
typedef typename MatchMap::ref_type ref_type;
typedef typename ref_type::key_type key_ref_type;
typedef typename ref_type::value_type value_ref_type;
auto_ptr<MatchMap> matchMap( new MatchMap( ref_type( key_ref_type( cands ),
value_ref_type( matched ) ) ) );
for( size_t c = 0; c != cands->size(); ++ c ) {
const T1 & cand = (*cands)[ c ];
vector<helper::MatchPair> v;
for( size_t m = 0; m != matched->size(); ++ m ) {
const T2 & match = ( * matched )[ m ];
if ( select( cand, match ) ) {
double dist = matchDistance( cand, match );
if ( dist < distMin_ ) v.push_back( make_pair( m, dist ) );
}
}
if ( v.size() > 0 ) {
size_t mMin = min_element( v.begin(), v.end(), helper::SortBySecond() )->first;
typedef typename MatchMap::key_type key_type;
typedef typename MatchMap::data_type data_type;
matchMap->insert( edm::getRef( cands, c ), edm::getRef( matched, mMin ) );
}
}
evt.put( matchMap );
}