Belle II Software development
MCSegmentPairFilter.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/segmentPair/MCSegmentPairFilter.h>
9
10#include <tracking/trackFindingCDC/mclookup/CDCMCSegment2DLookUp.h>
11
12#include <tracking/trackingUtilities/eventdata/tracks/CDCSegmentPair.h>
13#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
14
15#include <tracking/trackFindingCDC/filters/base/MCSymmetricFilter.icc.h>
16
17#include <framework/core/ModuleParamList.templateDetails.h>
18
19using namespace Belle2;
20using namespace TrackFindingCDC;
21using namespace TrackingUtilities;
22
24
26 : Super(allowReverse)
27{
28}
29
31 const std::string& prefix)
32{
33 Super::exposeParameters(moduleParamList, prefix);
34 moduleParamList->addParameter(prefixed(prefix, "requireRLPure"),
36 "Switch to require the segment combination contain mostly correct rl information",
38
39
40 moduleParamList->addParameter(prefixed(prefix, "minSegmentSize"),
42 "Minimum segment size to pass as monte carlo truth",
44
45}
46
48{
49 const CDCSegment2D* ptrFromSegment = segmentPair.getFromSegment();
50 const CDCSegment2D* ptrToSegment = segmentPair.getToSegment();
51
52 assert(ptrFromSegment);
53 assert(ptrToSegment);
54
55 const CDCSegment2D& fromSegment = *ptrFromSegment;
56 const CDCSegment2D& toSegment = *ptrToSegment;
57
58 if (static_cast<int>(fromSegment.size()) < m_param_minSegmentSize or
59 static_cast<int>(toSegment.size()) < m_param_minSegmentSize) {
60 return NAN;
61 }
62
64
65 // Check if the segments are aligned correctly along the Monte Carlo track
66 EForwardBackward pairFBInfo =
68 ? mcSegmentLookUp.areAlignedInMCTrackWithRLCheck(ptrFromSegment, ptrToSegment)
69 : mcSegmentLookUp.areAlignedInMCTrack(ptrFromSegment, ptrToSegment);
70
71 if (pairFBInfo == EForwardBackward::c_Invalid) return NAN;
72
73 if (pairFBInfo == EForwardBackward::c_Forward or
74 (getAllowReverse() and pairFBInfo == EForwardBackward::c_Backward)) {
75 // Final check for the distance between the segment
76 Index fromNPassedSuperLayers = mcSegmentLookUp.getLastNPassedSuperLayers(ptrFromSegment);
77 if (fromNPassedSuperLayers == c_InvalidIndex) return NAN;
78
79 Index toNPassedSuperLayers = mcSegmentLookUp.getFirstNPassedSuperLayers(ptrToSegment);
80 if (toNPassedSuperLayers == c_InvalidIndex) return NAN;
81
82 if (abs(fromNPassedSuperLayers - toNPassedSuperLayers) > 1) return NAN;
83
84 // Do fits
85 if (not segmentPair.getTrajectory3D().isFitted()) {
86 CDCTrajectory3D mcTrajectory3D = mcSegmentLookUp.getTrajectory3D(ptrFromSegment);
87 if (pairFBInfo == EForwardBackward::c_Backward) {
88 mcTrajectory3D.reverse();
89 }
90 segmentPair.setTrajectory3D(mcTrajectory3D);
91 }
92 return static_cast<double>(pairFBInfo) * static_cast<Weight>(fromSegment.size() + toSegment.size());
93 }
94 return NAN;
95}
The Module parameter list class.
TrackingUtilities::EForwardBackward areAlignedInMCTrack(const ACDCHitCollection *ptrFromHits, const ACDCHitCollection *ptrToHits) const
Returns if the second collection of hits follows the first collection of hits in their common Monte C...
TrackingUtilities::Index getLastNPassedSuperLayers(const ACDCHitCollection *ptrHits) const
Getter for number of passed superlayer till the last hit the collection of hits which has the Monte C...
TrackingUtilities::Index getFirstNPassedSuperLayers(const ACDCHitCollection *ptrHits) const
Getter for number of passed superlayer till the first hit the collection of hits which has the Monte ...
TrackingUtilities::EForwardBackward areAlignedInMCTrackWithRLCheck(const ACDCHitCollection *ptrFromHits, const ACDCHitCollection *ptrToHits) const
Returns if the second collection of hits follows the first collection of hits in their common Monte C...
TrackingUtilities::CDCTrajectory3D getTrajectory3D(const ACDCHitCollection *ptrHits) const
Returns the trajectory of the collection of hits.
Specialisation of the lookup for the truth values of two dimensional segments.
static const CDCMCSegment2DLookUp & getInstance()
Getter for the singletone instance.
bool m_param_requireRLPure
Parameter : Switch to require the segment combination contain mostly correct rl information.
int m_param_minSegmentSize
Parameter : Minimum segment size to pass as monte carlo truth.
MCSegmentPairFilter(bool allowReverse=true)
Constructor.
MCSymmetric< BaseSegmentPairFilter > Super
Type of the super class.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the set of parameters of the filter to the module parameter list.
TrackingUtilities::Weight operator()(const TrackingUtilities::CDCSegmentPair &segmentPair) final
Checks if a axial stereo segment pair is a good combination.
Mixin for filters that use Monte Carlo information.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
A reconstructed sequence of two dimensional hits in one super layer.
Class representing a pair of one reconstructed axial segment and one stereo segment in adjacent super...
const CDCSegment2D * getToSegment() const
Getter for the to segment.
void setTrajectory3D(const CDCTrajectory3D &trajectory3D) const
Setter for the three dimensional trajectory.
CDCTrajectory3D & getTrajectory3D() const
Getter for the three dimensional trajectory.
const CDCSegment2D * getFromSegment() const
Getter for the from segment.
Particle full three dimensional trajectory.
void reverse()
Reverses the trajectory in place.
bool isFitted() const
Checks if the trajectory has already been set to a valid value.
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Abstract base class for different kinds of events.