Belle II Software  release-06-02-00
SVDResultTruthVarSet.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #include <tracking/ckf/svd/filters/results/SVDResultTruthVarSet.h>
9 
10 #include <tracking/mcMatcher/TrackMatchLookUp.h>
11 #include <tracking/dataobjects/RecoTrack.h>
12 
13 using namespace std;
14 using namespace Belle2;
15 using namespace TrackFindingCDC;
16 
17 bool SVDResultTruthVarSet::extract(const CKFToSVDResult* result)
18 {
19  const RecoTrack* seedTrack = result->getSeed();
20  if (not seedTrack) return false;
21 
22  var<named("truth_event_number")>() = m_eventMetaData->getEvent();
23  var<named("truth_seed_number")>() = seedTrack->getArrayIndex();
24 
25  const std::string& seedTrackStoreArrayName = seedTrack->getArrayName();
26 
27  TrackMatchLookUp mcCDCMatchLookUp("MCRecoTracks", seedTrackStoreArrayName);
28  const RecoTrack* cdcMCTrack = mcCDCMatchLookUp.getRelatedMCRecoTrack(*seedTrack);
29 
30  // Default to false
31  var<named("truth_number_of_correct_hits")>() = 0;
32  var<named("truth")>() = 0;
33  var<named("truth_svd_cdc_relation")>() = NAN;
34  var<named("truth_number_of_mc_pxd_hits")>() = 0;
35  var<named("truth_number_of_mc_svd_hits")>() = 0;
36  var<named("truth_number_of_mc_cdc_hits")>() = 0;
37 
38  if (not cdcMCTrack) {
39  // track is a fake.
40  return true;
41  }
42 
43  // Count the number of times the related MC-track is also related to the clusters.
44  const unsigned int numberOfCorrectHits = m_mcUtil.getNumberOfCorrectHits(cdcMCTrack, result->getHits());
45 
46  var<named("truth_number_of_correct_hits")>() = numberOfCorrectHits;
47  var<named("truth_number_of_mc_svd_hits")>() = cdcMCTrack->getNumberOfSVDHits();
48  var<named("truth_number_of_mc_pxd_hits")>() = cdcMCTrack->getNumberOfPXDHits();
49  var<named("truth_number_of_mc_cdc_hits")>() = cdcMCTrack->getNumberOfCDCHits();
50 
51  var<named("truth")>() = static_cast<double>(numberOfCorrectHits) / (static_cast<double>(cdcMCTrack->getNumberOfSVDHits()) / 2);
52 
53  const RecoTrack* relatedSVDRecoTrack = result->getRelatedSVDRecoTrack();
54  if (relatedSVDRecoTrack) {
55  const std::string& svdTrackStoreArrayName = relatedSVDRecoTrack->getArrayName();
56 
57  TrackMatchLookUp mcSVDMatchLookUp("MCRecoTracks", svdTrackStoreArrayName);
58  const RecoTrack* svdMCTrack = mcSVDMatchLookUp.getRelatedMCRecoTrack(*relatedSVDRecoTrack);
59 
60  // can not be a fake anyways
61  var<named("truth_svd_cdc_relation")>() = svdMCTrack == cdcMCTrack ? 1 : NAN;
62  }
63 
64  return true;
65 }
Specialized CKF Result for extrapolating into the SVD.
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:76
unsigned int getNumberOfSVDHits() const
Return the number of svd hits.
Definition: RecoTrack.h:419
unsigned int getNumberOfCDCHits() const
Return the number of cdc hits.
Definition: RecoTrack.h:416
unsigned int getNumberOfPXDHits() const
Return the number of pxd hits.
Definition: RecoTrack.h:422
std::string getArrayName() const
Get name of array this object is stored in, or "" if not found.
int getArrayIndex() const
Returns this object's array index (in StoreArray), or -1 if not found.
Class to provide convenient methods to look up matching information between pattern recognition and M...
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.
Abstract base class for different kinds of events.