OpenMS  3.0.0
LayerDataBase.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-2022.
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 $
33 // --------------------------------------------------------------------------
34 
35 #pragma once
36 
38 #include <OpenMS/VISUAL/OpenMS_GUIConfig.h>
39 
41 
44 
52 //#include <OpenMS/VISUAL/Painter1DBase.h>
55 
56 #include <boost/shared_ptr.hpp>
57 
58 #include <bitset>
59 #include <vector>
60 
61 class QWidget;
62 
63 namespace OpenMS
64 {
65  class LayerStatistics;
66  class OSWData;
67  class Painter1DBase;
68 
97  class OPENMS_GUI_DLLAPI LayerDataBase
98  {
99  public:
104  enum DataType
105  {
111  DT_UNKNOWN
112  };
113 
115  enum Flags
116  {
125  SIZE_OF_FLAGS
126  };
127 
129  std::bitset<SIZE_OF_FLAGS> flags;
130 
133  {
139  SIZE_OF_LABEL_TYPE
140  };
141 
143  static const std::string NamesOfLabelType[SIZE_OF_LABEL_TYPE];
144 
147 
149  typedef boost::shared_ptr<FeatureMap> FeatureMapSharedPtrType;
150 
153 
155  typedef boost::shared_ptr<ConsensusMap> ConsensusMapSharedPtrType;
156 
159 
161  typedef boost::shared_ptr<ExperimentType> ExperimentSharedPtrType;
162 
163  typedef boost::shared_ptr<const ExperimentType> ConstExperimentSharedPtrType;
164 
166  typedef boost::shared_ptr<OnDiscMSExperiment> ODExperimentSharedPtrType;
167 
169  typedef boost::shared_ptr<OSWData> OSWDataSharedPtrType;
170 
172 
174  LayerDataBase() = delete;
176  LayerDataBase(const DataType type) : type(type) {};
178  LayerDataBase(const LayerDataBase& ld) = delete;
180  LayerDataBase& operator=(const LayerDataBase& ld) = delete;
182  LayerDataBase(LayerDataBase&& ld) = default;
186  virtual ~LayerDataBase() = default;
187 
188  virtual std::unique_ptr<Painter1DBase> getPainter1D() const = 0;
189 
190 
193  {
194  return features_;
195  }
196 
199  {
200  return features_;
201  }
202 
205  {
206  return consensus_map_;
207  }
208 
211  {
212  return consensus_map_;
213  }
214 
225 
236  {
237  return peak_map_;
238  }
239 
244  {
245  peak_map_ = p;
246  updateCache_();
247  }
248 
251  {
252  on_disc_peaks = p;
253  }
254 
257  {
258  return on_disc_peaks;
259  }
260 
263  {
264  return chromatogram_map_;
265  }
266 
269  {
270  return chromatogram_map_;
271  }
272 
276 
280 
283 
287  bool annotate(const std::vector<PeptideIdentification>& identifications,
288  const std::vector<ProteinIdentification>& protein_identifications);
289 
290 
293  {
294  return annotations_1d[current_spectrum_idx_];
295  }
296 
299  {
300  return annotations_1d[current_spectrum_idx_];
301  }
302 
304  const Annotations1DContainer& getAnnotations(Size spectrum_index) const
305  {
306  return annotations_1d[spectrum_index];
307  }
308 
311  {
312  return annotations_1d[spectrum_index];
313  }
314 
321 
323  {
324  cached_spectrum_.sortByPosition();
325  }
326 
328  const ExperimentType::SpectrumType getSpectrum(Size spectrum_idx) const;
329 
332  {
333  return current_spectrum_idx_;
334  }
335 
338  {
339  current_spectrum_idx_ = index;
340  updateCache_();
341  }
342 
343 
348  {
349  ExperimentSharedPtrType exp_sptr(getChromatogramData().get() == nullptr ||
350  getChromatogramData().get()->getNrChromatograms() == 0 ?
351  getPeakDataMuteable() :
352  getChromatogramData());
353  return exp_sptr;
354  }
355 
357  bool isIonMobilityData() const
358  {
359  return this->getPeakData()->size() > 0 &&
360  this->getPeakData()->metaValueExists("is_ion_mobility") &&
361  this->getPeakData()->getMetaValue("is_ion_mobility").toBool();
362  }
363 
365  {
366  peak_map_->setMetaValue("is_ion_mobility", "true");
367  }
368 
370  bool isDIAData() const
371  {
372  return this->getPeakData()->size() > 0 &&
373  this->getPeakData()->metaValueExists("is_dia_data") &&
374  this->getPeakData()->getMetaValue("is_dia_data").toBool();
375  }
376 
379  {
380  peak_map_->setMetaValue("is_dia_data", "true");
381  }
382 
392  {
393  return this->getPeakData()->size() > 0 &&
394  this->getPeakData()->metaValueExists("is_chromatogram") &&
395  this->getPeakData()->getMetaValue("is_chromatogram").toBool();
396  }
397 
400  {
401  peak_map_->setMetaValue("is_chromatogram", "true");
402  }
403 
406  {
407  if (this->chromatogram_flag_set())
408  {
409  peak_map_->removeMetaValue("is_chromatogram");
410  }
411  }
412 
416  virtual void updateRanges() = 0;
417 
419  float getMinIntensity() const;
420 
422  float getMaxIntensity() const;
423 
425 
428  virtual RangeAllType getRange() const = 0;
429 
431  virtual std::unique_ptr<LayerStatistics> getStats() const = 0;
432 
436 
438  void removePeakAnnotationsFromPeptideHit(const std::vector<Annotation1DItem*>& selected_annotations);
439 
441  bool visible = true;
442 
444  bool flipped = false;
445 
447  DataType type = DT_UNKNOWN;
448 
449  private:
452 
453  public:
454  const String& getName() const
455  {
456  return name_;
457  }
458  void setName(const String& new_name)
459  {
460  name_ = new_name;
461  }
462 
465 
468 
471 
474 
476  std::vector<Annotations1DContainer> annotations_1d = std::vector<Annotations1DContainer>(1);
477 
479  std::vector<QColor> peak_colors_1d;
480 
482  bool modifiable = false;
483 
485  bool modified = false;
486 
488  LabelType label = L_NONE;
489 
491  int peptide_id_index = -1;
492  int peptide_hit_index = -1;
493 
496 
497  protected:
499  void updateCache_();
500 
503 
506 
509 
512 
515 
518 
521 
523  Size current_spectrum_idx_ = 0;
524 
527  };
528 
532  {
533  public:
541  LayerAnnotatorBase(const FileTypeList& supported_types, const String& file_dialog_text, QWidget* gui_lock);
542 
547  bool annotateWithFileDialog(LayerDataBase& layer, LogWindow& log, const String& current_path) const;
548 
552  bool annotateWithFilename(LayerDataBase& layer, LogWindow& log, const String& filename) const;
553 
557  static std::unique_ptr<LayerAnnotatorBase> getAnnotatorWhichSupports(const FileTypes::Type& type);
558 
560  static std::unique_ptr<LayerAnnotatorBase> getAnnotatorWhichSupports(const String& filename);
561 
562  protected:
565  virtual bool annotateWorker_(LayerDataBase& layer, const String& filename, LogWindow& log) const = 0;
566 
569  QWidget* gui_lock_ = nullptr;
570  };
571 
575  {
576  public:
579  "Select peptide identification data", gui_lock)
580  {
581  }
582 
583  protected:
586  virtual bool annotateWorker_(LayerDataBase& layer, const String& filename, LogWindow& log) const;
587  };
588 
592  {
593  public:
596  "Select AccurateMassSearch's featureXML file", gui_lock)
597  {
598  }
599 
600  protected:
603  virtual bool annotateWorker_(LayerDataBase& layer, const String& filename, LogWindow& log) const;
604  };
605 
609  {
610  public:
612  LayerAnnotatorBase(std::vector<FileTypes::Type>{FileTypes::OSW},
613  "Select OpenSwath/pyProphet output file", gui_lock)
614  {
615  }
616 
617  protected:
620  virtual bool annotateWorker_(LayerDataBase& layer, const String& filename, LogWindow& log) const;
621  };
622 
624  OPENMS_GUI_DLLAPI std::ostream& operator<<(std::ostream& os, const LayerDataBase& rhs);
625 
626 }// namespace OpenMS
627 
Container for annotations to content of Plot1DCanvas.
Definition: Annotations1DContainer.h:55
A container for consensus elements.
Definition: ConsensusMap.h:90
DataFilter array providing some convenience functions.
Definition: DataFilters.h:52
A container for features.
Definition: FeatureMap.h:106
holds a vector of known file types, e.g. as a way to specify supported input formats
Definition: FileTypes.h:150
Definition: LayerDataBase.h:592
virtual bool annotateWorker_(LayerDataBase &layer, const String &filename, LogWindow &log) const
LayerAnnotatorAMS(QWidget *gui_lock)
Definition: LayerDataBase.h:594
Definition: LayerDataBase.h:532
QWidget * gui_lock_
optional widget which will be locked when calling annotateWorker_() in child-classes
Definition: LayerDataBase.h:569
const FileTypeList supported_types_
Definition: LayerDataBase.h:567
static std::unique_ptr< LayerAnnotatorBase > getAnnotatorWhichSupports(const FileTypes::Type &type)
bool annotateWithFilename(LayerDataBase &layer, LogWindow &log, const String &filename) const
LayerAnnotatorBase(const FileTypeList &supported_types, const String &file_dialog_text, QWidget *gui_lock)
C'tor with params.
bool annotateWithFileDialog(LayerDataBase &layer, LogWindow &log, const String &current_path) const
static std::unique_ptr< LayerAnnotatorBase > getAnnotatorWhichSupports(const String &filename)
see getAnnotatorWhichSupports(const FileTypes::Type& type). File type is queried from filename
const String file_dialog_text_
Definition: LayerDataBase.h:568
virtual bool annotateWorker_(LayerDataBase &layer, const String &filename, LogWindow &log) const =0
Definition: LayerDataBase.h:609
LayerAnnotatorOSW(QWidget *gui_lock)
Definition: LayerDataBase.h:611
virtual bool annotateWorker_(LayerDataBase &layer, const String &filename, LogWindow &log) const
Definition: LayerDataBase.h:575
virtual bool annotateWorker_(LayerDataBase &layer, const String &filename, LogWindow &log) const
LayerAnnotatorPeptideID(QWidget *gui_lock)
Definition: LayerDataBase.h:577
Class that stores the data for one layer.
Definition: LayerDataBase.h:98
void remove_chromatogram_flag()
remove the chromatogram flag
Definition: LayerDataBase.h:405
boost::shared_ptr< ExperimentType > ExperimentSharedPtrType
SharedPtr on MSExperiment.
Definition: LayerDataBase.h:161
const OSWDataSharedPtrType & getChromatogramAnnotation() const
const Annotations1DContainer & getAnnotations(Size spectrum_index) const
Returns a const reference to the annotations of the current spectrum (1D view)
Definition: LayerDataBase.h:304
const ExperimentSharedPtrType & getChromatogramData() const
Returns a mutable reference to the current chromatogram data.
Definition: LayerDataBase.h:262
PeakMap ExperimentType
Main data type (experiment)
Definition: LayerDataBase.h:158
boost::shared_ptr< OnDiscMSExperiment > ODExperimentSharedPtrType
SharedPtr on On-Disc MSExperiment.
Definition: LayerDataBase.h:166
const ExperimentType::SpectrumType getSpectrum(Size spectrum_idx) const
Returns a const-copy of the required spectrum which is guaranteed to be populated with raw data.
Size getCurrentSpectrumIndex() const
Get the index of the current spectrum (1D view)
Definition: LayerDataBase.h:331
bool annotate(const std::vector< PeptideIdentification > &identifications, const std::vector< ProteinIdentification > &protein_identifications)
virtual std::unique_ptr< LayerStatistics > getStats() const =0
compute layer statistics (via visitor)
LabelType
Label used in visualization.
Definition: LayerDataBase.h:133
@ L_ID_ALL
All peptide hits of the first identification run are used.
Definition: LayerDataBase.h:138
@ L_ID
The best peptide hit of the first identification run is used.
Definition: LayerDataBase.h:137
@ L_NONE
No label is displayed.
Definition: LayerDataBase.h:134
@ L_META_LABEL
The 'label' meta information is used.
Definition: LayerDataBase.h:136
@ L_INDEX
The element number is used.
Definition: LayerDataBase.h:135
LayerDataBase & operator=(const LayerDataBase &ld)=delete
no assignment operator (should not be needed)
float getMaxIntensity() const
Returns the maximum intensity of the internal data, depending on type.
float getMinIntensity() const
Returns the minimum intensity of the internal data, depending on type.
LayerDataBase(const LayerDataBase &ld)=delete
no Copy-ctor (should not be needed)
void setCurrentSpectrumIndex(Size index)
Set the index of the current spectrum (1D view)
Definition: LayerDataBase.h:337
virtual std::unique_ptr< Painter1DBase > getPainter1D() const =0
virtual ~LayerDataBase()=default
D'tor.
boost::shared_ptr< FeatureMap > FeatureMapSharedPtrType
SharedPtr on feature map.
Definition: LayerDataBase.h:149
bool isDIAData() const
Check whether the current layer contains DIA (SWATH-MS) data.
Definition: LayerDataBase.h:370
void set_chromatogram_flag()
set the chromatogram flag
Definition: LayerDataBase.h:399
String name_
layer name
Definition: LayerDataBase.h:451
void setOnDiscPeakData(ODExperimentSharedPtrType p)
Set the current on-disc data.
Definition: LayerDataBase.h:250
void removePeakAnnotationsFromPeptideHit(const std::vector< Annotation1DItem * > &selected_annotations)
remove peak annotations in the given list from the currently active PeptideHit
const ConstExperimentSharedPtrType getPeakData() const
Returns a const reference to the current in-memory peak data.
bool isIonMobilityData() const
Check whether the current layer should be represented as ion mobility.
Definition: LayerDataBase.h:357
void setChromatogramAnnotation(OSWData &&data)
add annotation from an OSW sqlite file.
ConsensusMap ConsensusMapType
consensus features
Definition: LayerDataBase.h:152
virtual void updateRanges()=0
Update ranges of the underlying data.
const FeatureMapSharedPtrType & getFeatureMap() const
Returns a const reference to the current feature data.
Definition: LayerDataBase.h:192
OSWDataSharedPtrType & getChromatogramAnnotation()
DataFilters filters
Filters to apply before painting.
Definition: LayerDataBase.h:473
const ExperimentSharedPtrType & getPeakDataMuteable()
Returns a mutable reference to the current in-memory peak data.
Definition: LayerDataBase.h:235
bool chromatogram_flag_set() const
Check whether the current layer is a chromatogram.
Definition: LayerDataBase.h:391
void setPeakData(ExperimentSharedPtrType p)
Set the current in-memory peak data.
Definition: LayerDataBase.h:243
const ODExperimentSharedPtrType & getOnDiscPeakData() const
Returns a mutable reference to the on-disc data.
Definition: LayerDataBase.h:256
void labelAsIonMobilityData() const
Definition: LayerDataBase.h:364
const ConsensusMapSharedPtrType & getConsensusMap() const
Returns a const reference to the consensus feature data.
Definition: LayerDataBase.h:204
void sortCurrentSpectrumByPosition()
Definition: LayerDataBase.h:322
FeatureMapSharedPtrType & getFeatureMap()
Returns a const reference to the current feature data.
Definition: LayerDataBase.h:198
void synchronizePeakAnnotations()
std::bitset< SIZE_OF_FLAGS > flags
Actual state of each flag.
Definition: LayerDataBase.h:129
LayerDataBase()=delete
Default constructor.
boost::shared_ptr< const ExperimentType > ConstExperimentSharedPtrType
Definition: LayerDataBase.h:163
boost::shared_ptr< ConsensusMap > ConsensusMapSharedPtrType
SharedPtr on consensus features.
Definition: LayerDataBase.h:155
ExperimentSharedPtrType & getChromatogramData()
Returns a mutable reference to the current chromatogram data.
Definition: LayerDataBase.h:268
void updatePeptideHitAnnotations_(PeptideHit &hit)
updates the PeakAnnotations in the current PeptideHit with manually changed annotations
LayerDataBase(LayerDataBase &&ld)=default
move C'tor
Flags
Flags that determine which information is shown.
Definition: LayerDataBase.h:116
@ I_PEPTIDEMZ
Identifications: m/z source.
Definition: LayerDataBase.h:123
@ F_HULL
Features: Overall convex hull.
Definition: LayerDataBase.h:117
@ F_UNASSIGNED
Features: Unassigned peptide hits.
Definition: LayerDataBase.h:119
@ P_PRECURSORS
Peaks: Mark precursor peaks of MS/MS scans.
Definition: LayerDataBase.h:120
@ I_LABELS
Identifications: Show labels (not sequences)
Definition: LayerDataBase.h:124
@ P_PROJECTIONS
Peaks: Show projections.
Definition: LayerDataBase.h:121
@ C_ELEMENTS
Consensus features: Show elements.
Definition: LayerDataBase.h:122
@ F_HULLS
Features: Convex hulls of single mass traces.
Definition: LayerDataBase.h:118
LayerDataBase(const DataType type)
C'tor for child classes.
Definition: LayerDataBase.h:176
const String & getName() const
Definition: LayerDataBase.h:454
void updateCache_()
Update current cached spectrum for easy retrieval.
LayerDataBase & operator=(LayerDataBase &&ld)=default
move assignment
Annotations1DContainer & getCurrentAnnotations()
Returns a mutable reference to the annotations of the current spectrum (1D view)
Definition: LayerDataBase.h:298
ConsensusMapSharedPtrType & getConsensusMap()
Returns current consensus map (mutable)
Definition: LayerDataBase.h:210
virtual RangeAllType getRange() const =0
OSWDataSharedPtrType chrom_annotation_
Chromatogram annotation data.
Definition: LayerDataBase.h:520
const Annotations1DContainer & getCurrentAnnotations() const
Returns a const reference to the annotations of the current spectrum (1D view)
Definition: LayerDataBase.h:292
MultiGradient gradient
Gradient for 2D and 3D views.
Definition: LayerDataBase.h:470
Param param
Layer parameters.
Definition: LayerDataBase.h:467
DataType
Definition: LayerDataBase.h:105
@ DT_FEATURE
Feature data.
Definition: LayerDataBase.h:108
@ DT_PEAK
Spectrum profile or centroided data.
Definition: LayerDataBase.h:106
@ DT_CONSENSUS
Consensus feature data.
Definition: LayerDataBase.h:109
@ DT_CHROMATOGRAM
Chromatogram data.
Definition: LayerDataBase.h:107
@ DT_IDENT
Peptide identification data.
Definition: LayerDataBase.h:110
ExperimentSharedPtrType getFullChromData()
Definition: LayerDataBase.h:347
FeatureMap FeatureMapType
Features.
Definition: LayerDataBase.h:146
String filename
file name of the file the data comes from (if available)
Definition: LayerDataBase.h:464
boost::shared_ptr< OSWData > OSWDataSharedPtrType
SharedPtr on OSWData.
Definition: LayerDataBase.h:169
ExperimentType::SpectrumType cached_spectrum_
Current cached spectrum.
Definition: LayerDataBase.h:526
const ExperimentType::SpectrumType & getCurrentSpectrum() const
Returns a const reference to the current spectrum (1D view)
void setName(const String &new_name)
Definition: LayerDataBase.h:458
String getDecoratedName() const
get name augmented with attributes, e.g. [flipped], or '*' if modified
void labelAsDIAData()
Label the current layer as DIA (SWATH-MS) data.
Definition: LayerDataBase.h:378
Annotations1DContainer & getAnnotations(Size spectrum_index)
Returns a mutable reference to the annotations of the current spectrum (1D view)
Definition: LayerDataBase.h:310
std::vector< QColor > peak_colors_1d
Peak colors of the currently shown spectrum.
Definition: LayerDataBase.h:479
A log window (QTextEdit) with convenience functions.
Definition: LogWindow.h:55
In-Memory representation of a mass spectrometry run.
Definition: MSExperiment.h:72
The representation of a 1D spectrum.
Definition: MSSpectrum.h:70
A gradient of multiple colors and arbitrary distances between colors.
Definition: MultiGradient.h:68
Holds all or partial information from an OSW file.
Definition: OSWData.h:305
Representation of a mass spectrometry experiment on disk.
Definition: OnDiscMSExperiment.h:67
Management and storage of parameters / INI files.
Definition: Param.h:70
Representation of a peptide hit.
Definition: PeptideHit.h:57
A more convenient string class.
Definition: String.h:60
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127
FLASHIda C++ to C# (or vice versa) bridge functions The functions here are called in C# to invoke fun...
Definition: FeatureDeconvolution.h:48
const FileTypeList supported_types({ FileTypes::MZML, FileTypes::MZXML, FileTypes::MZDATA, FileTypes::SQMASS, FileTypes::FEATUREXML, FileTypes::CONSENSUSXML, FileTypes::IDXML, FileTypes::DTA, FileTypes::DTA2D, FileTypes::MGF, FileTypes::MS2, FileTypes::MSP, FileTypes::BZ2, FileTypes::GZ })
supported types which can be opened with File–>Open
std::ostream & operator<<(std::ostream &os, const AccurateMassSearchResult &amsr)
Centralizes the file types recognized by FileHandler.
Definition: FileTypes.h:53
Type
Actual file types enum.
Definition: FileTypes.h:57
@ MZIDENTML
mzIdentML (HUPO PSI AnalysisXML followup format) (.mzid)
Definition: FileTypes.h:75
@ FEATUREXML
OpenMS feature file (.featureXML)
Definition: FileTypes.h:63
@ IDXML
OpenMS identification format (.idXML)
Definition: FileTypes.h:64
@ OSW
OpenSWATH OpenSWATH report (OSW) SQLite DB.
Definition: FileTypes.h:104