CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoBTag/TrackProbability/src/TrackClassFilter.cc

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