OpenMS  2.7.0
ConsensusMap.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: $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
42 
45 
46 #include <OpenMS/CONCEPT/Types.h>
49 #include <OpenMS/OpenMSConfig.h>
50 
51 #include <map>
52 #include <vector>
53 
54 namespace OpenMS
55 {
56  class PeptideIdentification;
57  class PeptideHit;
58  class ProteinIdentification;
59  class DataProcessing;
60  namespace Logger
61  {
62  class LogStream;
63  }
64 
80  class ConsensusMap : // no OPENMS_DLLAPI here, since the class is derived from an STL class - we do not want parts of the STL lib in OpenMS.lib, since it will cause linker errors
81  private std::vector<ConsensusFeature>,
82  public MetaInfoInterface,
83  public RangeManager<2>,
84  public DocumentIdentifier,
85  public UniqueIdInterface,
86  public UniqueIdIndexer<ConsensusMap>,
87  public MapUtilities<ConsensusMap>
88  {
89 
90 public:
91  typedef std::vector<ConsensusFeature> privvec;
92 
93  // types
94  using privvec::value_type;
95  using privvec::iterator;
96  using privvec::const_iterator;
97  using privvec::size_type;
98  using privvec::pointer; // ConstRefVector
99  using privvec::reference; // ConstRefVector
100  using privvec::const_reference; // ConstRefVector
101  using privvec::difference_type; // ConstRefVector
102 
103  // functions
104  using privvec::begin;
105  using privvec::end;
106 
107  using privvec::size;
108  using privvec::resize;
109  using privvec::empty;
110  using privvec::reserve;
111  using privvec::operator[];
112  using privvec::at;
113  using privvec::back;
114  using privvec::push_back;
115  using privvec::emplace_back;
116  using privvec::erase;
117 
118  enum class SplitMeta
119  {
120  DISCARD,
121  COPY_ALL,
122  COPY_FIRST
123  };
124 
126  struct OPENMS_DLLAPI ColumnHeader :
127  public MetaInfoInterface
128  {
130  ColumnHeader() = default;
131 
133  ColumnHeader(const ColumnHeader&) = default;
134 
136  ColumnHeader& operator=(const ColumnHeader&) = default;
137 
144  Size size = 0;
147 
148  unsigned getLabelAsUInt(const String& experiment_type) const
149  {
150  if (metaValueExists("channel_id"))
151  {
152  return static_cast<unsigned int>(getMetaValue("channel_id")) + 1;
153  }
154  else
155  {
156  if (experiment_type != "label-free")
157  {
158  // TODO There seem to be files in our test data from the Multiplex toolset that do not annotate
159  // a channel id but only add the "label" attribute with the SILAC modification. Add a fall-back here?
160  OPENMS_LOG_WARN << "No channel id annotated in labelled consensusXML. Assuming only a single channel was used." << std::endl;
161  }
162  return 1;
163  }
164  }
165  };
166 
168 
170  typedef std::vector<ConsensusFeature> Base;
172  typedef std::map<UInt64, ColumnHeader> ColumnHeaders;
174  typedef std::vector<ConsensusFeature>::iterator Iterator;
176  typedef std::vector<ConsensusFeature>::const_iterator ConstIterator;
178  typedef std::vector<ConsensusFeature>::reverse_iterator ReverseIterator;
180  typedef std::vector<ConsensusFeature>::const_reverse_iterator ConstReverseIterator;
182 
184  OPENMS_DLLAPI ConsensusMap();
185 
187  OPENMS_DLLAPI ConsensusMap(const ConsensusMap& source);
188 
190  OPENMS_DLLAPI ~ConsensusMap() override;
191 
193  OPENMS_DLLAPI explicit ConsensusMap(Base::size_type n);
194 
196  OPENMS_DLLAPI ConsensusMap& operator=(const ConsensusMap& source);
197 
207  OPENMS_DLLAPI ConsensusMap& appendRows(const ConsensusMap& rhs);
208 
216  OPENMS_DLLAPI ConsensusMap& appendColumns(const ConsensusMap& rhs);
217 
218 
224  OPENMS_DLLAPI void clear(bool clear_meta_data = true);
225 
227  OPENMS_DLLAPI const ColumnHeaders& getColumnHeaders() const;
228 
230  OPENMS_DLLAPI ColumnHeaders& getColumnHeaders();
231 
233  OPENMS_DLLAPI void setColumnHeaders(const ColumnHeaders& column_description);
234 
236  OPENMS_DLLAPI const String& getExperimentType() const;
237 
239  OPENMS_DLLAPI void setExperimentType(const String& experiment_type);
240 
249  OPENMS_DLLAPI void sortByIntensity(bool reverse = false);
250 
252  OPENMS_DLLAPI void sortByRT();
253 
255  OPENMS_DLLAPI void sortByMZ();
256 
258  OPENMS_DLLAPI void sortByPosition();
259 
261  OPENMS_DLLAPI void sortByQuality(bool reverse = false);
262 
264  OPENMS_DLLAPI void sortBySize();
265 
267  OPENMS_DLLAPI void sortByMaps();
268 
272 
273  // Docu in base class
274  OPENMS_DLLAPI void updateRanges() override;
275 
277  OPENMS_DLLAPI void swap(ConsensusMap& from);
278 
280  OPENMS_DLLAPI const std::vector<ProteinIdentification>& getProteinIdentifications() const;
281 
283  OPENMS_DLLAPI std::vector<ProteinIdentification>& getProteinIdentifications();
284 
286  OPENMS_DLLAPI void setProteinIdentifications(const std::vector<ProteinIdentification>& protein_identifications);
287 
289  OPENMS_DLLAPI void setProteinIdentifications(std::vector<ProteinIdentification>&& protein_identifications);
290 
292  OPENMS_DLLAPI const std::vector<PeptideIdentification>& getUnassignedPeptideIdentifications() const;
293 
295  OPENMS_DLLAPI std::vector<PeptideIdentification>& getUnassignedPeptideIdentifications();
296 
298  OPENMS_DLLAPI void setUnassignedPeptideIdentifications(const std::vector<PeptideIdentification>& unassigned_peptide_identifications);
299 
301  OPENMS_DLLAPI const std::vector<DataProcessing>& getDataProcessing() const;
302 
304  OPENMS_DLLAPI std::vector<DataProcessing>& getDataProcessing();
305 
307  OPENMS_DLLAPI void setDataProcessing(const std::vector<DataProcessing>& processing_method);
308 
310  OPENMS_DLLAPI void setPrimaryMSRunPath(const StringList& s);
311 
314  OPENMS_DLLAPI void setPrimaryMSRunPath(const StringList& s, MSExperiment & e);
315 
317  OPENMS_DLLAPI void getPrimaryMSRunPath(StringList& toFill) const;
318 
320  OPENMS_DLLAPI bool operator==(const ConsensusMap& rhs) const;
321 
323  OPENMS_DLLAPI bool operator!=(const ConsensusMap& rhs) const;
324 
338  template <typename Type>
339  Size applyMemberFunction(Size (Type::* member_function)())
340  {
341  Size assignments = 0;
342  assignments += ((*this).*member_function)();
343  for (Iterator iter = this->begin(); iter != this->end(); ++iter)
344  {
345  assignments += ((*iter).*member_function)();
346  }
347  return assignments;
348  }
349 
351  template <typename Type>
352  Size applyMemberFunction(Size (Type::* member_function)() const) const
353  {
354  Size assignments = 0;
355  assignments += ((*this).*member_function)();
356  for (ConstIterator iter = this->begin(); iter != this->end(); ++iter)
357  {
358  assignments += ((*iter).*member_function)();
359  }
360  return assignments;
361  }
362 
375  OPENMS_DLLAPI bool isMapConsistent(Logger::LogStream* stream = nullptr) const;
376 
390  OPENMS_DLLAPI std::vector<FeatureMap> split(SplitMeta mode = SplitMeta::DISCARD) const;
391 
392 protected:
393 
396 
398  String experiment_type_ = "label-free";
399 
401  std::vector<ProteinIdentification> protein_identifications_;
402 
404  std::vector<PeptideIdentification> unassigned_peptide_identifications_;
405 
407  std::vector<DataProcessing> data_processing_;
408 
409  };
410 
412  OPENMS_DLLAPI std::ostream& operator<<(std::ostream& os, const ConsensusMap& cons_map);
413 
414 
415 
416 } // namespace OpenMS
417 
#define OPENMS_LOG_WARN
Macro if a warning, a piece of information which should be read by the user, should be logged.
Definition: LogStream.h:460
A consensus feature spanning multiple LC-MS/MS experiments.
Definition: ConsensusFeature.h:71
A container for consensus elements.
Definition: ConsensusMap.h:88
RangeManager< 2 > RangeManagerType
Definition: ConsensusMap.h:171
SplitMeta
Definition: ConsensusMap.h:119
@ COPY_FIRST
copy all meta values to first feature map
@ COPY_ALL
copy all meta values to all feature maps
@ DISCARD
do not copy any meta values
String experiment_type_
type of experiment (label-free, labeled_MS1, labeled_MS2)
Definition: ConsensusMap.h:398
void sortByRT()
Sorts the peaks to RT position.
const std::vector< DataProcessing > & getDataProcessing() const
returns a const reference to the description of the applied data processing
std::vector< PeptideIdentification > & getUnassignedPeptideIdentifications()
mutable access to the unassigned peptide identifications
Size applyMemberFunction(Size(Type::*member_function)())
Applies a member function of Type to the container itself and all consensus features....
Definition: ConsensusMap.h:339
ConsensusMap & operator=(const ConsensusMap &source)
Assignment operator.
std::vector< ConsensusFeature > Base
Definition: ConsensusMap.h:170
void setUnassignedPeptideIdentifications(const std::vector< PeptideIdentification > &unassigned_peptide_identifications)
sets the unassigned peptide identifications
std::vector< ConsensusFeature >::iterator Iterator
Mutable iterator.
Definition: ConsensusMap.h:174
void setPrimaryMSRunPath(const StringList &s)
set the file paths to the primary MS run (stored in ColumnHeaders)
void sortByMaps()
Sorts with respect to the sets of maps covered by the consensus features (lexicographically).
bool isMapConsistent(Logger::LogStream *stream=nullptr) const
checks if the given maps are unique and all FeatureHandles actually refer to a registered map
std::vector< DataProcessing > data_processing_
applied data processing
Definition: ConsensusMap.h:407
ConsensusMap & appendColumns(const ConsensusMap &rhs)
Add consensus map entries as new columns.
void sortPeptideIdentificationsByMapIndex()
Sorts PeptideIdentifications of consensus features with respect to their map index.
void sortByMZ()
Sorts the peaks to m/z position.
std::vector< ProteinIdentification > & getProteinIdentifications()
mutable access to the protein identifications
bool operator!=(const ConsensusMap &rhs) const
Equality operator.
void setProteinIdentifications(const std::vector< ProteinIdentification > &protein_identifications)
sets the protein identifications
std::vector< ConsensusFeature >::const_reverse_iterator ConstReverseIterator
Non-mutable reverse iterator.
Definition: ConsensusMap.h:180
const ColumnHeaders & getColumnHeaders() const
Non-mutable access to the file descriptions.
bool operator==(const ConsensusMap &rhs) const
Equality operator.
void sortBySize()
Sorts with respect to the size (number of elements)
ConsensusFeature FeatureType
Definition: ConsensusMap.h:169
void clear(bool clear_meta_data=true)
Clears all data and meta data.
ConsensusMap()
Default constructor.
std::vector< FeatureMap > split(SplitMeta mode=SplitMeta::DISCARD) const
splits ConsensusMap into its original FeatureMaps
void setProteinIdentifications(std::vector< ProteinIdentification > &&protein_identifications)
sets the protein identifications by moving
void sortByPosition()
Lexicographically sorts the peaks by their position (First RT then m/z).
const String & getExperimentType() const
Non-mutable access to the experiment type.
void setDataProcessing(const std::vector< DataProcessing > &processing_method)
sets the description of the applied data processing
void sortByIntensity(bool reverse=false)
Sorts the peaks according to ascending intensity.
std::vector< DataProcessing > & getDataProcessing()
returns a mutable reference to the description of the applied data processing
void getPrimaryMSRunPath(StringList &toFill) const
returns the MS run path (stored in ColumnHeaders)
std::vector< ConsensusFeature >::const_iterator ConstIterator
Non-mutable iterator.
Definition: ConsensusMap.h:176
ConsensusMap(Base::size_type n)
Creates a ConsensusMap with n elements.
std::map< UInt64, ColumnHeader > ColumnHeaders
Definition: ConsensusMap.h:172
ConsensusMap & appendRows(const ConsensusMap &rhs)
Add consensus map entries as new rows.
std::vector< PeptideIdentification > unassigned_peptide_identifications_
unassigned peptide identifications (without feature)
Definition: ConsensusMap.h:404
~ConsensusMap() override
Destructor.
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 setColumnHeaders(const ColumnHeaders &column_description)
Mutable access to the file descriptions.
std::vector< ConsensusFeature >::reverse_iterator ReverseIterator
Mutable reverse iterator.
Definition: ConsensusMap.h:178
void sortByQuality(bool reverse=false)
Sorts the peaks according to ascending quality.
ColumnHeaders column_description_
Map from index to file description.
Definition: ConsensusMap.h:395
void swap(ConsensusMap &from)
Swaps the content of this map with the content of from.
std::vector< ProteinIdentification > protein_identifications_
protein identifications
Definition: ConsensusMap.h:401
ColumnHeaders & getColumnHeaders()
Mutable access to the file descriptions.
ConsensusMap(const ConsensusMap &source)
Copy constructor.
void updateRanges() override
Updates minimum and maximum position/intensity.
void setPrimaryMSRunPath(const StringList &s, MSExperiment &e)
std::vector< ConsensusFeature > privvec
Definition: ConsensusMap.h:91
void setExperimentType(const String &experiment_type)
Mutable access to the experiment type.
Size applyMemberFunction(Size(Type::*member_function)() const) const
The "const" variant.
Definition: ConsensusMap.h:352
Manage source document information.
Definition: DocumentIdentifier.h:56
Log Stream Class.
Definition: LogStream.h:313
In-Memory representation of a mass spectrometry experiment.
Definition: MSExperiment.h:80
Utilities for Feature and ConsensusMap.
Definition: MapUtilities.h:50
Interface for classes that can store arbitrary meta information (Type-Name-Value tuples).
Definition: MetaInfoInterface.h:61
bool metaValueExists(const String &name) const
Returns whether an entry with the given name exists.
const DataValue & getMetaValue(const String &name, const DataValue &default_value=DataValue::EMPTY) const
Returns the value corresponding to a string, or a default value (default: DataValue::EMPTY) if not fo...
Handles the management of a position and intensity range.
Definition: RangeManager.h:48
A more convenient string class.
Definition: String.h:61
A base class for random access containers for classes derived from UniqueIdInterface that adds functi...
Definition: UniqueIdIndexer.h:64
A base class defining a common interface for all classes having a unique id.
Definition: UniqueIdInterface.h:52
@ INVALID
Definition: UniqueIdInterface.h:61
OPENMS_UINT64_TYPE UInt64
Unsigned integer type (64bit)
Definition: Types.h:77
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
std::vector< String > StringList
Vector of String.
Definition: ListUtils.h:70
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:47
std::ostream & operator<<(std::ostream &os, const AccurateMassSearchResult &amsr)
Description of the columns in a consensus map.
Definition: ConsensusMap.h:128
ColumnHeader & operator=(const ColumnHeader &)=default
Copy assignment.
ColumnHeader()=default
Default constructor.
ColumnHeader(const ColumnHeader &)=default
Copy constructor.
unsigned getLabelAsUInt(const String &experiment_type) const
Definition: ConsensusMap.h:148
String filename
File name of the mzML file.
Definition: ConsensusMap.h:139
String label
Label e.g. 'heavy' and 'light' for ICAT, or 'sample1' and 'sample2' for label-free quantitation.
Definition: ConsensusMap.h:141