CMS 3D CMS Logo

Classes | Public Types | Public Member Functions

TrackClassFilter Class Reference

#include <TrackClassFilter.h>

List of all members.

Classes

class  Input

Public Types

typedef Input first_argument_type
typedef bool result_type
typedef
TrackProbabilityCalibration::Entry 
second_argument_type

Public Member Functions

bool operator() (const first_argument_type &, const second_argument_type &) const
 TrackClassFilter ()

Detailed Description

filter to define the belonging of a track to a TrackClass

Definition at line 12 of file TrackClassFilter.h.


Member Typedef Documentation

Definition at line 29 of file TrackClassFilter.h.

Definition at line 31 of file TrackClassFilter.h.

Definition at line 30 of file TrackClassFilter.h.


Constructor & Destructor Documentation

TrackClassFilter::TrackClassFilter ( ) [inline]

Definition at line 16 of file TrackClassFilter.h.

{}

Member Function Documentation

bool TrackClassFilter::operator() ( const first_argument_type input,
const second_argument_type category 
) const

Definition at line 7 of file TrackClassFilter.cc.

References TrackProbabilityCalibration::Entry::category, TrackProbabilityCategoryData::chiMax, TrackProbabilityCategoryData::chiMin, eta(), reco::TrackBase::eta(), TrackProbabilityCategoryData::etaMax, TrackProbabilityCategoryData::etaMin, reco::TrackBase::hitPattern(), TrackProbabilityCategoryData::nHitsMax, TrackProbabilityCategoryData::nHitsMin, reco::TrackBase::normalizedChi2(), TrackProbabilityCategoryData::nPixelHitsMax, TrackProbabilityCategoryData::nPixelHitsMin, reco::TrackBase::numberOfValidHits(), reco::TrackBase::p(), L1TEmulatorMonitor_cff::p, TrackProbabilityCategoryData::pMax, TrackProbabilityCategoryData::pMin, reco::TrackBase::quality(), reco::TrackBase::qualityByName(), query::result, TrackClassFilter::Input::track, TrackProbabilityCategoryData::trackQuality, TrackClassFilter::Input::useQuality, and TrackProbabilityCategoryData::withFirstPixel.

{
const reco::Track & track = input.track;
//const reco::Jet & jet     = input.jet;
//const reco::Vertex & pv   = input.vertex;
const bool  usequality    = input.useQuality;

const TrackProbabilityCategoryData & d = category.category;
  //Track Data
  double p=track.p();
  double eta=track.eta();
  double nhit=track.numberOfValidHits();
  double npix=track.hitPattern().numberOfValidPixelHits();
  bool   firstPixel=track.hitPattern().hasValidHitInFirstPixelBarrel();
  double chi=track.normalizedChi2();
  
  
  //Chi^2 cut  if used
  bool chicut=(chi >= d.chiMin        &&       chi < d.chiMax ); 
  if(d.chiMin<=0.01 && d.chiMax<=0.01) chicut=true;
  
  //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 
  bool  fisrtPixelCut = ( (firstPixel && d.withFirstPixel == 1) || (!firstPixel && d.withFirstPixel == -1) || d.withFirstPixel == 0 );

  
   
  //Track Quality:
  reco::TrackBase::TrackQuality trackQualityUndef         =  reco::TrackBase::qualityByName("undefQuality");
  reco::TrackBase::TrackQuality trackQualityLoose         =  reco::TrackBase::qualityByName("loose");
  reco::TrackBase::TrackQuality trackQualityTight         =  reco::TrackBase::qualityByName("tight");
  reco::TrackBase::TrackQuality trackQualityhighPur       =  reco::TrackBase::qualityByName("highPurity");
  reco::TrackBase::TrackQuality trackQualityConfirmed     =  reco::TrackBase::qualityByName("confirmed");
  reco::TrackBase::TrackQuality trackQualityGoodIterative =  reco::TrackBase::qualityByName("goodIterative");
  
  signed short trakQuality  = -1;
  if(track.quality(trackQualityUndef))          trakQuality = 5;
  if(track.quality(trackQualityLoose))          trakQuality = 0;
  if(track.quality(trackQualityTight))          trakQuality = 1;
  if(track.quality(trackQualityhighPur))        trakQuality = 2;
  if(track.quality(trackQualityConfirmed))      trakQuality = 3;
  if(track.quality(trackQualityGoodIterative))  trakQuality = 4;
  
  
  bool result=(  p >  d.pMin       &&         p <  d.pMax       && 
               fabs(eta) >  d.etaMin     &&  fabs(eta) <  d.etaMax     &&
               nhit >= d.nHitsMin        &&      nhit <= d.nHitsMax      &&
               npix >= d.nPixelHitsMin   &&      npix <= d.nPixelHitsMax &&
               chicut && fisrtPixelCut   && 
               ( (trakQuality==d.trackQuality && usequality==1) || usequality==0 ) );
                       
                
        //std::cout << "result = " << result << std::endl;
        //std::cout << "usequality = " << usequality << std::endl;      
//  dump();
//  cout << "TRACK: p " << " eta " <<   eta << " #hit " << nhit << " #pix " << npix << " chi " << chi << "                         matched ?";
//  cout << result << endl;
  return result;
}