00001 #include "RecoTracker/TrackProducer/plugins/DAFTrackProducer.h"
00002
00003 #include <memory>
00004
00005 #include "FWCore/Framework/interface/Frameworkfwd.h"
00006 #include "FWCore/Framework/interface/MakerMacros.h"
00007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00008 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00009 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00010
00011 #include "RecoTracker/Record/interface/MultiRecHitRecord.h"
00012 #include "RecoTracker/SiTrackerMRHTools/interface/MultiRecHitCollector.h"
00013 #include "TrackingTools/Records/interface/TrackingComponentsRecord.h"
00014 #include "RecoTracker/Record/interface/MultiRecHitRecord.h"
00015 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
00016
00017 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00018
00019
00020 DAFTrackProducer::DAFTrackProducer(const edm::ParameterSet& iConfig):
00021 KfTrackProducerBase(iConfig.getParameter<bool>("TrajectoryInEvent"),false),
00022 theAlgo(iConfig)
00023 {
00024 setConf(iConfig);
00025 setSrc( iConfig.getParameter<edm::InputTag>( "src" ), iConfig.getParameter<edm::InputTag>( "beamSpot" ));
00026 setAlias( iConfig.getParameter<std::string>( "@module_label" ) );
00027
00028 produces<reco::TrackCollection>().setBranchAlias( alias_ + "Tracks" );
00029 produces<reco::TrackExtraCollection>().setBranchAlias( alias_ + "TrackExtras" );
00030 produces<TrackingRecHitCollection>().setBranchAlias( alias_ + "RecHits" );
00031 produces<std::vector<Trajectory> >() ;
00032 produces<TrajTrackAssociationCollection>();
00033 }
00034
00035
00036 void DAFTrackProducer::produce(edm::Event& theEvent, const edm::EventSetup& setup)
00037 {
00038 edm::LogInfo("DAFTrackProducer") << "Analyzing event number: " << theEvent.id() << "\n";
00039
00040
00041
00042 std::auto_ptr<TrackingRecHitCollection> outputRHColl (new TrackingRecHitCollection);
00043 std::auto_ptr<reco::TrackCollection> outputTColl(new reco::TrackCollection);
00044 std::auto_ptr<reco::TrackExtraCollection> outputTEColl(new reco::TrackExtraCollection);
00045 std::auto_ptr<std::vector<Trajectory> > outputTrajectoryColl(new std::vector<Trajectory>);
00046
00047
00048
00049
00050 edm::ESHandle<TrackerGeometry> theG;
00051 edm::ESHandle<MagneticField> theMF;
00052 edm::ESHandle<TrajectoryFitter> theFitter;
00053 edm::ESHandle<Propagator> thePropagator;
00054 edm::ESHandle<TransientTrackingRecHitBuilder> theBuilder;
00055 getFromES(setup,theG,theMF,theFitter,thePropagator,theBuilder);
00056
00057 edm::ESHandle<MultiRecHitCollector> measurementCollectorHandle;
00058 edm::ESHandle<SiTrackerMultiRecHitUpdator> updatorHandle;
00059 std::string measurementCollectorName = getConf().getParameter<std::string>("MeasurementCollector");
00060 setup.get<MultiRecHitRecord>().get(measurementCollectorName, measurementCollectorHandle);
00061 std::string updatorName = getConf().getParameter<std::string>("UpdatorName");
00062 setup.get<MultiRecHitRecord>().get(updatorName, updatorHandle);
00063
00064
00065
00066 AlgoProductCollection algoResults;
00067 try{
00068 edm::Handle<TrackCandidateCollection> theTCCollection;
00069 reco::BeamSpot bs;
00070 getFromEvt(theEvent,theTCCollection,bs);
00071 measurementCollectorHandle->updateEvent(theEvent);
00072
00073
00074
00075 LogDebug("DAFTrackProducer") << "run the algorithm" << "\n";
00076 theAlgo.runWithCandidate(theG.product(), theMF.product(), *theTCCollection,
00077 theFitter.product(), theBuilder.product(), measurementCollectorHandle.product(), updatorHandle.product(),bs,algoResults);
00078 } catch (cms::Exception &e){ edm::LogInfo("DAFTrackProducer") << "cms::Exception caught!!!" << "\n" << e << "\n";}
00079
00080
00081 putInEvt(theEvent, outputRHColl, outputTColl, outputTEColl, outputTrajectoryColl, algoResults);
00082 LogDebug("DAFTrackProducer") << "end" << "\n";
00083 }