OpenMS
FeatureOverlapFilter.h
Go to the documentation of this file.
1 // Copyright (c) 2002-present, OpenMS Inc. -- EKU Tuebingen, ETH Zurich, and FU Berlin
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
4 // --------------------------------------------------------------------------
5 // $Maintainer: Julianus Pfeuffer $
6 // $Authors: Julianus Pfeuffer $
7 // --------------------------------------------------------------------------
8 
9 #pragma once
10 
13 
14 namespace OpenMS
15 {
17  enum class FeatureOverlapMode
18  {
19  CONVEX_HULL,
20  TRACE_LEVEL,
22  };
23 
25  enum class MergeIntensityMode
26  {
27  SUM,
28  MAX
29  };
30 
33  {
34  double rt_tolerance = 5.0;
35  double mz_tolerance = 0.05;
36  bool require_same_charge = true;
37  bool require_same_im = false;
38  };
39 
40  class OPENMS_DLLAPI FeatureOverlapFilter
41  {
42  public:
43 
46 
47  /*
48  @brief Filter overlapping features using a spatial datastructure (quadtree).
49  Retains only the best feature in each cluster of overlapping features.
50 
51  @param FeatureComparator must implement the concept of a less comparator.
52  If several features overlap, the feature that evaluates as "smallest" is considered the best (according to the passed comparator) and is kept.
53  The other overlapping features are removed and FeatureOverlapCallback evaluated on them.
54  Default: overall feature quality.
55 
56  @param FeatureOverlapCallback(best_in_cluster, f) is called if a feature f overlaps with a feature best_in_cluster.
57  FeatureOverlapCallback provides a customization point to e.g.:
58  - transfer information from the soon-to-be-removed feature f over to the best_in_cluster feature
59  - gather overlap statistics
60  - help in debugging
61  - etc.
62  in form of a callable.
63  If the FeatureOverlapCallback returns false, the overlapping feature will be treated as not overlapping with best_in_cluster (and not removed).
64  Default: function that just returns true.
65 
66  @ingroup Datareduction
67  */
68  static void filter(FeatureMap& fmap,
69  std::function<bool(const Feature&, const Feature&)> FeatureComparator = [](const Feature& left, const Feature& right){ return left.getOverallQuality() > right.getOverallQuality(); },
70  std::function<bool(Feature&, Feature&)> FeatureOverlapCallback = [](Feature&, Feature&){ return true; },
71  bool check_overlap_at_trace_level = true);
72 
73  /*
74  @brief Filter overlapping features with configurable overlap detection mode.
75  Extended version that allows choosing between different overlap detection strategies.
76 
77  @param fmap The feature map to filter
78  @param FeatureComparator Comparator to determine the best feature in overlapping clusters
79  @param FeatureOverlapCallback Callback function called when features overlap
80  @param mode The overlap detection mode to use
81  @param tolerances Tolerances for centroid-based overlap detection (only used when mode == CENTROID_BASED)
82 
83  @ingroup Datareduction
84  */
85  static void filter(FeatureMap& fmap,
86  std::function<bool(const Feature&, const Feature&)> FeatureComparator,
87  std::function<bool(Feature&, Feature&)> FeatureOverlapCallback,
88  FeatureOverlapMode mode,
89  const CentroidTolerances& tolerances = CentroidTolerances());
90 
112  static std::function<bool(Feature&, Feature&)> createFAIMSMergeCallback(
114  bool write_meta_values = true);
115 
148  static void mergeOverlappingFeatures(FeatureMap& feature_map,
149  double max_rt_diff = 5.0,
150  double max_mz_diff = 0.05,
151  bool require_same_charge = true,
152  bool require_same_im = false,
154  bool write_meta_values = true);
155 
181  static void mergeFAIMSFeatures(FeatureMap& feature_map,
182  double max_rt_diff = 5.0,
183  double max_mz_diff = 0.05);
184  };
185 
186 }
187 
188 
A container for features.
Definition: FeatureMap.h:82
Definition: FeatureOverlapFilter.h:41
static void mergeOverlappingFeatures(FeatureMap &feature_map, double max_rt_diff=5.0, double max_mz_diff=0.05, bool require_same_charge=true, bool require_same_im=false, MergeIntensityMode intensity_mode=MergeIntensityMode::SUM, bool write_meta_values=true)
Merge overlapping features based on centroid distances.
static void mergeFAIMSFeatures(FeatureMap &feature_map, double max_rt_diff=5.0, double max_mz_diff=0.05)
Merge FAIMS features that represent the same analyte detected at different CV values.
static void filter(FeatureMap &fmap, std::function< bool(const Feature &, const Feature &)> FeatureComparator, std::function< bool(Feature &, Feature &)> FeatureOverlapCallback, FeatureOverlapMode mode, const CentroidTolerances &tolerances=CentroidTolerances())
static void filter(FeatureMap &fmap, std::function< bool(const Feature &, const Feature &)> FeatureComparator=[](const Feature &left, const Feature &right){ return left.getOverallQuality() > right.getOverallQuality();}, std::function< bool(Feature &, Feature &)> FeatureOverlapCallback=[](Feature &, Feature &){ return true;}, bool check_overlap_at_trace_level=true)
static std::function< bool(Feature &, Feature &)> createFAIMSMergeCallback(MergeIntensityMode intensity_mode=MergeIntensityMode::SUM, bool write_meta_values=true)
Create a callback function for merging overlapping features.
An LC-MS feature.
Definition: Feature.h:46
QualityType getOverallQuality() const
Non-mutable access to the overall quality.
Main OpenMS namespace.
Definition: openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
FeatureOverlapMode
Enum to specify the overlap detection mode.
Definition: FeatureOverlapFilter.h:18
@ CENTROID_BASED
Check overlap based on centroid distances.
@ TRACE_LEVEL
Check overlap at trace level.
@ CONVEX_HULL
Use convex hull bounding boxes (default)
MergeIntensityMode
Enum to specify how intensities are combined when merging features.
Definition: FeatureOverlapFilter.h:26
@ MAX
Keep maximum intensity.
@ SUM
Sum intensities of merged features (default)
double mz_tolerance
Maximum m/z difference in Da.
Definition: FeatureOverlapFilter.h:35
bool require_same_charge
Whether to require identical charge states.
Definition: FeatureOverlapFilter.h:36
double rt_tolerance
Maximum RT difference in seconds.
Definition: FeatureOverlapFilter.h:34
bool require_same_im
Whether to require identical FAIMS CV (or both missing)
Definition: FeatureOverlapFilter.h:37
Structure to hold centroid-based overlap tolerances.
Definition: FeatureOverlapFilter.h:33