CMS 3D CMS Logo

Public Member Functions | Private Member Functions | Private Attributes

CandOneToManyDeltaRMatcher Class Reference

Inheritance diagram for CandOneToManyDeltaRMatcher:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

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

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &)

Private Attributes

edm::InputTag matched_
bool printdebug_
edm::InputTag source_

Detailed Description

Definition at line 18 of file CandOneToManyDeltaRMatcher.cc.


Constructor & Destructor Documentation

CandOneToManyDeltaRMatcher::CandOneToManyDeltaRMatcher ( const edm::ParameterSet cfg)

Definition at line 65 of file CandOneToManyDeltaRMatcher.cc.

                                                                                 :
  source_( cfg.getParameter<InputTag>( "src" ) ),
  matched_( cfg.getParameter<InputTag>( "matched" ) ),
  printdebug_( cfg.getUntrackedParameter<bool>("printDebug", false) ) {
  produces<CandMatchMapMany>();
}
CandOneToManyDeltaRMatcher::~CandOneToManyDeltaRMatcher ( )

Definition at line 72 of file CandOneToManyDeltaRMatcher.cc.

                                                        {
}

Member Function Documentation

void CandOneToManyDeltaRMatcher::produce ( edm::Event evt,
const edm::EventSetup es 
) [private, virtual]

Implements edm::EDProducer.

Definition at line 75 of file CandOneToManyDeltaRMatcher.cc.

References trackerHits::c, gather_cfg::cout, reco::Candidate::et(), reco::Candidate::eta(), first, edm::Event::getByLabel(), m, match(), matched_, reco::Candidate::p4(), reco::Candidate::phi(), printdebug_, edm::Event::put(), edm::second(), python::multivaluedict::sort(), LaserTracksInput_cfi::source, source_, align_tpl::src, and v.

                                                                           {
  
  Handle<CandidateCollection> source;  
  Handle<CandidateCollection> matched;  
  evt.getByLabel( source_, source ) ;
  evt.getByLabel( matched_, matched ) ;
 
  if (printdebug_) {
    for( CandidateCollection::const_iterator c = source->begin(); c != source->end(); ++c ) {
      cout << "[CandOneToManyDeltaRMatcher] Et source  " << c->et() << endl;
    }    
    for( CandidateCollection::const_iterator c = matched->begin(); c != matched->end(); ++c ) {
      cout << "[CandOneToManyDeltaRMatcher] Et matched " << c->et() << endl;
    } 
  }
 

  auto_ptr<CandMatchMapMany> matchMap( new CandMatchMapMany( CandMatchMapMany::ref_type( CandidateRefProd( source  ),
                                                                                         CandidateRefProd( matched )
                                                                                         ) ) );
  for( size_t c = 0; c != source->size(); ++ c ) {
    const Candidate & src = (*source)[ c ];
    if (printdebug_) cout << "[CandOneToManyDeltaRMatcher] source (Et,Eta,Phi) =(" << src.et() << "," << 
                                                                                      src.eta() << "," << 
                                                                                      src.phi() << ")" << endl;
    vector<reco::helper::MatchPair> v;
    for( size_t m = 0; m != matched->size(); ++ m ) {
      const Candidate & match = ( * matched )[ m ];
      double dist = DeltaR( src.p4() , match.p4() );
      v.push_back( make_pair( m, dist ) );      
    }
    if ( v.size() > 0 ) {
      sort( v.begin(), v.end(), reco::helper::SortBySecond() );
      for( size_t m = 0; m != v.size(); ++ m ) {
        if (printdebug_) cout << "[CandOneToManyDeltaRMatcher]       match (Et,Eta,Phi) =(" << ( * matched )[ v[m].first ].et() << "," << 
                                                                                               ( * matched )[ v[m].first ].eta() << "," << 
                                                                                               ( * matched )[ v[m].first ].phi() << ") DeltaR=" << 
                                                                                               v[m].second  << endl;
        matchMap->insert( CandidateRef( source, c ), make_pair( CandidateRef( matched, v[m].first ), v[m].second  )  );
      }    
    } 
  }
  
  evt.put( matchMap );

}

Member Data Documentation

Definition at line 26 of file CandOneToManyDeltaRMatcher.cc.

Referenced by produce().

Definition at line 27 of file CandOneToManyDeltaRMatcher.cc.

Referenced by produce().

Definition at line 25 of file CandOneToManyDeltaRMatcher.cc.

Referenced by produce().