47 #include "AthLinks/ElementLink.h"
49 #include "boost/format.hpp"
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,
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),
73 nTrksChi2(NTrksChi2), closeTrack(CloseTrack),
74 tracks(
Tracks), vtap(Vtap), selpat(Selpat) {
81 const std::string& Bname,
82 const std::string& Prefix) {
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,
108 std::vector<std::vector<double> > Vtap,
109 std::vector<unsigned short> Selpat) {
115 vtxNDErr2 = VtxNDErr2;
116 trkNDErr2 = TrkNDErr2;
118 nTrksChi2 = NTrksChi2;
119 closeTrack = CloseTrack;
146 dcaErr =
item.dcaErr;
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;
156 selpat =
item.selpat;
160 return buildName(
"DCA");
164 return buildName(
"DCAError");
168 return buildName(
"ZCA");
172 return buildName(
"ZCAError");
176 return buildName(
"VtxNDError2");
180 return buildName(
"TrkNDError2");
184 return buildName(
"Phi0Used");
188 return buildName(
"NTracksChi2");
192 return buildName(
"CloseTrack",
"_Link");
197 f1 % dca % dcaErr % zca % zcaErr % nTrksChi2;
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";
208 if (tracks.size() == vtap.size() && vtap.size() == selpat.size()) {
209 for (
unsigned int i=0;
i<tracks.size(); ++
i) {
212 std::string f3str =
f3.str();
216 "lc2: %10.4f dca: %10.4f ok: %3f\n"
217 "vtxNDErr2: %10.4f trkNDErr2: %10.4f "
219 "vtxNDErr: %10.4f trkNDErr2 %10.4f "
220 "logChi2Err2Sum: %10.4f");
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.);
230 std::string(f3str.length(),
' '));
231 tstr.replace(0,f3str.length(),f3str);
232 rstr.append(tstr+
"\n");
235 boost::format f5(
"Mismatch: nTracks: %d nVtap: %d nSelpat: %d\n");
237 f5 % tracks.size() % vtap.size() % selpat.size();
238 rstr.append(f5.str());
241 rstr.erase(rstr.length()-1);
247 const std::string&
n,
252 declareInterface<DerivationFramework::IAugmentationTool>(
this);
263 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initializeHook() -- begin");
270 ATH_MSG_ERROR(
"No use of corrected chi2 settings provided!");
276 ATH_MSG_ERROR(
"No cuts on max log chi2 for DOCA calculation provided!");
279 ATH_MSG_ERROR(
"No cuts on max log chi2 for nClosetTracks calculation "
288 <<
"CloseTrackCorrChi2 ("
290 <<
"CloseTrackMinDCAin3D ("
292 <<
"CloseTrackMaxLogChi2 ("
294 <<
"NCloseTrackMaxLogChi2 ("
301 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initializeHook() -- end");
303 return StatusCode::SUCCESS;
311 return StatusCode::SUCCESS;
317 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesVCLoopHook() -- begin");
319 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesVCSetupHook: "
320 <<
"Vertex container index " << ivc
326 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesVCSetupHook() -- end");
329 return StatusCode::SUCCESS;
336 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesSVLoopHook() -- begin");
339 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesSVLoopHook(): "
340 "calculate closest track ...");
344 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesSVLoopHook(): "
345 "save closest track ...");
353 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::addBranchesSVLoopHook() -- end");
356 return StatusCode::SUCCESS;
363 const unsigned int ipv,
364 const unsigned int its,
365 const unsigned int itt)
const {
368 <<
", its: " << its <<
", itt: " << itt);
378 for (
unsigned int ics = 0; ics < nChi2Sets; ++ics) {
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) {
396 unsigned short selpat(0);
401 std::vector<double> vtap =
405 <<
", logChi2: " << vtap[4] <<
", dca: " << vtap[5]);
408 if ( vtap[6] >= 0. ) {
410 "m_nCloseTrackMaxLogChi2[ics] = "
416 ATH_MSG_DEBUG(
"calcValuesHook: nTrksChi2++ for track " << *trkItr);
420 "m_closeTrackMaxLogChi2[ics]: "
422 <<
", logChi2: " << vtap[4]
423 <<
", closestTrkDCA: " << closestTrkDCA
424 <<
", dca: " << fabs(vtap[5]));
425 if ( fabs(vtap[5]) < closestTrkDCA &&
427 closestTrkDCA = fabs(vtap[5]);
436 closestTrkIdx = trkIdx;
439 <<
" for track " << *trkItr);
442 cti.
tracks.push_back(*trkItr);
443 cti.
vtap.push_back(vtap);
444 cti.
selpat.push_back(selpat);
447 if (closestTrkIdx > -1 && closestTrkIdx < (
int)cti.
selpat.size()) {
448 cti.
selpat[closestTrkIdx] |= 2;
452 return StatusCode::SUCCESS;
458 const int ipv)
const {
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) {
475 .copyVals(
m_results[its][itpv->second][itt][ics]);
483 <<
", found ? " <<
found
485 << (
found ? itpv->second : -1));
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) {
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;
521 <<
"-- dca: " <<
result.dcaName()
522 <<
", dcaErr: " <<
result.dcaErrName()
523 <<
", zca: " <<
result.zcaName()
524 <<
", zcaErr: " <<
result.zcaErrName()
525 <<
", nTrksChi2: " <<
result.nTrksChi2Name());
531 <<
", dca: " <<
result.dca
532 <<
", dcaErr: " <<
result.dcaErr
533 <<
", zca: " <<
result.zca
534 <<
", zcaErr: " <<
result.zcaErr
535 <<
", nTrksChi2: " <<
result.nTrksChi2);
537 std::string linkName =
result.closeTrackName();
539 tpLinkDecor(linkName);
541 if (
result.closeTrack != NULL ) {
545 << vtx <<
" with " << linkName
546 <<
", closeTrkPtr: " <<
result.closeTrack);
547 tpLinkDecor(*vtx) = tpLink;
550 << vtx <<
" with " << linkName
551 <<
", closeTrkPtr: " <<
result.closeTrack);
554 << vtx <<
" with " << linkName
556 <<
result.closeTrack <<
" !");
564 return StatusCode::SUCCESS;
569 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::setResultsPrefix -- begin");
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) {
586 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::setResultsPrefix -- end");
591 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults -- begin");
598 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults : nTrackSels = "
600 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults : nPvAssocs = "
602 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults : 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 = "
612 for (
unsigned int ics = 0; ics < nChi2Sets; ++ics) {
613 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults -- ics = "
628 ATH_MSG_DEBUG(
"BVertexClosestTrackTool::initResults -- end");
644 std::string
str(
">>>>> logCloseTracksDebugInfo:\n");
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) {
659 f1 % its % ipv % itt % its;
660 str.append(
f1.str());
668 str.append(
"<<<<< logCloseTracksDebugInfo");
671 return StatusCode::SUCCESS;