Belle II Software development
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#include <tracking/ckf/svd/entities/CKFToSVDResult.h>
10
11#include <tracking/mcMatcher/TrackMatchLookUp.h>
12#include <tracking/dataobjects/RecoTrack.h>
13
14#include <framework/dataobjects/EventMetaData.h>
15
16using namespace Belle2;
17using namespace TrackFindingCDC;
18
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}
Specialized CKF Result for extrapolating into the SVD.
This is the Reconstruction Event-Data Model Track.
Definition RecoTrack.h:79
unsigned int getNumberOfSVDHits() const
Return the number of svd hits.
Definition RecoTrack.h:424
unsigned int getNumberOfCDCHits() const
Return the number of cdc hits.
Definition RecoTrack.h:427
unsigned int getNumberOfPXDHits() const
Return the number of pxd hits.
Definition RecoTrack.h:421
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.
MCUtil m_mcUtil
MC information used in the SVD CKF.
StoreObjPtr< EventMetaData > m_eventMetaData
Pointer to the object containing event number etc.
bool extract(const CKFToSVDResult *result) final
Generate and assign the variables from the object.
static constexpr int named(const char *name)
Definition VarSet.h:78
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.