File indexing completed on 2023-10-25 10:05:35
0001 #ifndef CloseComponentsMerger_H
0002 #define CloseComponentsMerger_H
0003
0004 #include "TrackingTools/GsfTools/interface/MultiGaussianStateMerger.h"
0005 #include "TrackingTools/GsfTools/interface/DistanceBetweenComponents.h"
0006 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
0007
0008 #include <map>
0009 #include <algorithm>
0010
0011
0012
0013
0014
0015
0016
0017 template <unsigned int N>
0018 class CloseComponentsMerger final : public MultiGaussianStateMerger<N> {
0019 private:
0020 using SingleState = SingleGaussianState<N>;
0021 using MultiState = MultiGaussianState<N>;
0022 using SingleStatePtr = std::shared_ptr<SingleState>;
0023
0024 public:
0025 CloseComponentsMerger(int n, const DistanceBetweenComponents<N>* distance);
0026
0027 CloseComponentsMerger* clone() const override { return new CloseComponentsMerger(*this); }
0028
0029
0030
0031
0032 MultiState merge(const MultiState& mgs) const override;
0033
0034 MultiState mergeOld(const MultiState& mgs) const;
0035
0036 public:
0037 typedef std::multimap<double, SingleStatePtr> SingleStateMap;
0038 typedef std::pair<SingleStatePtr, typename SingleStateMap::iterator> MinDistResult;
0039
0040 private:
0041
0042 MinDistResult compWithMinDistToLargestWeight(SingleStateMap&) const;
0043
0044 int theMaxNumberOfComponents;
0045 DeepCopyPointerByClone<DistanceBetweenComponents<N> > theDistance;
0046 };
0047
0048 #include "TrackingTools/GsfTools/interface/CloseComponentsMerger.icc"
0049
0050 #endif