71 output_filename_(output_filename),
72 input_filename_(input_filename),
74 doWrite_(!output_filename.empty()),
75 use_ms1_traces_(ms1_scores),
77 enable_uis_scoring_(uis_scores)
80 static int callback(
void * ,
int argc,
char **argv,
char **azColName){
84 printf(
"%s = %s\n", azColName[i], argv[i] ? argv[i] :
"NULL");
102 char *zErrMsg =
nullptr;
106 rc = sqlite3_open(output_filename_.c_str(), &db);
109 fprintf(stderr,
"Can't open database: %s\n", sqlite3_errmsg(db));
113 const char * create_sql =
114 "CREATE TABLE RUN(" \
115 "ID INT PRIMARY KEY NOT NULL," \
116 "FILENAME TEXT NOT NULL); " \
118 "CREATE TABLE FEATURE(" \
119 "ID INT PRIMARY KEY NOT NULL," \
120 "RUN_ID INT NOT NULL," \
121 "PRECURSOR_ID INT NOT NULL," \
122 "EXP_RT REAL NOT NULL," \
123 "NORM_RT REAL NOT NULL," \
124 "DELTA_RT REAL NOT NULL," \
125 "LEFT_WIDTH REAL NOT NULL," \
126 "RIGHT_WIDTH REAL NOT NULL); " \
128 "CREATE TABLE FEATURE_MS1(" \
129 "FEATURE_ID INT NOT NULL," \
130 "AREA_INTENSITY REAL NOT NULL," \
131 "APEX_INTENSITY REAL NOT NULL," \
132 "VAR_MASSDEV_SCORE REAL NOT NULL," \
133 "VAR_ISOTOPE_CORRELATION_SCORE REAL NOT NULL," \
134 "VAR_ISOTOPE_OVERLAP_SCORE REAL NOT NULL," \
135 "VAR_XCORR_COELUTION REAL NOT NULL," \
136 "VAR_XCORR_SHAPE REAL NOT NULL); " \
138 "CREATE TABLE FEATURE_MS2(" \
139 "FEATURE_ID INT NOT NULL," \
140 "AREA_INTENSITY REAL NOT NULL," \
141 "APEX_INTENSITY REAL NOT NULL," \
142 "VAR_BSERIES_SCORE REAL NOT NULL," \
143 "VAR_DOTPROD_SCORE REAL NOT NULL," \
144 "VAR_INTENSITY_SCORE REAL NOT NULL," \
145 "VAR_ISOTOPE_CORRELATION_SCORE REAL NOT NULL," \
146 "VAR_ISOTOPE_OVERLAP_SCORE REAL NOT NULL," \
147 "VAR_LIBRARY_CORR REAL NOT NULL," \
148 "VAR_LIBRARY_DOTPROD REAL NOT NULL," \
149 "VAR_LIBRARY_MANHATTAN REAL NOT NULL," \
150 "VAR_LIBRARY_RMSD REAL NOT NULL," \
151 "VAR_LIBRARY_ROOTMEANSQUARE REAL NOT NULL," \
152 "VAR_LIBRARY_SANGLE REAL NOT NULL," \
153 "VAR_LOG_SN_SCORE REAL NOT NULL," \
154 "VAR_MANHATTAN_SCORE REAL NOT NULL," \
155 "VAR_MASSDEV_SCORE REAL NOT NULL," \
156 "VAR_MASSDEV_SCORE_WEIGHTED REAL NOT NULL," \
157 "VAR_NORM_RT_SCORE REAL NOT NULL," \
158 "VAR_XCORR_COELUTION REAL NOT NULL," \
159 "VAR_XCORR_COELUTION_WEIGHTED REAL NOT NULL," \
160 "VAR_XCORR_SHAPE REAL NOT NULL," \
161 "VAR_XCORR_SHAPE_WEIGHTED REAL NOT NULL," \
162 "VAR_YSERIES_SCORE REAL NOT NULL," \
163 "VAR_ELUTION_MODEL_FIT_SCORE REAL NULL," \
164 "VAR_SONAR_LAG REAL NULL," \
165 "VAR_SONAR_SHAPE REAL NULL," \
166 "VAR_SONAR_LOG_SN REAL NULL," \
167 "VAR_SONAR_LOG_DIFF REAL NULL," \
168 "VAR_SONAR_LOG_TREND REAL NULL," \
169 "VAR_SONAR_RSQ REAL NULL); " \
171 "CREATE TABLE FEATURE_TRANSITION(" \
172 "FEATURE_ID INT NOT NULL," \
173 "TRANSITION_ID INT NOT NULL," \
174 "AREA_INTENSITY REAL NOT NULL," \
175 "APEX_INTENSITY REAL NOT NULL," \
176 "VAR_LOG_INTENSITY REAL NULL," \
177 "VAR_XCORR_COELUTION REAL NULL," \
178 "VAR_XCORR_SHAPE REAL NULL," \
179 "VAR_LOG_SN_SCORE REAL NULL," \
180 "VAR_MASSDEV_SCORE REAL NULL," \
181 "VAR_ISOTOPE_CORRELATION_SCORE REAL NULL," \
182 "VAR_ISOTOPE_OVERLAP_SCORE REAL NULL); " ;
186 rc = sqlite3_exec(db, create_sql, callback,
nullptr, &zErrMsg);
187 if( rc != SQLITE_OK )
189 std::string error_message = zErrMsg;
190 sqlite3_free(zErrMsg);
196 std::stringstream sql_run;
197 sql_run <<
"INSERT INTO RUN (ID, FILENAME) VALUES (" 198 << *(int64_t*)&run_id_ <<
", '" 199 << input_filename_ <<
"'); ";
202 rc = sqlite3_exec(db, sql_run.str().c_str(), callback,
nullptr, &zErrMsg);
203 if( rc != SQLITE_OK )
205 std::string error_message = zErrMsg;
206 sqlite3_free(zErrMsg);
232 std::stringstream sql, sql_feature, sql_feature_ms1, sql_feature_ms2, sql_feature_ms2_transition, sql_feature_uis_transition;
234 for (FeatureMap::iterator feature_it = output.begin(); feature_it != output.end(); ++feature_it)
236 UInt64 uint64_feature_id = feature_it->getUniqueId();
237 int64_t feature_id = *(int64_t*)&uint64_feature_id;
239 for (std::vector<Feature>::iterator sub_it = feature_it->getSubordinates().begin(); sub_it != feature_it->getSubordinates().end(); ++sub_it)
241 if (sub_it->metaValueExists(
"FeatureLevel") && sub_it->getMetaValue(
"FeatureLevel") ==
"MS2")
243 sql_feature_ms2_transition <<
"INSERT INTO FEATURE_TRANSITION (FEATURE_ID, TRANSITION_ID, AREA_INTENSITY, APEX_INTENSITY) VALUES (" 244 << feature_id <<
", " 245 << sub_it->getMetaValue(
"native_id") <<
", " 246 << sub_it->getIntensity() <<
", " 247 << sub_it->getMetaValue(
"peak_apex_int") <<
"); ";
249 else if (sub_it->metaValueExists(
"FeatureLevel") && sub_it->getMetaValue(
"FeatureLevel") ==
"MS1")
251 sql_feature_ms1 <<
"INSERT INTO FEATURE_MS1 (FEATURE_ID, AREA_INTENSITY, APEX_INTENSITY, VAR_MASSDEV_SCORE, VAR_ISOTOPE_CORRELATION_SCORE, VAR_ISOTOPE_OVERLAP_SCORE, VAR_XCORR_COELUTION, VAR_XCORR_SHAPE) VALUES (" 252 << feature_id <<
", " 253 << sub_it->getIntensity() <<
", " 254 << sub_it->getMetaValue(
"peak_apex_int") <<
", " 255 << feature_it->getMetaValue(
"var_ms1_ppm_diff") <<
", " 256 << feature_it->getMetaValue(
"var_ms1_isotope_correlation") <<
", " 257 << feature_it->getMetaValue(
"var_ms1_isotope_overlap") <<
", " 258 << feature_it->getMetaValue(
"var_ms1_xcorr_coelution") <<
", " 259 << feature_it->getMetaValue(
"var_ms1_xcorr_shape") <<
"); ";
263 sql_feature <<
"INSERT INTO FEATURE (ID, RUN_ID, PRECURSOR_ID, EXP_RT, NORM_RT, DELTA_RT, LEFT_WIDTH, RIGHT_WIDTH) VALUES (" 264 << feature_id <<
", '" 265 << *(int64_t*)&run_id_ <<
"', " 267 << feature_it->getRT() <<
", " 268 << feature_it->getMetaValue(
"norm_RT") <<
", " 269 << feature_it->getMetaValue(
"delta_rt") <<
", " 270 << feature_it->getMetaValue(
"leftWidth") <<
", " 271 << feature_it->getMetaValue(
"rightWidth") <<
"); ";
273 std::string var_elution_model_fit_score =
"NULL", var_sonar_lag =
"NULL", var_sonar_shape =
"NULL", var_sonar_log_sn =
"NULL", var_sonar_log_diff =
"NULL", var_sonar_log_trend =
"NULL", var_sonar_rsq =
"NULL";
275 if (!feature_it->getMetaValue(
"var_elution_model_fit_score").isEmpty())
277 var_elution_model_fit_score = feature_it->getMetaValue(
"var_elution_model_fit_score").toString();
279 if (!feature_it->getMetaValue(
"var_sonar_lag").isEmpty())
281 var_sonar_lag = feature_it->getMetaValue(
"var_sonar_lag").toString();
283 if (!feature_it->getMetaValue(
"var_sonar_shape").isEmpty())
285 var_sonar_shape = feature_it->getMetaValue(
"var_sonar_shape").toString();
287 if (!feature_it->getMetaValue(
"var_sonar_log_sn").isEmpty())
289 var_sonar_log_sn = feature_it->getMetaValue(
"var_sonar_log_sn").toString();
291 if (!feature_it->getMetaValue(
"var_sonar_log_diff").isEmpty())
293 var_sonar_log_diff = feature_it->getMetaValue(
"var_sonar_log_diff").toString();
295 if (!feature_it->getMetaValue(
"var_sonar_log_trend").isEmpty())
297 var_sonar_log_trend = feature_it->getMetaValue(
"var_sonar_log_trend").toString();
299 if (!feature_it->getMetaValue(
"var_sonar_rsq").isEmpty())
301 var_sonar_rsq = feature_it->getMetaValue(
"var_sonar_rsq").toString();
304 sql_feature_ms2 <<
"INSERT INTO FEATURE_MS2 (FEATURE_ID, AREA_INTENSITY, APEX_INTENSITY, VAR_BSERIES_SCORE, VAR_DOTPROD_SCORE, VAR_INTENSITY_SCORE, VAR_ISOTOPE_CORRELATION_SCORE, VAR_ISOTOPE_OVERLAP_SCORE, VAR_LIBRARY_CORR, VAR_LIBRARY_DOTPROD, VAR_LIBRARY_MANHATTAN, VAR_LIBRARY_RMSD, VAR_LIBRARY_ROOTMEANSQUARE, VAR_LIBRARY_SANGLE, VAR_LOG_SN_SCORE, VAR_MANHATTAN_SCORE, VAR_MASSDEV_SCORE, VAR_MASSDEV_SCORE_WEIGHTED, VAR_NORM_RT_SCORE, VAR_XCORR_COELUTION,VAR_XCORR_COELUTION_WEIGHTED, VAR_XCORR_SHAPE, VAR_XCORR_SHAPE_WEIGHTED, VAR_YSERIES_SCORE, VAR_ELUTION_MODEL_FIT_SCORE, VAR_SONAR_LAG, VAR_SONAR_SHAPE, VAR_SONAR_LOG_SN, VAR_SONAR_LOG_DIFF, VAR_SONAR_LOG_TREND, VAR_SONAR_RSQ) VALUES (" 305 << feature_id <<
", " 306 << feature_it->getIntensity() <<
", " 307 << feature_it->getMetaValue(
"peak_apices_sum") <<
", " 308 << feature_it->getMetaValue(
"var_bseries_score") <<
", " 309 << feature_it->getMetaValue(
"var_dotprod_score") <<
", " 310 << feature_it->getMetaValue(
"var_intensity_score") <<
", " 311 << feature_it->getMetaValue(
"var_isotope_correlation_score") <<
", " 312 << feature_it->getMetaValue(
"var_isotope_overlap_score") <<
", " 313 << feature_it->getMetaValue(
"var_library_corr") <<
", " 314 << feature_it->getMetaValue(
"var_library_dotprod") <<
", " 315 << feature_it->getMetaValue(
"var_library_manhattan") <<
", " 316 << feature_it->getMetaValue(
"var_library_rmsd") <<
", " 317 << feature_it->getMetaValue(
"var_library_rootmeansquare") <<
", " 318 << feature_it->getMetaValue(
"var_library_sangle") <<
", " 319 << feature_it->getMetaValue(
"var_log_sn_score") <<
", " 320 << feature_it->getMetaValue(
"var_manhatt_score") <<
", " 321 << feature_it->getMetaValue(
"var_massdev_score") <<
", " 322 << feature_it->getMetaValue(
"var_massdev_score_weighted") <<
", " 323 << feature_it->getMetaValue(
"var_norm_rt_score") <<
", " 324 << feature_it->getMetaValue(
"var_xcorr_coelution") <<
", " 325 << feature_it->getMetaValue(
"var_xcorr_coelution_weighted") <<
", " 326 << feature_it->getMetaValue(
"var_xcorr_shape") <<
", " 327 << feature_it->getMetaValue(
"var_xcorr_shape_weighted") <<
", " 328 << feature_it->getMetaValue(
"var_yseries_score") <<
", " 329 << var_elution_model_fit_score <<
", " 330 << var_sonar_lag <<
", " 331 << var_sonar_shape <<
", " 332 << var_sonar_log_sn <<
", " 333 << var_sonar_log_diff <<
", " 334 << var_sonar_log_trend <<
", " 335 << var_sonar_rsq <<
"); ";
337 if (enable_uis_scoring_)
339 std::vector<String> id_target_transition_names = ListUtils::create<String>((
String)feature_it->getMetaValue(
"id_target_transition_names"),
';');
340 std::vector<double> id_target_area_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_area_intensity"),
';');
341 std::vector<double> id_target_apex_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_apex_intensity"),
';');
342 std::vector<double> id_target_log_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_log_intensity"),
';');
343 std::vector<double> id_target_ind_xcorr_coelution = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_xcorr_coelution"),
';');
344 std::vector<double> id_target_ind_xcorr_shape = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_xcorr_shape"),
';');
345 std::vector<double> id_target_ind_log_sn_score = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_log_sn_score"),
';');
346 std::vector<double> id_target_ind_massdev_score = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_massdev_score"),
';');
347 std::vector<double> id_target_ind_isotope_correlation = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_isotope_correlation"),
';');
348 std::vector<double> id_target_ind_isotope_overlap = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_target_ind_isotope_overlap"),
';');
350 if ((
String)feature_it->getMetaValue(
"id_target_num_transitions") !=
"")
352 for (
int i = 0; i < feature_it->getMetaValue(
"id_target_num_transitions").toString().toInt(); ++i)
354 sql_feature_uis_transition <<
"INSERT INTO FEATURE_TRANSITION (FEATURE_ID, TRANSITION_ID, AREA_INTENSITY, APEX_INTENSITY, VAR_LOG_INTENSITY, VAR_XCORR_COELUTION, VAR_XCORR_SHAPE, VAR_LOG_SN_SCORE, VAR_MASSDEV_SCORE, VAR_ISOTOPE_CORRELATION_SCORE, VAR_ISOTOPE_OVERLAP_SCORE) VALUES (" 355 << feature_id <<
", " 356 << id_target_transition_names[i] <<
", " 357 << id_target_area_intensity[i] <<
", " 358 << id_target_apex_intensity[i] <<
", " 359 << id_target_log_intensity[i] <<
", " 360 << id_target_ind_xcorr_coelution[i] <<
", " 361 << id_target_ind_xcorr_shape[i] <<
", " 362 << id_target_ind_log_sn_score[i] <<
", " 363 << id_target_ind_massdev_score[i] <<
", " 364 << id_target_ind_isotope_correlation[i] <<
", " 365 << id_target_ind_isotope_overlap[i] <<
"); ";
369 std::vector<String> id_decoy_transition_names = ListUtils::create<String>((
String)feature_it->getMetaValue(
"id_decoy_transition_names"),
';');
370 std::vector<double> id_decoy_area_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_area_intensity"),
';');
371 std::vector<double> id_decoy_apex_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_apex_intensity"),
';');
372 std::vector<double> id_decoy_log_intensity = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_log_intensity"),
';');
373 std::vector<double> id_decoy_ind_xcorr_coelution = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_xcorr_coelution"),
';');
374 std::vector<double> id_decoy_ind_xcorr_shape = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_xcorr_shape"),
';');
375 std::vector<double> id_decoy_ind_log_sn_score = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_log_sn_score"),
';');
376 std::vector<double> id_decoy_ind_massdev_score = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_massdev_score"),
';');
377 std::vector<double> id_decoy_ind_isotope_correlation = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_isotope_correlation"),
';');
378 std::vector<double> id_decoy_ind_isotope_overlap = ListUtils::create<double>((
String)feature_it->getMetaValue(
"id_decoy_ind_isotope_overlap"),
';');
380 if ((
String)feature_it->getMetaValue(
"id_decoy_num_transitions") !=
"")
382 for (
int i = 0; i < feature_it->getMetaValue(
"id_decoy_num_transitions").toString().toInt(); ++i)
384 sql_feature_uis_transition <<
"INSERT INTO FEATURE_TRANSITION (FEATURE_ID, TRANSITION_ID, AREA_INTENSITY, APEX_INTENSITY, VAR_LOG_INTENSITY, VAR_XCORR_COELUTION, VAR_XCORR_SHAPE, VAR_LOG_SN_SCORE, VAR_MASSDEV_SCORE, VAR_ISOTOPE_CORRELATION_SCORE, VAR_ISOTOPE_OVERLAP_SCORE) VALUES (" 385 << feature_id <<
", " 386 << id_decoy_transition_names[i] <<
", " 387 << id_decoy_area_intensity[i] <<
", " 388 << id_decoy_apex_intensity[i] <<
", " 389 << id_decoy_log_intensity[i] <<
", " 390 << id_decoy_ind_xcorr_coelution[i] <<
", " 391 << id_decoy_ind_xcorr_shape[i] <<
", " 392 << id_decoy_ind_log_sn_score[i] <<
", " 393 << id_decoy_ind_massdev_score[i] <<
", " 394 << id_decoy_ind_isotope_correlation[i] <<
", " 395 << id_decoy_ind_isotope_overlap[i] <<
"); ";
401 if (enable_uis_scoring_)
403 sql << sql_feature.str() << sql_feature_ms1.str() << sql_feature_ms2.str() << sql_feature_uis_transition.str();
407 sql << sql_feature.str() << sql_feature_ms1.str() << sql_feature_ms2.str() << sql_feature_ms2_transition.str();
429 char *zErrMsg =
nullptr;
434 rc = sqlite3_open(output_filename_.c_str(), &db);
437 fprintf(stderr,
"Can't open database: %s\n", sqlite3_errmsg(db));
440 sqlite3_exec(db,
"BEGIN TRANSACTION",
nullptr,
nullptr, &zErrMsg);
442 for (
Size i = 0; i < to_osw_output.size(); i++)
444 rc = sqlite3_exec(db, to_osw_output[i].c_str(), callback,
nullptr, &zErrMsg);
445 if( rc != SQLITE_OK )
447 std::string error_message = zErrMsg;
448 sqlite3_free(zErrMsg);
454 sqlite3_exec(db,
"END TRANSACTION",
nullptr,
nullptr, &zErrMsg);
String input_filename_
Definition: OpenSwathOSWWriter.h:61
String output_filename_
Definition: OpenSwathOSWWriter.h:60
A more convenient string class.
Definition: String.h:57
A container for features.
Definition: FeatureMap.h:93
bool sonar_
Definition: OpenSwathOSWWriter.h:65
Main OpenMS namespace.
Definition: FeatureDeconvolution.h:46
bool use_ms1_traces_
Definition: OpenSwathOSWWriter.h:64
static int callback(void *, int argc, char **argv, char **azColName)
Definition: OpenSwathOSWWriter.h:80
Class to write out an OpenSwath OSW SQLite output (PyProphet input)
Definition: OpenSwathOSWWriter.h:58
void writeHeader()
Initializes file by generating SQLite tables.
Definition: OpenSwathOSWWriter.h:99
bool enable_uis_scoring_
Definition: OpenSwathOSWWriter.h:66
A generator for unique ids.
Definition: UniqueIdGenerator.h:59
OpenSwathOSWWriter(String output_filename, String input_filename="inputfile", bool ms1_scores=false, bool sonar=false, bool uis_scores=false)
Definition: OpenSwathOSWWriter.h:70
A method or algorithm argument contains illegal values.
Definition: Exception.h:648
String prepareLine(const OpenSwath::LightCompound &, const OpenSwath::LightTransition *, FeatureMap &output, String id)
Prepare a single line (feature) for output.
Definition: OpenSwathOSWWriter.h:228
bool doWrite_
Definition: OpenSwathOSWWriter.h:63
OPENMS_UINT64_TYPE UInt64
Unsigned integer type (64bit)
Definition: Types.h:77
Definition: TransitionExperiment.h:149
OpenMS::UInt64 run_id_
Definition: OpenSwathOSWWriter.h:62
Definition: TransitionExperiment.h:46
bool isActive()
Definition: OpenSwathOSWWriter.h:90
void writeLines(std::vector< String > to_osw_output)
Write data to disk.
Definition: OpenSwathOSWWriter.h:426
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:127