Belle II Software  release-05-01-25
SVDResultTruthVarSet.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2017 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/ckf/svd/filters/results/SVDResultTruthVarSet.h>
11 
12 #include <tracking/mcMatcher/TrackMatchLookUp.h>
13 #include <tracking/dataobjects/RecoTrack.h>
14 
15 using namespace std;
16 using namespace Belle2;
17 using namespace TrackFindingCDC;
18 
19 bool SVDResultTruthVarSet::extract(const CKFToSVDResult* result)
20 {
21  const RecoTrack* seedTrack = result->getSeed();
22  if (not seedTrack) return false;
23 
24  var<named("truth_event_number")>() = m_eventMetaData->getEvent();
25  var<named("truth_seed_number")>() = seedTrack->getArrayIndex();
26 
27  const std::string& seedTrackStoreArrayName = seedTrack->getArrayName();
28 
29  TrackMatchLookUp mcCDCMatchLookUp("MCRecoTracks", seedTrackStoreArrayName);
30  const RecoTrack* cdcMCTrack = mcCDCMatchLookUp.getRelatedMCRecoTrack(*seedTrack);
31 
32  // Default to false
33  var<named("truth_number_of_correct_hits")>() = 0;
34  var<named("truth")>() = 0;
35  var<named("truth_svd_cdc_relation")>() = NAN;
36  var<named("truth_number_of_mc_pxd_hits")>() = 0;
37  var<named("truth_number_of_mc_svd_hits")>() = 0;
38  var<named("truth_number_of_mc_cdc_hits")>() = 0;
39 
40  if (not cdcMCTrack) {
41  // track is a fake.
42  return true;
43  }
44 
45  // Count the number of times the related MC-track is also related to the clusters.
46  const unsigned int numberOfCorrectHits = m_mcUtil.getNumberOfCorrectHits(cdcMCTrack, result->getHits());
47 
48  var<named("truth_number_of_correct_hits")>() = numberOfCorrectHits;
49  var<named("truth_number_of_mc_svd_hits")>() = cdcMCTrack->getNumberOfSVDHits();
50  var<named("truth_number_of_mc_pxd_hits")>() = cdcMCTrack->getNumberOfPXDHits();
51  var<named("truth_number_of_mc_cdc_hits")>() = cdcMCTrack->getNumberOfCDCHits();
52 
53  var<named("truth")>() = static_cast<double>(numberOfCorrectHits) / (static_cast<double>(cdcMCTrack->getNumberOfSVDHits()) / 2);
54 
55  const RecoTrack* relatedSVDRecoTrack = result->getRelatedSVDRecoTrack();
56  if (relatedSVDRecoTrack) {
57  const std::string& svdTrackStoreArrayName = relatedSVDRecoTrack->getArrayName();
58 
59  TrackMatchLookUp mcSVDMatchLookUp("MCRecoTracks", svdTrackStoreArrayName);
60  const RecoTrack* svdMCTrack = mcSVDMatchLookUp.getRelatedMCRecoTrack(*relatedSVDRecoTrack);
61 
62  // can not be a fake anyways
63  var<named("truth_svd_cdc_relation")>() = svdMCTrack == cdcMCTrack ? 1 : NAN;
64  }
65 
66  return true;
67 }
Belle2::RelationsInterface::getArrayName
std::string getArrayName() const
Get name of array this object is stored in, or "" if not found.
Definition: RelationsObject.h:379
Belle2::TrackMatchLookUp
Class to provide convenient methods to look up matching information between pattern recognition and M...
Definition: TrackMatchLookUp.h:43
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackMatchLookUp::getRelatedMCRecoTrack
const RecoTrack * getRelatedMCRecoTrack(const RecoTrack &prRecoTrack) const
Looks for a related Monte Carlo track for the given pattern recognition track and return it if found.
Definition: TrackMatchLookUp.cc:119
Belle2::CKFToSVDResult
Specialized CKF Result for extrapolating into the SVD.
Definition: CKFToSVDResult.h:33