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
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