CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoPixelVertexing/PixelLowPtUtilities/src/TripletFilter.cc

Go to the documentation of this file.
00001 #include "RecoPixelVertexing/PixelLowPtUtilities/interface/TripletFilter.h"
00002 
00003 #include "RecoPixelVertexing/PixelLowPtUtilities/interface/ClusterShapeHitFilter.h"
00004 #include "RecoPixelVertexing/PixelLowPtUtilities/interface/HitInfo.h"
00005 
00006 #include "FWCore/Framework/interface/EventSetup.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009 
00010 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
00011 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
00012 
00013 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
00014 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
00015 
00016 #include "RecoTracker/Record/interface/CkfComponentsRecord.h"
00017 
00018 using namespace std;
00019 
00020 /*****************************************************************************/
00021 TripletFilter::TripletFilter(const edm::EventSetup& es)
00022 {
00023   // Get cluster shape hit filter
00024   edm::ESHandle<ClusterShapeHitFilter> shape;
00025   es.get<CkfComponentsRecord>().get("ClusterShapeHitFilter",shape);
00026   theFilter = shape.product();
00027 }
00028 
00029 /*****************************************************************************/
00030 TripletFilter::~TripletFilter()
00031 {
00032 }
00033 
00034 /*****************************************************************************/
00035 bool TripletFilter::checkTrack
00036   (vector<const TrackingRecHit*> recHits, vector<LocalVector> localDirs)
00037 {
00038   bool ok = true;
00039 
00040   vector<LocalVector>::const_iterator localDir = localDirs.begin();
00041   for(vector<const TrackingRecHit*>::const_iterator recHit = recHits.begin();
00042                                                     recHit!= recHits.end();
00043                                                     recHit++)
00044   {
00045     const SiPixelRecHit* pixelRecHit =
00046       dynamic_cast<const SiPixelRecHit *>(*recHit);
00047 
00048     if(! pixelRecHit->isValid())
00049     {  ok = false; break; }
00050 
00051     if(! theFilter->isCompatible(*pixelRecHit, *localDir))
00052     {
00053       LogTrace("MinBiasTracking")
00054        << "  [TripletFilter] clusShape problem"
00055        << HitInfo::getInfo(**recHit);
00056 
00057       ok = false; break;
00058     }
00059 
00060     localDir++;
00061   }
00062 
00063   return ok;
00064 }
00065 
00066 /*****************************************************************************/
00067 bool TripletFilter::checkTrack
00068   (vector<const TrackingRecHit*> recHits, vector<GlobalVector> globalDirs)
00069 {
00070   bool ok = true;
00071 
00072   vector<GlobalVector>::const_iterator globalDir = globalDirs.begin();
00073   for(vector<const TrackingRecHit*>::const_iterator recHit = recHits.begin();
00074                                                     recHit!= recHits.end();
00075                                                     recHit++)
00076   {
00077     const SiPixelRecHit* pixelRecHit =
00078       dynamic_cast<const SiPixelRecHit *>(*recHit);
00079 
00080     if(! pixelRecHit->isValid())
00081     {  ok = false; break; }
00082 
00083     if(! theFilter->isCompatible(*pixelRecHit, *globalDir))
00084     {
00085       LogTrace("MinBiasTracking")
00086        << "  [TripletFilter] clusShape problem"
00087        << HitInfo::getInfo(**recHit);
00088 
00089       ok = false; break;
00090     }
00091 
00092     globalDir++;
00093   }
00094 
00095   return ok;
00096 }
00097