![]() |
![]() |
00001 #include "RecoBTag/TrackProbability/interface/TrackClassFilter.h" 00002 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00003 #include <iostream> 00004 00005 using namespace std; 00006 00007 bool TrackClassFilter::operator()(const first_argument_type & input,const second_argument_type & category) const 00008 { 00009 const reco::Track & track = input.track; 00010 //const reco::Jet & jet = input.jet; 00011 //const reco::Vertex & pv = input.vertex; 00012 const bool usequality = input.useQuality; 00013 00014 const TrackProbabilityCategoryData & d = category.category; 00015 //Track Data 00016 double p=track.p(); 00017 double eta=track.eta(); 00018 double nhit=track.numberOfValidHits(); 00019 double npix=track.hitPattern().numberOfValidPixelHits(); 00020 bool firstPixel=track.hitPattern().hasValidHitInFirstPixelBarrel(); 00021 double chi=track.normalizedChi2(); 00022 00023 00024 //Chi^2 cut if used 00025 bool chicut=(chi >= d.chiMin && chi < d.chiMax ); 00026 if(d.chiMin<=0.01 && d.chiMax<=0.01) chicut=true; 00027 00028 //First Pixel Hit cut 1=there should be an hit in first layer, -1=there should not be an hit, 0 = I do not care 00029 bool fisrtPixelCut = ( (firstPixel && d.withFirstPixel == 1) || (!firstPixel && d.withFirstPixel == -1) || d.withFirstPixel == 0 ); 00030 00031 00032 00033 //Track Quality: 00034 reco::TrackBase::TrackQuality trackQualityUndef = reco::TrackBase::qualityByName("undefQuality"); 00035 reco::TrackBase::TrackQuality trackQualityLoose = reco::TrackBase::qualityByName("loose"); 00036 reco::TrackBase::TrackQuality trackQualityTight = reco::TrackBase::qualityByName("tight"); 00037 reco::TrackBase::TrackQuality trackQualityhighPur = reco::TrackBase::qualityByName("highPurity"); 00038 reco::TrackBase::TrackQuality trackQualityConfirmed = reco::TrackBase::qualityByName("confirmed"); 00039 reco::TrackBase::TrackQuality trackQualityGoodIterative = reco::TrackBase::qualityByName("goodIterative"); 00040 00041 signed short trakQuality = -1; 00042 if(track.quality(trackQualityUndef)) trakQuality = 5; 00043 if(track.quality(trackQualityLoose)) trakQuality = 0; 00044 if(track.quality(trackQualityTight)) trakQuality = 1; 00045 if(track.quality(trackQualityhighPur)) trakQuality = 2; 00046 if(track.quality(trackQualityConfirmed)) trakQuality = 3; 00047 if(track.quality(trackQualityGoodIterative)) trakQuality = 4; 00048 00049 00050 bool result=( p > d.pMin && p < d.pMax && 00051 fabs(eta) > d.etaMin && fabs(eta) < d.etaMax && 00052 nhit >= d.nHitsMin && nhit <= d.nHitsMax && 00053 npix >= d.nPixelHitsMin && npix <= d.nPixelHitsMax && 00054 chicut && fisrtPixelCut && 00055 ( (trakQuality==d.trackQuality && usequality==1) || usequality==0 ) ); 00056 00057 00058 //std::cout << "result = " << result << std::endl; 00059 //std::cout << "usequality = " << usequality << std::endl; 00060 // dump(); 00061 // cout << "TRACK: p " << " eta " << eta << " #hit " << nhit << " #pix " << npix << " chi " << chi << " matched ?"; 00062 // cout << result << endl; 00063 return result; 00064 } 00065 00066 /* 00067 void TrackClassFilter::dump() const { 00068 00069 LogTrace ("TrackFilterDump") << "TrackClassFilter: "<<endl 00070 << pMin <<" < P(GeV) < " <<pMax <<endl 00071 << etaMin <<" < |eta| < " <<etaMax <<endl 00072 << nPixelHitsMin<<" =< number of Pixel Hits =< " << nPixelHitsMax <<endl 00073 << nHitsMin <<" =< total number of hits =< "<< nHitsMax <<endl 00074 << chiMin <<" =< chiSquare /dof < "<< chiMax <<endl 00075 << " First pixel hit < "<< withFirstPixel <<endl; 00076 } 00077 */