00001 #include "RecoTracker/SiTrackerMRHTools/plugins/MultiRecHitCollectorESProducer.h" 00002 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00003 #include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimatorBase.h" 00004 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h" 00005 #include "RecoTracker/SiTrackerMRHTools/interface/GroupedDAFHitCollector.h" 00006 #include "RecoTracker/SiTrackerMRHTools/interface/SimpleDAFHitCollector.h" 00007 00008 #include "FWCore/Framework/interface/EventSetup.h" 00009 #include "FWCore/Framework/interface/ESHandle.h" 00010 #include "FWCore/Framework/interface/ModuleFactory.h" 00011 #include "FWCore/Framework/interface/ESProducer.h" 00012 00013 #include <string> 00014 #include <memory> 00015 00016 using namespace edm; 00017 00018 MultiRecHitCollectorESProducer::MultiRecHitCollectorESProducer(const edm::ParameterSet & p) 00019 { 00020 std::string myname = p.getParameter<std::string>("ComponentName"); 00021 pset_ = p; 00022 setWhatProduced(this,myname); 00023 } 00024 00025 MultiRecHitCollectorESProducer::~MultiRecHitCollectorESProducer() {} 00026 00027 boost::shared_ptr<MultiRecHitCollector> 00028 MultiRecHitCollectorESProducer::produce(const MultiRecHitRecord& iRecord){ 00029 std::string mode = "Grouped"; 00030 if (pset_.getParameter<std::string>("Mode")=="Simple") mode = "Simple"; 00031 00032 std::string mrhupdator = pset_.getParameter<std::string>("MultiRecHitUpdator"); 00033 std::string propagatorAlongName = pset_.getParameter<std::string>("propagatorAlong"); 00034 std::string estimatorName = pset_.getParameter<std::string>("estimator"); 00035 std::string measurementTrackerName = pset_.getParameter<std::string>("MeasurementTrackerName"); 00036 00037 ESHandle<SiTrackerMultiRecHitUpdator> mrhuhandle; 00038 iRecord.get(mrhupdator, mrhuhandle); 00039 ESHandle<Propagator> propagatorhandle; 00040 iRecord.getRecord<CkfComponentsRecord>().getRecord<TrackingComponentsRecord>().get(propagatorAlongName, propagatorhandle); 00041 ESHandle<Chi2MeasurementEstimatorBase> estimatorhandle; 00042 iRecord.getRecord<CkfComponentsRecord>().getRecord<TrackingComponentsRecord>().get(estimatorName, estimatorhandle); 00043 ESHandle<MeasurementTracker> measurementhandle; 00044 iRecord.getRecord<CkfComponentsRecord>().get(measurementTrackerName, measurementhandle); 00045 00046 if (mode == "Grouped"){ 00047 std::string propagatorOppositeName = pset_.getParameter<std::string>("propagatorOpposite"); 00048 ESHandle<Propagator> propagatorOppositehandle; 00049 iRecord.getRecord<CkfComponentsRecord>().getRecord<TrackingComponentsRecord>().get(propagatorOppositeName, propagatorOppositehandle); 00050 _collector = boost::shared_ptr<MultiRecHitCollector>(new GroupedDAFHitCollector(measurementhandle.product(), 00051 mrhuhandle.product(), 00052 estimatorhandle.product(), 00053 propagatorhandle.product(), 00054 propagatorOppositehandle.product())); 00055 } else { 00056 _collector = boost::shared_ptr<MultiRecHitCollector>(new SimpleDAFHitCollector(measurementhandle.product(), 00057 mrhuhandle.product(), 00058 estimatorhandle.product(), 00059 propagatorhandle.product())); 00060 } 00061 00062 return _collector; 00063 } 00064 00065