Go to the documentation of this file.00001 #include <cmath>
00002
00003 #include <Math/GenVector/PxPyPzM4D.h>
00004
00005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00006
00007 #include "DataFormats/Math/interface/LorentzVector.h"
00008 #include "DataFormats/TrackReco/interface/Track.h"
00009 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00010
00011 #include "RecoBTag/SecondaryVertex/interface/ParticleMasses.h"
00012 #include "RecoBTag/SecondaryVertex/interface/V0Filter.h"
00013
00014 using namespace reco;
00015
00016 V0Filter::V0Filter(const edm::ParameterSet ¶ms) :
00017 k0sMassWindow(params.getParameter<double>("k0sMassWindow"))
00018 {
00019 }
00020
00021 inline bool
00022 V0Filter::operator () (const reco::Track **tracks, unsigned int n) const
00023 {
00024
00025
00026 if (n != 2)
00027 return true;
00028
00029 if (tracks[0]->charge() * tracks[1]->charge() > 0)
00030 return true;
00031
00032 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > vec1;
00033 ROOT::Math::LorentzVector<ROOT::Math::PxPyPzM4D<double> > vec2;
00034
00035 vec1.SetPx(tracks[0]->px());
00036 vec1.SetPy(tracks[0]->py());
00037 vec1.SetPz(tracks[0]->pz());
00038 vec1.SetM(ParticleMasses::piPlus);
00039
00040 vec2.SetPx(tracks[1]->px());
00041 vec2.SetPy(tracks[1]->py());
00042 vec2.SetPz(tracks[1]->pz());
00043 vec2.SetM(ParticleMasses::piPlus);
00044
00045 double invariantMass = (vec1 + vec2).M();
00046 if (std::abs(invariantMass - ParticleMasses::k0) < k0sMassWindow)
00047 return false;
00048
00049 return true;
00050 }
00051
00052 bool
00053 V0Filter::operator () (const reco::TrackRef *tracks, unsigned int n) const
00054 {
00055 std::vector<const reco::Track*> trackPtrs(n);
00056 for(unsigned int i = 0; i < n; i++)
00057 trackPtrs[i] = &*tracks[i];
00058
00059 return (*this)(&trackPtrs[0], n);
00060 }
00061
00062 bool
00063 V0Filter::operator () (const reco::Track *tracks, unsigned int n) const
00064 {
00065 std::vector<const reco::Track*> trackPtrs(n);
00066 for(unsigned int i = 0; i < n; i++)
00067 trackPtrs[i] = &tracks[i];
00068
00069 return (*this)(&trackPtrs[0], n);
00070 }