CMS 3D CMS Logo

Public Member Functions | Private Attributes

ConversionTrackProducer Class Reference

#include <ConversionTrackProducer.h>

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

List of all members.

Public Member Functions

 ConversionTrackProducer (const edm::ParameterSet &conf)
virtual void produce (edm::Event &e, const edm::EventSetup &c)
virtual ~ConversionTrackProducer ()

Private Attributes

edm::ParameterSet conf_
std::auto_ptr
< reco::ConversionTrackCollection
outputTrks

Detailed Description

Definition at line 36 of file ConversionTrackProducer.h.


Constructor & Destructor Documentation

ConversionTrackProducer::ConversionTrackProducer ( const edm::ParameterSet conf) [explicit]

Definition at line 35 of file ConversionTrackProducer.cc.

                                                                              : 
    conf_(conf)
  {
    produces<reco::ConversionTrackCollection>();
   
  }
ConversionTrackProducer::~ConversionTrackProducer ( ) [virtual]

Definition at line 44 of file ConversionTrackProducer.cc.

{ }  

Member Function Documentation

void ConversionTrackProducer::produce ( edm::Event e,
const edm::EventSetup c 
) [virtual]

Implements edm::EDProducer.

Definition at line 47 of file ConversionTrackProducer.cc.

References conf_, edm::Event::getByLabel(), edm::ParameterSet::getParameter(), outputTrks, edm::Event::put(), reco::ConversionTrack::setIsArbitratedEcalSeeded(), reco::ConversionTrack::setIsArbitratedMerged(), reco::ConversionTrack::setIsArbitratedMergedEcalGeneral(), reco::ConversionTrack::setIsTrackerOnly(), and reco::ConversionTrack::setTrajRef().

  {
    // retrieve producer name of input TrackCollection(s)
    std::string trackProducer = conf_.getParameter<std::string>("TrackProducer");
    bool useTrajectory = conf_.getParameter<bool>("useTrajectory");
    bool setTrackerOnly = conf_.getParameter<bool>("setTrackerOnly");
    bool setArbitratedEcalSeeded = conf_.getParameter<bool>("setArbitratedEcalSeeded");    
    bool setArbitratedMerged = conf_.getParameter<bool>("setArbitratedMerged");
    bool setArbitratedMergedEcalGeneral = conf_.getParameter<bool>("setArbitratedMergedEcalGeneral");    
    
    //get input collection (through edm::View)
    edm::Handle<edm::View<reco::Track> > hTrks;
    e.getByLabel(trackProducer, hTrks);

    //get association maps between trajectories and tracks and build temporary maps
    edm::Handle< TrajTrackAssociationCollection > hTTAss;
    edm::Handle< edm::AssociationMap<edm::OneToOne<std::vector<Trajectory>,
                                          reco::GsfTrackCollection,unsigned short> > > hTTAssGsf;    
                                          
    std::map<reco::TrackRef,edm::Ref<std::vector<Trajectory> > > tracktrajmap;
    std::map<reco::GsfTrackRef,edm::Ref<std::vector<Trajectory> > > gsftracktrajmap;
                                          
    if (useTrajectory) {
      if (hTrks->size()>0) {
        if (dynamic_cast<const reco::GsfTrack*>(&hTrks->at(0))) {
          //fill map for gsf tracks
          e.getByLabel(trackProducer, hTTAssGsf);     
          for ( edm::AssociationMap<edm::OneToOne<std::vector<Trajectory>,
                    reco::GsfTrackCollection,unsigned short> >::const_iterator iPair = hTTAssGsf->begin();
            iPair != hTTAssGsf->end(); ++iPair) {
        
            gsftracktrajmap[iPair->val] = iPair->key;

          }
                
        }
        else {
          //fill map for standard tracks
          e.getByLabel(trackProducer, hTTAss);
          for ( TrajTrackAssociationCollection::const_iterator iPair = hTTAss->begin();
            iPair != hTTAss->end();
            ++iPair) {
        
            tracktrajmap[iPair->val] = iPair->key;

          }
        }
      }
    }

    // Step B: create empty output collection
    outputTrks = std::auto_ptr<reco::ConversionTrackCollection>(new reco::ConversionTrackCollection);    
    
    // Simple conversion of tracks to conversion tracks, setting appropriate flags from configuration
    for (edm::RefToBaseVector<reco::Track>::const_iterator it = hTrks->refVector().begin(); it != hTrks->refVector().end(); ++it) {
      reco::ConversionTrack convTrack(*it);
      convTrack.setIsTrackerOnly(setTrackerOnly);
      convTrack.setIsArbitratedEcalSeeded(setArbitratedEcalSeeded);
      convTrack.setIsArbitratedMerged(setArbitratedMerged);
      convTrack.setIsArbitratedMergedEcalGeneral(setArbitratedMergedEcalGeneral);
            
      //fill trajectory association if configured, using correct map depending on track type
      if (useTrajectory) {
        if (gsftracktrajmap.size()) {
          convTrack.setTrajRef(gsftracktrajmap.find(it->castTo<reco::GsfTrackRef>())->second);
        }
        else {
          convTrack.setTrajRef(tracktrajmap.find(it->castTo<reco::TrackRef>())->second);
        }
      }
      
      outputTrks->push_back(convTrack);
    }
    
    e.put(outputTrks);
    return;

  }//end produce

Member Data Documentation

Definition at line 47 of file ConversionTrackProducer.h.

Referenced by produce().

Definition at line 49 of file ConversionTrackProducer.h.

Referenced by produce().