ATLAS Offline Software
BVertexClosestTrackTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //============================================================================
6 // BVertexClosestTrackTool.cxx
7 //============================================================================
8 //
9 // Author : Wolfgang Walkowiak <Wolfgang.Walkowiak@cern.ch.>
10 // Changes:
11 //
12 // Add B vertex closest track information for different configurations,
13 // different track selections and different PV-to-SV association methods.
14 //
15 // For an usage example see BPHY8.py .
16 //
17 // Job options provided by this class:
18 // - CloseTrackChi2SetName -- list with labels for the following
19 // four settings (all five lists must
20 // be of exactly same length)
21 // - CloseTrackCorrChi2 -- list with options for using the
22 // SV uncertainties in the chi2 calculation
23 // in addition to track uncertainties
24 // 0 : use old method
25 // (only track uncertainties)
26 // 1 : from track perigee with
27 // uncertainties from track and vertex
28 // 2 : simple extrapolation from track
29 // parameters with uncertainties from
30 // track and vertex (extrapolation
31 // used for track swimming)
32 // - CloseTrackMinDCAin3D -- use 3-dimensional information in
33 // minimization (list)
34 // - CloseTrackMaxLogChi2 -- maximum chi2 distance of closest track
35 // to B vertex (list)
36 // - NCloseTrackMaxLogChi2 -- maximum chi2 distance of track
37 // to B vertex for track counting (list)
38 //
39 //============================================================================
40 //
42 #include "xAODMuon/MuonContainer.h"
44 #include "xAODBPhys/BPhysHelper.h"
47 #include "AthLinks/ElementLink.h"
48 
49 #include "boost/format.hpp"
50 #include "TVector3.h"
51 #include <algorithm>
52 #include <sstream>
53 
54 namespace DerivationFramework {
55 
56  //-------------------------------------------------------------------------
57  //
58  // helper class
60  const std::string& Bname,
61  const std::string& Prefix,
62  double Dca, double DcaErr,
63  double Zca, double ZcaErr,
64  double VtxNDErr2, double TrkNDErr2, double Phi0Used,
65  int NTrksChi2,
66  xAOD::TrackParticle* CloseTrack,
67  const TrackBag& Tracks,
68  const std::vector<std::vector<double> >& Vtap,
69  const std::vector<unsigned short>& Selpat)
70  : BaseItem(Name, Bname, Prefix), dca(Dca), dcaErr(DcaErr),
71  zca(Zca), zcaErr(ZcaErr), vtxNDErr2(VtxNDErr2), trkNDErr2(TrkNDErr2),
72  phi0Used(Phi0Used),
73  nTrksChi2(NTrksChi2), closeTrack(CloseTrack),
74  tracks(Tracks), vtap(Vtap), selpat(Selpat) {
75  }
76 
78  }
79 
81  const std::string& Bname,
82  const std::string& Prefix) {
83  BaseItem::setup(Name, Bname, Prefix);
84  dca = -999.;
85  dcaErr = -99.;
86  zca = -999.;
87  zcaErr = -99.;
88  vtxNDErr2 = -99.;
89  trkNDErr2 = -99.;
90  phi0Used = -999.;
91  nTrksChi2 = 0;
92  closeTrack = NULL;
93  tracks.clear();
94  vtap.clear();
95  selpat.clear();
96  }
97 
99  const std::string& Bname,
100  const std::string& Prefix,
101  double Dca, double DcaErr,
102  double Zca, double ZcaErr,
103  double VtxNDErr2, double TrkNDErr2, double Phi0Used,
104  int NTrksChi2,
106  CloseTrack,
108  std::vector<std::vector<double> > Vtap,
109  std::vector<unsigned short> Selpat) {
110  BaseItem::setup(Name, Bname, Prefix);
111  dca = Dca;
112  dcaErr = DcaErr;
113  zca = Zca;
114  zcaErr = ZcaErr;
115  vtxNDErr2 = VtxNDErr2;
116  trkNDErr2 = TrkNDErr2;
117  phi0Used = Phi0Used;
118  nTrksChi2 = NTrksChi2;
119  closeTrack = CloseTrack;
120  tracks = Tracks;
121  vtap = Vtap;
122  selpat = Selpat;
123  }
124 
126  dca = -999.;
127  dcaErr = -99.;
128  zca = -999.;
129  zcaErr = -99.;
130  vtxNDErr2 = -99.;
131  trkNDErr2 = -99.;
132  phi0Used = -999.;
133  nTrksChi2 = 0;
134  closeTrack = NULL;
135  tracks.clear();
136  vtap.clear();
137  selpat.clear();
138  }
139 
141  copyVals((const CtItem&)item);
142  }
143 
145  dca = item.dca;
146  dcaErr = item.dcaErr;
147  zca = item.zca;
148  zcaErr = item.zcaErr;
149  vtxNDErr2 = item.vtxNDErr2;
150  trkNDErr2 = item.trkNDErr2;
151  phi0Used = item.phi0Used;
152  nTrksChi2 = item.nTrksChi2;
153  closeTrack = item.closeTrack;
154  tracks = item.tracks;
155  vtap = item.vtap;
156  selpat = item.selpat;
157  }
158 
160  return buildName("DCA");
161  }
162 
164  return buildName("DCAError");
165  }
166 
168  return buildName("ZCA");
169  }
170 
172  return buildName("ZCAError");
173  }
174 
176  return buildName("VtxNDError2");
177  }
178 
180  return buildName("TrkNDError2");
181  }
182 
184  return buildName("Phi0Used");
185  }
186 
188  return buildName("NTracksChi2");
189  }
190 
192  return buildName("CloseTrack", "_Link");
193  }
194 
196  boost::format f1("dca: %10.6f %10.6f zca: %10.6f %10.6f nt: %10d");
197  f1 % dca % dcaErr % zca % zcaErr % nTrksChi2;
198  boost::format f2("%s\n %s\n");
200  f2 % f1.str();
201  std::string rstr = f2.str();
202  rstr += "per track: p(px, py, pz)\n";
203  rstr += " d(d0, z0, phi, theta, qoverp)\n";
204  rstr += " d0, d0Err, z0, z0Err, logChi2, dca, okFlag\n";
205  rstr += " vtxNDErr2, trkNDErr2, phi0Used\n";
206  rstr += " vtxNDErr, trkNDErr, log(chi2Err2Sum)\n";
207  // loop over tracks
208  if (tracks.size() == vtap.size() && vtap.size() == selpat.size()) {
209  for (unsigned int i=0; i<tracks.size(); ++i) {
210  boost::format f3(" %3d %2d ");
211  f3 % i % selpat[i];
212  std::string f3str = f3.str();
213  // 0: d0, 1: d0Err, 2: z0, 3: z0Err, 4: logChi2, 5: dca, 6: okFlag
214  // 7: vtxNDErr2, 8: trkNDErr2, 9: phi0Used
215  boost::format f4("%s\nd0: %10.4f %10.4f z0: %10.4f %10.4f "
216  "lc2: %10.4f dca: %10.4f ok: %3f\n"
217  "vtxNDErr2: %10.4f trkNDErr2: %10.4f "
218  "phi0Used: %10.4f\n"
219  "vtxNDErr: %10.4f trkNDErr2 %10.4f "
220  "logChi2Err2Sum: %10.4f");
221  f4 % trackToString(tracks[i]);
222  f4 % vtap[i][0] % vtap[i][1] % vtap[i][2] % vtap[i][3];
223  f4 % vtap[i][4] % vtap[i][5] % vtap[i][6];
224  f4 % vtap[i][7] % vtap[i][8] % vtap[i][9];
225  f4 % (vtap[i][7] < 0. ? -99. : sqrt(vtap[i][7]));
226  f4 % (vtap[i][8] < 0. ? -99. : sqrt(vtap[i][8]));
227  f4 % (vtap[i][7]+vtap[i][8] > 0. ?
228  log(vtap[i][5]*vtap[i][5]/(vtap[i][7]+vtap[i][8])) : -999.);
229  std::string tstr = wrapLines(f4.str(),
230  std::string(f3str.length(), ' '));
231  tstr.replace(0,f3str.length(),f3str);
232  rstr.append(tstr+"\n");
233  } // for i
234  } else {
235  boost::format f5("Mismatch: nTracks: %d nVtap: %d nSelpat: %d\n");
236  // cppcheck-suppress ignoredReturnValue; false positive
237  f5 % tracks.size() % vtap.size() % selpat.size();
238  rstr.append(f5.str());
239  } // if sizes
240 
241  rstr.erase(rstr.length()-1);
242  return rstr;
243  }
244 
245  //--------------------------------------------------------------------------
247  const std::string& n,
248  const IInterface* p)
250  m_svIdx(0) {
251 
252  declareInterface<DerivationFramework::IAugmentationTool>(this);
253 
254  declareProperty("CloseTrackChi2SetName", m_closeTrackChi2SetName = {"def"});
255  declareProperty("CloseTrackCorrChi2" , m_closeTrackCorrChi2 = {0});
256  declareProperty("CloseTrackMinDCAin3D" , m_minDCAin3D = {true});
257  declareProperty("CloseTrackMaxLogChi2" , m_closeTrackMaxLogChi2 = {-1.});
258  declareProperty("NCloseTrackMaxLogChi2", m_nCloseTrackMaxLogChi2 = {-1.});
259  }
260  //--------------------------------------------------------------------------
262 
263  ATH_MSG_DEBUG("BVertexClosestTrackTool::initializeHook() -- begin");
264 
265  // check job options
266  if ( m_closeTrackChi2SetName.size() == 0 ) {
267  ATH_MSG_ERROR("No chi2 set names provided!");
268  }
269  if ( m_closeTrackCorrChi2.size() == 0 ) {
270  ATH_MSG_ERROR("No use of corrected chi2 settings provided!");
271  }
272  if ( m_minDCAin3D.size() == 0 ) {
273  ATH_MSG_ERROR("No use of min DCA in 3D settings provided!");
274  }
275  if ( m_closeTrackMaxLogChi2.size() == 0 ) {
276  ATH_MSG_ERROR("No cuts on max log chi2 for DOCA calculation provided!");
277  }
278  if ( m_nCloseTrackMaxLogChi2.size() == 0 ) {
279  ATH_MSG_ERROR("No cuts on max log chi2 for nClosetTracks calculation "
280  "provided!");
281  }
282  if ( m_closeTrackCorrChi2.size() != m_closeTrackChi2SetName.size() ||
283  m_minDCAin3D.size() != m_closeTrackChi2SetName.size() ||
286  ATH_MSG_ERROR("Size mismatch of CloseTrackChi2SetName ("
287  << m_closeTrackChi2SetName.size() << "), "
288  << "CloseTrackCorrChi2 ("
289  << m_closeTrackCorrChi2 << "), "
290  << "CloseTrackMinDCAin3D ("
291  << m_minDCAin3D.size() << "), "
292  << "CloseTrackMaxLogChi2 ("
293  << m_closeTrackMaxLogChi2.size() << ") and/or "
294  << "NCloseTrackMaxLogChi2 ("
295  << m_nCloseTrackMaxLogChi2.size() << ")");
296  }
297 
298  // initialize results array
299  initResults();
300 
301  ATH_MSG_DEBUG("BVertexClosestTrackTool::initializeHook() -- end");
302 
303  return StatusCode::SUCCESS;
304  }
305  //--------------------------------------------------------------------------
307 
308  ATH_MSG_DEBUG("BVertexClosestTrackTool::finalizeHook()");
309 
310  // everything all right
311  return StatusCode::SUCCESS;
312  }
313  //--------------------------------------------------------------------------
314  StatusCode
316 
317  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesVCLoopHook() -- begin");
318 
319  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesVCSetupHook: "
320  << "Vertex container index " << ivc
321  << " for collection " << m_vertexContainerNames[ivc]
322  << " with prefix " << m_branchPrefixes[ivc]);
323 
325 
326  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesVCSetupHook() -- end");
327 
328  // nothing to do here
329  return StatusCode::SUCCESS;
330  }
331 
332  //--------------------------------------------------------------------------
333  StatusCode
335 
336  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesSVLoopHook() -- begin");
337 
338  // calculate closest track values
339  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesSVLoopHook(): "
340  "calculate closest track ...");
341  CHECK(calculateValues(vtx));
342 
343  // save the closest track values
344  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesSVLoopHook(): "
345  "save closest track ...");
346  CHECK(saveClosestTrack(vtx));
347 
348  // dump close track item debugging information
351  }
352 
353  ATH_MSG_DEBUG("BVertexClosestTrackTool::addBranchesSVLoopHook() -- end");
354 
355  // nothing to do here
356  return StatusCode::SUCCESS;
357  }
358  //--------------------------------------------------------------------------
359  // Calculate closest track variables -- method called from caching loop
360  //--------------------------------------------------------------------------
361  StatusCode
363  const unsigned int ipv,
364  const unsigned int its,
365  const unsigned int itt) const {
366 
367  ATH_MSG_DEBUG("calcValuesHook: ipv: " << ipv
368  << ", its: " << its << ", itt: " << itt);
369 
370  // candidate tracks and momentum
371  xAOD::BPhysHelper cand(vtx);
372 
373  // tracks to be considered
374  TrackBag tracks = selectTracks(m_tracks, cand, ipv, its, itt);
375 
376  // loop over chi2 setting sets
377  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
378  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
379 
380  CtItem& cti = m_results[its][ipv][itt][ics];
381 
382  // presets
383  cti.resetVals();
384 
385  double closestTrkDCA = 9999.;
386  int closestTrkIdx(-1);
387  unsigned int trkIdx(0);
388  for (TrackBag::const_iterator trkItr = tracks.begin();
389  trkItr != tracks.end(); ++trkItr, ++trkIdx) {
390 
391  //
392  // track selection bit pattern:
393  // bit 0 : included in number of close tracks
394  // bit 1 : chosen as closest track
395  //
396  unsigned short selpat(0);
397 
398  // Returned vector components:
399  // 0: d0, 1: d0Err, 2: z0, 3: z0Err, 4: logChi2, 5: dca, 6: okFlag
400  // 7: vtxErrPart2, 8: trkErrPart2, 9: phi0Used
401  std::vector<double> vtap =
402  getTrackLogChi2DCA(*trkItr, cand.vtx(),
404  ATH_MSG_DEBUG("calcValuesHook: track: " << *trkItr
405  << ", logChi2: " << vtap[4] << ", dca: " << vtap[5]);
406 
407  // track values at perigee found?
408  if ( vtap[6] >= 0. ) {
409  ATH_MSG_DEBUG("calcValuesHook: checking track count for "
410  "m_nCloseTrackMaxLogChi2[ics] = "
411  << m_nCloseTrackMaxLogChi2[ics]);
412  // count tracks
413  if ( vtap[4] < m_nCloseTrackMaxLogChi2[ics] ) {
414  cti.nTrksChi2++;
415  selpat |= 1;
416  ATH_MSG_DEBUG("calcValuesHook: nTrksChi2++ for track " << *trkItr);
417  }
418  // find closest track
419  ATH_MSG_DEBUG("calcValuesHook: log(chi2) check: "
420  "m_closeTrackMaxLogChi2[ics]: "
421  << m_closeTrackMaxLogChi2[ics]
422  << ", logChi2: " << vtap[4]
423  << ", closestTrkDCA: " << closestTrkDCA
424  << ", dca: " << fabs(vtap[5]));
425  if ( fabs(vtap[5]) < closestTrkDCA &&
426  vtap[4] < m_closeTrackMaxLogChi2[ics] ) {
427  closestTrkDCA = fabs(vtap[5]);
428  cti.dca = vtap[0];
429  cti.dcaErr = vtap[1];
430  cti.zca = vtap[2];
431  cti.zcaErr = vtap[3];
432  cti.vtxNDErr2 = vtap[7];
433  cti.trkNDErr2 = vtap[8];
434  cti.phi0Used = vtap[9];
435  cti.closeTrack = *trkItr;
436  closestTrkIdx = trkIdx;
437  ATH_MSG_DEBUG("calcValuesHook: closestTrkDCA now: "
438  << closestTrkDCA
439  << " for track " << *trkItr);
440  }
441  } // if ok
442  cti.tracks.push_back(*trkItr);
443  cti.vtap.push_back(vtap);
444  cti.selpat.push_back(selpat);
445  } // for tracks
446  // mark closest track
447  if (closestTrkIdx > -1 && closestTrkIdx < (int)cti.selpat.size()) {
448  cti.selpat[closestTrkIdx] |= 2;
449  }
450  } // for ics
451 
452  return StatusCode::SUCCESS;
453  }
454  //--------------------------------------------------------------------------
455  // Fill closest track values from cache if found
456  //--------------------------------------------------------------------------
458  const int ipv) const {
459 
460  ATH_MSG_DEBUG("fastFillHook: ipv: " << ipv);
461 
462  bool found(false);
463 
465  m_pvAssocResMap.find(buildPvAssocCacheName(vtx, ipv));
466  if ( itpv != m_pvAssocResMap.end() ) {
467  found = true;
468  unsigned int nTrackSels = m_trackSelectionTools.size();
469  unsigned int nTrackTypes = m_useTrackTypes.size();
470  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
471  for (unsigned int its = 0; its < nTrackSels; ++its) {
472  for (unsigned int itt = 0; itt < nTrackTypes; ++itt) {
473  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
474  m_results[its][ipv][itt][ics]
475  .copyVals(m_results[its][itpv->second][itt][ics]);
476  } // for ics
477  } // for its
478  } // for itt
479  } // if found
480 
481  ATH_MSG_DEBUG("fastFillHook: cache index: "
482  << buildPvAssocCacheName(vtx, ipv)
483  << ", found ? " << found
484  << ", ipv_ref: "
485  << (found ? itpv->second : -1));
486 
487  return found;
488  }
489  //--------------------------------------------------------------------------
490  StatusCode
492 
494 
495  unsigned int nTrackSels = m_trackSelectionTools.size();
496  unsigned int nPvAssocs = m_pvAssocTypes.size();
497  unsigned int nTrackTypes = m_useTrackTypes.size();
498  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
499 
500  for (unsigned int its = 0; its < nTrackSels; ++its) {
501  for (unsigned int ipv = 0; ipv < nPvAssocs; ++ipv) {
502  for (unsigned int itt = 0; itt < nTrackTypes; ++itt) {
503  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
504  CtItem result = m_results[its][ipv][itt][ics];
506  d_dca_value(result.dcaName());
508  d_dcaErr_value(result.dcaErrName());
510  d_zca_value(result.zcaName());
512  d_zcaErr_value(result.zcaErrName());
514  d_nTrksChi2_value(result.nTrksChi2Name());
515  d_dca_value(*vtx) = result.dca;
516  d_dcaErr_value(*vtx) = result.dcaErr;
517  d_zca_value(*vtx) = result.zca;
518  d_zcaErr_value(*vtx) = result.zcaErr;
519  d_nTrksChi2_value(*vtx) = result.nTrksChi2;
520  ATH_MSG_DEBUG("BVertexClosestTrackTool::saveClosestTrack() "
521  << "-- dca: " << result.dcaName()
522  << ", dcaErr: " << result.dcaErrName()
523  << ", zca: " << result.zcaName()
524  << ", zcaErr: " << result.zcaErrName()
525  << ", nTrksChi2: " << result.nTrksChi2Name());
526  ATH_MSG_DEBUG("BVertexClosestTrackTool::saveClosestTrack() "
527  << "-- vertex: ("
528  << vtx->x() << ", "
529  << vtx->y() << ", "
530  << vtx->z() << ")"
531  << ", dca: " << result.dca
532  << ", dcaErr: " << result.dcaErr
533  << ", zca: " << result.zca
534  << ", zcaErr: " << result.zcaErr
535  << ", nTrksChi2: " << result.nTrksChi2);
536  // add ElementLink to closest track
537  std::string linkName = result.closeTrackName();
539  tpLinkDecor(linkName);
540  TrackParticleLink_t tpLink;
541  if ( result.closeTrack != NULL ) {
542  tpLink.toContainedElement( *m_tracks, result.closeTrack );
543  }
544  ATH_MSG_DEBUG("saveClosestTrack: Decorate vtx "
545  << vtx << " with " << linkName
546  << ", closeTrkPtr: " << result.closeTrack);
547  tpLinkDecor(*vtx) = tpLink;
548  if ( tpLink.isValid() ) {
549  ATH_MSG_DEBUG("saveClosestTrack: Decorated vtx "
550  << vtx << " with " << linkName
551  << ", closeTrkPtr: " << result.closeTrack);
552  } else {
553  ATH_MSG_VERBOSE("saveClosestTrack: Failed to decorate vtx "
554  << vtx << " with " << linkName
555  << ", closeTrkPtr: "
556  << result.closeTrack << " !");
557  }
558  // if valid
559  } // for ics
560  } // for itt
561  } // for ipv
562  } // for its
563 
564  return StatusCode::SUCCESS;
565  }
566  //--------------------------------------------------------------------------
568 
569  ATH_MSG_DEBUG("BVertexClosestTrackTool::setResultsPrefix -- begin");
570 
571  unsigned int nTrackSels = m_trackSelectionTools.size();
572  unsigned int nPvAssocs = m_pvAssocTypes.size();
573  unsigned int nTrackTypes = m_useTrackTypes.size();
574  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
575 
576  for (unsigned int its = 0; its < nTrackSels; ++its) {
577  for (unsigned int ipv = 0; ipv < nPvAssocs; ++ipv) {
578  for (unsigned int itt = 0; itt < nTrackTypes; ++itt) {
579  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
580  m_results[its][ipv][itt][ics].setPrefix(prefix);
581  } // for ics
582  } // for itt
583  } // for ipv
584  } // for its
585 
586  ATH_MSG_DEBUG("BVertexClosestTrackTool::setResultsPrefix -- end");
587  }
588  //--------------------------------------------------------------------------
590 
591  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- begin");
592 
593  unsigned int nTrackSels = m_trackSelectionTools.size();
594  unsigned int nPvAssocs = m_pvAssocTypes.size();
595  unsigned int nTrackTypes = m_useTrackTypes.size();
596  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
597 
598  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults : nTrackSels = "
599  << nTrackSels);
600  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults : nPvAssocs = "
601  << nPvAssocs);
602  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults : nTrackTypes = "
603  << nTrackTypes);
604  m_results.resize(boost::extents[nTrackSels][nPvAssocs][nTrackTypes][nChi2Sets]);
605  for (unsigned int its = 0; its < nTrackSels; ++its) {
606  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- its = " << its);
607  for (unsigned int ipv = 0; ipv < nPvAssocs; ++ipv) {
608  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- ipv = " << ipv);
609  for (unsigned int itt = 0; itt < nTrackTypes; ++itt) {
610  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- itt = "
611  << itt);
612  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
613  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- ics = "
614  << ics);
615  std::string csname = m_closeTrackChi2SetName[ics];
616  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults : "
617  << m_branchBaseName << ", "
618  << buildBranchBaseName(its, ipv, itt, csname));
619  m_results[its][ipv][itt][ics].setup(buildBranchBaseName(its, ipv,
620  itt,
621  csname),
623  } // for ics
624  } // for itt
625  } // for ipv
626  } // for its
627 
628  ATH_MSG_DEBUG("BVertexClosestTrackTool::initResults -- end");
629  }
630  //--------------------------------------------------------------------------
631  // Dump CloseTracks debug information to log file
632  //--------------------------------------------------------------------------
634 
635  // Count candidates
639  m_svIdx = 0;
640  } else {
641  m_svIdx++;
642  }
643 
644  std::string str(">>>>> logCloseTracksDebugInfo:\n");
645  boost::format f("Run %d Event %d SV %d\n");
647  str.append(f.str());
648 
649  unsigned int nTrackSels = m_trackSelectionTools.size();
650  unsigned int nPvAssocs = m_pvAssocTypes.size();
651  unsigned int nTrackTypes = m_useTrackTypes.size();
652  unsigned int nChi2Sets = m_closeTrackChi2SetName.size();
653 
654  for (unsigned int its = 0; its < nTrackSels; ++its) {
655  for (unsigned int ipv = 0; ipv < nPvAssocs; ++ipv) {
656  for (unsigned int itt = 0; itt < nTrackTypes; ++itt) {
657  for (unsigned int ics = 0; ics < nChi2Sets; ++ics) {
658  boost::format f1("its: %d ipv: %d itt: %d ics: %d\n");
659  f1 % its % ipv % itt % its;
660  str.append(f1.str());
661  CtItem result = m_results[its][ipv][itt][ics];
662  str.append(result.toString()+"\n");
663  } // for ics
664  } // for itt
665  } // for ipv
666  } // for its
667 
668  str.append("<<<<< logCloseTracksDebugInfo");
669  ATH_MSG_INFO(str);
670 
671  return StatusCode::SUCCESS;
672  }
673  //--------------------------------------------------------------------------
674 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
DerivationFramework::BVertexClosestTrackTool::addBranchesVCSetupHook
virtual StatusCode addBranchesVCSetupHook(size_t ivc) const
Definition: BVertexClosestTrackTool.cxx:315
DerivationFramework::BVertexClosestTrackTool::CtItem::vtxNDErr2
double vtxNDErr2
Definition: BVertexClosestTrackTool.h:91
DerivationFramework::BVertexClosestTrackTool::CtItem::copyVals
virtual void copyVals(const BaseItem &item)
Definition: BVertexClosestTrackTool.cxx:140
DerivationFramework::BPhysVertexTrackBase::BaseItem::toString
virtual std::string toString() const
Definition: BPhysVertexTrackBase.cxx:212
xAOD::Vertex_v1::x
float x() const
Returns the x position.
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
get_generator_info.result
result
Definition: get_generator_info.py:21
xAOD::BPhysHelper
Definition: BPhysHelper.h:71
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
DerivationFramework::BPhysVertexTrackBase::m_pvAssocTypes
std::vector< xAOD::BPhysHelper::pv_type > m_pvAssocTypes
Definition: BPhysVertexTrackBase.h:280
DerivationFramework::BVertexClosestTrackTool::saveClosestTrack
virtual StatusCode saveClosestTrack(const xAOD::Vertex *vtx) const
Definition: BVertexClosestTrackTool.cxx:491
DerivationFramework::BVertexClosestTrackTool::logCloseTracksDebugInfo
virtual StatusCode logCloseTracksDebugInfo() const
Definition: BVertexClosestTrackTool.cxx:633
vtune_athena.format
format
Definition: vtune_athena.py:14
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
DerivationFramework::BVertexClosestTrackTool::CtItem::dcaName
virtual std::string dcaName() const
Definition: BVertexClosestTrackTool.cxx:159
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DerivationFramework::BVertexClosestTrackTool::CtItem::tracks
TrackBag tracks
Definition: BVertexClosestTrackTool.h:96
EventPrimitivesHelpers.h
DerivationFramework::BPhysVertexTrackBase::m_pvAssocResMap
StringIntMap_t m_pvAssocResMap
Definition: BPhysVertexTrackBase.h:289
DerivationFramework::BVertexClosestTrackTool::CtItem::dcaErrName
virtual std::string dcaErrName() const
Definition: BVertexClosestTrackTool.cxx:163
DerivationFramework::BPhysVertexTrackBase::BaseItem::setup
virtual void setup(const std::string &Name, const std::string &Bname="iso", const std::string &Prefix="")
Definition: BPhysVertexTrackBase.cxx:185
DerivationFramework::BPhysVertexTrackBase::m_runNumber
unsigned int m_runNumber
Definition: BPhysVertexTrackBase.h:298
DerivationFramework::BPhysVertexTrackBase::m_evtNumber
uint64_t m_evtNumber
Definition: BPhysVertexTrackBase.h:299
DerivationFramework::BPhysVertexTrackBase::m_useTrackTypes
std::vector< uint64_t > m_useTrackTypes
Definition: BPhysVertexTrackBase.h:260
DerivationFramework::BVertexClosestTrackTool::m_lastEvtNumber
uint64_t m_lastEvtNumber
Definition: BVertexClosestTrackTool.h:142
DerivationFramework::BVertexClosestTrackTool::CtItem::trkNDErr2Name
virtual std::string trkNDErr2Name() const
Definition: BVertexClosestTrackTool.cxx:179
DerivationFramework::BVertexClosestTrackTool::CtItem::vtxNDErr2Name
virtual std::string vtxNDErr2Name() const
Definition: BVertexClosestTrackTool.cxx:175
DerivationFramework::BVertexClosestTrackTool::CtItem::dcaErr
double dcaErr
Definition: BVertexClosestTrackTool.h:88
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
DerivationFramework::BVertexClosestTrackTool::CtItem::CtItem
CtItem(const std::string &Name="_none_", const std::string &Bname="ctrk", const std::string &Prefix="", double Dca=-999., double DcaErr=-99., double Zca=-999., double ZcaErr=-99., double VtxNDErr2=-99., double TrkNDErr2=-99., double Phi0Used=-999., int NTrksChi2=0, xAOD::TrackParticle *CloseTrack=NULL, const TrackBag &Tracks={}, const std::vector< std::vector< double > > &Vtap={}, const std::vector< unsigned short > &Selpat={})
Definition: BVertexClosestTrackTool.cxx:59
DerivationFramework::BVertexClosestTrackTool::calcValuesHook
virtual StatusCode calcValuesHook(const xAOD::Vertex *vtx, const unsigned int ipv, const unsigned int its, const unsigned int itt) const
Definition: BVertexClosestTrackTool.cxx:362
DerivationFramework::BVertexClosestTrackTool::CtItem::phi0Used
double phi0Used
Definition: BVertexClosestTrackTool.h:93
DerivationFramework::BVertexClosestTrackTool::m_nCloseTrackMaxLogChi2
std::vector< double > m_nCloseTrackMaxLogChi2
Definition: BVertexClosestTrackTool.h:134
DerivationFramework::BVertexClosestTrackTool::initializeHook
virtual StatusCode initializeHook()
Definition: BVertexClosestTrackTool.cxx:261
DerivationFramework::BVertexClosestTrackTool::CtItem::nTrksChi2
int nTrksChi2
Definition: BVertexClosestTrackTool.h:94
DerivationFramework::BPhysVertexTrackBase::buildBranchBaseName
std::string buildBranchBaseName(unsigned int its, unsigned int ipv, unsigned int itt, const std::string &preSuffix="") const
Definition: BPhysVertexTrackBase.cxx:1316
DerivationFramework::BVertexClosestTrackTool::m_minDCAin3D
std::vector< bool > m_minDCAin3D
Definition: BVertexClosestTrackTool.h:132
read_hist_ntuple.f2
f2
Definition: read_hist_ntuple.py:20
DerivationFramework::BPhysVertexTrackBase::m_branchPrefixes
std::vector< std::string > m_branchPrefixes
Definition: BPhysVertexTrackBase.h:245
xAOD::EgammaParameters::f3
@ f3
fraction of energy reconstructed in 3rd sampling
Definition: EgammaEnums.h:54
DerivationFramework::BVertexClosestTrackTool::CtItem::zcaErrName
virtual std::string zcaErrName() const
Definition: BVertexClosestTrackTool.cxx:171
DerivationFramework::BVertexClosestTrackTool::m_closeTrackMaxLogChi2
std::vector< double > m_closeTrackMaxLogChi2
Definition: BVertexClosestTrackTool.h:133
DerivationFramework::BVertexClosestTrackTool::CtItem::setup
virtual void setup(const std::string &Name="_none_", const std::string &Bname="ctrk", const std::string &Prefix="")
Definition: BVertexClosestTrackTool.cxx:80
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
FlavorTagDiscriminants::internal::Tracks
std::vector< const xAOD::TrackParticle * > Tracks
Definition: DataPrepUtilities.h:65
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
DerivationFramework::BVertexClosestTrackTool::CtItem::~CtItem
virtual ~CtItem()
Definition: BVertexClosestTrackTool.cxx:77
DerivationFramework::BPhysVertexTrackBase::m_tracks
const xAOD::TrackParticleContainer * m_tracks
Definition: BPhysVertexTrackBase.h:271
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
DerivationFramework::BPhysVertexTrackBase::buildPvAssocCacheName
virtual std::string buildPvAssocCacheName(const xAOD::Vertex *vtx, const int ipv) const
Definition: BPhysVertexTrackBase.cxx:676
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
DerivationFramework::BVertexClosestTrackTool::CtItem::zca
double zca
Definition: BVertexClosestTrackTool.h:89
DerivationFramework::BVertexClosestTrackTool::CtItem::zcaErr
double zcaErr
Definition: BVertexClosestTrackTool.h:90
DerivationFramework::BPhysVertexTrackBase::m_branchBaseName
std::string m_branchBaseName
Definition: BPhysVertexTrackBase.h:246
DerivationFramework::BVertexClosestTrackTool::CtItem::zcaName
virtual std::string zcaName() const
Definition: BVertexClosestTrackTool.cxx:167
DerivationFramework::BPhysVertexTrackBase::calculateValues
StatusCode calculateValues(const xAOD::Vertex *vtx) const
Definition: BPhysVertexTrackBase.cxx:642
DerivationFramework::BVertexClosestTrackTool::fastFillHook
virtual bool fastFillHook(const xAOD::Vertex *vtx, const int ipv) const
Definition: BVertexClosestTrackTool.cxx:457
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
DerivationFramework::TrackBag
std::vector< const xAOD::TrackParticle * > TrackBag
Definition: BPhysAddMuonBasedInvMass.h:32
xAOD::Vertex_v1::z
float z() const
Returns the z position.
DerivationFramework
THE reconstruction tool.
Definition: ParticleSortingAlg.h:24
DerivationFramework::BPhysVertexTrackBase::trackToString
static std::string trackToString(const xAOD::TrackParticle *track)
Definition: BPhysVertexTrackBase.cxx:341
IInDetTrackSelectionTool.h
DerivationFramework::BVertexClosestTrackTool::CtItem::phi0UsedName
virtual std::string phi0UsedName() const
Definition: BVertexClosestTrackTool.cxx:183
DerivationFramework::BVertexClosestTrackTool::BVertexClosestTrackTool
BVertexClosestTrackTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: BVertexClosestTrackTool.cxx:246
DerivationFramework::BVertexClosestTrackTool::CtItem::resetVals
virtual void resetVals()
Definition: BVertexClosestTrackTool.cxx:125
DerivationFramework::BVertexClosestTrackTool::CtItem::dca
double dca
Definition: BVertexClosestTrackTool.h:87
DerivationFramework::BPhysVertexTrackBase::getTrackLogChi2DCA
std::vector< double > getTrackLogChi2DCA(const xAOD::TrackParticle *track, const xAOD::Vertex *vtx, bool doDCAin3D=false, int chi2DefToUse=0) const
Definition: BPhysVertexTrackBase.cxx:727
xAOD::BPhysHelper::vtx
const xAOD::Vertex * vtx() const
Getter method for the cached xAOD::Vertex.
Definition: BPhysHelper.h:108
DerivationFramework::BVertexClosestTrackTool::m_closeTrackChi2SetName
std::vector< std::string > m_closeTrackChi2SetName
Definition: BVertexClosestTrackTool.h:130
item
Definition: ItemListSvc.h:43
DerivationFramework::BPhysVertexTrackBase::wrapLines
static std::string wrapLines(const std::string &lines, const std::string &prefix)
Definition: BPhysVertexTrackBase.cxx:357
DerivationFramework::BPhysVertexTrackBase::m_trackSelectionTools
ToolHandleArray< TrkSelTool > m_trackSelectionTools
Definition: BPhysVertexTrackBase.h:250
EventInfo.h
MuonContainer.h
DerivationFramework::BVertexClosestTrackTool::CtItem::vtap
std::vector< std::vector< double > > vtap
Definition: BVertexClosestTrackTool.h:97
DerivationFramework::BPhysVertexTrackBase::selectTracks
TrackBag selectTracks(const xAOD::TrackParticleContainer *inpTracks, xAOD::BPhysHelper &cand, const unsigned int ipv, const unsigned int its, const unsigned int itt) const
Definition: BPhysVertexTrackBase.cxx:1230
BPhysHelper.h
: B-physics xAOD helpers.
DerivationFramework::BVertexClosestTrackTool::CtItem
Definition: BVertexClosestTrackTool.h:40
DerivationFramework::BVertexClosestTrackTool::initResults
virtual void initResults()
Definition: BVertexClosestTrackTool.cxx:589
Name
JetDumper::Name Name
Definition: JetDumper.cxx:19
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
python.CaloScaleNoiseConfig.str
str
Definition: CaloScaleNoiseConfig.py:78
DerivationFramework::BVertexClosestTrackTool::m_closeTrackCorrChi2
std::vector< int > m_closeTrackCorrChi2
Definition: BVertexClosestTrackTool.h:131
BVertexClosestTrackTool.h
DerivationFramework::BVertexClosestTrackTool::setResultsPrefix
virtual void setResultsPrefix(std::string prefix) const
Definition: BVertexClosestTrackTool.cxx:567
DerivationFramework::BPhysVertexTrackBase::m_vertexContainerNames
std::vector< std::string > m_vertexContainerNames
Definition: BPhysVertexTrackBase.h:248
DerivationFramework::BVertexClosestTrackTool::CtItem::nTrksChi2Name
virtual std::string nTrksChi2Name() const
Definition: BVertexClosestTrackTool.cxx:187
xAOD::Vertex_v1::y
float y() const
Returns the y position.
TrackParticleLink_t
INav4MomToTrackParticleAssocs::asso_link TrackParticleLink_t
Definition: INav4MomToTrackParticleAssocsCnv_p1.cxx:27
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
DerivationFramework::BPhysVertexTrackBase::BaseItem
Definition: BPhysVertexTrackBase.h:60
DerivationFramework::BPhysVertexTrackBase::m_debugTracksInThisEvent
bool m_debugTracksInThisEvent
Definition: BPhysVertexTrackBase.h:302
DerivationFramework::BVertexClosestTrackTool::m_lastRunNumber
unsigned int m_lastRunNumber
Definition: BVertexClosestTrackTool.h:141
DerivationFramework::BVertexClosestTrackTool::CtItem::trkNDErr2
double trkNDErr2
Definition: BVertexClosestTrackTool.h:92
DerivationFramework::BVertexClosestTrackTool::m_svIdx
unsigned int m_svIdx
Definition: BVertexClosestTrackTool.h:145
str
Definition: BTagTrackIpAccessor.cxx:11
DerivationFramework::BVertexClosestTrackTool::m_results
CtItem4_t m_results
Definition: BVertexClosestTrackTool.h:138
DerivationFramework::BVertexClosestTrackTool::CtItem::closeTrack
const xAOD::TrackParticle * closeTrack
Definition: BVertexClosestTrackTool.h:95
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
DerivationFramework::BPhysVertexTrackBase
Definition: BPhysVertexTrackBase.h:57
DerivationFramework::BVertexClosestTrackTool::CtItem::closeTrackName
virtual std::string closeTrackName() const
Definition: BVertexClosestTrackTool.cxx:191
DerivationFramework::BVertexClosestTrackTool::CtItem::selpat
std::vector< unsigned short > selpat
Definition: BVertexClosestTrackTool.h:98
DerivationFramework::BVertexClosestTrackTool::CtItem::toString
virtual std::string toString() const
Definition: BVertexClosestTrackTool.cxx:195
read_hist_ntuple.f1
f1
Definition: read_hist_ntuple.py:4
DerivationFramework::BVertexClosestTrackTool::finalizeHook
virtual StatusCode finalizeHook()
Definition: BVertexClosestTrackTool.cxx:306
DerivationFramework::BVertexClosestTrackTool::addBranchesSVLoopHook
virtual StatusCode addBranchesSVLoopHook(const xAOD::Vertex *vtx) const
Definition: BVertexClosestTrackTool.cxx:334