11 #include "TLorentzVector.h"
21 VertexTrackIsolation::VertexTrackIsolation(
const std::string&
t,
const std::string&
n,
const IInterface*
p)
22 : base_class(
t,
n,
p),
23 m_trackIsoTool(
"xAOD::TrackIsolationTool"),
24 m_trackContainerName(
"InDetTrackParticles"),
25 m_vertexContainerName(
"NONE"),
30 m_fixElecExclusion(false),
39 declareProperty(
"IsolationTypes",
m_cones);
43 "New property to deal with track isolation per track, the default option "
44 "(m_doIsoPerTrk=false) preserves the old behavior");
70 return StatusCode::SUCCESS;
77 return StatusCode::SUCCESS;
84 if (theVtx1 == theVtx2)
90 bool firstTwoAreSame =
92 std::set<const xAOD::TrackParticle*>(
96 std::set<const xAOD::TrackParticle*>(
98 if (firstTwoAreSame && lastTwoAreSame)
103 std::set<const xAOD::TrackParticle*> vtxset1;
104 std::set<const xAOD::TrackParticle*> vtxset2;
109 return vtxset1 == vtxset2;
114 const std::vector<const xAOD::Vertex*>& theColl)
const {
115 for (
const auto vtxPtr : theColl) {
116 if (
isSame(vtxPtr, theVtx))
132 ATH_MSG_ERROR(
"Failed loading IdTrackparticleContainer container");
133 return StatusCode::FAILURE;
141 return StatusCode::FAILURE;
144 std::vector<const xAOD::Vertex*> outVtxContainer;
148 std::vector<xAOD::Iso::IsolationType> cones(
m_cones.size());
150 for (
unsigned int i = 0;
i <
m_cones.size();
i++)
155 return xAOD::Iso::coneSize(i) > xAOD::Iso::coneSize(j);
159 for (
auto vertex : *vertexContainer) {
162 for (std::vector<std::string>::const_iterator flagItr =
m_passFlags.begin(); flagItr !=
m_passFlags.end();
178 outVtxContainer.push_back(
vertex);
182 TLorentzVector candidate;
184 std::set<const xAOD::TrackParticle*> exclusionset;
186 for (
auto part :
vertex->trackParticleLinks()) {
188 candidate += (*part)->p4();
194 exclusionset.insert(
partID);
196 exclusionset.insert(*
part);
204 V0VertexLinksAcc(
"V0VertexLinks");
205 auto V0VertLink = V0VertexLinksAcc(*
vertex);
206 const xAOD::Vertex* V0Vert = V0VertLink.at(0).getDataPtr()->at(0);
208 candidate += (*part)->p4();
209 exclusionset.insert(*
part);
227 const string vtxType_name[3] = {
"SumPt",
"A0",
"Z0"};
238 for (
unsigned int i = 0;
i < cones.size();
i++) {
243 if(refVtx ==
nullptr){
250 m_trackIsoTool->trackIsolation(
result, candidate_slyTrack, cones, corrlist, refVtx, &exclusionset,
251 idTrackParticleContainer);
254 for (
unsigned int i = 0;
i < cones.size();
i++) {
257 variableName += vtxType_name[vertex_type];
263 for (
size_t i = 0;
i <
vertex->nTrackParticles();
i++) {
265 idTrackParticleContainer);
267 for (
unsigned int j = 0; j < cones.size(); j++) {
269 variableName += vtxType_name[vertex_type];
270 variableName +=
"_trk";
282 return StatusCode::SUCCESS;