Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <memory>
00016 #include <string>
00017 #include <iostream>
00018 #include <cmath>
00019 #include <vector>
00020
00021 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00022 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
00023 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00024 #include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h"
00025 #include "TrackingTools/GsfTracking/interface/TrajGsfTrackAssociation.h"
00026 #include "RecoEgamma/EgammaPhotonProducers/interface/ConversionTrackProducer.h"
00027 #include "DataFormats/Common/interface/Handle.h"
00028
00029
00030 #include "FWCore/Framework/interface/ESHandle.h"
00031
00032 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00033
00034
00035 ConversionTrackProducer::ConversionTrackProducer(edm::ParameterSet const& conf) :
00036 conf_(conf)
00037 {
00038 produces<reco::ConversionTrackCollection>();
00039
00040 }
00041
00042
00043
00044 ConversionTrackProducer::~ConversionTrackProducer() { }
00045
00046
00047 void ConversionTrackProducer::produce(edm::Event& e, const edm::EventSetup& es)
00048 {
00049
00050 std::string trackProducer = conf_.getParameter<std::string>("TrackProducer");
00051 bool useTrajectory = conf_.getParameter<bool>("useTrajectory");
00052 bool setTrackerOnly = conf_.getParameter<bool>("setTrackerOnly");
00053 bool setArbitratedEcalSeeded = conf_.getParameter<bool>("setArbitratedEcalSeeded");
00054 bool setArbitratedMerged = conf_.getParameter<bool>("setArbitratedMerged");
00055 bool setArbitratedMergedEcalGeneral = conf_.getParameter<bool>("setArbitratedMergedEcalGeneral");
00056
00057
00058 edm::Handle<edm::View<reco::Track> > hTrks;
00059 e.getByLabel(trackProducer, hTrks);
00060
00061
00062 edm::Handle< TrajTrackAssociationCollection > hTTAss;
00063 edm::Handle< edm::AssociationMap<edm::OneToOne<std::vector<Trajectory>,
00064 reco::GsfTrackCollection,unsigned short> > > hTTAssGsf;
00065
00066 std::map<reco::TrackRef,edm::Ref<std::vector<Trajectory> > > tracktrajmap;
00067 std::map<reco::GsfTrackRef,edm::Ref<std::vector<Trajectory> > > gsftracktrajmap;
00068
00069 if (useTrajectory) {
00070 if (hTrks->size()>0) {
00071 if (dynamic_cast<const reco::GsfTrack*>(&hTrks->at(0))) {
00072
00073 e.getByLabel(trackProducer, hTTAssGsf);
00074 for ( edm::AssociationMap<edm::OneToOne<std::vector<Trajectory>,
00075 reco::GsfTrackCollection,unsigned short> >::const_iterator iPair = hTTAssGsf->begin();
00076 iPair != hTTAssGsf->end(); ++iPair) {
00077
00078 gsftracktrajmap[iPair->val] = iPair->key;
00079
00080 }
00081
00082 }
00083 else {
00084
00085 e.getByLabel(trackProducer, hTTAss);
00086 for ( TrajTrackAssociationCollection::const_iterator iPair = hTTAss->begin();
00087 iPair != hTTAss->end();
00088 ++iPair) {
00089
00090 tracktrajmap[iPair->val] = iPair->key;
00091
00092 }
00093 }
00094 }
00095 }
00096
00097
00098 outputTrks = std::auto_ptr<reco::ConversionTrackCollection>(new reco::ConversionTrackCollection);
00099
00100
00101 for (edm::RefToBaseVector<reco::Track>::const_iterator it = hTrks->refVector().begin(); it != hTrks->refVector().end(); ++it) {
00102 reco::ConversionTrack convTrack(*it);
00103 convTrack.setIsTrackerOnly(setTrackerOnly);
00104 convTrack.setIsArbitratedEcalSeeded(setArbitratedEcalSeeded);
00105 convTrack.setIsArbitratedMerged(setArbitratedMerged);
00106 convTrack.setIsArbitratedMergedEcalGeneral(setArbitratedMergedEcalGeneral);
00107
00108
00109 if (useTrajectory) {
00110 if (gsftracktrajmap.size()) {
00111 convTrack.setTrajRef(gsftracktrajmap.find(it->castTo<reco::GsfTrackRef>())->second);
00112 }
00113 else {
00114 convTrack.setTrajRef(tracktrajmap.find(it->castTo<reco::TrackRef>())->second);
00115 }
00116 }
00117
00118 outputTrks->push_back(convTrack);
00119 }
00120
00121 e.put(outputTrks);
00122 return;
00123
00124 }