Belle II Software  release-05-01-25
MCSegmentTripleFilter.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2012 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/trackFindingCDC/filters/segmentTriple/MCSegmentTripleFilter.h>
11 
12 #include <tracking/trackFindingCDC/mclookup/CDCMCSegment2DLookUp.h>
13 
14 #include <tracking/trackFindingCDC/eventdata/tracks/CDCSegmentTriple.h>
15 #include <tracking/trackFindingCDC/eventdata/tracks/CDCAxialSegmentPair.h>
16 
17 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
18 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory3D.h>
19 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
20 
21 #include <tracking/trackFindingCDC/filters/base/MCSymmetricFilter.icc.h>
22 
23 #include <framework/logging/Logger.h>
24 
25 using namespace Belle2;
26 using namespace TrackFindingCDC;
27 
29 
31  Super(allowReverse),
32  m_mcAxialSegmentPairFilter(allowReverse)
33 {
35 }
36 
38  const std::string& prefix)
39 {
40  m_mcAxialSegmentPairFilter.exposeParameters(moduleParamList, prefix);
41 }
42 
44 {
47 }
48 
50 {
51  const CDCAxialSegment2D* ptrStartSegment = segmentTriple.getStartSegment();
52  const CDCStereoSegment2D* ptrMiddleSegment = segmentTriple.getMiddleSegment();
53  const CDCAxialSegment2D* ptrEndSegment = segmentTriple.getEndSegment();
54 
55  const CDCAxialSegment2D& startSegment = *ptrStartSegment;
56  const CDCAxialSegment2D& middleSegment = *ptrMiddleSegment;
57  const CDCAxialSegment2D& endSegment = *ptrEndSegment;
58 
60  Weight pairWeight =
61  m_mcAxialSegmentPairFilter(CDCAxialSegmentPair(ptrStartSegment, ptrEndSegment));
62 
63  if (std::isnan(pairWeight)) return NAN;
64 
66 
67  // Check if the segments are aligned correctly along the Monte Carlo track
68  EForwardBackward startToMiddleFBInfo = mcSegmentLookUp.areAlignedInMCTrack(ptrStartSegment, ptrMiddleSegment);
69  if (startToMiddleFBInfo == EForwardBackward::c_Invalid) return NAN;
70 
71  EForwardBackward middleToEndFBInfo = mcSegmentLookUp.areAlignedInMCTrack(ptrMiddleSegment, ptrEndSegment);
72  if (middleToEndFBInfo == EForwardBackward::c_Invalid) return NAN;
73 
74 
75  if (startToMiddleFBInfo != middleToEndFBInfo) return NAN;
76 
77 
78  if ((startToMiddleFBInfo == EForwardBackward::c_Forward and middleToEndFBInfo == EForwardBackward::c_Forward) or
79  (getAllowReverse() and startToMiddleFBInfo == EForwardBackward::c_Backward and middleToEndFBInfo == EForwardBackward::c_Backward)) {
80 
81  // Do fits
82  setTrajectoryOf(segmentTriple);
83 
84  Weight cellWeight = startSegment.size() + middleSegment.size() + endSegment.size();
85  return startToMiddleFBInfo > 0 ? cellWeight : -cellWeight;
86  }
87 
88  return NAN;
89 }
90 
91 
92 
94 {
95  if (segmentTriple.getTrajectorySZ().isFitted()) {
96  // SZ trajectory has been fitted before. Skipping
97  // A fit sz trajectory implies a 2d trajectory to be fitted, but not the other way around
98  return;
99  }
100 
101  const CDCAxialSegment2D* ptrStartSegment = segmentTriple.getStartSegment();
102  if (not ptrStartSegment) {
103  B2WARNING("Start segment of segmentTriple is nullptr. Could not set fits.");
104  return;
105  }
106 
107  const CDCMCSegment2DLookUp& mcSegmentLookUp = CDCMCSegment2DLookUp::getInstance();
108 
109  CDCTrajectory3D trajectory3D = mcSegmentLookUp.getTrajectory3D(ptrStartSegment);
110  segmentTriple.setTrajectory3D(trajectory3D);
111 }
Belle2::TrackFindingCDC::MCSymmetric::getAllowReverse
bool getAllowReverse() const
Getter for the allow reverse parameter.
Definition: MCSymmetricFilter.icc.h:85
Belle2::TrackFindingCDC::CDCSegmentTriple::getStartSegment
const CDCAxialSegment2D * getStartSegment() const
Getter for the start axial segment.
Definition: CDCSegmentTriple.h:111
Belle2::TrackFindingCDC::MCSymmetric< BaseSegmentTripleFilter >::initialize
void initialize() override
Initialize the before event processing.
Definition: MCSymmetricFilter.icc.h:59
Belle2::TrackFindingCDC::CDCTrajectorySZ::isFitted
bool isFitted() const
Indicates if the line has been fitted.
Definition: CDCTrajectorySZ.h:106
Belle2::TrackFindingCDC::CDCMCSegment2DLookUp
Specialisation of the lookup for the truth values of two dimensional segments.
Definition: CDCMCSegment2DLookUp.h:33
Belle2::TrackFindingCDC::CDCSegmentTriple::getMiddleSegment
const CDCStereoSegment2D * getMiddleSegment() const
Getter for the middle stereo segment.
Definition: CDCSegmentTriple.h:123
Belle2::TrackFindingCDC::MCSegmentTripleFilter::setAllowReverse
void setAllowReverse(bool allowReverse) override
Setter for the allow reverse parameter.
Definition: MCSegmentTripleFilter.h:63
Belle2::TrackFindingCDC::MCSymmetric< BaseSegmentTripleFilter >
Belle2::TrackFindingCDC::CDCSegmentTriple::setTrajectory3D
void setTrajectory3D(const CDCTrajectory3D &trajectory3D) const
Setter for the three dimensional helix trajectory.
Definition: CDCSegmentTriple.h:159
Belle2::TrackFindingCDC::NForwardBackward::EForwardBackward
EForwardBackward
Enumeration to represent the distinct possibilities of the right left passage information.
Definition: EForwardBackward.h:35
Belle2::TrackFindingCDC::CompositeProcessingSignalListener::addProcessingSignalListener
void addProcessingSignalListener(ProcessingSignalListener *psl)
Register a processing signal listener to be notified.
Definition: CompositeProcessingSignalListener.cc:57
Belle2::TrackFindingCDC::CDCMCSegment2DLookUp::getInstance
static const CDCMCSegment2DLookUp & getInstance()
Getter for the singletone instance.
Definition: CDCMCSegment2DLookUp.cc:23
Belle2::TrackFindingCDC::CDCSegmentTriple::getEndSegment
const CDCAxialSegment2D * getEndSegment() const
Getter for the end axial segment.
Definition: CDCSegmentTriple.h:135
Belle2::TrackFindingCDC::MCSegmentTripleFilter::exposeParameters
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
Definition: MCSegmentTripleFilter.cc:37
Belle2::TrackFindingCDC::MCAxialSegmentPairFilter::exposeParameters
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the set of parameters of the filter to the module parameter list.
Definition: MCAxialSegmentPairFilter.cc:33
Belle2::TrackFindingCDC::CDCMCHitCollectionLookUp::areAlignedInMCTrack
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...
Definition: CDCMCHitCollectionLookUp.icc.h:210
Belle2::TrackFindingCDC::CDCAxialSegmentPair
Class representing a pair of reconstructed axial segements in adjacent superlayer.
Definition: CDCAxialSegmentPair.h:41
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::MCSegmentTripleFilter::operator()
Weight operator()(const CDCSegmentTriple &segmentTriple) final
Check if the segment triple is aligned in the Monte Carlo track. Signals NAN if not.
Definition: MCSegmentTripleFilter.cc:49
Belle2::TrackFindingCDC::MCSegmentTripleFilter::initialize
void initialize() final
Initialize the before event processing.
Definition: MCSegmentTripleFilter.cc:43
Belle2::TrackFindingCDC::CDCSegment2D
A reconstructed sequence of two dimensional hits in one super layer.
Definition: CDCSegment2D.h:40
Belle2::TrackFindingCDC::CDCSegmentTriple::getTrajectorySZ
CDCTrajectorySZ getTrajectorySZ() const
Getter for the linear trajectory in the sz direction.
Definition: CDCSegmentTriple.cc:94
Belle2::ModuleParamList
The Module parameter list class.
Definition: ModuleParamList.h:46
Belle2::TrackFindingCDC::CDCTrajectory3D
Particle full three dimensional trajectory.
Definition: CDCTrajectory3D.h:47
Belle2::TrackFindingCDC::CDCSegmentTriple
Class representing a triple of reconstructed segements in adjacent superlayer.
Definition: CDCSegmentTriple.h:42
Belle2::TrackFindingCDC::MCSegmentTripleFilter::m_mcAxialSegmentPairFilter
MCAxialSegmentPairFilter m_mcAxialSegmentPairFilter
Instance of the cell filter to reject neighborhoods of false cells.
Definition: MCSegmentTripleFilter.h:71
Belle2::TrackFindingCDC::CDCMCHitCollectionLookUp::getTrajectory3D
CDCTrajectory3D getTrajectory3D(const ACDCHitCollection *ptrHits) const
Returns the trajectory of the collection of hits.
Definition: CDCMCHitCollectionLookUp.icc.h:359
Belle2::TrackFindingCDC::MCSegmentTripleFilter::setTrajectoryOf
void setTrajectoryOf(const CDCSegmentTriple &segmentTriple) const
Sets the trajectories of the segment triple from Monte Carlo information. Is executed for good segmen...
Definition: MCSegmentTripleFilter.cc:93
Belle2::TrackFindingCDC::MCSegmentTripleFilter::MCSegmentTripleFilter
MCSegmentTripleFilter(bool allowReverse=true)
Constructor initializing the symmetry flag.
Definition: MCSegmentTripleFilter.cc:30