OpenMS  2.8.0
FeatureGroupingAlgorithm.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // OpenMS -- Open-Source Mass Spectrometry
3 // --------------------------------------------------------------------------
4 // Copyright The OpenMS Team -- Eberhard Karls University Tuebingen,
5 // ETH Zurich, and Freie Universitaet Berlin 2002-2021.
6 //
7 // This software is released under a three-clause BSD license:
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of any author or any participating institution
14 // may be used to endorse or promote products derived from this software
15 // without specific prior written permission.
16 // For a full list of authors, refer to the file AUTHORS.
17 // --------------------------------------------------------------------------
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL ANY OF THE AUTHORS OR THE CONTRIBUTING
22 // INSTITUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // --------------------------------------------------------------------------
31 // $Maintainer: Timo Sachsenberg $
32 // $Authors: Marc Sturm, Clemens Groepl, Chris Bielow $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
40 
41 namespace OpenMS
42 {
43 
49  class OPENMS_DLLAPI FeatureGroupingAlgorithm :
50  public DefaultParamHandler
51  {
52 public:
55 
58 
60  virtual void group(const std::vector<FeatureMap > & maps, ConsensusMap & out) = 0;
61 
65  virtual void group(const std::vector<ConsensusMap> & maps, ConsensusMap & out);
66 
68  void transferSubelements(const std::vector<ConsensusMap> & maps, ConsensusMap & out) const;
69 
71  static void registerChildren();
72 
73 protected:
74 
77  template<class MapType>
78  void postprocess_(const std::vector<MapType>& maps, ConsensusMap& out)
79  {
80  // add protein IDs and unassigned peptide IDs to the result map here,
81  // to keep the same order as the input maps (useful for output later):
82  auto& newIDs = out.getUnassignedPeptideIdentifications();
83  Size map_idx = 0;
84 
85  for (typename std::vector<MapType>::const_iterator map_it = maps.begin();
86  map_it != maps.end(); ++map_it)
87  {
88  // add protein identifications to result map:
89  out.getProteinIdentifications().insert(
90  out.getProteinIdentifications().end(),
91  map_it->getProteinIdentifications().begin(),
92  map_it->getProteinIdentifications().end());
93 
94  // assign the map_index to unassigned PepIDs as well.
95  // for the assigned ones, this has to be done in the subclass.
96  for (const PeptideIdentification& pepID : map_it->getUnassignedPeptideIdentifications())
97  {
98  auto newPepID = pepID;
99  // Note: during linking of _consensus_Maps we have the problem that old identifications
100  // should already have a map_index associated. Since we group the consensusFeatures only anyway
101  // (without keeping the subfeatures) the method for now is to "re"-index based on the input file/map index.
102  // Subfeatures have to be transferred in postprocessing if required
103  // (see FeatureGroupingAlgorithm::transferSubelements as used in the TOPP tools, i.e. FeatureLinkerBase),
104  // which also takes care of a re-re-indexing if the old map_index of the IDs was saved.
105  newPepID.setMetaValue("map_index", map_idx);
106  newIDs.push_back(newPepID);
107  }
108  map_idx++;
109  }
110 
111  // canonical ordering for checking the results:
112  out.sortByQuality();
113  out.sortByMaps();
114  out.sortBySize();
115  }
116 private:
121 
122 
123 
124  };
125 
126 } // namespace OpenMS
127 
A container for consensus elements.
Definition: ConsensusMap.h:90
void sortByMaps()
Sorts with respect to the sets of maps covered by the consensus features (lexicographically).
void sortBySize()
Sorts with respect to the size (number of elements)
const std::vector< ProteinIdentification > & getProteinIdentifications() const
non-mutable access to the protein identifications
const std::vector< PeptideIdentification > & getUnassignedPeptideIdentifications() const
non-mutable access to the unassigned peptide identifications
void sortByQuality(bool reverse=false)
Sorts the peaks according to ascending quality.
A base class for all classes handling default parameters.
Definition: DefaultParamHandler.h:93
Base class for all feature grouping algorithms.
Definition: FeatureGroupingAlgorithm.h:51
void transferSubelements(const std::vector< ConsensusMap > &maps, ConsensusMap &out) const
Transfers subelements (grouped features) from input consensus maps to the result consensus map.
FeatureGroupingAlgorithm()
Default constructor.
static void registerChildren()
Register all derived classes in this method.
virtual void group(const std::vector< ConsensusMap > &maps, ConsensusMap &out)
FeatureGroupingAlgorithm & operator=(const FeatureGroupingAlgorithm &)
Assignment operator is not implemented -> private.
~FeatureGroupingAlgorithm() override
Destructor.
void postprocess_(const std::vector< MapType > &maps, ConsensusMap &out)
Definition: FeatureGroupingAlgorithm.h:78
virtual void group(const std::vector< FeatureMap > &maps, ConsensusMap &out)=0
Applies the algorithm. The features in the input maps are grouped and the output is written to the co...
FeatureGroupingAlgorithm(const FeatureGroupingAlgorithm &)
Copy constructor is not implemented -> private.
Represents the peptide hits for a spectrum.
Definition: PeptideIdentification.h:65
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47