![]() |
![]() |
00001 // -*- C++ -*- 00002 // 00003 // Package: TrackCandidateTopBottomHitFilter 00004 // Class: TrackCandidateTopBottomHitFilter 00005 // 00013 // 00014 // Original Author: Giuseppe Cerati 00015 // Created: Tue Sep 9 09:47:01 CEST 2008 00016 // $Id: TrackCandidateTopBottomHitFilter.cc,v 1.3 2010/02/20 21:01:23 wmtan Exp $ 00017 // 00018 // 00019 00020 00021 // system include files 00022 #include <memory> 00023 00024 // user include files 00025 #include "FWCore/Framework/interface/Frameworkfwd.h" 00026 #include "FWCore/Framework/interface/EDProducer.h" 00027 #include "FWCore/Framework/interface/ESHandle.h" 00028 00029 #include "FWCore/Framework/interface/Event.h" 00030 #include "FWCore/Framework/interface/MakerMacros.h" 00031 00032 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00033 #include "FWCore/Utilities/interface/InputTag.h" 00034 00035 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" 00036 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h" 00037 #include "TrackingTools/Records/interface/TransientRecHitRecord.h" 00038 00039 // 00040 // class decleration 00041 // 00042 00043 class TrackCandidateTopBottomHitFilter : public edm::EDProducer { 00044 public: 00045 explicit TrackCandidateTopBottomHitFilter(const edm::ParameterSet&); 00046 ~TrackCandidateTopBottomHitFilter(); 00047 00048 private: 00049 virtual void beginRun(edm::Run & run, const edm::EventSetup&) ; 00050 virtual void produce(edm::Event&, const edm::EventSetup&); 00051 virtual void endJob() ; 00052 edm::InputTag label; 00053 edm::ESHandle<TransientTrackingRecHitBuilder> theBuilder; 00054 std::string builderName; 00055 double seedY; 00056 }; 00057 00058 TrackCandidateTopBottomHitFilter::TrackCandidateTopBottomHitFilter(const edm::ParameterSet& iConfig) { 00059 builderName = iConfig.getParameter<std::string>("TTRHBuilder"); 00060 label = iConfig.getParameter<edm::InputTag>("Input"); 00061 seedY = iConfig.getParameter<double>("SeedY"); 00062 00063 produces<TrackCandidateCollection>(); 00064 } 00065 00066 00067 TrackCandidateTopBottomHitFilter::~TrackCandidateTopBottomHitFilter() {} 00068 00069 00070 // 00071 // member functions 00072 // 00073 00074 // ------------ method called to produce the data ------------ 00075 void TrackCandidateTopBottomHitFilter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { 00076 using namespace edm; 00077 using namespace std; 00078 00079 Handle<TrackCandidateCollection> pIn; 00080 iEvent.getByLabel(label,pIn); 00081 std::auto_ptr<TrackCandidateCollection> pOut(new TrackCandidateCollection); 00082 for (TrackCandidateCollection::const_iterator it=pIn->begin(); it!=pIn->end();++it) { 00083 PTrajectoryStateOnDet state = it->trajectoryStateOnDet(); 00084 TrackCandidate::range oldhits = it->recHits(); 00085 TrajectorySeed seed = it->seed(); 00086 TrackCandidate::RecHitContainer hits; 00087 for (TrackCandidate::RecHitContainer::const_iterator hit=oldhits.first;hit!=oldhits.second;++hit) { 00088 if (hit->isValid()) { 00089 double hitY = theBuilder->build(&*hit)->globalPosition().y(); 00090 if (seedY*hitY>0) hits.push_back(hit->clone()); 00091 else break; 00092 } else hits.push_back(hit->clone()); 00093 } 00094 if (hits.size()>=3) { 00095 TrackCandidate newTC(hits,seed,state); 00096 pOut->push_back(newTC); 00097 } 00098 } 00099 iEvent.put(pOut); 00100 } 00101 00102 void TrackCandidateTopBottomHitFilter::beginRun(edm::Run & run, const edm::EventSetup& iSetup) { 00103 iSetup.get<TransientRecHitRecord>().get(builderName,theBuilder); 00104 } 00105 00106 void TrackCandidateTopBottomHitFilter::endJob() {} 00107 00108 //define this as a plug-in 00109 DEFINE_FWK_MODULE(TrackCandidateTopBottomHitFilter);