Belle II Software development
AxialTrackMerger Class Referenceabstract

Findlet implementing the merging of axial tracks found in the legendre tree search. More...

#include <AxialTrackMerger.h>

Inheritance diagram for AxialTrackMerger:
Findlet< AIOTypes > CompositeProcessingSignalListener ProcessingSignalListener

Public Types

using IOTypes = std::tuple<AIOTypes...>
 Types that should be served to apply on invocation.
 
using IOVectors = std::tuple< std::vector<AIOTypes>... >
 Vector types that should be served to apply on invocation.
 

Public Member Functions

std::string getDescription () final
 Short description of the findlet.
 
void exposeParameters (ModuleParamList *moduleParamList, const std::string &prefix) final
 Expose the parameters to a module.
 
void apply (std::vector< TrackingUtilities::CDCTrack > &axialTracks, const std::vector< const TrackingUtilities::CDCWireHit * > &axialWireHits) final
 Merge tracks together. Allows for axial hits to be added as it may see fit.
 
template<class ACDCTracks>
WithWeight< MayBePtr< CDCTrack > > calculateBestTrackToMerge (CDCTrack &track, ACDCTracks &tracks)
 Determine the best track for merging with the candidate track.
 
virtual void apply (ToVector< AIOTypes > &... ioVectors)=0
 Main function executing the algorithm.
 
void initialize () override
 Receive and dispatch signal before the start of the event processing.
 
void beginRun () override
 Receive and dispatch signal for the beginning of a new run.
 
void beginEvent () override
 Receive and dispatch signal for the start of a new event.
 
void endRun () override
 Receive and dispatch signal for the end of the run.
 
void terminate () override
 Receive and dispatch Signal for termination of the event processing.
 

Protected Types

template<class T>
using ToVector = typename ToVectorImpl<T>::Type
 Short hand for ToRangeImpl.
 

Protected Member Functions

void addProcessingSignalListener (ProcessingSignalListener *psl)
 Register a processing signal listener to be notified.
 
int getNProcessingSignalListener ()
 Get the number of currently registered listeners.
 

Private Types

using Super = TrackingUtilities::Findlet<TrackingUtilities::CDCTrack&, const TrackingUtilities::CDCWireHit* const>
 Type of the base class.
 

Private Member Functions

void doTracksMerging (std::vector< TrackingUtilities::CDCTrack > &axialTracks, const std::vector< const TrackingUtilities::CDCWireHit * > &allAxialWireHits)
 The track finding often finds two curling tracks, originating from the same particle.
 

Static Private Member Functions

template<class ACDCTracks>
static TrackingUtilities::WithWeight< TrackingUtilities::MayBePtr< TrackingUtilities::CDCTrack > > calculateBestTrackToMerge (TrackingUtilities::CDCTrack &track, ACDCTracks &tracks)
 Searches for the best candidate to merge this track to.
 
static double doTracksFitTogether (TrackingUtilities::CDCTrack &track1, TrackingUtilities::CDCTrack &track2)
 Fits the hit content of both tracks in a common fit repeated with an annealing schedule removing far away hits.
 
static void removeStrangeHits (double factor, std::vector< const TrackingUtilities::CDCWireHit * > &wireHits, TrackingUtilities::CDCTrajectory2D &trajectory)
 Remove all hits that are further than factor * driftlength away from the trajectory.
 
static void mergeTracks (TrackingUtilities::CDCTrack &track1, TrackingUtilities::CDCTrack &track2, const std::vector< const TrackingUtilities::CDCWireHit * > &allAxialWireHits)
 Function to merge two track candidates.
 

Private Attributes

double m_param_minFitProb = 0.85
 Parameter : Minimal fit probability of the common fit of two tracks to be eligible for merging.
 
bool m_param_removeHitsAfterSuperLayerBreak = true
 Parameter : Remove the hits of the tracks after a super layer break before merging.
 
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
 References to subordinary signal processing listener contained in this findlet.
 
bool m_initialized = false
 Flag to keep track whether initialization happened before.
 
bool m_terminated = false
 Flag to keep track whether termination happened before.
 
std::string m_initializedAs
 Name of the type during initialisation.
 

Detailed Description

Findlet implementing the merging of axial tracks found in the legendre tree search.

Definition at line 33 of file AxialTrackMerger.h.

Member Typedef Documentation

◆ IOTypes

template<class ... AIOTypes>
using IOTypes = std::tuple<AIOTypes...>
inherited

Types that should be served to apply on invocation.

Definition at line 30 of file Findlet.h.

◆ IOVectors

template<class ... AIOTypes>
using IOVectors = std::tuple< std::vector<AIOTypes>... >
inherited

Vector types that should be served to apply on invocation.

Definition at line 53 of file Findlet.h.

◆ Super

Type of the base class.

Definition at line 38 of file AxialTrackMerger.h.

◆ ToVector

template<class ... AIOTypes>
template<class T>
using ToVector = typename ToVectorImpl<T>::Type
protectedinherited

Short hand for ToRangeImpl.

Definition at line 49 of file Findlet.h.

Member Function Documentation

◆ addProcessingSignalListener()

void addProcessingSignalListener ( ProcessingSignalListener * psl)
protectedinherited

Register a processing signal listener to be notified.

Definition at line 55 of file CompositeProcessingSignalListener.cc.

56{
58}
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
References to subordinary signal processing listener contained in this findlet.

◆ apply()

void apply ( std::vector< TrackingUtilities::CDCTrack > & axialTracks,
const std::vector< const TrackingUtilities::CDCWireHit * > & axialWireHits )
final

Merge tracks together. Allows for axial hits to be added as it may see fit.

Definition at line 50 of file AxialTrackMerger.cc.

52{
53 // Check quality of the track basing on holes on the trajectory;
54 // if holes exist then track is split
55 for (CDCTrack& track : axialTracks) {
56 if (track.size() < 5) continue;
59 }
61 }
62
63 // Update tracks before storing to DataStore
64 for (CDCTrack& track : axialTracks) {
66 }
67
68 // Remove bad tracks
71
72 // Perform tracks merging
73 this->doTracksMerging(axialTracks, allAxialWireHits);
74
75 // Remove the consumed, now empty tracks.
77}
void doTracksMerging(std::vector< TrackingUtilities::CDCTrack > &axialTracks, const std::vector< const TrackingUtilities::CDCWireHit * > &allAxialWireHits)
The track finding often finds two curling tracks, originating from the same particle.
bool m_param_removeHitsAfterSuperLayerBreak
Parameter : Remove the hits of the tracks after a super layer break before merging.
static void normalizeTrack(TrackingUtilities::CDCTrack &track)
Refit and resort the track. Unmask all hits.
static void deleteShortTracks(std::vector< TrackingUtilities::CDCTrack > &axialTracks, double minimal_size=5)
Remove tracks that are shorter than the given number of hits.
static void deleteTracksWithLowFitProbability(std::vector< TrackingUtilities::CDCTrack > &axialTracks, double minimal_probability_for_good_fit=0.4)
Check an (improper) p-values of the tracks. If they are below the given value, delete the track from ...
static void removeHitsAfterSuperLayerBreak(TrackingUtilities::CDCTrack &track)
Searches for a break in the super layer chain and remove all hits that come after that.

◆ beginEvent()

void beginEvent ( )
overridevirtualinherited

Receive and dispatch signal for the start of a new event.

Reimplemented from ProcessingSignalListener.

Reimplemented in DATCONFPGAFindlet, SpacePointTagger< AResult, ACluster >, SpacePointTagger< Belle2::CKFToPXDResult, Belle2::PXDCluster >, SpacePointTagger< Belle2::CKFToSVDResult, Belle2::SVDCluster >, MCSymmetric< BaseAxialSegmentPairFilter >, MCSymmetric< BaseAxialSegmentPairFilter >, MCSymmetric< BaseFacetFilter >, MCSymmetric< BaseFacetFilter >, MCSymmetric< BaseFacetRelationFilter >, MCSymmetric< BaseFacetRelationFilter >, MCSymmetric< BaseSegmentPairFilter >, MCSymmetric< BaseSegmentPairFilter >, MCSymmetric< BaseSegmentPairRelationFilter >, MCSymmetric< BaseSegmentPairRelationFilter >, MCSymmetric< BaseSegmentRelationFilter >, MCSymmetric< BaseSegmentRelationFilter >, MCSymmetric< BaseSegmentTripleFilter >, MCSymmetric< BaseSegmentTripleFilter >, MCSymmetric< BaseSegmentTripleRelationFilter >, MCSymmetric< BaseSegmentTripleRelationFilter >, MCSymmetric< BaseTrackRelationFilter >, MCSymmetric< BaseTrackRelationFilter >, MonopoleStereoHitFinder, MonopoleStereoHitFinderQuadratic, SegmentCreatorMCTruth, SegmentFinderFacetAutomaton, SegmentTrackCombiner, SegmentTrackTruthVarSet, StereoHitFinder, StereoHitTruthVarSet, TrackFinderAutomaton, TrackFinderSegmentPairAutomaton, TrackFinderSegmentTripleAutomaton, TruthAxialSegmentPairVarSet, TruthSegmentVarSet, TruthTrackVarSet, WireHitMCMultiLoopBlocker, FindletStoreArrayInput< TWrappedFindlet >, SharingHitsMatcher< ACollectorItem, ACollectionItem >, SharingHitsMatcher< Belle2::TrackingUtilities::CDCTrack, Belle2::TrackingUtilities::CDCSegment2D >, StoreVectorSwapper< IOType, a_alwaysWrite >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCFacet >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegment2D >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegmentPair >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegmentTriple >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCTrack >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCWireHit, true >, RecoTrackStorer, ROIFinder, and SVDHoughTracking.

Definition at line 31 of file CompositeProcessingSignalListener.cc.

32{
35 psl->beginEvent();
36 }
37}
virtual void beginEvent()
Receive signal for the start of a new event.
ProcessingSignalListener()
Allow default construction.

◆ beginRun()

void beginRun ( )
overridevirtualinherited

Receive and dispatch signal for the beginning of a new run.

Reimplemented from ProcessingSignalListener.

Reimplemented in DATCONSVDClusterizer, LayerPXDRelationFilter< AFilter, APrefilter >, LayerPXDRelationFilter< TrackingUtilities::ChooseableFilter< PXDPairFilterFactory > >, LayerPXDRelationFilter< TrackingUtilities::ChooseableFilter< PXDPairFilterFactory > >, LayerSVDRelationFilter< AFilter, APrefilter >, LayerSVDRelationFilter< TrackingUtilities::ChooseableFilter< SVDPairFilterFactory > >, LayerSVDRelationFilter< TrackingUtilities::ChooseableFilter< SVDPairFilterFactory > >, SectorMapBasedSVDPairFilter, SimplePXDStateFilter, SimpleSVDStateFilter, CutsFromDBWireHitFilter, WireHitCreator, MVA< Filter< AVarSet::Object > >, MVA< Filter< Belle2::TrackFindingCDC::CDCWireHitVarSet::Object > >, MVA< Filter< typename AVarSet::Object > >, MVA< Filter< typename AVarSet::Object > >, FourHitFilter, LayerRelationFilter< AFilter >, LayerRelationFilter< TrackingUtilities::ChooseableFilter< RelationFilterFactory > >, LayerRelationFilter< TrackingUtilities::ChooseableFilter< RelationFilterFactory > >, QualityIndicatorFilter, RawTrackCandCleaner< AHit >, RawTrackCandCleaner< Belle2::vxdHoughTracking::VXDHoughState >, RecoTrackStorer, ROIFinder, SpacePointLoaderAndPreparer, ThreeHitFilter, TrackCandidateOverlapResolver, TrackCandidateResultRefiner, TwoHitVirtualIPFilter, and TwoHitVirtualIPQIFilter.

Definition at line 23 of file CompositeProcessingSignalListener.cc.

24{
27 psl->beginRun();
28 }
29}
virtual void beginRun()
Receive signal for the beginning of a new run.

◆ calculateBestTrackToMerge() [1/2]

template<class ACDCTracks>
WithWeight< MayBePtr< CDCTrack > > calculateBestTrackToMerge ( CDCTrack & track,
ACDCTracks & tracks )

Determine the best track for merging with the candidate track.

Definition at line 100 of file AxialTrackMerger.cc.

101{
102 std::vector<WithWeight<CDCTrack*>> weightedTracks;
103 for (CDCTrack& track2 : tracks) {
104 if (&track == &track2) continue;
105 if (track2.size() < 3) continue;
106
107 double fitProb = doTracksFitTogether(track, track2);
108 if (std::isnan(fitProb)) continue;
109
110 weightedTracks.emplace_back(&track2, fitProb);
111 }
112
113 auto bestMatch = std::max_element(weightedTracks.begin(), weightedTracks.end(), LessWeight());
114 if (bestMatch == weightedTracks.end()) return {nullptr, 0};
115 else return *bestMatch;
116}
static double doTracksFitTogether(TrackingUtilities::CDCTrack &track1, TrackingUtilities::CDCTrack &track2)
Fits the hit content of both tracks in a common fit repeated with an annealing schedule removing far ...

◆ calculateBestTrackToMerge() [2/2]

template<class ACDCTracks>
static TrackingUtilities::WithWeight< TrackingUtilities::MayBePtr< TrackingUtilities::CDCTrack > > calculateBestTrackToMerge ( TrackingUtilities::CDCTrack & track,
ACDCTracks & tracks )
staticprivate

Searches for the best candidate to merge this track to.

Parameters
tracktrack for which we try to find merging partner
trackssearch range of tracks
Returns
a pointer to the best fit candidate including a fit probability
Return values
{nullptr,0}in case no match was found

◆ doTracksFitTogether()

double doTracksFitTogether ( TrackingUtilities::CDCTrack & track1,
TrackingUtilities::CDCTrack & track2 )
staticprivate

Fits the hit content of both tracks in a common fit repeated with an annealing schedule removing far away hits.

Returns
Some measure of fit probability

Definition at line 118 of file AxialTrackMerger.cc.

119{
120 // First check whether most of the hits from the tracks lie in the backward direction
121 // even if though track is not curling -> tracks should not be merged
122 const CDCTrajectory3D& trajectory3D1 = track1.getStartTrajectory3D();
123 const CDCTrajectory3D& trajectory3D2 = track2.getStartTrajectory3D();
124
125 int fbVote12 = 0;
126 int fbVote21 = 0;
127
128 for (const CDCRecoHit3D& recoHit3D : track1) {
129 EForwardBackward fbInfo = VectorUtil::isForwardOrBackwardOf(VectorUtil::getXYVector(trajectory3D2.getFlightDirection3DAtSupport()),
130 recoHit3D.getRecoPos2D());
131 if (not isValid(fbInfo)) continue;
132 fbVote12 += fbInfo;
133 }
134
135 for (const CDCRecoHit3D& recoHit3D : track2) {
136 EForwardBackward fbInfo = VectorUtil::isForwardOrBackwardOf(VectorUtil::getXYVector(trajectory3D1.getFlightDirection3DAtSupport()),
137 recoHit3D.getRecoPos2D());
138 if (not isValid(fbInfo)) continue;
139 fbVote21 += fbInfo;
140 }
141
142 if (not trajectory3D1.isCurler() and fbVote12 < 0) return NAN;
143 if (not trajectory3D2.isCurler() and fbVote21 < 0) return NAN;
144
145 // Build common hit list by copying the wire hits into one large list
146 // We use the wire hits here as we do not want them to bring
147 // their "old" reconstructed position when fitting.
148 std::vector<const CDCWireHit*> combinedWireHits;
149 combinedWireHits.reserve(track1.size() + track2.size());
150 for (const CDCRecoHit3D& hit : track1) {
151 combinedWireHits.push_back(&(hit.getWireHit()));
152 }
153 for (const CDCRecoHit3D& hit : track2) {
154 combinedWireHits.push_back(&(hit.getWireHit()));
155 }
156
157 // Sorting is done via pointer addresses (!!).
158 // This is not very stable and also not very meaningful (in terms of ordering in the track),
159 // but it does the job for unique.
160 // (the ordering is still outwards though since the wire hits are ordered like that in continuous memory)
161 std::sort(combinedWireHits.begin(), combinedWireHits.end());
162 erase_unique(combinedWireHits);
163
164 // Calculate track parameters
165 CDCTrajectory2D commonTrajectory2D;
166 const CDCKarimakiFitter& fitter = CDCKarimakiFitter::getNoDriftVarianceFitter();
167
168 // Approach the best fit
169 commonTrajectory2D = fitter.fit(combinedWireHits);
170 removeStrangeHits(5, combinedWireHits, commonTrajectory2D);
171 commonTrajectory2D = fitter.fit(combinedWireHits);
172 removeStrangeHits(3, combinedWireHits, commonTrajectory2D);
173 commonTrajectory2D = fitter.fit(combinedWireHits);
174 removeStrangeHits(1, combinedWireHits, commonTrajectory2D);
175 commonTrajectory2D = fitter.fit(combinedWireHits);
176 removeStrangeHits(1, combinedWireHits, commonTrajectory2D);
177 commonTrajectory2D = fitter.fit(combinedWireHits);
178
179 // Dismiss this possibility if the hit list size after all the removing of hits is even smaller
180 // than the two lists before or if the list is too small
181 if (combinedWireHits.size() <= std::max(track1.size(), track2.size())
182 or combinedWireHits.size() < 15) {
183 return NAN;
184 }
185
186 return commonTrajectory2D.getPValue();
187}
static void removeStrangeHits(double factor, std::vector< const TrackingUtilities::CDCWireHit * > &wireHits, TrackingUtilities::CDCTrajectory2D &trajectory)
Remove all hits that are further than factor * driftlength away from the trajectory.
static const CDCKarimakiFitter & getNoDriftVarianceFitter()
Static getter for a general fitter that does not use the drift length variances.
double getPValue() const
Getter for p-value.
bool isCurler(double factor=1) const
Checks if the trajectory leaves the outer radius of the CDC times the given tolerance factor.
ROOT::Math::XYZVector getFlightDirection3DAtSupport() const
Get the unit momentum at the start point of the trajectory.
bool isValid(EForwardBackward eForwardBackward)
Check whether the given enum instance is one of the valid values.
EForwardBackward
Enumeration to represent the distinct possibilities of the right left passage information.

◆ doTracksMerging()

void doTracksMerging ( std::vector< TrackingUtilities::CDCTrack > & axialTracks,
const std::vector< const TrackingUtilities::CDCWireHit * > & allAxialWireHits )
private

The track finding often finds two curling tracks, originating from the same particle.

This function merges them.

Definition at line 79 of file AxialTrackMerger.cc.

81{
82 // Search for best matches - cannot use range for here :(.
83 for (auto itTrack = axialTracks.begin(); itTrack != axialTracks.end(); ++itTrack) {
84 CDCTrack& track = *itTrack;
85 auto followingTracks = asRange(std::next(itTrack), axialTracks.end());
86
87 WithWeight<MayBePtr<CDCTrack> > bestTrack = calculateBestTrackToMerge(track, followingTracks);
88 double fitProb = bestTrack.getWeight();
89
90 if (bestTrack != nullptr and fitProb > m_param_minFitProb) {
91 mergeTracks(track, *bestTrack, allAxialWireHits);
92 }
93 }
94
96}
static void mergeTracks(TrackingUtilities::CDCTrack &track1, TrackingUtilities::CDCTrack &track2, const std::vector< const TrackingUtilities::CDCWireHit * > &allAxialWireHits)
Function to merge two track candidates.
static TrackingUtilities::WithWeight< TrackingUtilities::MayBePtr< TrackingUtilities::CDCTrack > > calculateBestTrackToMerge(TrackingUtilities::CDCTrack &track, ACDCTracks &tracks)
Searches for the best candidate to merge this track to.
double m_param_minFitProb
Parameter : Minimal fit probability of the common fit of two tracks to be eligible for merging.
Weight getWeight() const
Getter for the weight.
Definition WithWeight.h:56

◆ endRun()

void endRun ( )
overridevirtualinherited

Receive and dispatch signal for the end of the run.

Reimplemented from ProcessingSignalListener.

Definition at line 39 of file CompositeProcessingSignalListener.cc.

40{
42 psl->endRun();
43 }
45}
virtual void endRun()
Receive signal for the end of the run.

◆ exposeParameters()

void exposeParameters ( ModuleParamList * moduleParamList,
const std::string & prefix )
finalvirtual

Expose the parameters to a module.

Reimplemented from CompositeProcessingSignalListener.

Definition at line 35 of file AxialTrackMerger.cc.

36{
37 moduleParamList->addParameter(prefixed(prefix, "minFitProb"),
39 "Minimal fit probability of the common fit "
40 "of two tracks to be eligible for merging",
42
43 moduleParamList->addParameter(prefixed(prefix, "removeHitsAfterSuperLayerBreak"),
45 "Remove the hits of the tracks after a super layer break "
46 "before merging the tracks",
48}
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.

◆ getDescription()

std::string getDescription ( )
finalvirtual

Short description of the findlet.

Reimplemented from Findlet< AIOTypes >.

Definition at line 30 of file AxialTrackMerger.cc.

31{
32 return "Merges axial tracks found in the Legendre search";
33}

◆ getNProcessingSignalListener()

int getNProcessingSignalListener ( )
protectedinherited

Get the number of currently registered listeners.

Definition at line 60 of file CompositeProcessingSignalListener.cc.

61{
63}

◆ initialize()

void initialize ( )
overridevirtualinherited

Receive and dispatch signal before the start of the event processing.

Reimplemented from ProcessingSignalListener.

Reimplemented in CosmicsTrackMergerFindlet, DATCONSVDClusterizer, DATCONSVDClusterLoaderAndPreparer, FastInterceptFinder2DFPGA, HitBasedT0Extractor, LayerPXDRelationFilter< AFilter, APrefilter >, LayerPXDRelationFilter< TrackingUtilities::ChooseableFilter< PXDPairFilterFactory > >, LayerPXDRelationFilter< TrackingUtilities::ChooseableFilter< PXDPairFilterFactory > >, NonIPCrossingStateFilter< AllPXDStateFilter >, NonIPCrossingStateFilter< AllPXDStateFilter >, NonIPCrossingStateFilter< AllSVDStateFilter >, NonIPCrossingStateFilter< AllSVDStateFilter >, PXDResultVarSet, RelationApplier, RelationFromSVDTracksCreator, ResultStorer< AResult >, ResultStorer< Belle2::CKFToPXDResult >, ResultStorer< Belle2::CKFToSVDResult >, ROICalculator, StoreArrayMerger, SVDResultVarSet, SVDShaperDigitConverter, ToPXDExtrapolator, CutsFromDBWireHitFilter, HitReclaimer, MCFacetRelationFilter, MCSegmentPairRelationFilter, MCSegmentTripleFilter, MCSegmentTripleRelationFilter, MCSymmetric< BaseAxialSegmentPairFilter >, MCSymmetric< BaseAxialSegmentPairFilter >, MCSymmetric< BaseFacetFilter >, MCSymmetric< BaseFacetFilter >, MCSymmetric< BaseFacetRelationFilter >, MCSymmetric< BaseFacetRelationFilter >, MCSymmetric< BaseSegmentPairFilter >, MCSymmetric< BaseSegmentPairFilter >, MCSymmetric< BaseSegmentPairRelationFilter >, MCSymmetric< BaseSegmentPairRelationFilter >, MCSymmetric< BaseSegmentRelationFilter >, MCSymmetric< BaseSegmentRelationFilter >, MCSymmetric< BaseSegmentTripleFilter >, MCSymmetric< BaseSegmentTripleFilter >, MCSymmetric< BaseSegmentTripleRelationFilter >, MCSymmetric< BaseSegmentTripleRelationFilter >, MCSymmetric< BaseTrackRelationFilter >, MCSymmetric< BaseTrackRelationFilter >, SegmentAliasResolver, SegmentCreatorMCTruth, SegmentFitter, SegmentOrienter, SegmentTrackTruthVarSet, StereoHitTrackQuadTreeMatcher< AQuadTree >, StereoHitTrackQuadTreeMatcher< Belle2::TrackFindingCDC::HyperHough< std::pair< TrackingUtilities::CDCRecoHit3D, const TrackingUtilities::CDCRLWireHit * >, FirstOfPairInBox< HitInHyperBox >, 4, 3, 2 > >, StereoHitTrackQuadTreeMatcher< Belle2::TrackFindingCDC::QuadraticLegendre< std::pair< TrackingUtilities::CDCRecoHit3D, const TrackingUtilities::CDCRLWireHit * >, FirstOfPairInBox< HitInQuadraticBox >, 2, 2 > >, StereoHitTrackQuadTreeMatcher< Belle2::TrackFindingCDC::Z0TanLambdaLegendre< std::pair< TrackingUtilities::CDCRecoHit3D, const TrackingUtilities::CDCRLWireHit * >, FirstOfPairInBox< HitInZ0TanLambdaBox >, 2, 2 > >, StereoHitTruthVarSet, TrackExporter, TrackOrienter, TrackQualityEstimator, TruthAxialSegmentPairVarSet, TruthSegmentVarSet, TruthTrackVarSet, WireHitCreator, WireHitMCMultiLoopBlocker, FilterVarSet< AFilter >, MVA< Filter< AVarSet::Object > >, MVA< Filter< Belle2::TrackFindingCDC::CDCWireHitVarSet::Object > >, MVA< Filter< typename AVarSet::Object > >, MVA< Filter< typename AVarSet::Object > >, OnVarSet< Filter< ATruthVarSet::Object > >, OnVarSet< Filter< AVarSet::Object > >, OnVarSet< Filter< Belle2::TrackFindingCDC::CDCWireHitVarSet::Object > >, OnVarSet< Filter< PXDResultVarSet::Object > >, OnVarSet< Filter< SVDResultVarSet::Object > >, OnVarSet< Filter< typename AVarSet::Object > >, OnVarSet< Filter< typename AVarSet::Object > >, Recording< Filter< AVarSet::Object > >, Recording< Filter< typename AVarSet::Object > >, Recording< Filter< typename AVarSet::Object > >, RelationVarSet< ABaseVarSet >, StoreArrayLoader< IOType >, StoreArrayLoader< const Belle2::SpacePoint >, StoreArrayLoader< DataStoreInputTypeRefType >, StoreVectorSwapper< IOType, a_alwaysWrite >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCFacet >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegment2D >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegmentPair >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCSegmentTriple >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCTrack >, StoreVectorSwapper< Belle2::TrackingUtilities::CDCWireHit, true >, UnionVarSet< AObject >, UnionVarSet< Object >, VariadicUnionVarSet< AVarSets >, VariadicUnionVarSet< BasicAxialSegmentPairVarSet, FitlessAxialSegmentPairVarSet, FitAxialSegmentPairVarSet >, VariadicUnionVarSet< BasicAxialSegmentPairVarSet, FitlessAxialSegmentPairVarSet, FitAxialSegmentPairVarSet >, VariadicUnionVarSet< BasicAxialSegmentPairVarSet, HitGapAxialSegmentPairVarSet >, VariadicUnionVarSet< BasicAxialSegmentPairVarSet, HitGapAxialSegmentPairVarSet >, VariadicUnionVarSet< BasicFacetVarSet, TrackingUtilities::FilterVarSet< Chi2FacetFilter > >, VariadicUnionVarSet< BasicFacetVarSet, TrackingUtilities::FilterVarSet< Chi2FacetFilter > >, VariadicUnionVarSet< BasicSegmentPairRelationVarSet, FitSegmentPairRelationVarSet >, VariadicUnionVarSet< BasicSegmentPairRelationVarSet, FitSegmentPairRelationVarSet >, VariadicUnionVarSet< BasicSegmentPairVarSet, FitlessSegmentPairVarSet, FitSegmentPairVarSet >, VariadicUnionVarSet< BasicSegmentPairVarSet, FitlessSegmentPairVarSet, FitSegmentPairVarSet >, VariadicUnionVarSet< BasicSegmentPairVarSet, SkimmedHitGapSegmentPairVarSet >, VariadicUnionVarSet< BasicSegmentPairVarSet, SkimmedHitGapSegmentPairVarSet >, VariadicUnionVarSet< BasicSegmentRelationVarSet, FitlessSegmentRelationVarSet, FitSegmentRelationVarSet >, VariadicUnionVarSet< BasicSegmentRelationVarSet, FitlessSegmentRelationVarSet, FitSegmentRelationVarSet >, VariadicUnionVarSet< BasicSegmentRelationVarSet, HitGapSegmentRelationVarSet >, VariadicUnionVarSet< BasicSegmentRelationVarSet, HitGapSegmentRelationVarSet >, VariadicUnionVarSet< BasicTrackRelationVarSet, FitTrackRelationVarSet >, VariadicUnionVarSet< BasicTrackRelationVarSet, FitTrackRelationVarSet >, VariadicUnionVarSet< BasicTrackRelationVarSet, HitGapTrackRelationVarSet >, VariadicUnionVarSet< BasicTrackRelationVarSet, HitGapTrackRelationVarSet >, TrackLoader, MultiHoughSpaceFastInterceptFinder, QualityIndicatorFilter, RawTrackCandCleaner< AHit >, RawTrackCandCleaner< Belle2::vxdHoughTracking::VXDHoughState >, RecoTrackStorer, ROIFinder, SingleHoughSpaceFastInterceptFinder, SpacePointLoaderAndPreparer, TrackCandidateOverlapResolver, TrackCandidateResultRefiner, and TwoHitVirtualIPQIFilter.

Definition at line 15 of file CompositeProcessingSignalListener.cc.

16{
19 psl->initialize();
20 }
21}
virtual void initialize()
Receive signal before the start of the event processing.

◆ mergeTracks()

void mergeTracks ( TrackingUtilities::CDCTrack & track1,
TrackingUtilities::CDCTrack & track2,
const std::vector< const TrackingUtilities::CDCWireHit * > & allAxialWireHits )
staticprivate

Function to merge two track candidates.

The hits of track2 are deleted and transferred to track1 and the track1 is resorted. The method also applies some post processing and splits the track1 in case it appears to contain two back-to-back arms,

Definition at line 202 of file AxialTrackMerger.cc.

205{
206 if (&track1 == &track2) return;
207
208 CDCTrajectory2D trajectory2D = track1.getStartTrajectory3D().getTrajectory2D();
209 for (const CDCRecoHit3D& orgRecoHit3D : track2) {
210 CDCRecoHit3D recoHit3D = CDCRecoHit3D::reconstruct(orgRecoHit3D.getRLWireHit(), trajectory2D);
211 track1.push_back(std::move(recoHit3D));
212 }
213 track2.clear();
214
216
217 track2 = CDCTrack(AxialTrackUtil::splitBack2BackTrack(track1));
218
220
221 for (CDCRecoHit3D& recoHit3D : track2) {
222 const auto& tmp = recoHit3D.getRefPos2D();
223 recoHit3D.setRecoPos3D({tmp.X(), tmp.Y(), 0});
224 recoHit3D.setRLInfo(ERightLeft::c_Unknown);
225 }
226
228 bool success = AxialTrackUtil::postprocessTrack(track2, allAxialWireHits);
229 if (not success) {
230 for (const CDCRecoHit3D& recoHit3D : track2) {
231 recoHit3D.getWireHit()->setTakenFlag(false);
232 }
233 track2.clear();
234 }
235}
void setTakenFlag(bool setTo=true)
Sets the taken flag to the given value. Default value true.
const CDCWireHit & getWireHit() const
Getter for the wire hit.
const ROOT::Math::XYVector & getRefPos2D() const
Getter for the reference position of the wire.
static CDCRecoHit3D reconstruct(const CDCRecoHit2D &recoHit2D, const CDCTrajectory2D &trajectory2D)
Reconstructs the three dimensional hit from the two dimensional and the two dimensional trajectory.
void setRLInfo(ERightLeft rlInfo)
Setter the right left passage information.
void setRecoPos3D(const ROOT::Math::XYZVector &recoPos3D)
Setter for the 3d position of the hit.
static std::vector< TrackingUtilities::CDCRecoHit3D > splitBack2BackTrack(TrackingUtilities::CDCTrack &track)
Tries to split back-to-back tracks into two different tracks.
static bool postprocessTrack(TrackingUtilities::CDCTrack &track, const std::vector< const TrackingUtilities::CDCWireHit * > &allAxialWireHits)
Perform all track postprocessing - return whether the track is considered good after the postprocessi...

◆ removeStrangeHits()

void removeStrangeHits ( double factor,
std::vector< const TrackingUtilities::CDCWireHit * > & wireHits,
TrackingUtilities::CDCTrajectory2D & trajectory )
staticprivate

Remove all hits that are further than factor * driftlength away from the trajectory.

Parameters
factorgives a number how far the hit is allowed to be.
wireHitsthe wirehits that should be considered
trajectorythe reference trajectory

Definition at line 189 of file AxialTrackMerger.cc.

192{
193 auto farFromTrajectory = [&trajectory2D, &factor](const CDCWireHit * wireHit) {
194 ROOT::Math::XYVector pos2D = wireHit->getRefPos2D();
195 double driftLength = wireHit->getRefDriftLength();
196 double dist = std::fabs(trajectory2D.getDist2D(pos2D)) - driftLength;
197 return std::fabs(dist) > driftLength * factor;
198 };
199 erase_remove_if(wireHits, farFromTrajectory);
200}

◆ terminate()

Member Data Documentation

◆ m_initialized

bool m_initialized = false
privateinherited

Flag to keep track whether initialization happened before.

Definition at line 52 of file ProcessingSignalListener.h.

◆ m_initializedAs

std::string m_initializedAs
privateinherited

Name of the type during initialisation.

Definition at line 58 of file ProcessingSignalListener.h.

◆ m_param_minFitProb

double m_param_minFitProb = 0.85
private

Parameter : Minimal fit probability of the common fit of two tracks to be eligible for merging.

Definition at line 101 of file AxialTrackMerger.h.

◆ m_param_removeHitsAfterSuperLayerBreak

bool m_param_removeHitsAfterSuperLayerBreak = true
private

Parameter : Remove the hits of the tracks after a super layer break before merging.

Definition at line 104 of file AxialTrackMerger.h.

◆ m_subordinaryProcessingSignalListeners

std::vector<ProcessingSignalListener*> m_subordinaryProcessingSignalListeners
privateinherited

References to subordinary signal processing listener contained in this findlet.

Definition at line 60 of file CompositeProcessingSignalListener.h.

◆ m_terminated

bool m_terminated = false
privateinherited

Flag to keep track whether termination happened before.

Definition at line 55 of file ProcessingSignalListener.h.


The documentation for this class was generated from the following files: