Go to the documentation of this file.00001 #include "SeedCombiner.h"
00002
00003 #include "FWCore/Framework/interface/Event.h"
00004 #include "FWCore/Framework/interface/EventSetup.h"
00005 #include "DataFormats/Common/interface/Handle.h"
00006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00007
00008 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00009
00010 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegionProducerFactory.h"
00011 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegionProducer.h"
00012 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegion.h"
00013
00014 #include "RecoTracker/TkTrackingRegions/interface/OrderedHitsGeneratorFactory.h"
00015 #include "RecoTracker/TkTrackingRegions/interface/OrderedHitsGenerator.h"
00016
00017 #include "RecoTracker/TkSeedingLayers/interface/SeedComparitorFactory.h"
00018 #include "RecoTracker/TkSeedingLayers/interface/SeedComparitor.h"
00019 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00020
00021 #include "RecoTracker/TkSeedGenerator/interface/SeedGeneratorFromRegionHits.h"
00022
00023 #include "RecoTracker/TrackProducer/interface/ClusterRemovalRefSetter.h"
00024
00025 using namespace edm;
00026
00027
00028 SeedCombiner::SeedCombiner(
00029 const edm::ParameterSet& cfg)
00030 :
00031 inputCollections_(cfg.getParameter<std::vector<edm::InputTag> >("seedCollections"))
00032 {
00033 produces<TrajectorySeedCollection>();
00034 reKeing_=false;
00035 if (cfg.exists("clusterRemovalInfos")){
00036 clusterRemovalInfos_=cfg.getParameter<std::vector<edm::InputTag> >("clusterRemovalInfos");
00037 if (clusterRemovalInfos_.size()!=0 && clusterRemovalInfos_.size()==inputCollections_.size()) reKeing_=true;
00038 }
00039 }
00040
00041
00042 SeedCombiner::~SeedCombiner()
00043 {
00044 }
00045
00046
00047 void SeedCombiner::beginRun(edm::Run & run, const edm::EventSetup& es)
00048 {
00049 }
00050
00051 void SeedCombiner::produce(edm::Event& ev, const edm::EventSetup& es)
00052 {
00053
00054 size_t ninputs = inputCollections_.size();
00055 size_t nseeds = 0;
00056 std::vector<Handle<TrajectorySeedCollection > > seedCollections(ninputs);
00057 for (size_t i = 0; i < ninputs; ++i) {
00058 ev.getByLabel(inputCollections_[i], seedCollections[i]);
00059 nseeds += seedCollections[i]->size();
00060 }
00061
00062
00063 std::auto_ptr<TrajectorySeedCollection> result(new TrajectorySeedCollection());
00064 result->reserve( nseeds );
00065
00066
00067 unsigned int iSC=0,iSC_max=seedCollections.size();
00068 for (;iSC!=iSC_max;++iSC){
00069 Handle<TrajectorySeedCollection> & collection=seedCollections[iSC];
00070 if (reKeing_ && !(clusterRemovalInfos_[iSC]==edm::InputTag(""))){
00071 ClusterRemovalRefSetter refSetter(ev, clusterRemovalInfos_[iSC]);
00072
00073 for (TrajectorySeedCollection::const_iterator iS=collection->begin();
00074 iS!=collection->end();++iS){
00075 TrajectorySeed::recHitContainer newRecHitContainer;
00076 newRecHitContainer.reserve(iS->nHits());
00077 TrajectorySeed::const_iterator iH=iS->recHits().first;
00078 TrajectorySeed::const_iterator iH_end=iS->recHits().second;
00079
00080 for (;iH!=iH_end;++iH){
00081 newRecHitContainer.push_back(*iH);
00082 refSetter.reKey(&newRecHitContainer.back());
00083 }
00084 result->push_back(TrajectorySeed(iS->startingState(),
00085 std::move(newRecHitContainer),
00086 iS->direction()));
00087 }
00088 }else{
00089
00090 result->insert(result->end(), collection->begin(), collection->end());
00091 }
00092 }
00093
00094
00095 ev.put(result);
00096 }