#include <ConversionTrackProducer.h>
Public Member Functions | |
ConversionTrackProducer (const edm::ParameterSet &conf) | |
virtual void | produce (edm::Event &e, const edm::EventSetup &c) |
virtual | ~ConversionTrackProducer () |
Private Attributes | |
edm::InputTag | beamSpotInputTag |
edm::ParameterSet | conf_ |
IdealHelixParameters | ConvTrackPreSelector |
bool | filterOnConvTrackHyp |
double | minConvRadius |
std::auto_ptr < reco::ConversionTrackCollection > | outputTrks |
bool | setArbitratedEcalSeeded |
bool | setArbitratedMerged |
bool | setArbitratedMergedEcalGeneral |
bool | setTrackerOnly |
std::string | trackProducer |
bool | useTrajectory |
Definition at line 40 of file ConversionTrackProducer.h.
ConversionTrackProducer::ConversionTrackProducer | ( | const edm::ParameterSet & | conf | ) | [explicit] |
Definition at line 39 of file ConversionTrackProducer.cc.
: conf_(conf), trackProducer ( conf.getParameter<std::string>("TrackProducer") ), useTrajectory ( conf.getParameter<bool>("useTrajectory") ), setTrackerOnly ( conf.getParameter<bool>("setTrackerOnly") ), setArbitratedEcalSeeded ( conf.getParameter<bool>("setArbitratedEcalSeeded") ), setArbitratedMerged ( conf.getParameter<bool>("setArbitratedMerged") ), setArbitratedMergedEcalGeneral ( conf.getParameter<bool>("setArbitratedMergedEcalGeneral") ), beamSpotInputTag ( conf.getParameter<edm::InputTag>("beamSpotInputTag") ), filterOnConvTrackHyp( conf.getParameter<bool>("filterOnConvTrackHyp") ), minConvRadius( conf.getParameter<double>("minConvRadius") ) { produces<reco::ConversionTrackCollection>(); }
ConversionTrackProducer::~ConversionTrackProducer | ( | ) | [virtual] |
Definition at line 58 of file ConversionTrackProducer.cc.
{ }
void ConversionTrackProducer::produce | ( | edm::Event & | e, |
const edm::EventSetup & | c | ||
) | [virtual] |
Implements edm::EDProducer.
Definition at line 61 of file ConversionTrackProducer.cc.
References SiPixelRawToDigiRegional_cfi::beamSpot, beamSpotInputTag, ConvTrackPreSelector, filterOnConvTrackHyp, edm::EventSetup::get(), edm::Event::getByLabel(), IdealHelixParameters::isTangentPointDistanceLessThan(), minConvRadius, outputTrks, edm::ESHandle< T >::product(), edm::Event::put(), setArbitratedEcalSeeded, setArbitratedMerged, setArbitratedMergedEcalGeneral, reco::ConversionTrack::setIsArbitratedEcalSeeded(), reco::ConversionTrack::setIsArbitratedMerged(), reco::ConversionTrack::setIsArbitratedMergedEcalGeneral(), reco::ConversionTrack::setIsTrackerOnly(), IdealHelixParameters::setMagnField(), setTrackerOnly, reco::ConversionTrack::setTrajRef(), trackProducer, and useTrajectory.
{ //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); //-------------------------------------------------- //Added by D. Giordano // 2011/08/05 // Reduction of the track sample based on geometric hypothesis for conversion tracks edm::Handle<reco::BeamSpot> beamSpotHandle; e.getByLabel(beamSpotInputTag,beamSpotHandle); edm::ESHandle<MagneticField> magFieldHandle; es.get<IdealMagneticFieldRecord>().get( magFieldHandle ); if(filterOnConvTrackHyp && !beamSpotHandle.isValid()) { edm::LogError("Invalid Collection") << "invalid collection for the BeamSpot with InputTag " << beamSpotInputTag; throw; } ConvTrackPreSelector.setMagnField(magFieldHandle.product()); //---------------------------------------------------------- // 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) { //-------------------------------------------------- //Added by D. Giordano // 2011/08/05 // Reduction of the track sample based on geometric hypothesis for conversion tracks math::XYZVector beamSpot= math::XYZVector(beamSpotHandle->position()); if( filterOnConvTrackHyp && ConvTrackPreSelector.isTangentPointDistanceLessThan( minConvRadius, it->get(), beamSpot ) ) continue; //-------------------------------------------------- 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
Definition at line 67 of file ConversionTrackProducer.h.
Referenced by produce().
Definition at line 53 of file ConversionTrackProducer.h.
Definition at line 70 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::filterOnConvTrackHyp [private] |
Definition at line 68 of file ConversionTrackProducer.h.
Referenced by produce().
double ConversionTrackProducer::minConvRadius [private] |
Definition at line 69 of file ConversionTrackProducer.h.
Referenced by produce().
std::auto_ptr<reco::ConversionTrackCollection> ConversionTrackProducer::outputTrks [private] |
Definition at line 73 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::setArbitratedEcalSeeded [private] |
Definition at line 58 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::setArbitratedMerged [private] |
Definition at line 59 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::setArbitratedMergedEcalGeneral [private] |
Definition at line 60 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::setTrackerOnly [private] |
Definition at line 57 of file ConversionTrackProducer.h.
Referenced by produce().
std::string ConversionTrackProducer::trackProducer [private] |
Definition at line 55 of file ConversionTrackProducer.h.
Referenced by produce().
bool ConversionTrackProducer::useTrajectory [private] |
Definition at line 56 of file ConversionTrackProducer.h.
Referenced by produce().