Belle II Software development
TruthSegmentVarSet.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/trackFindingCDC/filters/segment/TruthSegmentVarSet.h>
9
10#include <tracking/trackFindingCDC/mclookup/CDCMCHitLookUp.h>
11#include <tracking/trackFindingCDC/mclookup/CDCMCSegment2DLookUp.h>
12#include <tracking/trackFindingCDC/mclookup/CDCMCManager.h>
13
14#include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
15#include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
16
17#include <tracking/trackFindingCDC/rootification/StoreWrappedObjPtr.h>
18
19using namespace Belle2;
20using namespace TrackFindingCDC;
21
27
33
35{
36 if (not segment) return false;
37
38 // Find the track with the highest number of hits in the segment
41
42 ITrackType segmentMCMatch = mcSegmentLookup.getMCTrackId(segment);
43 bool segmentIsFake = false;
44 bool trackIsAlreadyFound = false;
45
46
47 if (segmentMCMatch == INVALID_ITRACK) {
48 segmentIsFake = true;
49
50 } else {
51 unsigned int numberOfCorrectHits = 0;
52 for (const CDCRecoHit2D& recoHit : *segment) {
53 if (hitLookup.getMCTrackId(recoHit.getWireHit().getHit()) == segmentMCMatch) {
54 numberOfCorrectHits++;
55 }
56 }
57 if (numberOfCorrectHits < 0.8 * segment->size()) {
58 segmentIsFake = true;
59 } else {
60 segmentIsFake = false;
61 }
62
63 }
64
65 if (not segmentIsFake) {
66 // It is a bit suspicuous that this low level objects accesses the DataStore.
67 // Maybe this code is the answer to the wrong question.?
68 StoreWrappedObjPtr<std::vector<CDCWireHit> > storedWireHits("CDCWireHitVector");
69 const std::vector<CDCWireHit>& wireHits = *storedWireHits;
70 unsigned int numberOfTakenHitsInThisTrack = 0;
71 unsigned int numberOfHitsInThisTrack = 0;
72
73 for (const CDCWireHit& wireHit : wireHits) {
74 if (hitLookup.getMCTrackId(wireHit.getHit()) == segmentMCMatch) {
75 numberOfHitsInThisTrack++;
76 if (wireHit.getAutomatonCell().hasTakenFlag()) {
77 numberOfTakenHitsInThisTrack++;
78 }
79 }
80 }
81
82 if (numberOfTakenHitsInThisTrack > 0.5 * numberOfHitsInThisTrack) {
83 trackIsAlreadyFound = true;
84 }
85 }
86
87 var<named("segment_is_fake_truth")>() = segmentIsFake;
88 var<named("track_is_already_found_truth")>() = trackIsAlreadyFound;
89 var<named("segment_is_new_track_truth")>() = not segmentIsFake and not trackIsAlreadyFound;
90 var<named("truth")>() = false; // override in derived classes
91 return true;
92}
ITrackType getMCTrackId(const ACDCHitCollection *ptrHits) const
Getter for the Monte Carlo track id matched to this collection of hits.
Interface class to the Monte Carlo information for individual hits.
ITrackType getMCTrackId(const CDCHit *ptrHit) const
Returns the track id for the hit.
static const CDCMCHitLookUp & getInstance()
Getter for the singletone instance.
void requireTruthInformation()
Require the MC information store arrays.
void fill()
Fill Monte Carlo look up maps from the DataStore.
static CDCMCManager & getInstance()
Getter for the singleton instance.
Specialisation of the lookup for the truth values of two dimensional segments.
static const CDCMCSegment2DLookUp & getInstance()
Getter for the singletone instance.
Class representing a two dimensional reconstructed hit in the central drift chamber.
A reconstructed sequence of two dimensional hits in one super layer.
Class representing a hit wire in the central drift chamber.
Definition CDCWireHit.h:55
This class is for convenience access and registration of objects, that are stored inside the StoreWra...
void initialize() final
Require the Monte Carlo truth information at initialisation.
bool extract(const CDCSegment2D *segment) override
Generate and assign the contained variables.
void beginEvent() final
Prepare the Monte Carlo truth information at start of the event.
static constexpr int named(const char *name)
Definition VarSet.h:78
Abstract base class for different kinds of events.