OpenMS
Loading...
Searching...
No Matches
OpenSwathOSWWriter.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: George Rosenberger $
6// $Authors: George Rosenberger $
7// --------------------------------------------------------------------------
8
9#pragma once
10
11// Interfaces
13
15
18
19#include <array>
20#include <cstddef>
21#include <fstream>
22#include <string>
23#include <vector>
24#include <memory>
25#include <mutex>
26
27namespace OpenMS
28{
29
96 class OPENMS_DLLAPI OpenSwathOSWWriter
97 {
98 std::string output_filename_;
99 OpenMS::UInt64 run_id_ = 0;
102 // persistent sqlite connector to avoid reopening DB on each write
103 mutable std::unique_ptr<SqliteConnector> conn_;
104 mutable std::mutex conn_mutex_;
105
106 public:
108 struct OPENMS_DLLAPI OSWValue
109 {
110 enum class Type : unsigned char
111 {
112 Null,
113 Int64,
114 Double,
115 Text
116 };
117
122 {
125 std::string* text_value;
126
129 };
130
133
136 OSWValue(std::nullptr_t);
137 OSWValue(const char* value);
138 OSWValue(const std::string& value);
141 OSWValue(int value);
142 OSWValue(double value);
143 OSWValue(const OSWValue& rhs);
144 OSWValue(OSWValue&& rhs) noexcept;
146 OSWValue& operator=(OSWValue&& rhs) noexcept;
147
149 static OSWValue null();
150
152 static OSWValue text(const std::string& value);
153
155 bool isNull() const;
156
158 Int64 asInt() const;
159
161 double asDouble() const;
162
164 const std::string& asText() const;
165
166 private:
168 void copyFrom_(const OSWValue& rhs);
169 void moveFrom_(OSWValue&& rhs);
170 };
171
172 static constexpr Size FEATURE_COLUMN_COUNT = 11;
173 static constexpr Size FEATURE_MS1_COLUMN_COUNT = 18;
174 static constexpr Size FEATURE_MS2_COLUMN_COUNT = 38;
175 static constexpr Size FEATURE_PRECURSOR_COLUMN_COUNT = 4;
176 static constexpr Size FEATURE_TRANSITION_COLUMN_COUNT = 43;
177
178 using FeatureRow = std::array<OSWValue, FEATURE_COLUMN_COUNT>;
179 using FeatureMS1Row = std::array<OSWValue, FEATURE_MS1_COLUMN_COUNT>;
180 using FeatureMS2Row = std::array<OSWValue, FEATURE_MS2_COLUMN_COUNT>;
181 using FeaturePrecursorRow = std::array<OSWValue, FEATURE_PRECURSOR_COLUMN_COUNT>;
182 using FeatureTransitionRow = std::array<OSWValue, FEATURE_TRANSITION_COLUMN_COUNT>;
183
185 struct OPENMS_DLLAPI OSWData
186 {
187 std::vector<FeatureRow> feature_rows;
188 std::vector<FeatureMS1Row> feature_ms1_rows;
189 std::vector<FeatureMS2Row> feature_ms2_rows;
190 std::vector<FeaturePrecursorRow> feature_precursor_rows;
191 std::vector<FeatureTransitionRow> feature_transition_rows;
192
194 void reserve(Size row_count);
195
197 void reserve(Size feature_row_count, Size transition_row_count);
198
200 void append(OSWData&& rhs);
201
203 bool empty() const;
204
206 Size rowCount() const;
207
210 };
211
212 OpenSwathOSWWriter(const std::string& output_filename,
213 bool uis_scores = false);
214
215 bool isActive() const;
216
222
224 void addRun(const UInt64 run_id, const std::string& input_filename);
225
227 void setRunId(const UInt64 run_id);
228
238 UInt64 countFeaturesForRun(const UInt64 run_id) const;
239
248 void clearRunData(const UInt64 run_id);
249
261 std::string getScore(const Feature& feature, const std::string& score_name) const;
262
274 std::vector<std::string> getSeparateScore(const Feature& feature, const std::string& score_name) const;
275
291 const OpenSwath::LightTransition* transition,
292 const FeatureMap& output, const std::string& id) const;
293
307 const OpenSwath::LightCompound& pep,
308 const OpenSwath::LightTransition* transition,
309 const FeatureMap& output, const std::string& id) const;
310
325 std::string prepareLine(const OpenSwath::LightCompound& pep,
326 const OpenSwath::LightTransition* transition,
327 const FeatureMap& output, const std::string& id) const;
328
343 void writeRows(const OSWData& osw_output);
344
358 void writeLines(const std::vector<std::string>& to_osw_output);
359
360 };
361
362
363}
A container for features.
Definition FeatureMap.h:78
An LC-MS feature.
Definition Feature.h:46
Class to write out an OpenSwath OSW SQLite output (PyProphet input).
Definition OpenSwathOSWWriter.h:97
void writeHeader()
Initializes file by generating SQLite tables.
OSWData prepareRows(const OpenSwath::LightCompound &pep, const OpenSwath::LightTransition *transition, const FeatureMap &output, const std::string &id) const
Prepare feature rows for SQLite insertion.
std::array< OSWValue, FEATURE_COLUMN_COUNT > FeatureRow
Definition OpenSwathOSWWriter.h:178
std::array< OSWValue, FEATURE_MS2_COLUMN_COUNT > FeatureMS2Row
Definition OpenSwathOSWWriter.h:180
void addRun(const UInt64 run_id, const std::string &input_filename)
Add a RUN entry to the OSW file. Can be called multiple times to register multiple runs.
std::string output_filename_
Definition OpenSwathOSWWriter.h:98
UInt64 countFeaturesForRun(const UInt64 run_id) const
Count FEATURE rows belonging to a run in the active OSW output.
bool enable_uis_scoring_
Definition OpenSwathOSWWriter.h:101
void setRunId(const UInt64 run_id)
Set the current run id used when prepareLine generates FEATURE entries.
void clearRunData(const UInt64 run_id)
Remove all OSW rows belonging to a run.
std::array< OSWValue, FEATURE_TRANSITION_COLUMN_COUNT > FeatureTransitionRow
Definition OpenSwathOSWWriter.h:182
std::vector< std::string > getSeparateScore(const Feature &feature, const std::string &score_name) const
Prepare concatenated scores for SQLite insertion.
void writeLines(const std::vector< std::string > &to_osw_output)
Write data to disk.
std::string prepareLine(const OpenSwath::LightCompound &pep, const OpenSwath::LightTransition *transition, const FeatureMap &output, const std::string &id) const
Prepare a single line (feature) for output.
void prepareRowsInto(OSWData &rows, const OpenSwath::LightCompound &pep, const OpenSwath::LightTransition *transition, const FeatureMap &output, const std::string &id) const
Append feature rows for SQLite insertion into an existing buffer.
std::mutex conn_mutex_
Definition OpenSwathOSWWriter.h:104
std::array< OSWValue, FEATURE_MS1_COLUMN_COUNT > FeatureMS1Row
Definition OpenSwathOSWWriter.h:179
void writeRows(const OSWData &osw_output)
Write buffered OSW rows to disk.
std::array< OSWValue, FEATURE_PRECURSOR_COLUMN_COUNT > FeaturePrecursorRow
Definition OpenSwathOSWWriter.h:181
std::string getScore(const Feature &feature, const std::string &score_name) const
Prepare scores for SQLite insertion.
OpenSwathOSWWriter(const std::string &output_filename, bool uis_scores=false)
std::unique_ptr< SqliteConnector > conn_
Definition OpenSwathOSWWriter.h:103
bool doWrite_
Definition OpenSwathOSWWriter.h:100
int64_t Int64
Signed integer type (64bit)
Definition Types.h:40
uint64_t UInt64
Unsigned integer type (64bit)
Definition Types.h:47
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition Types.h:97
Main OpenMS namespace.
Definition openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
Buffered OSW table rows ready for insertion through prepared statements.
Definition OpenSwathOSWWriter.h:186
Size rowCount() const
Returns the total number of buffered rows across all OSW tables.
bool empty() const
Returns true if no rows were buffered.
void append(OSWData &&rhs)
Append rows from rhs, moving row storage where possible.
UInt64 estimateMemoryUsage() const
Estimate the memory retained by this buffer in bytes.
void reserve(Size feature_row_count, Size transition_row_count)
Reserve storage for expected feature-level and transition-level rows.
std::vector< FeatureMS1Row > feature_ms1_rows
Definition OpenSwathOSWWriter.h:188
void reserve(Size row_count)
Reserve storage for roughly row_count rows per OSW table.
std::vector< FeaturePrecursorRow > feature_precursor_rows
Definition OpenSwathOSWWriter.h:190
std::vector< FeatureTransitionRow > feature_transition_rows
Definition OpenSwathOSWWriter.h:191
std::vector< FeatureMS2Row > feature_ms2_rows
Definition OpenSwathOSWWriter.h:189
std::vector< FeatureRow > feature_rows
Definition OpenSwathOSWWriter.h:187
Typed OSW cell value used for direct SQLite binding.
Definition OpenSwathOSWWriter.h:109
static OSWValue text(const std::string &value)
Returns a TEXT OSW cell without numeric/null parsing.
Storage storage
Definition OpenSwathOSWWriter.h:132
OSWValue & operator=(const OSWValue &rhs)
void copyFrom_(const OSWValue &rhs)
OSWValue & operator=(OSWValue &&rhs) noexcept
Int64 asInt() const
Returns the integer payload. Only valid when type == Type::Int64.
OSWValue(const std::string &value)
Type
Definition OpenSwathOSWWriter.h:111
Type type
Definition OpenSwathOSWWriter.h:131
bool isNull() const
Returns true if the cell should be inserted as SQL NULL.
static OSWValue null()
Returns a NULL OSW cell.
const std::string & asText() const
Returns the text payload. Only valid when type == Type::Text.
double asDouble() const
Returns the double payload. Only valid when type == Type::Double.
OSWValue(OSWValue &&rhs) noexcept
Definition TransitionExperiment.h:269
Definition TransitionExperiment.h:106
Definition OpenSwathOSWWriter.h:122
double double_value
Definition OpenSwathOSWWriter.h:124
Int64 int_value
Definition OpenSwathOSWWriter.h:123
std::string * text_value
owned by the OSWValue while type == Type::Text
Definition OpenSwathOSWWriter.h:125