1 #ifndef DataFormats_BTauReco_IpTagInfo_h 2 #define DataFormats_BTauReco_IpTagInfo_h 15 #include <Math/VectorUtil.h> 50 template <
class Container,
class Base>
57 const std::vector<btag::TrackIPData> & ipData,
58 const std::vector<float> & prob2d,
59 const std::vector<float> & prob3d,
65 Base(base), m_data(ipData), m_prob2d(prob2d),
66 m_prob3d(prob3d), m_selected(selected), m_pv(pv),
67 m_axis(axis), m_ghostTrack(ghostTrack) {}
86 {
return m_data.size() == m_prob3d.size(); }
103 const std::vector<float> &
probabilities(
int ip)
const {
return (ip==0)?m_prob3d:m_prob2d; }
128 Container sorted(
const std::vector<size_t>& indexes)
const;
145 std::vector<
float> m_prob2d;
146 std::vector<
float> m_prob3d;
169 std::vector<size_t> indexes = sortedIndexes();
170 for(std::vector<size_t>::const_iterator it = indexes.begin();
171 it != indexes.end(); ++it)
177 double trackMag =
std::sqrt(trackMom.Mag2());
208 for(
size_t i =0 ;
i < indexes.size();
i++) tr.push_back(m_selected[indexes[
i]]);
220 for(
size_t i = 0 ;
i< m_selected.size();
i++) {
224 double trackpT = track->
pt();
243 return sortedIndexesWithCut(cut,mode);
248 std::multimap<float,size_t> sortedIdx;
249 size_t nSelectedTracks = m_selected.size();
250 std::vector<size_t>
result;
254 if((mode ==
Prob3D || mode ==
Prob2D) && ! hasProbabilities())
259 for(
size_t i=0;
i<nSelectedTracks;
i++)
265 sortingKey=m_data[
i].ip3d.significance();
268 sortingKey=m_data[
i].ip2d.significance();
271 sortingKey=m_data[
i].ip3d.value();
274 sortingKey=m_data[
i].ip2d.value();
277 sortingKey=m_prob3d[
i];
280 sortingKey=m_prob2d[
i];
286 sortedIdx.insert(std::pair<float,size_t>(sortingKey,
i));
292 for(std::multimap<float,size_t>::reverse_iterator it = sortedIdx.rbegin(); it!=sortedIdx.rend(); it++)
293 if(it->first >= cut) result.push_back(it->second);
297 for(std::multimap<float,size_t>::iterator it = sortedIdx.begin(); it!=sortedIdx.end(); it++)
298 if(it->first <= cut) result.push_back(it->second);
309 double deltaRfunction_highpt = -jetpT * params.
a_dR + params.
b_dR;
310 double ptfunction_highpt = jetpT * params.
a_pT + params.
b_pT;
312 if (jettrackdR < deltaRfunction_highpt
314 trackpT > ptfunction_highpt)
320 }
else if (jetpT > params.
max_pT ) {
IPTagInfo(const std::vector< btag::TrackIPData > &ipData, const std::vector< float > &prob2d, const std::vector< float > &prob3d, const Container &selected, const Base &base, const edm::Ref< VertexCollection > &pv, const GlobalVector &axis, const TrackRef &ghostTrack)
const GlobalVector & axis() const
const std::vector< float > & probabilities(int ip) const
edm::Ref< Container > Ref
std::vector< bool > variableJTA(const btag::variableJTAParameters ¶ms) const
Container sorted(const std::vector< size_t > &indexes) const
double normalizedChi2() const
chi-squared divided by n.d.o.f. (or chi-squared * 1e6 if n.d.o.f. is zero)
int numberOfValidHits() const
double etaRel(const math::XYZVector &dir, const math::XYZVector &track)
Global3DPoint GlobalPoint
const Container & selectedTracks() const
std::vector< Vertex > VertexCollection
collection of Vertex objects
const Vector & momentum() const
track momentum vector
#define CMS_CLASS_VERSION(_version_)
const reco::Track * toTrack(const reco::TrackBaseRef &t)
const edm::Ref< VertexCollection > & primaryVertex() const
static bool passVariableJTA(const btag::variableJTAParameters ¶ms, double jetpt, double trackpt, double jettrackdr)
std::vector< size_t > sortedIndexesWithCut(float cut, btag::SortCriteria mode=reco::btag::IP3DSig) const
Measurement1D distanceToGhostTrack
const Container & selected() const
double pt() const
track transverse momentum
IPTagInfo * clone(void) const override
clone
def template(fileName, svg, replaceme="REPLACEME")
base
Make Sure CMSSW is Setup ##.
std::vector< size_t > sortedIndexes(btag::SortCriteria mode=reco::btag::IP3DSig) const
const std::vector< btag::TrackIPData > & impactParameterData() const
const Track * selectedTrack(size_t i) const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalVector
vector in glovbal coordinate system
double significance() const
GlobalPoint closestToJetAxis
const HitPattern & hitPattern() const
Access the hit pattern, indicating in which Tracker layers the track has hits.
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Measurement1D distanceToJetAxis
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalPoint
point in global coordinate system
char data[epos_bytes_allocation]
GlobalPoint closestToGhostTrack
const TrackRef & ghostTrack() const
int numberOfValidPixelHits() const
Container input_container
Container sortedTracks(const std::vector< size_t > &indexes) const
edm::AssociationVector< reco::JetRefBaseProd, Values > Container
virtual bool hasProbabilities() const
void insert(const TaggingVariable &variable, bool delayed=false)