CMS 3D CMS Logo

Public Member Functions | Protected Types | Private Member Functions | Private Attributes

reco::modules::MatcherBase< C1, C2, M > Class Template Reference

#include <Matcher.h>

Inheritance diagram for reco::modules::MatcherBase< C1, C2, M >:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper reco::modules::Matcher< C1, C2, S, D, M >

List of all members.

Public Member Functions

 MatcherBase (const edm::ParameterSet &)
 ~MatcherBase ()

Protected Types

typedef M MatchMap
typedef C1::value_type T1
typedef C2::value_type T2

Private Member Functions

virtual double matchDistance (const T1 &, const T2 &) const =0
void produce (edm::Event &, const edm::EventSetup &)
virtual bool select (const T1 &, const T2 &) const =0

Private Attributes

double distMin_
edm::InputTag matched_
edm::InputTag src_

Detailed Description

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.


Member Typedef Documentation

template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
typedef M reco::modules::MatcherBase< C1, C2, M >::MatchMap [protected]
template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
typedef C1::value_type reco::modules::MatcherBase< C1, C2, M >::T1 [protected]
template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
typedef C2::value_type reco::modules::MatcherBase< C1, C2, M >::T2 [protected]

Constructor & Destructor Documentation

template<typename C1 , typename C2 , typename M >
reco::modules::MatcherBase< C1, C2, M >::MatcherBase ( const edm::ParameterSet cfg)

Definition at line 76 of file Matcher.h.

                                                                     :
      src_( cfg.template getParameter<edm::InputTag>( "src" ) ),
      matched_( cfg.template getParameter<edm::InputTag>( "matched" ) ), 
      distMin_( cfg.template getParameter<double>( "distMin" ) ) {
      produces<MatchMap>();
    }
template<typename C1 , typename C2 , typename M >
reco::modules::MatcherBase< C1, C2, M >::~MatcherBase ( )

Definition at line 84 of file Matcher.h.

{ }

Member Function Documentation

template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
virtual double reco::modules::MatcherBase< C1, C2, M >::matchDistance ( const T1 ,
const T2  
) const [private, pure virtual]
template<typename C1 , typename C2 , typename M >
void reco::modules::MatcherBase< C1, C2, M >::produce ( edm::Event evt,
const edm::EventSetup  
) [private, virtual]

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 );
    }    
template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
virtual bool reco::modules::MatcherBase< C1, C2, M >::select ( const T1 ,
const T2  
) const [private, pure virtual]

Member Data Documentation

template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
double reco::modules::MatcherBase< C1, C2, M >::distMin_ [private]

Definition at line 35 of file Matcher.h.

template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
edm::InputTag reco::modules::MatcherBase< C1, C2, M >::matched_ [private]

Definition at line 34 of file Matcher.h.

template<typename C1, typename C2, typename M = edm::AssociationMap<edm::OneToOne<C1, C2> >>
edm::InputTag reco::modules::MatcherBase< C1, C2, M >::src_ [private]

Definition at line 33 of file Matcher.h.