32 std::vector<std::vector<ElementLink<xAOD::IParticleContainer> > >* matchedparts =
33 new vector<std::vector<ElementLink<xAOD::IParticleContainer> > >(jets.size());
39 const std::vector<ElementLink<xAOD::VertexContainer>>& vertexLink_vec = trkOrigin(*part);
40 const std::vector<float>& z0SinTheta_vec = z0SinTheta(*part);
42 if(z0SinTheta_vec.empty())
continue;
44 unsigned int selectedVertexIndex = -1;
47 auto minAbsIt = std::min_element(z0SinTheta_vec.begin(), z0SinTheta_vec.end(),
48 [](
float a,
float b) {
49 return std::abs(a) < std::abs(b);
52 if (minAbsIt != z0SinTheta_vec.end()) {
53 selectedVertexIndex = std::distance(z0SinTheta_vec.begin(), minAbsIt);
57 for (
unsigned int iVtx=0; iVtx < z0SinTheta_vec.size(); iVtx++){
64 ATH_MSG_WARNING(
"Track decoration 'btagIp_TrkOriginVertex' is missing for this track");
68 if (z0SinTheta_vec.at(iVtx) >
m_dzCut)
continue;
72 const Vertex* vtx_to_trk = *vertexLink;
76 for (
unsigned int iJet = 0; iJet < jets.size(); iJet++) {
78 const Jet*
jet = jets[iJet];
80 if (
jet->getAssociatedObject<
xAOD::Vertex>(
"OriginVertex") != vtx_to_trk)
continue;
84 double dr =
jet->p4().DeltaR(part->p4());
85 if (dr > match_dr)
continue;
86 if (drmin < 0 || dr < drmin) {
91 if (matchjetidx >= 0) {
93 EL.toContainedElement(parts, part);
94 (*matchedparts)[matchjetidx].push_back(
EL);
JetParticleAssociation(const std::string &name)
double coneSize(double pt) const
JetParticleOriginVertexAssociation(const std::string &name)
virtual const std::vector< std::vector< ElementLink< xAOD::IParticleContainer > > > * match(const xAOD::JetContainer &, const xAOD::IParticleContainer &) const override
Class providing the definition of the 4-vector interface.