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
119 {
122 std::string text_value;
123
126 };
127
130
133 OSWValue(std::nullptr_t);
134 OSWValue(const char* value);
135 OSWValue(const std::string& value);
138 OSWValue(int value);
139 OSWValue(double value);
140 OSWValue(const OSWValue& rhs);
141 OSWValue(OSWValue&& rhs) noexcept;
143 OSWValue& operator=(OSWValue&& rhs) noexcept;
144
146 static OSWValue null();
147
149 static OSWValue text(const std::string& value);
150
152 bool isNull() const;
153
155 Int64 asInt() const;
156
158 double asDouble() const;
159
161 const std::string& asText() const;
162
163 private:
165 void copyFrom_(const OSWValue& rhs);
166 void moveFrom_(OSWValue&& rhs);
167 };
168
169 static constexpr Size FEATURE_COLUMN_COUNT = 11;
170 static constexpr Size FEATURE_MS1_COLUMN_COUNT = 18;
171 static constexpr Size FEATURE_MS2_COLUMN_COUNT = 38;
172 static constexpr Size FEATURE_PRECURSOR_COLUMN_COUNT = 4;
173 static constexpr Size FEATURE_TRANSITION_COLUMN_COUNT = 43;
174
175 using FeatureRow = std::array<OSWValue, FEATURE_COLUMN_COUNT>;
176 using FeatureMS1Row = std::array<OSWValue, FEATURE_MS1_COLUMN_COUNT>;
177 using FeatureMS2Row = std::array<OSWValue, FEATURE_MS2_COLUMN_COUNT>;
178 using FeaturePrecursorRow = std::array<OSWValue, FEATURE_PRECURSOR_COLUMN_COUNT>;
179 using FeatureTransitionRow = std::array<OSWValue, FEATURE_TRANSITION_COLUMN_COUNT>;
180
182 struct OPENMS_DLLAPI OSWData
183 {
184 std::vector<FeatureRow> feature_rows;
185 std::vector<FeatureMS1Row> feature_ms1_rows;
186 std::vector<FeatureMS2Row> feature_ms2_rows;
187 std::vector<FeaturePrecursorRow> feature_precursor_rows;
188 std::vector<FeatureTransitionRow> feature_transition_rows;
189
191 void reserve(Size row_count);
192
194 void reserve(Size feature_row_count, Size transition_row_count);
195
197 void append(OSWData&& rhs);
198
200 bool empty() const;
201
203 Size rowCount() const;
204
207 };
208
209 OpenSwathOSWWriter(const std::string& output_filename,
210 bool uis_scores = false);
211
212 bool isActive() const;
213
219
221 void addRun(const UInt64 run_id, const std::string& input_filename);
222
224 void setRunId(const UInt64 run_id);
225
237 std::string getScore(const Feature& feature, const std::string& score_name) const;
238
250 std::vector<std::string> getSeparateScore(const Feature& feature, const std::string& score_name) const;
251
267 const OpenSwath::LightTransition* transition,
268 const FeatureMap& output, const std::string& id) const;
269
283 const OpenSwath::LightCompound& pep,
284 const OpenSwath::LightTransition* transition,
285 const FeatureMap& output, const std::string& id) const;
286
301 std::string prepareLine(const OpenSwath::LightCompound& pep,
302 const OpenSwath::LightTransition* transition,
303 const FeatureMap& output, const std::string& id) const;
304
319 void writeRows(const OSWData& osw_output);
320
334 void writeLines(const std::vector<std::string>& to_osw_output);
335
336 };
337
338
339}
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:175
std::array< OSWValue, FEATURE_MS2_COLUMN_COUNT > FeatureMS2Row
Definition OpenSwathOSWWriter.h:177
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
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.
std::array< OSWValue, FEATURE_TRANSITION_COLUMN_COUNT > FeatureTransitionRow
Definition OpenSwathOSWWriter.h:179
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:176
void writeRows(const OSWData &osw_output)
Write buffered OSW rows to disk.
std::array< OSWValue, FEATURE_PRECURSOR_COLUMN_COUNT > FeaturePrecursorRow
Definition OpenSwathOSWWriter.h:178
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:183
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:185
void reserve(Size row_count)
Reserve storage for roughly row_count rows per OSW table.
std::vector< FeaturePrecursorRow > feature_precursor_rows
Definition OpenSwathOSWWriter.h:187
std::vector< FeatureTransitionRow > feature_transition_rows
Definition OpenSwathOSWWriter.h:188
std::vector< FeatureMS2Row > feature_ms2_rows
Definition OpenSwathOSWWriter.h:186
std::vector< FeatureRow > feature_rows
Definition OpenSwathOSWWriter.h:184
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:129
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:128
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:119
std::string text_value
Definition OpenSwathOSWWriter.h:122
double double_value
Definition OpenSwathOSWWriter.h:121
Int64 int_value
Definition OpenSwathOSWWriter.h:120