CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoTracker/FinalTrackSelectors/src/TrackCandidateTopBottomHitFilter.cc

Go to the documentation of this file.
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);