35 #ifndef OPENMS_FORMAT_HANDLERS_MZMLHANDLER_H
36 #define OPENMS_FORMAT_HANDLERS_MZMLHANDLER_H
87 class ControlledVocabulary;
107 template <
typename MapType>
148 LOG_ERROR <<
"MzMLHandler was initialized with an invalid version number: " <<
version_ << std::endl;
185 LOG_ERROR <<
"MzMLHandler was initialized with an invalid version number: " <<
version_ << std::endl;
197 virtual void endElement(
const XMLCh*
const ,
const XMLCh*
const ,
const XMLCh*
const qname);
200 virtual void startElement(
const XMLCh*
const ,
const XMLCh*
const ,
const XMLCh*
const qname,
const xercesc::Attributes& attributes);
203 virtual void characters(
const XMLCh*
const chars,
const XMLSize_t length);
206 virtual void writeTo(std::ostream& os);
263 std::vector<std::vector<DataProcessing> >& dps);
267 template <
typename ContainerT>
274 std::vector<double> data_to_encode(container.size());
275 if (array_type ==
"intensity")
277 for (
Size p = 0; p < container.size(); ++p)
279 data_to_encode[p] = container[p].getIntensity();
284 for (
Size p = 0; p < container.size(); ++p)
286 data_to_encode[p] = container[p].getMZ();
293 std::vector<float> data_to_encode(container.size());
295 if (array_type ==
"intensity")
297 for (
Size p = 0; p < container.size(); ++p)
299 data_to_encode[p] = container[p].getIntensity();
304 for (
Size p = 0; p < container.size(); ++p)
306 data_to_encode[p] = container[p].getMZ();
328 #pragma omp parallel for
347 #pragma omp critical(HandleException)
392 #pragma omp parallel for
445 template <
typename SpectrumType>
456 bool mz_precision_64 =
true;
457 bool int_precision_64 =
true;
464 if (int_index == -1 || mz_index == -1)
467 if (default_arr_length != 0)
469 warning(
LOAD,
String(
"The m/z or intensity array of spectrum '") + spectrum.
getNativeID() +
"' is missing and default_arr_length is " + default_arr_length +
".");
475 if ((input_data[mz_index].ints_32.size() > 0) || (input_data[mz_index].ints_64.size() > 0))
477 fatalError(
LOAD,
"Encoding m/z array as integer is not allowed!");
479 if ((input_data[int_index].ints_32.size() > 0) || (input_data[int_index].ints_64.size() > 0))
481 fatalError(
LOAD,
"Encoding intensity array as integer is not allowed!");
485 Size mz_size = mz_precision_64 ? input_data[mz_index].floats_64.size() : input_data[mz_index].floats_32.size();
486 Size int_size = int_precision_64 ? input_data[int_index].floats_64.size() : input_data[int_index].floats_32.size();
488 if (mz_size != int_size)
490 fatalError(
LOAD,
String(
"The length of m/z and integer values of spectrum '") + spectrum.
getNativeID() +
"' differ (mz-size: " + mz_size +
", int-size: " + int_size +
"! Not reading spectrum!");
492 bool repair_array_length =
false;
493 if (default_arr_length != mz_size)
495 warning(
LOAD,
String(
"The m/z array of spectrum '") + spectrum.
getNativeID() +
"' has the size " + mz_size +
", but it should have size " + default_arr_length +
" (defaultArrayLength).");
496 repair_array_length =
true;
498 if (default_arr_length != int_size)
500 warning(
LOAD,
String(
"The intensity array of spectrum '") + spectrum.
getNativeID() +
"' has the size " + int_size +
", but it should have size " + default_arr_length +
" (defaultArrayLength).");
501 repair_array_length =
true;
503 if (repair_array_length)
505 default_arr_length = int_size;
506 warning(
LOAD,
String(
"Fixing faulty defaultArrayLength to ") + default_arr_length +
".");
510 if (input_data.size() > 2)
512 for (
Size i = 0; i < input_data.size(); i++)
514 if (input_data[i].meta.getName() !=
"m/z array" && input_data[i].meta.getName() !=
"intensity array")
523 spectrum.
getFloatDataArrays().back().MetaInfoDescription::operator=(input_data[i].meta);
549 for (
Size i = 0; i < input_data.size(); i++)
551 if (input_data[i].meta.getName() ==
"m/z array" || input_data[i].meta.getName() ==
"intensity array")
553 std::vector<UInt> keys;
554 input_data[i].meta.getKeys(keys);
555 for (
Size k = 0;
k < keys.size(); ++
k)
557 spectrum.
setMetaValue(keys[
k], input_data[i].meta.getMetaValue(keys[k]));
564 spectrum.reserve(default_arr_length);
565 for (
Size n = 0; n < default_arr_length; n++)
567 double mz = mz_precision_64 ? input_data[mz_index].floats_64[n] : input_data[mz_index].floats_32[n];
568 double intensity = int_precision_64 ? input_data[int_index].floats_64[n] : input_data[int_index].floats_32[n];
573 tmp.setIntensity(intensity);
575 spectrum.push_back(tmp);
578 UInt meta_float_array_index = 0;
579 UInt meta_int_array_index = 0;
580 UInt meta_string_array_index = 0;
581 for (
Size i = 0; i < input_data.size(); i++)
583 if (input_data[i].meta.getName() !=
"m/z array" && input_data[i].meta.getName() !=
"intensity array")
587 if (n < input_data[i].size)
592 ++meta_float_array_index;
596 if (n < input_data[i].size)
601 ++meta_int_array_index;
605 if (n < input_data[i].decoded_char.size())
607 String value = input_data[i].decoded_char[n];
610 ++meta_string_array_index;
625 template <
typename ChromatogramType>
636 bool int_precision_64 =
true;
637 bool rt_precision_64 =
true;
644 if (int_index == -1 || rt_index == -1)
647 if (default_arr_length != 0)
649 warning(
LOAD,
String(
"The m/z or intensity array of chromatogram '") + inp_chromatogram.
getNativeID() +
"' is missing and default_arr_length is " + default_arr_length +
".");
655 Size rt_size = rt_precision_64 ? input_data[rt_index].floats_64.size() : input_data[rt_index].floats_32.size();
656 if (default_arr_length != rt_size)
658 warning(
LOAD,
String(
"The base64-decoded rt array of chromatogram '") + inp_chromatogram.
getNativeID() +
"' has the size " + rt_size +
", but it should have size " + default_arr_length +
" (defaultArrayLength).");
660 Size int_size = int_precision_64 ? input_data[int_index].floats_64.size() : input_data[int_index].floats_32.size();
661 if (default_arr_length != int_size)
663 warning(
LOAD,
String(
"The base64-decoded intensity array of chromatogram '") + inp_chromatogram.
getNativeID() +
"' has the size " + int_size +
", but it should have size " + default_arr_length +
" (defaultArrayLength).");
667 if (input_data.size() > 2)
669 for (
Size i = 0; i < input_data.size(); i++)
671 if (input_data[i].meta.getName() !=
"intensity array" && input_data[i].meta.getName() !=
"time array")
680 inp_chromatogram.
getFloatDataArrays().back().MetaInfoDescription::operator=(input_data[i].meta);
689 inp_chromatogram.
getIntegerDataArrays().back().MetaInfoDescription::operator=(input_data[i].meta);
698 inp_chromatogram.
getStringDataArrays().back().MetaInfoDescription::operator=(input_data[i].meta);
706 for (
Size i = 0; i < input_data.size(); i++)
708 if (input_data[i].meta.getName() ==
"time array" || input_data[i].meta.getName() ==
"intensity array")
710 std::vector<UInt> keys;
711 input_data[i].meta.getKeys(keys);
712 for (
Size k = 0;
k < keys.size(); ++
k)
714 inp_chromatogram.
setMetaValue(keys[
k], input_data[i].meta.getMetaValue(keys[k]));
720 inp_chromatogram.reserve(default_arr_length);
721 ChromatogramPeakType tmp;
722 for (
Size n = 0; n < default_arr_length; n++)
724 double rt = rt_precision_64 ? input_data[rt_index].floats_64[n] : input_data[rt_index].floats_32[n];
725 double intensity = int_precision_64 ? input_data[int_index].floats_64[n] : input_data[int_index].floats_32[n];
730 tmp.setIntensity(intensity);
732 inp_chromatogram.push_back(tmp);
735 UInt meta_float_array_index = 0;
736 UInt meta_int_array_index = 0;
737 UInt meta_string_array_index = 0;
738 for (
Size i = 0; i < input_data.size(); i++)
740 if (input_data[i].meta.getName() !=
"intensity array" && input_data[i].meta.getName() !=
"time array")
744 if (n < input_data[i].size)
749 ++meta_float_array_index;
753 if (n < input_data[i].size)
758 ++meta_int_array_index;
762 if (n < input_data[i].decoded_char.size())
764 String value = input_data[i].decoded_char[n];
767 ++meta_string_array_index;
775 template <
typename DataType>
779 bool no_numpress =
true;
784 String compression_term_no_np;
786 if (array_type ==
"mz")
788 cv_term_type =
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000514\" name=\"m/z array\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
793 else if (array_type ==
"time")
795 cv_term_type =
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000595\" name=\"time array\" unitAccession=\"UO:0000010\" unitName=\"second\" unitCvRef=\"MS\" />\n";
800 else if (array_type ==
"intensity")
802 cv_term_type =
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000515\" name=\"intensity array\" unitAccession=\"MS:1000131\" unitName=\"number of detector counts\" unitCvRef=\"MS\"/>\n";
816 if (!encoded_string.empty())
820 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
822 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
827 if (is32bit && no_numpress)
829 compression_term = compression_term_no_np;
831 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
833 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000521\" name=\"32-bit float\" />\n";
835 else if (!is32bit && no_numpress)
837 compression_term = compression_term_no_np;
839 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
841 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
844 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
845 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
846 os <<
"\t\t\t\t\t</binaryDataArray>\n";
1002 template <
typename MapType>
1006 if (skip_spectrum_ || skip_chromatogram_)
1009 String& current_tag = open_tags_.back();
1011 if (current_tag ==
"binary")
1014 sm_.appendASCII(chars, length, data_.back().base64);
1016 else if (current_tag ==
"offset" || current_tag ==
"indexListOffset" || current_tag ==
"fileChecksum")
1025 char* transcoded_chars = sm_.convert(chars);
1026 String transcoded_chars2 = transcoded_chars;
1027 transcoded_chars2.
trim();
1028 if (transcoded_chars2 !=
"")
1029 warning(LOAD,
String(
"Unhandled character content in tag '") + current_tag +
"': " + transcoded_chars2);
1033 template <
typename MapType>
1036 static const XMLCh* s_count = xercesc::XMLString::transcode(
"count");
1037 static const XMLCh* s_default_array_length = xercesc::XMLString::transcode(
"defaultArrayLength");
1038 static const XMLCh* s_array_length = xercesc::XMLString::transcode(
"arrayLength");
1039 static const XMLCh* s_accession = xercesc::XMLString::transcode(
"accession");
1040 static const XMLCh* s_name = xercesc::XMLString::transcode(
"name");
1041 static const XMLCh* s_type = xercesc::XMLString::transcode(
"type");
1042 static const XMLCh* s_value = xercesc::XMLString::transcode(
"value");
1043 static const XMLCh* s_unit_accession = xercesc::XMLString::transcode(
"unitAccession");
1044 static const XMLCh* s_id = xercesc::XMLString::transcode(
"id");
1045 static const XMLCh* s_spot_id = xercesc::XMLString::transcode(
"spotID");
1047 static const XMLCh* s_ref = xercesc::XMLString::transcode(
"ref");
1048 static const XMLCh* s_version = xercesc::XMLString::transcode(
"version");
1049 static const XMLCh* s_order = xercesc::XMLString::transcode(
"order");
1050 static const XMLCh* s_location = xercesc::XMLString::transcode(
"location");
1051 static const XMLCh* s_sample_ref = xercesc::XMLString::transcode(
"sampleRef");
1052 static const XMLCh* s_software_ref = xercesc::XMLString::transcode(
"softwareRef");
1053 static const XMLCh* s_source_file_ref = xercesc::XMLString::transcode(
"sourceFileRef");
1054 static const XMLCh* s_default_instrument_configuration_ref = xercesc::XMLString::transcode(
"defaultInstrumentConfigurationRef");
1055 static const XMLCh* s_instrument_configuration_ref = xercesc::XMLString::transcode(
"instrumentConfigurationRef");
1056 static const XMLCh* s_default_data_processing_ref = xercesc::XMLString::transcode(
"defaultDataProcessingRef");
1057 static const XMLCh* s_data_processing_ref = xercesc::XMLString::transcode(
"dataProcessingRef");
1058 static const XMLCh* s_start_time_stamp = xercesc::XMLString::transcode(
"startTimeStamp");
1059 static const XMLCh* s_external_spectrum_id = xercesc::XMLString::transcode(
"externalSpectrumID");
1060 static const XMLCh* s_default_source_file_ref = xercesc::XMLString::transcode(
"defaultSourceFileRef");
1061 static const XMLCh* s_scan_settings_ref = xercesc::XMLString::transcode(
"scanSettingsRef");
1063 String tag = sm_.convert(qname);
1064 open_tags_.push_back(tag);
1068 if (open_tags_.size() > 1)
1069 parent_tag = *(open_tags_.end() - 2);
1070 String parent_parent_tag;
1071 if (open_tags_.size() > 2)
1072 parent_parent_tag = *(open_tags_.end() - 3);
1075 if (tag !=
"spectrum" && skip_spectrum_)
1078 if (tag !=
"chromatogram" && skip_chromatogram_)
1081 if (tag ==
"spectrum")
1085 default_array_length_ = attributeAsInt_(attributes, s_default_array_length);
1088 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
1090 spec_.setSourceFile(source_files_[source_file_ref]);
1093 spec_.setNativeID(attributeAsString_(attributes, s_id));
1096 if (optionalAttributeAsString_(maldi_spot_id, attributes, s_spot_id))
1098 spec_.setMetaValue(
"maldi_spot_id", maldi_spot_id);
1101 String data_processing_ref;
1102 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
1104 spec_.setDataProcessing(processing_[data_processing_ref]);
1108 spec_.setDataProcessing(processing_[default_processing_]);
1111 else if (tag ==
"chromatogram")
1114 default_array_length_ = attributeAsInt_(attributes, s_default_array_length);
1116 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
1118 chromatogram_.setSourceFile(source_files_[source_file_ref]);
1121 chromatogram_.setNativeID(attributeAsString_(attributes, s_id));
1123 String data_processing_ref;
1124 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
1126 chromatogram_.setDataProcessing(processing_[data_processing_ref]);
1130 chromatogram_.setDataProcessing(processing_[default_processing_]);
1133 else if (tag ==
"spectrumList")
1136 default_processing_ = attributeAsString_(attributes, s_default_data_processing_ref);
1139 if (options_.getMetadataOnly())
1142 UInt count = attributeAsInt_(attributes, s_count);
1143 exp_->reserveSpaceSpectra(count);
1144 logger_.startProgress(0, count,
"loading spectra list");
1145 in_spectrum_list_ =
true;
1147 else if (tag ==
"chromatogramList")
1150 default_processing_ = attributeAsString_(attributes, s_default_data_processing_ref);
1153 if (options_.getMetadataOnly())
1156 UInt count = attributeAsInt_(attributes, s_count);
1157 exp_->reserveSpaceChromatograms(count);
1158 logger_.startProgress(0, count,
"loading chromatogram list");
1159 in_spectrum_list_ =
false;
1161 else if (tag ==
"binaryDataArrayList" )
1163 data_.reserve(attributeAsInt_(attributes, s_count));
1165 else if (tag ==
"binaryDataArray" )
1169 data_.back().compression =
false;
1172 Int array_length = (
Int) default_array_length_;
1173 optionalAttributeAsInt_(array_length, attributes, s_array_length);
1174 data_.back().size = array_length;
1177 String data_processing_ref;
1178 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
1180 data_.back().meta.setDataProcessing(processing_[data_processing_ref]);
1183 else if (tag ==
"cvParam")
1186 optionalAttributeAsString_(value, attributes, s_value);
1187 String unit_accession =
"";
1188 optionalAttributeAsString_(unit_accession, attributes, s_unit_accession);
1189 handleCVParam_(parent_parent_tag, parent_tag, attributeAsString_(attributes, s_accession), attributeAsString_(attributes, s_name), value, unit_accession);
1191 else if (tag ==
"userParam")
1194 optionalAttributeAsString_(type, attributes, s_type);
1196 optionalAttributeAsString_(value, attributes, s_value);
1197 handleUserParam_(parent_parent_tag, parent_tag, attributeAsString_(attributes, s_name), type, value);
1199 else if (tag ==
"referenceableParamGroup")
1201 current_id_ = attributeAsString_(attributes, s_id);
1203 else if (tag ==
"sourceFile")
1205 current_id_ = attributeAsString_(attributes, s_id);
1206 source_files_[current_id_].setNameOfFile(attributeAsString_(attributes, s_name));
1207 source_files_[current_id_].setPathToFile(attributeAsString_(attributes, s_location));
1209 else if (tag ==
"referenceableParamGroupRef")
1212 String ref = attributeAsString_(attributes, s_ref);
1213 for (
Size i = 0; i < ref_param_[ref].size(); ++i)
1215 handleCVParam_(parent_parent_tag, parent_tag, ref_param_[ref][i].accession, ref_param_[ref][i].name, ref_param_[ref][i].value, ref_param_[ref][i].unit_accession);
1218 else if (tag ==
"scan")
1223 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
1225 tmp.
setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
1226 tmp.
setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
1229 String external_spectrum_id;
1230 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
1238 String instrument_configuration_ref;
1239 if (optionalAttributeAsString_(instrument_configuration_ref, attributes, s_instrument_configuration_ref))
1241 warning(LOAD,
"Unhandled attribute 'instrumentConfigurationRef' in 'scan' tag.");
1244 spec_.getAcquisitionInfo().push_back(tmp);
1246 else if (tag ==
"mzML")
1249 chromatogram_count = 0;
1252 String file_version = attributeAsString_(attributes, s_version);
1259 warning(LOAD,
String(
"Invalid mzML version string '") + file_version +
"'. Assuming mzML version " + version_ +
"!");
1263 if (current_version < mzML_min_version)
1265 fatalError(LOAD,
String(
"Only mzML 1.1.0 or higher is supported! This file has version '") + file_version +
"'.");
1269 warning(LOAD,
"The mzML file version (" + file_version +
") is newer than the parser version (" + version_ +
"). This might lead to undefined behavior.");
1275 if (optionalAttributeAsString_(accession, attributes, s_accession))
1277 exp_->setIdentifier(accession);
1281 if (optionalAttributeAsString_(
id, attributes, s_id))
1283 exp_->setMetaValue(
"mzml_id",
id);
1286 else if (tag ==
"contact")
1290 else if (tag ==
"sample")
1292 current_id_ = attributeAsString_(attributes, s_id);
1294 if (optionalAttributeAsString_(name, attributes, s_name))
1296 samples_[current_id_].setName(name);
1299 else if (tag ==
"run")
1303 if (optionalAttributeAsString_(sample_ref, attributes, s_sample_ref))
1305 exp_->setSample(samples_[sample_ref]);
1308 String instrument_ref = attributeAsString_(attributes, s_default_instrument_configuration_ref);
1309 exp_->setInstrument(instruments_[instrument_ref]);
1312 if (optionalAttributeAsString_(start_time, attributes, s_start_time_stamp))
1314 exp_->setDateTime(asDateTime_(start_time));
1317 String default_source_file_ref;
1318 if (optionalAttributeAsString_(default_source_file_ref, attributes, s_default_source_file_ref))
1320 exp_->getSourceFiles().push_back(source_files_[default_source_file_ref]);
1323 else if (tag ==
"software")
1325 current_id_ = attributeAsString_(attributes, s_id);
1326 software_[current_id_].setVersion(attributeAsString_(attributes, s_version));
1328 else if (tag ==
"dataProcessing")
1330 current_id_ = attributeAsString_(attributes, s_id);
1332 else if (tag ==
"processingMethod")
1339 dp.
setSoftware(software_[attributeAsString_(attributes, s_software_ref)]);
1343 LOG_ERROR <<
"Warning: Parsing error, \"processingMethod\" is missing the required attribute \"softwareRef\".\n" <<
1344 "The software tool which generated this mzML should be fixed. Please notify the maintainers." << std::endl;
1346 processing_[current_id_].push_back(dp);
1349 else if (tag ==
"instrumentConfiguration")
1351 current_id_ = attributeAsString_(attributes, s_id);
1354 String scan_settings_ref;
1355 if (optionalAttributeAsString_(scan_settings_ref, attributes, s_scan_settings_ref))
1357 warning(LOAD,
"Unhandled attribute 'scanSettingsRef' in 'instrumentConfiguration' tag.");
1360 else if (tag ==
"softwareRef")
1363 instruments_[current_id_].setSoftware(software_[attributeAsString_(attributes, s_ref)]);
1365 else if (tag ==
"source")
1367 instruments_[current_id_].getIonSources().push_back(
IonSource());
1368 instruments_[current_id_].getIonSources().back().setOrder(attributeAsInt_(attributes, s_order));
1370 else if (tag ==
"analyzer")
1372 instruments_[current_id_].getMassAnalyzers().push_back(
MassAnalyzer());
1373 instruments_[current_id_].getMassAnalyzers().back().setOrder(attributeAsInt_(attributes, s_order));
1375 else if (tag ==
"detector")
1377 instruments_[current_id_].getIonDetectors().push_back(
IonDetector());
1378 instruments_[current_id_].getIonDetectors().back().setOrder(attributeAsInt_(attributes, s_order));
1380 else if (tag ==
"precursor")
1382 if (in_spectrum_list_)
1385 spec_.getPrecursors().push_back(
Precursor());
1389 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
1391 spec_.getPrecursors().back().setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
1392 spec_.getPrecursors().back().setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
1395 String external_spectrum_id;
1396 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
1398 spec_.getPrecursors().back().setMetaValue(
"external_spectrum_id", external_spectrum_id);
1401 selected_ion_count_ = 0;
1405 chromatogram_.setPrecursor(
Precursor());
1408 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
1410 chromatogram_.getPrecursor().setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
1411 chromatogram_.getPrecursor().setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
1414 String external_spectrum_id;
1415 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
1417 chromatogram_.getPrecursor().setMetaValue(
"external_spectrum_id", external_spectrum_id);
1419 selected_ion_count_ = 0;
1422 else if (tag ==
"product")
1425 if (in_spectrum_list_)
1427 spec_.getProducts().push_back(
Product());
1431 chromatogram_.setProduct(
Product());
1434 else if (tag ==
"selectedIon")
1437 ++selected_ion_count_;
1439 else if (tag ==
"selectedIonList")
1442 if (attributeAsInt_(attributes, s_count) > 1)
1444 warning(LOAD,
"OpenMS can currently handle only one selection ion per precursor! Only the first ion is loaded!");
1447 else if (tag ==
"scanWindow")
1449 spec_.getInstrumentSettings().getScanWindows().push_back(
ScanWindow());
1453 template <
typename MapType>
1456 static const XMLCh* s_spectrum = xercesc::XMLString::transcode(
"spectrum");
1457 static const XMLCh* s_chromatogram = xercesc::XMLString::transcode(
"chromatogram");
1458 static const XMLCh* s_spectrum_list = xercesc::XMLString::transcode(
"spectrumList");
1459 static const XMLCh* s_chromatogram_list = xercesc::XMLString::transcode(
"chromatogramList");
1460 static const XMLCh* s_mzml = xercesc::XMLString::transcode(
"mzML");
1462 open_tags_.pop_back();
1464 if (equal_(qname, s_spectrum))
1468 if (!rt_set_ && spec_.metaValueExists(
"elution time (seconds)"))
1470 spec_.setRT(spec_.getMetaValue(
"elution time (seconds)"));
1481 if (!skip_spectrum_)
1484 spectrum_data_.back().default_array_length = default_array_length_;
1485 spectrum_data_.back().spectrum = spec_;
1486 if (options_.getFillData())
1488 spectrum_data_.back().data = data_;
1492 if (spectrum_data_.size() >= options_.getMaxDataPoolSize())
1494 populateSpectraWithData();
1497 skip_spectrum_ =
false;
1499 if (options_.getSizeOnly()) {skip_spectrum_ =
true; }
1500 logger_.setProgress(++scan_count);
1502 default_array_length_ = 0;
1504 else if (equal_(qname, s_chromatogram))
1507 if (!skip_chromatogram_)
1510 chromatogram_data_.back().default_array_length = default_array_length_;
1511 chromatogram_data_.back().chromatogram = chromatogram_;
1512 if (options_.getFillData())
1514 chromatogram_data_.back().data = data_;
1518 if (chromatogram_data_.size() >= options_.getMaxDataPoolSize())
1520 populateChromatogramsWithData();
1523 skip_chromatogram_ =
false;
1524 if (options_.getSizeOnly()) {skip_chromatogram_ =
true; }
1525 logger_.setProgress(++chromatogram_count);
1527 default_array_length_ = 0;
1529 else if (equal_(qname, s_spectrum_list))
1531 in_spectrum_list_ =
false;
1532 logger_.endProgress();
1534 else if (equal_(qname, s_chromatogram_list))
1536 in_spectrum_list_ =
false;
1537 logger_.endProgress();
1539 else if (equal_(qname, s_mzml))
1543 source_files_.clear();
1546 instruments_.clear();
1547 processing_.clear();
1550 populateSpectraWithData();
1551 populateChromatogramsWithData();
1557 template <
typename MapType>
1565 if (!cv_.exists(accession))
1568 if (parent_tag !=
"sample")
1570 warning(LOAD,
String(
"Unknown cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1581 warning(LOAD,
String(
"Obsolete CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"'.");
1584 String parsed_name = name;
1587 correct_name.
trim();
1588 if (parsed_name != correct_name)
1590 warning(LOAD,
String(
"Name of CV term not correct: '") + term.
id +
" - " + parsed_name +
"' should be '" + correct_name +
"'");
1594 warning(LOAD,
String(
"Obsolete CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"'.");
1604 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must not have a value. The value is '" + value +
"'.");
1623 termValue = value.
toInt();
1627 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must have an integer value. The value is '" + value +
"'.");
1640 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must have a floating-point value. The value is '" + value +
"'.");
1654 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must be a valid date. The value is '" + value +
"'.");
1668 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' should have a numerical value. The value is '" + value +
"'.");
1673 if (unit_accession !=
"") termValue.
setUnit(unit_accession);
1676 if (parent_tag ==
"run")
1679 if (accession ==
"MS:1000858")
1681 exp_->setFractionIdentifier(value);
1684 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1687 else if (parent_tag ==
"binaryDataArray")
1691 if (cv_.isChildOf(accession,
"MS:1000513"))
1693 data_.back().meta.setName(cv_.getTerm(accession).name);
1697 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1702 else if (parent_tag ==
"spectrum")
1705 if (accession ==
"MS:1000294")
1709 else if (accession ==
"MS:1000579")
1713 else if (accession ==
"MS:1000580")
1717 else if (accession ==
"MS:1000581")
1721 else if (accession ==
"MS:1000582")
1725 else if (accession ==
"MS:1000583")
1729 else if (accession ==
"MS:1000804")
1733 else if (accession ==
"MS:1000805")
1737 else if (accession ==
"MS:1000806")
1741 else if (accession ==
"MS:1000325")
1745 else if (accession ==
"MS:1000326")
1749 else if (accession ==
"MS:1000341")
1753 else if (accession ==
"MS:1000789")
1757 else if (accession ==
"MS:1000790")
1762 else if (accession ==
"MS:1000127")
1766 else if (accession ==
"MS:1000128")
1770 else if (accession ==
"MS:1000525")
1775 else if (accession ==
"MS:1000511")
1777 spec_.setMSLevel(value.
toInt());
1779 if (options_.hasMSLevels() && !options_.containsMSLevel(spec_.getMSLevel()))
1781 skip_spectrum_ =
true;
1784 else if (accession ==
"MS:1000497")
1786 spec_.getInstrumentSettings().setZoomScan(
true);
1788 else if (accession ==
"MS:1000285")
1791 spec_.setMetaValue(
"total ion current", termValue);
1793 else if (accession ==
"MS:1000504")
1796 spec_.setMetaValue(
"base peak m/z", termValue);
1798 else if (accession ==
"MS:1000505")
1801 spec_.setMetaValue(
"base peak intensity", termValue);
1803 else if (accession ==
"MS:1000527")
1806 spec_.setMetaValue(
"highest observed m/z", termValue);
1808 else if (accession ==
"MS:1000528")
1811 spec_.setMetaValue(
"lowest observed m/z", termValue);
1813 else if (accession ==
"MS:1000618")
1816 spec_.setMetaValue(
"highest observed wavelength", termValue);
1818 else if (accession ==
"MS:1000619")
1821 spec_.setMetaValue(
"lowest observed wavelength", termValue);
1823 else if (accession ==
"MS:1000796")
1826 spec_.setMetaValue(
"spectrum title", termValue);
1828 else if (accession ==
"MS:1000797")
1831 spec_.setMetaValue(
"peak list scans", termValue);
1833 else if (accession ==
"MS:1000798")
1836 spec_.setMetaValue(
"peak list raw scans", termValue);
1839 else if (accession ==
"MS:1000129")
1843 else if (accession ==
"MS:1000130")
1848 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1851 else if (parent_tag ==
"scanWindow")
1853 if (accession ==
"MS:1000501")
1855 spec_.getInstrumentSettings().getScanWindows().back().begin = value.
toDouble();
1857 else if (accession ==
"MS:1000500")
1859 spec_.getInstrumentSettings().getScanWindows().back().end = value.
toDouble();
1862 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1865 else if (parent_tag ==
"referenceableParamGroup")
1872 ref_param_[current_id_].push_back(term);
1875 else if (parent_tag ==
"selectedIon")
1878 if (selected_ion_count_ > 1)
1881 if (accession ==
"MS:1000744")
1884 if (in_spectrum_list_)
1886 spec_.getPrecursors().back().setMZ(value.
toDouble());
1890 chromatogram_.getPrecursor().setMZ(value.
toDouble());
1893 else if (accession ==
"MS:1000041")
1895 if (in_spectrum_list_)
1897 spec_.getPrecursors().back().setCharge(value.
toInt());
1901 chromatogram_.getPrecursor().setCharge(value.
toInt());
1904 else if (accession ==
"MS:1000042")
1906 if (in_spectrum_list_)
1908 spec_.getPrecursors().back().setIntensity(value.
toDouble());
1912 chromatogram_.getPrecursor().setIntensity(value.
toDouble());
1915 else if (accession ==
"MS:1000633")
1917 if (in_spectrum_list_)
1919 spec_.getPrecursors().back().getPossibleChargeStates().push_back(value.
toInt());
1923 chromatogram_.getPrecursor().getPossibleChargeStates().push_back(value.
toInt());
1927 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1930 else if (parent_tag ==
"activation")
1933 if (in_spectrum_list_)
1935 if (accession ==
"MS:1000245")
1938 spec_.getPrecursors().back().setMetaValue(
"charge stripping",
String(
"true"));
1940 else if (accession ==
"MS:1000045")
1943 spec_.getPrecursors().back().setMetaValue(
"collision energy", termValue);
1945 else if (accession ==
"MS:1000412")
1948 spec_.getPrecursors().back().setMetaValue(
"buffer gas", termValue);
1950 else if (accession ==
"MS:1000419")
1953 spec_.getPrecursors().back().setMetaValue(
"collision gas", termValue);
1955 else if (accession ==
"MS:1000509")
1957 spec_.getPrecursors().back().setActivationEnergy(value.
toDouble());
1959 else if (accession ==
"MS:1000138")
1962 spec_.getPrecursors().back().setMetaValue(
"percent collision energy", termValue);
1964 else if (accession ==
"MS:1000869")
1967 spec_.getPrecursors().back().setMetaValue(
"collision gas pressure", termValue);
1970 else if (accession ==
"MS:1000044")
1974 else if (accession ==
"MS:1000133")
1976 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::CID);
1978 else if (accession ==
"MS:1000134")
1980 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PD);
1982 else if (accession ==
"MS:1000135")
1984 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PSD);
1986 else if (accession ==
"MS:1000136")
1988 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::SID);
1990 else if (accession ==
"MS:1000242")
1992 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::BIRD);
1994 else if (accession ==
"MS:1000250")
1996 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::ECD);
1998 else if (accession ==
"MS:1000262")
2000 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::IMD);
2002 else if (accession ==
"MS:1000282")
2004 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::SORI);
2006 else if (accession ==
"MS:1000422")
2008 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::HCID);
2010 else if (accession ==
"MS:1000433")
2012 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::LCID);
2014 else if (accession ==
"MS:1000435")
2016 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PHD);
2018 else if (accession ==
"MS:1000598")
2020 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::ETD);
2022 else if (accession ==
"MS:1000599")
2024 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PQD);
2027 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2031 if (accession ==
"MS:1000245")
2034 chromatogram_.getPrecursor().setMetaValue(
"charge stripping",
String(
"true"));
2036 else if (accession ==
"MS:1000045")
2039 chromatogram_.getPrecursor().setMetaValue(
"collision energy", termValue);
2041 else if (accession ==
"MS:1000412")
2044 chromatogram_.getPrecursor().setMetaValue(
"buffer gas", termValue);
2046 else if (accession ==
"MS:1000419")
2049 chromatogram_.getPrecursor().setMetaValue(
"collision gas", termValue);
2051 else if (accession ==
"MS:1000509")
2053 chromatogram_.getPrecursor().setActivationEnergy(value.
toDouble());
2055 else if (accession ==
"MS:1000138")
2058 chromatogram_.getPrecursor().setMetaValue(
"percent collision energy", termValue);
2060 else if (accession ==
"MS:1000869")
2063 chromatogram_.getPrecursor().setMetaValue(
"collision gas pressure", termValue);
2066 else if (accession ==
"MS:1000044")
2070 else if (accession ==
"MS:1000133")
2072 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::CID);
2074 else if (accession ==
"MS:1000134")
2076 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PD);
2078 else if (accession ==
"MS:1000135")
2080 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PSD);
2082 else if (accession ==
"MS:1000136")
2084 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::SID);
2086 else if (accession ==
"MS:1000242")
2088 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::BIRD);
2090 else if (accession ==
"MS:1000250")
2092 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::ECD);
2094 else if (accession ==
"MS:1000262")
2096 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::IMD);
2098 else if (accession ==
"MS:1000282")
2100 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::SORI);
2102 else if (accession ==
"MS:1000422")
2104 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::HCID);
2106 else if (accession ==
"MS:1000433")
2108 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::LCID);
2110 else if (accession ==
"MS:1000435")
2112 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PHD);
2114 else if (accession ==
"MS:1000598")
2116 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::ETD);
2118 else if (accession ==
"MS:1000599")
2120 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PQD);
2123 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2127 else if (parent_tag ==
"isolationWindow")
2129 if (parent_parent_tag ==
"precursor")
2131 if (accession ==
"MS:1000827")
2133 if (in_spectrum_list_)
2135 spec_.getPrecursors().back().setMZ(value.
toDouble());
2139 chromatogram_.getPrecursor().setMZ(value.
toDouble());
2142 else if (accession ==
"MS:1000828")
2144 if (in_spectrum_list_)
2146 spec_.getPrecursors().back().setIsolationWindowLowerOffset(value.
toDouble());
2150 chromatogram_.getPrecursor().setIsolationWindowLowerOffset(value.
toDouble());
2153 else if (accession ==
"MS:1000829")
2155 if (in_spectrum_list_)
2157 spec_.getPrecursors().back().setIsolationWindowUpperOffset(value.
toDouble());
2161 chromatogram_.getPrecursor().setIsolationWindowUpperOffset(value.
toDouble());
2165 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2167 else if (parent_parent_tag ==
"product")
2169 if (accession ==
"MS:1000827")
2171 if (in_spectrum_list_)
2173 spec_.getProducts().back().setMZ(value.
toDouble());
2177 chromatogram_.getProduct().setMZ(value.
toDouble());
2180 else if (accession ==
"MS:1000829")
2182 if (in_spectrum_list_)
2184 spec_.getProducts().back().setIsolationWindowUpperOffset(value.
toDouble());
2188 chromatogram_.getProduct().setIsolationWindowUpperOffset(value.
toDouble());
2191 else if (accession ==
"MS:1000828")
2193 if (in_spectrum_list_)
2195 spec_.getProducts().back().setIsolationWindowLowerOffset(value.
toDouble());
2199 chromatogram_.getProduct().setIsolationWindowLowerOffset(value.
toDouble());
2203 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2207 else if (parent_tag ==
"scanList")
2209 if (cv_.isChildOf(accession,
"MS:1000570"))
2211 spec_.getAcquisitionInfo().setMethodOfCombination(cv_.getTerm(accession).name);
2214 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2217 else if (parent_tag ==
"scan")
2220 if (accession ==
"MS:1000502")
2223 spec_.setMetaValue(
"dwell time", termValue);
2225 else if (accession ==
"MS:1000011")
2228 spec_.setMetaValue(
"mass resolution", termValue);
2230 else if (accession ==
"MS:1000015")
2233 spec_.setMetaValue(
"scan rate", termValue);
2235 else if (accession ==
"MS:1000016")
2237 if (unit_accession ==
"UO:0000031")
2239 spec_.setRT(60.0 * value.
toDouble());
2247 if (options_.hasRTRange() && !options_.getRTRange().encloses(
DPosition<1>(spec_.getRT())))
2249 skip_spectrum_ =
true;
2252 else if (accession ==
"MS:1000826")
2254 if (unit_accession ==
"UO:0000031")
2256 spec_.setMetaValue(
"elution time (seconds)", 60.0 * value.
toDouble());
2260 spec_.setMetaValue(
"elution time (seconds)", value.
toDouble());
2263 else if (accession ==
"MS:1000512")
2266 spec_.setMetaValue(
"filter string", termValue);
2268 else if (accession ==
"MS:1000803")
2271 spec_.setMetaValue(
"analyzer scan offset", termValue);
2273 else if (accession ==
"MS:1000616")
2276 spec_.setMetaValue(
"preset scan configuration", termValue);
2278 else if (accession ==
"MS:1000800")
2281 spec_.setMetaValue(
"mass resolving power", termValue);
2283 else if (accession ==
"MS:1000880")
2286 spec_.setMetaValue(
"interchannel delay", termValue);
2289 else if (accession ==
"MS:1000092")
2292 spec_.setMetaValue(
"scan direction",
String(
"decreasing"));
2294 else if (accession ==
"MS:1000093")
2297 spec_.setMetaValue(
"scan direction",
String(
"increasing"));
2300 else if (accession ==
"MS:1000094")
2303 spec_.setMetaValue(
"scan law",
String(
"exponential"));
2305 else if (accession ==
"MS:1000095")
2308 spec_.setMetaValue(
"scan law",
String(
"linear"));
2310 else if (accession ==
"MS:1000096")
2313 spec_.setMetaValue(
"scan law",
String(
"quadratic"));
2316 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2319 else if (parent_tag ==
"contact")
2321 if (accession ==
"MS:1000586")
2323 exp_->getContacts().back().setName(value);
2325 else if (accession ==
"MS:1000587")
2327 exp_->getContacts().back().setAddress(value);
2329 else if (accession ==
"MS:1000588")
2331 exp_->getContacts().back().setURL(value);
2333 else if (accession ==
"MS:1000589")
2335 exp_->getContacts().back().setEmail(value);
2337 else if (accession ==
"MS:1000590")
2339 exp_->getContacts().back().setInstitution(value);
2342 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2345 else if (parent_tag ==
"sourceFile")
2347 if (accession ==
"MS:1000569")
2351 else if (accession ==
"MS:1000568")
2355 else if (cv_.isChildOf(accession,
"MS:1000560"))
2357 source_files_[current_id_].setFileType(cv_.getTerm(accession).name);
2359 else if (cv_.isChildOf(accession,
"MS:1000767"))
2361 source_files_[current_id_].setNativeIDType(cv_.getTerm(accession).name);
2364 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2367 else if (parent_tag ==
"sample")
2369 if (accession ==
"MS:1000004")
2371 samples_[current_id_].setMass(value.
toDouble());
2373 else if (accession ==
"MS:1000001")
2375 samples_[current_id_].setNumber(value);
2377 else if (accession ==
"MS:1000005")
2379 samples_[current_id_].setVolume(value.
toDouble());
2381 else if (accession ==
"MS:1000006")
2383 samples_[current_id_].setConcentration(value.
toDouble());
2385 else if (accession ==
"MS:1000053")
2388 samples_[current_id_].setMetaValue(
"sample batch", termValue);
2390 else if (accession ==
"MS:1000047")
2394 else if (accession ==
"MS:1000048")
2398 else if (accession ==
"MS:1000049")
2402 else if (accession ==
"MS:1000050")
2406 else if (accession ==
"MS:1000051")
2410 else if (accession ==
"MS:1000052")
2417 samples_[current_id_].setMetaValue(
String(name), termValue);
2422 samples_[current_id_].setMetaValue(
"GO cellular component",
String(name));
2427 samples_[current_id_].setMetaValue(
"brenda source tissue",
String(name));
2430 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2433 else if (parent_tag ==
"instrumentConfiguration")
2436 if (accession ==
"MS:1000031")
2440 else if (cv_.isChildOf(accession,
"MS:1000031"))
2442 instruments_[current_id_].setName(cv_.getTerm(accession).name);
2445 else if (accession ==
"MS:1000529")
2448 instruments_[current_id_].setMetaValue(
"instrument serial number", termValue);
2450 else if (accession ==
"MS:1000032")
2452 instruments_[current_id_].setCustomizations(value);
2454 else if (accession ==
"MS:1000236")
2457 instruments_[current_id_].setMetaValue(
"transmission", termValue);
2460 else if (accession ==
"MS:1000246")
2464 else if (accession ==
"MS:1000221")
2468 else if (accession ==
"MS:1000275")
2472 else if (accession ==
"MS:1000281")
2476 else if (accession ==
"MS:1000286")
2480 else if (accession ==
"MS:1000300")
2484 else if (accession ==
"MS:1000307")
2488 else if (accession ==
"MS:1000309")
2492 else if (accession ==
"MS:1000310")
2496 else if (accession ==
"MS:1000311")
2500 else if (accession ==
"MS:1000320")
2505 else if (accession ==
"MS:1000304")
2508 instruments_[current_id_].setMetaValue(
"accelerating voltage", termValue);
2510 else if (accession ==
"MS:1000216")
2513 instruments_[current_id_].setMetaValue(
"field-free region",
String(
"true"));
2515 else if (accession ==
"MS:1000308")
2518 instruments_[current_id_].setMetaValue(
"electric field strength", termValue);
2520 else if (accession ==
"MS:1000319")
2523 instruments_[current_id_].setMetaValue(
"space charge effect",
String(
"true"));
2526 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2528 else if (parent_tag ==
"source")
2531 if (accession ==
"MS:1000055")
2535 else if (accession ==
"MS:1000056")
2537 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::DIRECT);
2539 else if (accession ==
"MS:1000057")
2543 else if (accession ==
"MS:1000058")
2547 else if (accession ==
"MS:1000059")
2551 else if (accession ==
"MS:1000060")
2555 else if (accession ==
"MS:1000061")
2559 else if (accession ==
"MS:1000062")
2563 else if (accession ==
"MS:1000063")
2567 else if (accession ==
"MS:1000064")
2571 else if (accession ==
"MS:1000065")
2575 else if (accession ==
"MS:1000066")
2579 else if (accession ==
"MS:1000067")
2583 else if (accession ==
"MS:1000068")
2585 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::SEPTUM);
2587 else if (accession ==
"MS:1000069")
2591 else if (accession ==
"MS:1000248")
2593 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::BATCH);
2595 else if (accession ==
"MS:1000249")
2599 else if (accession ==
"MS:1000396")
2603 else if (accession ==
"MS:1000485")
2608 else if (accession ==
"MS:1000071")
2610 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CI);
2612 else if (accession ==
"MS:1000073")
2614 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::ESI);
2616 else if (accession ==
"MS:1000074")
2618 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FAB);
2620 else if (accession ==
"MS:1000227")
2622 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MPI);
2624 else if (accession ==
"MS:1000240")
2626 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::API);
2628 else if (accession ==
"MS:1000247")
2630 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::DI);
2632 else if (accession ==
"MS:1000255")
2634 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FA);
2636 else if (accession ==
"MS:1000258")
2638 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FII);
2640 else if (accession ==
"MS:1000259")
2642 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::GD_MS);
2644 else if (accession ==
"MS:1000271")
2646 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NICI);
2648 else if (accession ==
"MS:1000272")
2650 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NRMS);
2652 else if (accession ==
"MS:1000273")
2654 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PI);
2656 else if (accession ==
"MS:1000274")
2658 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PYMS);
2660 else if (accession ==
"MS:1000276")
2662 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::REMPI);
2664 else if (accession ==
"MS:1000380")
2666 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AI);
2668 else if (accession ==
"MS:1000381")
2670 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::ASI);
2672 else if (accession ==
"MS:1000383")
2674 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AD);
2676 else if (accession ==
"MS:1000384")
2678 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AUI);
2680 else if (accession ==
"MS:1000385")
2682 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CEI);
2684 else if (accession ==
"MS:1000386")
2686 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CHEMI);
2688 else if (accession ==
"MS:1000388")
2690 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::DISSI);
2692 else if (accession ==
"MS:1000389")
2694 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::EI);
2696 else if (accession ==
"MS:1000395")
2698 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::LSI);
2700 else if (accession ==
"MS:1000399")
2702 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PEI);
2704 else if (accession ==
"MS:1000400")
2706 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PD);
2708 else if (accession ==
"MS:1000402")
2710 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SI);
2712 else if (accession ==
"MS:1000403")
2714 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SOI);
2716 else if (accession ==
"MS:1000404")
2718 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SPI);
2720 else if (accession ==
"MS:1000406")
2722 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SUI);
2724 else if (accession ==
"MS:1000407")
2726 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::TI);
2728 else if (accession ==
"MS:1000408")
2730 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::VI);
2732 else if (accession ==
"MS:1000446")
2734 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FIB);
2736 else if (accession ==
"MS:1000070")
2738 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::APCI);
2740 else if (accession ==
"MS:1000239")
2742 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AP_MALDI);
2744 else if (accession ==
"MS:1000382")
2746 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::APPI);
2748 else if (accession ==
"MS:1000075")
2750 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MALDI);
2752 else if (accession ==
"MS:1000257")
2754 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FD);
2756 else if (accession ==
"MS:1000387")
2758 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SILI);
2760 else if (accession ==
"MS:1000393")
2762 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::LD);
2764 else if (accession ==
"MS:1000405")
2766 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SALDI);
2768 else if (accession ==
"MS:1000397")
2770 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MESI);
2772 else if (accession ==
"MS:1000398")
2774 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NESI);
2776 else if (accession ==
"MS:1000278")
2778 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SELDI);
2780 else if (accession ==
"MS:1000279")
2782 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SEND);
2784 else if (accession ==
"MS:1000008")
2789 else if (accession ==
"MS:1000392")
2792 instruments_[current_id_].getIonSources().back().setMetaValue(
"ionization efficiency", termValue);
2794 else if (accession ==
"MS:1000486")
2797 instruments_[current_id_].getIonSources().back().setMetaValue(
"source potential", termValue);
2799 else if (accession ==
"MS:1000875")
2802 instruments_[current_id_].getIonSources().back().setMetaValue(
"declustering potential", termValue);
2804 else if (accession ==
"MS:1000876")
2807 instruments_[current_id_].getIonSources().back().setMetaValue(
"cone voltage", termValue);
2809 else if (accession ==
"MS:1000877")
2812 instruments_[current_id_].getIonSources().back().setMetaValue(
"tube lens", termValue);
2815 else if (accession ==
"MS:1000843")
2818 instruments_[current_id_].getIonSources().back().setMetaValue(
"wavelength", termValue);
2820 else if (accession ==
"MS:1000844")
2823 instruments_[current_id_].getIonSources().back().setMetaValue(
"focus diameter x", termValue);
2825 else if (accession ==
"MS:1000845")
2828 instruments_[current_id_].getIonSources().back().setMetaValue(
"focus diameter y", termValue);
2830 else if (accession ==
"MS:1000846")
2833 instruments_[current_id_].getIonSources().back().setMetaValue(
"pulse energy", termValue);
2835 else if (accession ==
"MS:1000847")
2838 instruments_[current_id_].getIonSources().back().setMetaValue(
"pulse duration", termValue);
2840 else if (accession ==
"MS:1000848")
2843 instruments_[current_id_].getIonSources().back().setMetaValue(
"attenuation", termValue);
2845 else if (accession ==
"MS:1000849")
2848 instruments_[current_id_].getIonSources().back().setMetaValue(
"impact angle", termValue);
2851 else if (accession ==
"MS:1000850")
2854 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"gas laser");
2856 else if (accession ==
"MS:1000851")
2859 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"solid-state laser");
2861 else if (accession ==
"MS:1000852")
2864 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"dye-laser");
2866 else if (accession ==
"MS:1000853")
2869 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"free electron laser");
2872 else if (accession ==
"MS:1000834")
2875 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix solution", termValue);
2877 else if (accession ==
"MS:1000835")
2880 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix solution concentration", termValue);
2883 else if (accession ==
"MS:1000836")
2886 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"dried dropplet");
2888 else if (accession ==
"MS:1000837")
2891 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"printed");
2893 else if (accession ==
"MS:1000838")
2896 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"sprayed");
2898 else if (accession ==
"MS:1000839")
2901 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
" precoated plate");
2904 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2906 else if (parent_tag ==
"analyzer")
2909 if (accession ==
"MS:1000079")
2913 else if (accession ==
"MS:1000080")
2917 else if (accession ==
"MS:1000081")
2921 else if (accession ==
"MS:1000084")
2925 else if (accession ==
"MS:1000254")
2929 else if (accession ==
"MS:1000264")
2931 instruments_[current_id_].getMassAnalyzers().back().setType(
MassAnalyzer::IT);
2933 else if (accession ==
"MS:1000284")
2937 else if (accession ==
"MS:1000288")
2941 else if (accession ==
"MS:1000484")
2945 else if (accession ==
"MS:1000078")
2949 else if (accession ==
"MS:1000082")
2953 else if (accession ==
"MS:1000083")
2957 else if (accession ==
"MS:1000291")
2961 else if (accession ==
"MS:1000443")
2966 else if (accession ==
"MS:1000014")
2968 instruments_[current_id_].getMassAnalyzers().back().setAccuracy(value.
toDouble());
2970 else if (accession ==
"MS:1000022")
2972 instruments_[current_id_].getMassAnalyzers().back().setTOFTotalPathLength(value.
toDouble());
2974 else if (accession ==
"MS:1000024")
2976 instruments_[current_id_].getMassAnalyzers().back().setFinalMSExponent(value.
toInt());
2978 else if (accession ==
"MS:1000025")
2980 instruments_[current_id_].getMassAnalyzers().back().setMagneticFieldStrength(value.
toDouble());
2982 else if (accession ==
"MS:1000105")
2984 instruments_[current_id_].getMassAnalyzers().back().setReflectronState(
MassAnalyzer::OFF);
2986 else if (accession ==
"MS:1000106")
2988 instruments_[current_id_].getMassAnalyzers().back().setReflectronState(
MassAnalyzer::ON);
2991 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2993 else if (parent_tag ==
"detector")
2996 if (accession ==
"MS:1000107")
3000 else if (accession ==
"MS:1000110")
3004 else if (accession ==
"MS:1000112")
3008 else if (accession ==
"MS:1000114")
3012 else if (accession ==
"MS:1000115")
3016 else if (accession ==
"MS:1000116")
3020 else if (accession ==
"MS:1000253")
3024 else if (accession ==
"MS:1000345")
3028 else if (accession ==
"MS:1000346")
3032 else if (accession ==
"MS:1000347")
3036 else if (accession ==
"MS:1000348")
3040 else if (accession ==
"MS:1000349")
3044 else if (accession ==
"MS:1000350")
3048 else if (accession ==
"MS:1000351")
3052 else if (accession ==
"MS:1000621")
3056 else if (accession ==
"MS:1000624")
3060 else if (accession ==
"MS:1000108")
3064 else if (accession ==
"MS:1000109")
3068 else if (accession ==
"MS:1000111")
3072 else if (accession ==
"MS:1000113")
3076 else if (accession ==
"MS:1000026")
3081 else if (accession ==
"MS:1000028")
3083 instruments_[current_id_].getIonDetectors().back().setResolution(value.
toDouble());
3085 else if (accession ==
"MS:1000029")
3087 instruments_[current_id_].getIonDetectors().back().setADCSamplingFrequency(value.
toDouble());
3090 else if (accession ==
"MS:1000117")
3092 instruments_[current_id_].getIonDetectors().back().setAcquisitionMode(
IonDetector::ADC);
3094 else if (accession ==
"MS:1000118")
3098 else if (accession ==
"MS:1000119")
3100 instruments_[current_id_].getIonDetectors().back().setAcquisitionMode(
IonDetector::TDC);
3102 else if (accession ==
"MS:1000120")
3107 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3109 else if (parent_tag ==
"processingMethod")
3112 if (accession ==
"MS:1000629")
3114 processing_[current_id_].back().setMetaValue(
"low_intensity_threshold", termValue);
3116 else if (accession ==
"MS:1000631")
3118 processing_[current_id_].back().setMetaValue(
"high_intensity_threshold", termValue);
3120 else if (accession ==
"MS:1000787")
3122 processing_[current_id_].back().setMetaValue(
"inclusive_low_intensity_threshold", termValue);
3124 else if (accession ==
"MS:1000788")
3126 processing_[current_id_].back().setMetaValue(
"inclusive_high_intensity_threshold", termValue);
3128 else if (accession ==
"MS:1000747")
3130 processing_[current_id_].back().setCompletionTime(asDateTime_(value));
3133 else if (accession ==
"MS:1000530")
3137 else if (accession ==
"MS:1000544")
3141 else if (accession ==
"MS:1000545")
3145 else if (accession ==
"MS:1000546")
3149 else if (accession ==
"MS:1000741")
3154 else if (accession ==
"MS:1000543")
3158 else if (accession ==
"MS:1000033")
3162 else if (accession ==
"MS:1000034")
3166 else if (accession ==
"MS:1000035" || cv_.isChildOf(accession,
"MS:1000035"))
3170 else if (accession ==
"MS:1000592" || cv_.isChildOf(accession,
"MS:1000592"))
3174 else if (accession ==
"MS:1000778" || cv_.isChildOf(accession,
"MS:1000778"))
3178 else if (accession ==
"MS:1000780" || cv_.isChildOf(accession,
"MS:1000780"))
3182 else if (accession ==
"MS:1000593")
3186 else if (accession ==
"MS:1000745")
3190 else if (accession ==
"MS:1001484")
3194 else if (accession ==
"MS:1001485")
3198 else if (accession ==
"MS:1001486" || cv_.isChildOf(accession,
"MS:1001486"))
3203 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3205 else if (parent_tag ==
"fileContent")
3207 if (cv_.isChildOf(accession,
"MS:1000524"))
3212 else if (cv_.isChildOf(accession,
"MS:1000525"))
3218 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3220 else if (parent_tag ==
"software")
3222 if (cv_.isChildOf(accession,
"MS:1000531"))
3224 if (accession ==
"MS:1000799")
3226 software_[current_id_].setName(value);
3230 software_[current_id_].setName(name);
3235 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3239 else if (parent_tag ==
"chromatogram")
3241 if (accession ==
"MS:1000810")
3245 else if (accession ==
"MS:1000235")
3249 else if (accession ==
"MS:1000627")
3253 else if (accession ==
"MS:1000628")
3257 else if (accession ==
"MS:1001472")
3261 else if (accession ==
"MS:1001473")
3265 else if (accession ==
"MS:1001474")
3269 else if (accession ==
"MS:1000811")
3273 else if (accession ==
"MS:1000812")
3277 else if (accession ==
"MS:1000813")
3281 else if (accession ==
"MS:1000809")
3283 chromatogram_.setName(value);
3286 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3288 else if (parent_tag ==
"target")
3293 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3296 template <
typename MapType>
3302 if (type ==
"xsd:double" || type ==
"xsd:float")
3307 else if (type ==
"xsd:byte" || type ==
"xsd:decimal" || type ==
"xsd:int" || type ==
"xsd:integer" || type ==
"xsd:long" || type ==
"xsd:negativeInteger" || type ==
"xsd:nonNegativeInteger" || type ==
"xsd:nonPositiveInteger" || type ==
"xsd:positiveInteger" || type ==
"xsd:short" || type ==
"xsd:unsignedByte" || type ==
"xsd:unsignedInt" || type ==
"xsd:unsignedLong" || type ==
"xsd:unsignedShort")
3318 if (parent_tag ==
"run")
3320 exp_->setMetaValue(name, data_value);
3322 else if (parent_tag ==
"instrumentConfiguration")
3324 instruments_[current_id_].setMetaValue(name, data_value);
3326 else if (parent_tag ==
"source")
3328 instruments_[current_id_].getIonSources().back().setMetaValue(name, data_value);
3330 else if (parent_tag ==
"analyzer")
3332 instruments_[current_id_].getMassAnalyzers().back().setMetaValue(name, data_value);
3334 else if (parent_tag ==
"detector")
3336 instruments_[current_id_].getIonDetectors().back().setMetaValue(name, data_value);
3338 else if (parent_tag ==
"sample")
3340 samples_[current_id_].setMetaValue(name, data_value);
3342 else if (parent_tag ==
"software")
3344 software_[current_id_].setMetaValue(name, data_value);
3346 else if (parent_tag ==
"contact")
3348 exp_->getContacts().back().setMetaValue(name, data_value);
3350 else if (parent_tag ==
"sourceFile")
3352 source_files_[current_id_].setMetaValue(name, data_value);
3354 else if (parent_tag ==
"binaryDataArray")
3356 data_.back().meta.setMetaValue(name, data_value);
3358 else if (parent_tag ==
"spectrum")
3360 spec_.setMetaValue(name, data_value);
3362 else if (parent_tag ==
"chromatogram")
3364 chromatogram_.setMetaValue(name, data_value);
3366 else if (parent_tag ==
"scanList")
3368 spec_.getAcquisitionInfo().setMetaValue(name, data_value);
3370 else if (parent_tag ==
"scan")
3372 spec_.getAcquisitionInfo().back().setMetaValue(name, data_value);
3374 else if (parent_tag ==
"scanWindow")
3376 spec_.getInstrumentSettings().getScanWindows().back().setMetaValue(name, data_value);
3378 else if (parent_tag ==
"isolationWindow")
3381 if (parent_parent_tag ==
"precursor")
3383 if (in_spectrum_list_)
3385 spec_.getPrecursors().back().setMetaValue(name, data_value);
3389 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3392 else if (parent_parent_tag ==
"product")
3394 if (in_spectrum_list_)
3396 spec_.getProducts().back().setMetaValue(name, data_value);
3400 chromatogram_.getProduct().setMetaValue(name, data_value);
3404 else if (parent_tag ==
"selectedIon")
3407 if (selected_ion_count_ > 1)
3411 if (in_spectrum_list_)
3413 spec_.getPrecursors().back().setMetaValue(name, data_value);
3417 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3420 else if (parent_tag ==
"activation")
3423 if (in_spectrum_list_)
3425 spec_.getPrecursors().back().setMetaValue(name, data_value);
3429 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3432 else if (parent_tag ==
"processingMethod")
3434 processing_[current_id_].back().setMetaValue(name, data_value);
3436 else if (parent_tag ==
"fileContent")
3441 warning(LOAD,
String(
"Unhandled userParam '") + name +
"' in tag '" + parent_tag +
"'.");
3444 template <
typename MapType>
3454 return validator.SemanticValidator::locateTerm(path, sc);
3457 template <
typename MapType>
3460 String cvTerm =
"<cvParam cvRef=\"" + c.
id.
prefix(
':') +
"\" accession=\"" + c.
id +
"\" name=\"" + c.
name;
3463 cvTerm +=
"\" value=\"" + writeXMLEscape(metaValue.
toString());
3468 cvTerm +=
"\" unitAccession=\"" + unit.
id +
"\" unitName=\"" + unit.
name +
"\" unitCvRef=\"" + unit.
id.
prefix(2);
3475 template <
typename MapType>
3478 std::vector<String> cvParams;
3479 std::vector<String> userParams;
3481 std::vector<String> keys;
3484 for (std::vector<String>::iterator key = keys.begin(); key != keys.end(); ++key)
3489 if (*key ==
"GO cellular component" || *key ==
"brenda source tissue")
3494 if (cv_.hasTermWithName((
String) metaValue))
3505 bool writtenAsCVTerm =
false;
3506 if (cv_.hasTermWithName(*key))
3509 if (validateCV_(c, path, validator))
3512 cvParams.push_back(writeCV_(c, meta.
getMetaValue(*key)));
3513 writtenAsCVTerm =
true;
3518 if (!writtenAsCVTerm)
3520 String userParam =
"<userParam name=\"" + *key +
"\" type=\"";
3526 userParam +=
"xsd:integer";
3530 userParam +=
"xsd:double";
3534 userParam +=
"xsd:string";
3536 userParam +=
"\" value=\"" + writeXMLEscape(d.
toString()) +
"\"/>" +
"\n";
3537 userParams.push_back(userParam);
3543 for (std::vector<String>::iterator term = cvParams.begin(); term != cvParams.end(); ++term)
3545 os <<
String(indent,
'\t') << *term;
3548 for (std::vector<String>::iterator term = userParams.begin(); term != userParams.end(); ++term)
3550 os <<
String(indent,
'\t') << *term;
3554 template <
typename MapType>
3557 std::set<String> terms;
3558 cv_.getAllChildTerms(terms, parent_accession);
3559 for (std::set<String>::const_iterator it = terms.begin(); it != terms.end(); ++it)
3561 if (cv_.getTerm(*it).name == name)
3563 return cv_.getTerm(*it);
3569 template <
typename MapType>
3572 os <<
"\t\t<software id=\"" <<
id <<
"\" version=\"" << software.
getVersion() <<
"\" >\n";
3574 if (so_term.
id ==
"")
3576 so_term = getChildWithName_(
"MS:1000531", software.
getName() +
" software");
3578 if (so_term.
id ==
"")
3580 so_term = getChildWithName_(
"MS:1000531",
"TOPP " + software.
getName());
3582 if (so_term.
id ==
"MS:1000799")
3584 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000799\" name=\"custom unreleased software tool\" value=\"\" />\n";
3586 else if (so_term.
id !=
"")
3588 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"" << so_term.
id <<
"\" name=\"" << writeXMLEscape(so_term.
name) <<
"\" />\n";
3592 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000799\" name=\"custom unreleased software tool\" value=\"" << writeXMLEscape(software.
getName()) <<
"\" />\n";
3594 writeUserParam_(os, software, 3,
"/mzML/Software/cvParam/@accession", validator);
3595 os <<
"\t\t</software>\n";
3598 template <
typename MapType>
3601 os <<
"\t\t\t<sourceFile id=\"" <<
id <<
"\" name=\"" << writeXMLEscape(source_file.
getNameOfFile()) <<
"\" location=\"" << writeXMLEscape(source_file.
getPathToFile()) <<
"\">\n";
3605 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000569\" name=\"SHA-1\" value=\"" << source_file.
getChecksum() <<
"\" />\n";
3609 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000568\" name=\"MD5\" value=\"" << source_file.
getChecksum() <<
"\" />\n";
3613 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000569\" name=\"SHA-1\" value=\"\" />\n";
3619 ft_term = getChildWithName_(
"MS:1000560", source_file.
getFileType().
chop(4) +
"format");
3621 if (ft_term.
id !=
"")
3623 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << ft_term.
id <<
"\" name=\"" << ft_term.
name <<
"\" />\n";
3627 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000564\" name=\"PSI mzData format\" />\n";
3631 if (id_term.
id !=
"")
3633 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << id_term.
id <<
"\" name=\"" << id_term.
name <<
"\" />\n";
3637 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000777\" name=\"spectrum identifier nativeID format\" />\n";
3639 writeUserParam_(os, source_file, 4,
"/mzML/fileDescription/sourceFileList/sourceFile/cvParam/@accession", validator);
3640 os <<
"\t\t\t</sourceFile>\n";
3643 template <
typename MapType>
3646 os <<
"\t\t<dataProcessing id=\"" <<
id <<
"\">\n";
3651 os <<
"\t\t\t<processingMethod order=\"0\" softwareRef=\"so_default\">\n";
3652 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000544\" name=\"Conversion to mzML\" />\n";
3653 os <<
"\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"fictional processing method used to fulfill format requirements\" />\n";
3654 os <<
"\t\t\t</processingMethod>\n";
3657 bool written =
false;
3658 for (
Size i = 0; i < dps.size(); ++i)
3661 os <<
"\t\t\t<processingMethod order=\"0\" softwareRef=\"so_" <<
id <<
"_pm_" << i <<
"\">\n";
3664 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000543\" name=\"data processing action\" />\n";
3669 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000034\" name=\"charge deconvolution\" />\n";
3674 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000033\" name=\"deisotoping\" />\n";
3679 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000592\" name=\"smoothing\" />\n";
3684 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000778\" name=\"charge state calculation\" />\n";
3689 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000780\" name=\"precursor recalculation\" />\n";
3694 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000593\" name=\"baseline reduction\" />\n";
3699 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000035\" name=\"peak picking\" />\n";
3704 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000745\" name=\"retention time alignment\" />\n";
3709 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001485\" name=\"m/z calibration\" />\n";
3714 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001484\" name=\"intensity normalization\" />\n";
3719 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001486\" name=\"data filtering\" />\n";
3725 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000530\" name=\"file format conversion\" />\n";
3730 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000546\" name=\"Conversion to mzData\" />\n";
3735 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000544\" name=\"Conversion to mzML\" />\n";
3740 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000545\" name=\"Conversion to mzXML\" />\n";
3745 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000741\" name=\"Conversion to dta\" />\n";
3750 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000543\" name=\"data processing action\" />\n";
3754 if (dps[i].getCompletionTime().isValid())
3756 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000747\" name=\"completion time\" value=\"" << dps[i].getCompletionTime().toString(
"yyyy-MM-dd+hh:mm").toStdString() <<
"\" />\n";
3759 writeUserParam_(os, dps[i], 4,
"/mzML/dataProcessingList/dataProcessing/processingMethod/cvParam/@accession", validator);
3760 os <<
"\t\t\t</processingMethod>\n";
3763 os <<
"\t\t</dataProcessing>\n";
3766 template <
typename MapType>
3769 os <<
"\t\t\t\t\t<precursor>\n";
3773 os <<
"\t\t\t\t\t\t<isolationWindow>\n";
3774 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000827\" name=\"isolation window target m/z\" value=\"" << precursor.
getMZ() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3775 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000828\" name=\"isolation window lower offset\" value=\"" << precursor.
getIsolationWindowLowerOffset() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3776 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000829\" name=\"isolation window upper offset\" value=\"" << precursor.
getIsolationWindowUpperOffset() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3777 os <<
"\t\t\t\t\t\t</isolationWindow>\n";
3783 os <<
"\t\t\t\t\t\t<selectedIonList count=\"1\">\n";
3784 os <<
"\t\t\t\t\t\t\t<selectedIon>\n";
3785 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000744\" name=\"selected ion m/z\" value=\"" << precursor.
getMZ() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3786 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000041\" name=\"charge state\" value=\"" << precursor.
getCharge() <<
"\" />\n";
3787 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000042\" name=\"peak intensity\" value=\"" << precursor.
getIntensity() <<
"\" unitAccession=\"MS:1000132\" unitName=\"percent of base peak\" unitCvRef=\"MS\" />\n";
3790 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000633\" name=\"possible charge state\" value=\"" << precursor.
getPossibleChargeStates()[j] <<
"\" />\n";
3793 os <<
"\t\t\t\t\t\t\t</selectedIon>\n";
3794 os <<
"\t\t\t\t\t\t</selectedIonList>\n";
3799 os <<
"\t\t\t\t\t\t<activation>\n";
3800 #pragma clang diagnostic push
3801 #pragma clang diagnostic ignored "-Wfloat-equal"
3803 #pragma clang diagnostic pop
3805 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000509\" name=\"activation energy\" value=\"" << precursor.
getActivationEnergy() <<
"\" unitAccession=\"UO:0000266\" unitName=\"electronvolt\" unitCvRef=\"UO\" />\n";
3809 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000133\" name=\"collision-induced dissociation\" />\n";
3813 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000134\" name=\"plasma desorption\" />\n";
3817 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000135\" name=\"post-source decay\" />\n";
3821 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000136\" name=\"surface-induced dissociation\" />\n";
3825 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000242\" name=\"blackbody infrared radiative dissociation\" />\n";
3829 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000250\" name=\"electron capture dissociation\" />\n";
3833 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000262\" name=\"infrared multiphoton dissociation\" />\n";
3837 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000282\" name=\"sustained off-resonance irradiation\" />\n";
3841 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000422\" name=\"high-energy collision-induced dissociation\" />\n";
3845 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000433\" name=\"low-energy collision-induced dissociation\" />\n";
3849 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000435\" name=\"photodissociation\" />\n";
3853 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000598\" name=\"electron transfer dissociation\" />\n";
3857 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000599\" name=\"pulsed q dissociation\" />\n";
3861 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000044\" name=\"dissociation method\" />\n";
3864 writeUserParam_(os, precursor, 6,
"/mzML/run/spectrumList/spectrum/precursorList/precursor/activation/cvParam/@accession", validator);
3865 os <<
"\t\t\t\t\t\t</activation>\n";
3866 os <<
"\t\t\t\t\t</precursor>\n";
3870 template <
typename MapType>
3873 os <<
"\t\t\t\t\t<product>\n";
3874 os <<
"\t\t\t\t\t\t<isolationWindow>\n";
3875 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000827\" name=\"isolation window target m/z\" value=\"" << product.
getMZ() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3876 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000828\" name=\"isolation window lower offset\" value=\"" << product.
getIsolationWindowLowerOffset() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3877 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000829\" name=\"isolation window upper offset\" value=\"" << product.
getIsolationWindowUpperOffset() <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
3878 writeUserParam_(os, product, 7,
"/mzML/run/spectrumList/spectrum/productList/product/isolationWindow/cvParam/@accession", validator);
3879 os <<
"\t\t\t\t\t\t</isolationWindow>\n";
3880 os <<
"\t\t\t\t\t</product>\n";
3883 template <
typename MapType>
3886 const MapType& exp = *(cexp_);
3887 logger_.startProgress(0, exp.size() + exp.getChromatograms().size(),
"storing mzML file");
3891 std::vector<std::vector<DataProcessing> > dps;
3895 writeHeader_(os, exp, dps, validator);
3900 if (exp.size() != 0)
3906 os <<
"\t\t<spectrumList count=\"" << exp.size() <<
"\" defaultDataProcessingRef=\"dp_sp_0\">\n";
3909 bool renew_native_ids =
false;
3910 for (
Size s = 0; s < exp.size(); ++s)
3912 if (!exp[s].getNativeID().has(
'='))
3914 renew_native_ids =
true;
3919 if (renew_native_ids)
3921 warning(STORE,
String(
"Invalid native IDs detected. Using spectrum identifier nativeID format (spectrum=xsd:nonNegativeInteger) for all spectra."));
3925 for (
Size s = 0; s < exp.size(); ++s)
3927 logger_.setProgress(progress++);
3929 writeSpectrum_(os, spec, s, validator, renew_native_ids, dps);
3931 os <<
"\t\t</spectrumList>\n";
3937 if (!exp.getChromatograms().empty())
3943 os <<
"\t\t<chromatogramList count=\"" << exp.getChromatograms().size() <<
"\" defaultDataProcessingRef=\"dp_sp_0\">\n";
3944 for (
Size c = 0;
c != exp.getChromatograms().size(); ++
c)
3946 logger_.setProgress(progress++);
3948 writeChromatogram_(os, chromatogram,
c, validator);
3950 os <<
"\t\t</chromatogramList>" <<
"\n";
3954 logger_.endProgress();
3957 template <
typename MapType>
3961 os <<
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
3963 if (options_.getWriteIndex())
3965 os <<
"<indexedmzML xmlns=\"http://psi.hupo.org/ms/mzml\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0_idx.xsd\">\n";
3967 os <<
"<mzML xmlns=\"http://psi.hupo.org/ms/mzml\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://psi.hupo.org/ms/mzml http://psidev.info/files/ms/mzML/xsd/mzML1.1.0.xsd\" accession=\"" << writeXMLEscape(exp.getIdentifier()) <<
"\" version=\"" << version_ <<
"\">\n";
3971 os <<
"\t<cvList count=\"5\">\n"
3972 <<
"\t\t<cv id=\"MS\" fullName=\"Proteomics Standards Initiative Mass Spectrometry Ontology\" URI=\"http://psidev.cvs.sourceforge.net/*checkout*/psidev/psi/psi-ms/mzML/controlledVocabulary/psi-ms.obo\"/>\n"
3973 <<
"\t\t<cv id=\"UO\" fullName=\"Unit Ontology\" URI=\"http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo\"/>\n"
3974 <<
"\t\t<cv id=\"BTO\" fullName=\"BrendaTissue545\" version=\"unknown\" URI=\"http://www.brenda-enzymes.info/ontology/tissue/tree/update/update_files/BrendaTissueOBO\"/>\n"
3975 <<
"\t\t<cv id=\"GO\" fullName=\"Gene Ontology - Slim Versions\" version=\"unknown\" URI=\"http://www.geneontology.org/GO_slims/goslim_goa.obo\"/>\n"
3976 <<
"\t\t<cv id=\"PATO\" fullName=\"Quality ontology\" version=\"unknown\" URI=\"http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/quality.obo\"/>\n"
3981 os <<
"\t<fileDescription>\n";
3982 os <<
"\t\t<fileContent>\n";
3984 for (
Size i = 0; i < exp.size(); ++i)
3986 ++file_content[exp[i].getInstrumentSettings().getScanMode()];
3990 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
3994 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000579\" name=\"MS1 spectrum\" />\n";
3998 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000580\" name=\"MSn spectrum\" />\n";
4002 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000582\" name=\"SIM spectrum\" />\n";
4006 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000583\" name=\"SRM spectrum\" />\n";
4010 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000581\" name=\"CRM spectrum\" />\n";
4014 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000341\" name=\"precursor ion spectrum\" />\n";
4018 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000325\" name=\"constant neutral gain spectrum\" />\n";
4022 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000326\" name=\"constant neutral loss spectrum\" />\n";
4026 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000804\" name=\"electromagnetic radiation spectrum\" />\n";
4030 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000805\" name=\"emission spectrum\" />\n";
4034 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000806\" name=\"absorption spectrum\" />\n";
4038 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"enhanced multiply charged spectrum\" />\n";
4042 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"time-delayed fragmentation spectrum\" />\n";
4046 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
4049 os <<
"\t\t</fileContent>\n";
4055 UInt sf_sp_count = 0;
4056 for (
Size i = 0; i < exp.size(); ++i)
4063 if (exp.getSourceFiles().size() > 0 || sf_sp_count > 0)
4065 os <<
"\t\t<sourceFileList count=\"" << exp.getSourceFiles().size() + sf_sp_count <<
"\">\n";
4068 for (
Size i = 0; i < exp.getSourceFiles().size(); ++i)
4070 writeSourceFile_(os,
String(
"sf_ru_") +
String(i), exp.getSourceFiles()[i], validator);
4074 if (sf_sp_count > 0)
4077 for (
Size i = 0; i < exp.size(); ++i)
4079 if (exp[i].getSourceFile() != sf_default)
4081 writeSourceFile_(os,
String(
"sf_sp_") + i, exp[i].getSourceFile(), validator);
4086 os <<
"\t\t</sourceFileList>\n";
4092 for (
Size i = 0; i < exp.getContacts().size(); ++i)
4095 os <<
"\t\t<contact>\n";
4096 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000586\" name=\"contact name\" value=\"" << writeXMLEscape(cp.
getLastName()) <<
", " << writeXMLEscape(cp.
getFirstName()) <<
"\" />\n";
4097 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000590\" name=\"contact affiliation\" value=\"" << writeXMLEscape(cp.
getInstitution()) <<
"\" />\n";
4101 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000587\" name=\"contact address\" value=\"" << writeXMLEscape(cp.
getAddress()) <<
"\" />\n";
4105 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000588\" name=\"contact URL\" value=\"" << writeXMLEscape(cp.
getURL()) <<
"\" />\n";
4109 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000589\" name=\"contact email\" value=\"" << writeXMLEscape(cp.
getEmail()) <<
"\" />\n";
4113 os <<
"\t\t\t<userParam name=\"contact_info\" type=\"xsd:string\" value=\"" << writeXMLEscape(cp.
getContactInfo()) <<
"\" />\n";
4115 writeUserParam_(os, cp, 3,
"/mzML/fileDescription/contact/cvParam/@accession", validator);
4116 os <<
"\t\t</contact>\n";
4118 os <<
"\t</fileDescription>\n";
4123 const Sample& sa = exp.getSample();
4124 os <<
"\t<sampleList count=\"1\">\n";
4125 os <<
"\t\t<sample id=\"sa_0\" name=\"" << writeXMLEscape(sa.
getName()) <<
"\">\n";
4128 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000001\" name=\"sample number\" value=\"" << writeXMLEscape(sa.
getNumber()) <<
"\" />\n";
4130 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000004\" name=\"sample mass\" value=\"" << sa.
getMass() <<
"\" unitAccession=\"UO:0000021\" unitName=\"gram\" unitCvRef=\"UO\" />\n";
4131 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000005\" name=\"sample volume\" value=\"" << sa.
getVolume() <<
"\" unitAccession=\"UO:0000098\" unitName=\"milliliter\" unitCvRef=\"UO\" />\n";
4132 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000006\" name=\"sample concentration\" value=\"" << sa.
getConcentration() <<
"\" unitAccession=\"UO:0000175\" unitName=\"gram per liter\" unitCvRef=\"UO\" />\n";
4135 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000047\" name=\"emulsion\" />\n";
4139 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000048\" name=\"gas\" />\n";
4143 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000049\" name=\"liquid\" />\n";
4147 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000050\" name=\"solid\" />\n";
4151 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000051\" name=\"solution\" />\n";
4155 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000052\" name=\"suspension\" />\n";
4159 os <<
"\t\t\t<userParam name=\"comment\" type=\"xsd:string\" value=\"" << writeXMLEscape(sa.
getComment()) <<
"\" />\n";
4161 writeUserParam_(os, sa, 3,
"/mzML/sampleList/sample/cvParam/@accession", validator);
4162 os <<
"\t\t</sample>\n";
4163 os <<
"\t</sampleList>\n";
4170 Size num_software(2);
4171 for (
Size s = 0; s < exp.size(); ++s)
4173 if (find(dps.begin(), dps.end(), exp[s].getDataProcessing()) == dps.end())
4175 dps.push_back(exp[s].getDataProcessing());
4176 num_software += exp[s].getDataProcessing().size();
4179 for (
Size s = 0; s < exp.getChromatograms().size(); ++s)
4181 if (find(dps.begin(), dps.end(), exp.getChromatograms()[s].getDataProcessing()) == dps.end())
4183 dps.push_back(exp.getChromatograms()[s].getDataProcessing());
4184 num_software += exp.getChromatograms()[s].getDataProcessing().size();
4189 Size num_bi_software(0);
4191 for (
Size s = 0; s < exp.size(); ++s)
4193 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4195 for (
Size i = 0; i < exp[s].getFloatDataArrays()[m].getDataProcessing().size(); ++i)
4202 os <<
"\t<softwareList count=\"" << num_software + num_bi_software <<
"\">\n";
4204 writeSoftware_(os,
"so_in_0", exp.getInstrument().getSoftware(), validator);
4207 writeSoftware_(os,
"so_default",
Software(), validator);
4210 for (
Size s1 = 0; s1 != dps.size(); ++s1)
4212 for (
Size s2 = 0; s2 != dps[s1].size(); ++s2)
4214 writeSoftware_(os,
String(
"so_dp_sp_") + s1 +
"_pm_" + s2, dps[s1][s2].getSoftware(), validator);
4219 for (
Size s = 0; s < exp.size(); ++s)
4221 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4223 for (
Size i = 0; i < exp[s].getFloatDataArrays()[m].getDataProcessing().size(); ++i)
4225 writeSoftware_(os,
String(
"so_dp_sp_") + s +
"_bi_" + m +
"_pm_" + i, exp[s].getFloatDataArrays()[m].getDataProcessing()[i].getSoftware(), validator);
4229 os <<
"\t</softwareList>\n";
4235 os <<
"\t<instrumentConfigurationList count=\"1\">\n";
4236 os <<
"\t\t<instrumentConfiguration id=\"ic_0\">\n";
4238 if (in_term.
id !=
"")
4240 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"" << in_term.
id <<
"\" name=\"" << writeXMLEscape(in_term.
name) <<
"\" />\n";
4244 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000031\" name=\"instrument model\" />\n";
4249 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000032\" name=\"customization\" value=\"" << writeXMLEscape(in.
getCustomizations()) <<
"\" />\n";
4255 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000221\" name=\"magnetic deflection\" />\n";
4259 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000246\" name=\"delayed extraction\" />\n";
4263 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000275\" name=\"collision quadrupole\" />\n";
4267 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000281\" name=\"selected ion flow tube\" />\n";
4271 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000286\" name=\"time lag focusing\" />\n";
4275 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000300\" name=\"reflectron\" />\n";
4279 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000307\" name=\"einzel lens\" />\n";
4283 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000309\" name=\"first stability region\" />\n";
4287 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000310\" name=\"fringing field\" />\n";
4291 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000311\" name=\"kinetic energy analyzer\" />\n";
4295 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000320\" name=\"static field\" />\n";
4298 writeUserParam_(os, in, 3,
"/mzML/instrumentConfigurationList/instrumentConfiguration/cvParam/@accession", validator);
4300 if (component_count != 0)
4302 os <<
"\t\t\t<componentList count=\"" << (std::max)((
Size)3, component_count) <<
"\">\n";
4309 os <<
"\t\t\t\t<source order=\"" << so.
getOrder() <<
"\">\n";
4313 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000055\" name=\"continuous flow fast atom bombardment\" />\n";
4317 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000056\" name=\"direct inlet\" />\n";
4321 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000057\" name=\"electrospray inlet\" />\n";
4325 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000058\" name=\"flow injection analysis\" />\n";
4329 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000059\" name=\"inductively coupled plasma\" />\n";
4333 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000060\" name=\"infusion\" />\n";
4337 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000061\" name=\"jet separator\" />\n";
4341 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000062\" name=\"membrane separator\" />\n";
4345 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000063\" name=\"moving belt\" />\n";
4349 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000064\" name=\"moving wire\" />\n";
4353 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000065\" name=\"open split\" />\n";
4357 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000066\" name=\"particle beam\" />\n";
4361 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000067\" name=\"reservoir\" />\n";
4365 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000068\" name=\"septum\" />\n";
4369 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000069\" name=\"thermospray inlet\" />\n";
4373 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000248\" name=\"direct insertion probe\" />\n";
4377 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000249\" name=\"direct liquid introduction\" />\n";
4381 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000396\" name=\"membrane inlet\" />\n";
4385 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000485\" name=\"nanospray inlet\" />\n";
4390 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000070\" name=\"atmospheric pressure chemical ionization\" />\n";
4394 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000071\" name=\"chemical ionization\" />\n";
4398 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000073\" name=\"electrospray ionization\" />\n";
4402 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000074\" name=\"fast atom bombardment ionization\" />\n";
4406 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000075\" name=\"matrix-assisted laser desorption ionization\" />\n";
4410 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000227\" name=\"multiphoton ionization\" />\n";
4414 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000239\" name=\"atmospheric pressure matrix-assisted laser desorption ionization\" />\n";
4418 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000240\" name=\"atmospheric pressure ionization\" />\n";
4422 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000247\" name=\"desorption ionization\" />\n";
4426 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000255\" name=\"flowing afterglow\" />\n";
4430 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000257\" name=\"field desorption\" />\n";
4434 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000258\" name=\"field ionization\" />\n";
4438 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000259\" name=\"glow discharge ionization\" />\n";
4442 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000271\" name=\"Negative ion chemical ionization\" />\n";
4446 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000272\" name=\"neutralization reionization mass spectrometry\" />\n";
4450 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000273\" name=\"photoionization\" />\n";
4454 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000274\" name=\"pyrolysis mass spectrometry\" />\n";
4458 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000276\" name=\"resonance enhanced multiphoton ionization\" />\n";
4462 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000278\" name=\"surface enhanced laser desorption ionization\" />\n";
4466 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000279\" name=\"surface enhanced neat desorption\" />\n";
4470 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000380\" name=\"adiabatic ionization\" />\n";
4474 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000381\" name=\"associative ionization\" />\n";
4478 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000382\" name=\"atmospheric pressure photoionization\" />\n";
4482 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000383\" name=\"autodetachment\" />\n";
4486 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000384\" name=\"autoionization\" />\n";
4490 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000385\" name=\"charge exchange ionization\" />\n";
4494 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000386\" name=\"chemi-ionization\" />\n";
4498 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000387\" name=\"desorption/ionization on silicon\" />\n";
4502 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000388\" name=\"dissociative ionization\" />\n";
4506 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000389\" name=\"electron ionization\" />\n";
4510 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000393\" name=\"laser desorption ionization\" />\n";
4514 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000395\" name=\"liquid secondary ionization\" />\n";
4518 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000397\" name=\"microelectrospray\" />\n";
4522 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000398\" name=\"nanoelectrospray\" />\n";
4526 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000399\" name=\"penning ionization\" />\n";
4530 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000400\" name=\"plasma desorption ionization\" />\n";
4534 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000402\" name=\"secondary ionization\" />\n";
4538 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000403\" name=\"soft ionization\" />\n";
4542 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000404\" name=\"spark ionization\" />\n";
4546 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000405\" name=\"surface-assisted laser desorption ionization\" />\n";
4550 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000406\" name=\"surface ionization\" />\n";
4554 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000407\" name=\"thermal ionization\" />\n";
4558 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000408\" name=\"vertical ionization\" />\n";
4562 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000446\" name=\"fast ion bombardment\" />\n";
4566 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000008\" name=\"ionization type\" />\n";
4569 writeUserParam_(os, so, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/source/cvParam/@accession", validator);
4570 os <<
"\t\t\t\t</source>\n";
4575 os <<
"\t\t\t\t<source order=\"1234\">\n";
4576 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000446\" name=\"fast ion bombardment\" />\n";
4577 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented ion source, to fulfill mzML schema\" />\n";
4578 os <<
"\t\t\t\t</source>\n";
4586 os <<
"\t\t\t\t<analyzer order=\"" << ma.
getOrder() <<
"\">\n";
4588 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000014\" name=\"accuracy\" value=\"" << ma.
getAccuracy() <<
"\" unitAccession=\"UO:0000169\" unitName=\"parts per million\" unitCvRef=\"UO\" />\n";
4590 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000022\" name=\"TOF Total Path Length\" value=\"" << ma.
getTOFTotalPathLength() <<
"\" unitAccession=\"UO:0000008\" unitName=\"meter\" unitCvRef=\"UO\" />\n";
4591 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000024\" name=\"final MS exponent\" value=\"" << ma.
getFinalMSExponent() <<
"\" />\n";
4592 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000025\" name=\"magnetic field strength\" value=\"" << ma.
getMagneticFieldStrength() <<
"\" unitAccession=\"UO:0000228\" unitName=\"tesla\" unitCvRef=\"UO\" />\n";
4596 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000106\" name=\"reflectron on\" />\n";
4601 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000105\" name=\"reflectron off\" />\n";
4606 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000079\" name=\"fourier transform ion cyclotron resonance mass spectrometer\" />\n";
4610 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000080\" name=\"magnetic sector\" />\n";
4614 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000081\" name=\"quadrupole\" />\n";
4618 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000084\" name=\"time-of-flight\" />\n";
4622 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000254\" name=\"electrostatic energy analyzer\" />\n";
4626 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000264\" name=\"ion trap\" />\n";
4630 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000284\" name=\"stored waveform inverse fourier transform\" />\n";
4634 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000288\" name=\"cyclotron\" />\n";
4638 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000484\" name=\"orbitrap\" />\n";
4642 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000078\" name=\"axial ejection linear ion trap\" />\n";
4646 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000082\" name=\"quadrupole ion trap\" />\n";
4650 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000083\" name=\"radial ejection linear ion trap\" />\n";
4654 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000291\" name=\"linear ion trap\" />\n";
4658 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000443\" name=\"mass analyzer type\" />\n";
4661 writeUserParam_(os, ma, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/analyzer/cvParam/@accession", validator);
4662 os <<
"\t\t\t\t</analyzer>\n";
4667 os <<
"\t\t\t\t<analyzer order=\"1234\">\n";
4668 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000288\" name=\"cyclotron\" />\n";
4669 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented mass analyzer, to fulfill mzML schema\" />\n";
4670 os <<
"\t\t\t\t</analyzer>\n";
4678 os <<
"\t\t\t\t<detector order=\"" <<
id.getOrder() <<
"\">\n";
4680 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000028\" name=\"detector resolution\" value=\"" <<
id.getResolution() <<
"\" />\n";
4681 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000029\" name=\"sampling frequency\" value=\"" <<
id.getADCSamplingFrequency() <<
"\" unitAccession=\"UO:0000106\" unitName=\"hertz\" unitCvRef=\"UO\" />\n";
4685 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000117\" name=\"analog-digital converter\" />\n";
4689 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000118\" name=\"pulse counting\" />\n";
4693 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000119\" name=\"time-digital converter\" />\n";
4697 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000120\" name=\"transient recorder\" />\n";
4702 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000107\" name=\"channeltron\" />\n";
4706 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000110\" name=\"daly detector\" />\n";
4710 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000112\" name=\"faraday cup\" />\n";
4714 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000114\" name=\"microchannel plate detector\" />\n";
4718 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000115\" name=\"multi-collector\" />\n";
4722 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000116\" name=\"photomultiplier\" />\n";
4726 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000253\" name=\"electron multiplier\" />\n";
4730 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000345\" name=\"array detector\" />\n";
4734 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000346\" name=\"conversion dynode\" />\n";
4738 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000347\" name=\"dynode\" />\n";
4742 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000348\" name=\"focal plane collector\" />\n";
4746 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000349\" name=\"ion-to-photon detector\" />\n";
4750 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000350\" name=\"point collector\" />\n";
4754 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000351\" name=\"postacceleration detector\" />\n";
4758 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000621\" name=\"photodiode array detector\" />\n";
4762 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000624\" name=\"inductive detector\" />\n";
4766 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000108\" name=\"conversion dynode electron multiplier\" />\n";
4770 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000109\" name=\"conversion dynode photomultiplier\" />\n";
4774 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000111\" name=\"electron multiplier tube\" />\n";
4778 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000113\" name=\"focal plane array\" />\n";
4782 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000026\" name=\"detector type\" />\n";
4785 writeUserParam_(os,
id, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/detector/cvParam/@accession", validator);
4786 os <<
"\t\t\t\t</detector>\n";
4791 os <<
"\t\t\t\t<detector order=\"1234\">\n";
4792 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000107\" name=\"channeltron\" />\n";
4793 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented ion detector, to fulfill mzML schema\" />\n";
4794 os <<
"\t\t\t\t</detector>\n";
4796 os <<
"\t\t\t</componentList>\n";
4798 os <<
"\t\t\t<softwareRef ref=\"so_in_0\" />\n";
4799 os <<
"\t\t</instrumentConfiguration>\n";
4800 os <<
"\t</instrumentConfigurationList>\n";
4808 for (
Size s = 0; s < exp.size(); ++s)
4810 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4816 os <<
"\t<dataProcessingList count=\"" << (std::max)((
Size)1, dps.size() + num_bi_dps) <<
"\">\n";
4820 std::vector<DataProcessing> dummy;
4821 writeDataProcessing_(os,
"dp_sp_0", dummy, validator);
4824 for (
Size s = 0; s < dps.size(); ++s)
4826 writeDataProcessing_(os,
String(
"dp_sp_") + s, dps[s], validator);
4830 for (
Size s = 0; s < exp.size(); ++s)
4832 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4834 writeDataProcessing_(os,
String(
"dp_sp_") + s +
"_bi_" + m, exp[s].getFloatDataArrays()[m].getDataProcessing(), validator);
4838 os <<
"\t</dataProcessingList>\n";
4846 os <<
"\t<run id=\"ru_0\" defaultInstrumentConfigurationRef=\"ic_0\" sampleRef=\"sa_0\"";
4847 if (exp.getDateTime().isValid())
4849 os <<
" startTimeStamp=\"" << exp.getDateTime().get().substitute(
' ',
'T') <<
"\"";
4851 if (exp.getSourceFiles().size() > 0)
4853 os <<
" defaultSourceFileRef=\"sf_ru_0\"";
4858 if (exp.getFractionIdentifier() !=
"")
4860 os <<
"\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000858\" name=\"fraction identifier\" value=\"" << exp.getFractionIdentifier() <<
"\" />\n";
4863 writeUserParam_(os, exp, 2,
"/mzML/run/cvParam/@accession", validator);
4867 template <
typename MapType>
4871 std::vector<std::vector<DataProcessing> >& dps)
4875 if (renew_native_ids)
4877 native_id =
String(
"spectrum=") + s;
4880 long offset = os.tellp();
4881 spectra_offsets.push_back(make_pair(native_id, offset + 3));
4884 os <<
"\t\t\t<spectrum id=\"" << writeXMLEscape(native_id) <<
"\" index=\"" << s <<
"\" defaultArrayLength=\"" << spec.size() <<
"\"";
4887 os <<
" sourceFileRef=\"sf_sp_" << s <<
"\"";
4893 Size dp_ref_num = s;
4896 for (
Size i = 0; i < dps.size(); ++i)
4905 os <<
" dataProcessingRef=\"dp_sp_" << dp_ref_num <<
"\"";
4912 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000127\" name=\"centroid spectrum\" />\n";
4916 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000128\" name=\"profile spectrum\" />\n";
4920 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000525\" name=\"spectrum representation\" />\n";
4926 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000511\" name=\"ms level\" value=\"" << spec.
getMSLevel() <<
"\" />\n";
4930 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000497\" name=\"zoom scan\" />\n";
4936 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
4940 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000579\" name=\"MS1 spectrum\" />\n";
4944 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000580\" name=\"MSn spectrum\" />\n";
4948 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000582\" name=\"SIM spectrum\" />\n";
4952 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000583\" name=\"SRM spectrum\" />\n";
4956 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000581\" name=\"CRM spectrum\" />\n";
4960 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000341\" name=\"precursor ion spectrum\" />\n";
4964 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000325\" name=\"constant neutral gain spectrum\" />\n";
4968 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000326\" name=\"constant neutral loss spectrum\" />\n";
4972 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000804\" name=\"electromagnetic radiation spectrum\" />\n";
4976 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000805\" name=\"emission spectrum\" />\n";
4980 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000806\" name=\"absorption spectrum\" />\n";
4984 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"enhanced multiply charged spectrum\" />\n";
4988 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"time-delayed fragmentation spectrum\" />\n";
4992 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
4998 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000129\" name=\"negative scan\" />\n";
5002 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000130\" name=\"positive scan\" />\n";
5005 writeUserParam_(os, spec, 4,
"/mzML/run/spectrumList/spectrum/cvParam/@accession", validator);
5011 if (ai_term.id !=
"")
5013 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << ai_term.
id <<
"\" name=\"" << ai_term.name <<
"\" />\n";
5017 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000795\" name=\"no combination\" />\n";
5019 writeUserParam_(os, spec.
getAcquisitionInfo(), 5,
"/mzML/run/spectrumList/spectrum/scanList/cvParam/@accession", validator);
5027 os <<
"\t\t\t\t\t<scan ";
5029 os <<
"externalSpectrumID=\"" << ac.
getIdentifier() <<
"\"";
5033 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000016\" name=\"scan start time\" value=\"" << spec.
getRT() <<
"\" unitAccession=\"UO:0000010\" unitName=\"second\" unitCvRef=\"UO\" />\n";
5035 writeUserParam_(os, ac, 6,
"/mzML/run/spectrumList/spectrum/scanList/scan/cvParam/@accession", validator);
5042 os <<
"\t\t\t\t\t\t\t<scanWindow>\n";
5043 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000501\" name=\"scan window lower limit\" value=\"" << spec.
getInstrumentSettings().
getScanWindows()[
k].begin <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
5044 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000500\" name=\"scan window upper limit\" value=\"" << spec.
getInstrumentSettings().
getScanWindows()[
k].end <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
5045 writeUserParam_(os, spec.
getInstrumentSettings().
getScanWindows()[
k], 8,
"/mzML/run/spectrumList/spectrum/scanList/scan/scanWindowList/scanWindow/cvParam/@accession", validator);
5046 os <<
"\t\t\t\t\t\t\t</scanWindow>\n";
5048 os <<
"\t\t\t\t\t\t</scanWindowList>\n";
5050 os <<
"\t\t\t\t\t</scan>\n";
5055 os <<
"\t\t\t\t\t<scan>\n";
5056 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000016\" name=\"scan start time\" value=\"" << spec.
getRT() <<
"\" unitAccession=\"UO:0000010\" unitName=\"second\" unitCvRef=\"UO\" />\n";
5063 os <<
"\t\t\t\t\t\t\t<scanWindow>\n";
5064 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000501\" name=\"scan window lower limit\" value=\"" << spec.
getInstrumentSettings().
getScanWindows()[j].begin <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
5065 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000500\" name=\"scan window upper limit\" value=\"" << spec.
getInstrumentSettings().
getScanWindows()[j].end <<
"\" unitAccession=\"MS:1000040\" unitName=\"m/z\" unitCvRef=\"MS\" />\n";
5066 writeUserParam_(os, spec.
getInstrumentSettings().
getScanWindows()[j], 8,
"/mzML/run/spectrumList/spectrum/scanList/scan/scanWindowList/scanWindow/cvParam/@accession", validator);
5067 os <<
"\t\t\t\t\t\t\t</scanWindow>\n";
5069 os <<
"\t\t\t\t\t\t</scanWindowList>\n";
5071 os <<
"\t\t\t\t\t</scan>\n";
5073 os <<
"\t\t\t\t</scanList>\n";
5080 os <<
"\t\t\t<precursorList count=\"" << spec.
getPrecursors().size() <<
"\">\n";
5085 os <<
"\t\t\t</precursorList>\n";
5093 os <<
"\t\t\t\t<productList count=\"" << spec.
getProducts().size() <<
"\">\n";
5096 writeProduct_(os, spec.
getProducts()[p], validator);
5098 os <<
"\t\t\t\t</productList>\n";
5104 if (spec.size() != 0)
5109 writeContainerData<SpectrumType>(os, options_, spec,
"mz");
5110 writeContainerData<SpectrumType>(os, options_, spec,
"intensity");
5114 for (
Size m = 0; m < spec.getFloatDataArrays().size(); ++m)
5116 const typename SpectrumType::FloatDataArray& array = spec.getFloatDataArrays()[m];
5117 std::vector<double> data64_to_encode(array.size());
5118 for (
Size p = 0; p < array.size(); ++p)
5119 data64_to_encode[p] = array[p];
5122 String data_processing_ref_string =
"";
5123 if (array.getDataProcessing().size() != 0)
5125 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
5127 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5128 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
5129 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5131 if (bi_term.
id !=
"")
5133 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5137 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5139 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5140 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5141 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5144 for (
Size m = 0; m < spec.getIntegerDataArrays().size(); ++m)
5146 const typename SpectrumType::IntegerDataArray& array = spec.getIntegerDataArrays()[m];
5147 std::vector<Int64> data64_to_encode(array.size());
5148 for (
Size p = 0; p < array.size(); ++p)
5149 data64_to_encode[p] = array[p];
5151 String data_processing_ref_string =
"";
5152 if (array.getDataProcessing().size() != 0)
5154 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
5156 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5157 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000522\" name=\"64-bit integer\" />\n";
5158 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5160 if (bi_term.
id !=
"")
5162 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5166 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5168 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5169 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5170 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5173 for (
Size m = 0; m < spec.getStringDataArrays().size(); ++m)
5175 const typename SpectrumType::StringDataArray& array = spec.getStringDataArrays()[m];
5176 std::vector<String> data_to_encode;
5177 data_to_encode.resize(array.size());
5178 for (
Size p = 0; p < array.size(); ++p)
5179 data_to_encode[p] = array[p];
5180 decoder_.encodeStrings(data_to_encode, encoded_string, options_.getCompression());
5181 String data_processing_ref_string =
"";
5182 if (array.getDataProcessing().size() != 0)
5184 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
5186 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5187 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001479\" name=\"null-terminated ASCII string\" />\n";
5188 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5189 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5190 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5191 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5192 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5194 os <<
"\t\t\t\t</binaryDataArrayList>\n";
5197 os <<
"\t\t\t</spectrum>\n";
5200 template <
typename MapType>
5204 long offset = os.tellp();
5205 chromatograms_offsets.push_back(make_pair(chromatogram.
getNativeID(), offset + 6));
5209 os <<
" <chromatogram id=\"" << writeXMLEscape(chromatogram.
getNativeID()) <<
"\" index=\"" << c <<
"\" defaultArrayLength=\"" << chromatogram.size() <<
"\">" <<
"\n";
5214 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000810\" name=\"mass chromatogram\" />\n";
5218 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000235\" name=\"total ion current chromatogram\" />\n";
5222 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000627\" name=\"selected ion current chromatogram\" />\n";
5226 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000628\" name=\"basepeak chromatogram\" />\n";
5230 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001472\" name=\"selected ion monitoring chromatogram\" />\n";
5234 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001473\" name=\"selected reaction monitoring chromatogram\" />\n";
5238 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000811\" name=\"electromagnetic radiation chromatogram\" />\n";
5242 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000812\" name=\"absorption chromatogram\" />\n";
5246 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000813\" name=\"emission chromatogram\" />\n";
5252 writePrecursor_(os, chromatogram.
getPrecursor(), validator);
5253 writeProduct_(os, chromatogram.
getProduct(), validator);
5262 writeContainerData<ChromatogramType>(os, options_, chromatogram,
"time");
5263 writeContainerData<ChromatogramType>(os, options_, chromatogram,
"intensity");
5267 for (
Size m = 0; m < chromatogram.getFloatDataArrays().size(); ++m)
5269 const typename ChromatogramType::FloatDataArray& array = chromatogram.getFloatDataArrays()[m];
5270 std::vector<double> data64_to_encode(array.size());
5271 for (
Size p = 0; p < array.size(); ++p)
5272 data64_to_encode[p] = array[p];
5275 String data_processing_ref_string =
"";
5276 if (array.getDataProcessing().size() != 0)
5278 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5280 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5281 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
5282 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5284 if (bi_term.
id !=
"")
5286 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5290 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5292 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5293 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5294 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5297 for (
Size m = 0; m < chromatogram.getIntegerDataArrays().size(); ++m)
5299 const typename ChromatogramType::IntegerDataArray& array = chromatogram.getIntegerDataArrays()[m];
5300 std::vector<Int64> data64_to_encode(array.size());
5301 for (
Size p = 0; p < array.size(); ++p)
5302 data64_to_encode[p] = array[p];
5304 String data_processing_ref_string =
"";
5305 if (array.getDataProcessing().size() != 0)
5307 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5309 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5310 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000522\" name=\"64-bit integer\" />\n";
5311 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5313 if (bi_term.
id !=
"")
5315 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5319 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5321 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5322 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5323 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5326 for (
Size m = 0; m < chromatogram.getStringDataArrays().size(); ++m)
5328 const typename ChromatogramType::StringDataArray& array = chromatogram.getStringDataArrays()[m];
5329 std::vector<String> data_to_encode;
5330 data_to_encode.resize(array.size());
5331 for (
Size p = 0; p < array.size(); ++p)
5332 data_to_encode[p] = array[p];
5333 decoder_.encodeStrings(data_to_encode, encoded_string, options_.getCompression());
5334 String data_processing_ref_string =
"";
5335 if (array.getDataProcessing().size() != 0)
5337 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5339 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5340 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001479\" name=\"null-terminated ASCII string\" />\n";
5341 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5342 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5343 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5344 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5345 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5347 os <<
"\t\t\t\t</binaryDataArrayList>\n";
5348 os <<
"\t\t\t</chromatogram>" <<
"\n";
Definition: MzMLHandlerHelper.h:64
const String & getPathToFile() const
returns the file path
Deisotoping.
Definition: DataProcessing.h:62
String chop(Size n) const
Returns a substring where n characters were removed from the end of the string.
Continuous flow fast atom bombardment.
Definition: IonSource.h:70
const String & getNativeID() const
returns the native identifier for the spectrum, used by the acquisition software. ...
Description of the applied preprocessing steps.
Definition: DataProcessing.h:51
const String & getCustomizations() const
returns a description of customizations
ChecksumType getChecksumType() const
returns the checksum type
Plasma desorption.
Definition: Precursor.h:68
Class to encode and decode data encoded with MSNumpress.
Definition: MSNumpressCoder.h:53
NumpressCompression np_compression
check error tolerance after encoding, guarantee abs(1.0-(encoded/decoded)) <= this, 0=do not guarantee anything
Definition: MSNumpressCoder.h:69
Definition: ControlledVocabulary.h:67
atmospheric pressure photo ionization
Definition: IonSource.h:100
time lag focusing
Definition: Instrument.h:78
static const VersionDetails EMPTY
Definition: VersionInfo.h:93
PeakFileOptions options_
Options that can be set for loading/storing.
Definition: MzMLHandler.h:857
Description of a MS instrument.
Definition: Instrument.h:64
bool hasUnit() const
Check if the value has a unit.
Definition: DataValue.h:370
Fourier transform ion cyclotron resonance mass spectrometer.
Definition: MassAnalyzer.h:62
bool hasMZRange() const
returns true if an MZ range has been set
Off.
Definition: MassAnalyzer.h:130
void populateSpectraWithData()
Populate all spectra on the stack with data from input.
Definition: MzMLHandler.h:320
double getIsolationWindowLowerOffset() const
Returns the lower offset from the target m/z.
const String & getNameOfFile() const
returns the file name
bool getSortChromatogramsByRT() const
gets whether or not peaks in chromatograms should be sorted
desorption ionization
Definition: IonSource.h:109
Photo multiplier.
Definition: IonDetector.h:56
static String getXRefTypeName(XRefType type)
autoionization
Definition: IonSource.h:121
Fast ion bombardment.
Definition: IonSource.h:106
String accession
Definition: SemanticValidator.h:75
Representation of a CV term.
Definition: ControlledVocabulary.h:60
std::vector< SpectrumData > spectrum_data_
Vector of spectrum data stored for later parallel processing.
Definition: MzMLHandler.h:904
String writeCV_(const ControlledVocabulary::CVTerm &c, const DataValue &metaValue) const
Helper method to write an CV based on a meta value.
Definition: MzMLHandler.h:3458
dynode
Definition: IonDetector.h:68
A more convenient string class.
Definition: String.h:57
Particle beam.
Definition: IonSource.h:58
Precursor meta information.
Definition: Precursor.h:56
Class to encode and decode Base64.
Definition: Base64.h:64
Electro spray.
Definition: IonSource.h:67
const String & getNumber() const
returns the sample number (default: "")
Exception that is thrown if the parsing is ended by some event (e.g. if only a prefix of the XML file...
Definition: XMLHandler.h:104
void warning(const xercesc::SAXParseException &exception)
const std::vector< IonSource > & getIonSources() const
returns a const reference to the ion source list
bool getAlwaysAppendData() const
returns whether or not to always append the data to the given map (even if a consumer is given) ...
ControlledVocabulary cv_
Controlled vocabulary (psi-ms from OpenMS/share/OpenMS/CV/psi-ms.obo)
Definition: MzMLHandler.h:951
penning ionization
Definition: IonSource.h:126
atmospheric pressure matrix-assisted laser desorption ionization
Definition: IonSource.h:131
bool encloses(const PositionType &position) const
Checks whether this range contains a certain point.
Definition: DRange.h:172
UInt getMSLevel() const
Returns the MS level.
Definition: MSSpectrum.h:259
InletType getInletType() const
returns the inlet type
Multiphoton ionization.
Definition: IonSource.h:108
String version_
Schema version.
Definition: XMLHandler.h:190
Determination of the peak charge.
Definition: DataProcessing.h:64
bool hasIntensityRange() const
returns true if an intensity range has been set
Septum.
Definition: IonSource.h:62
IntensityType getIntensity() const
Definition: Peak1D.h:109
Product meta information.
Definition: Product.h:49
void set(UInt month, UInt day, UInt year, UInt hour, UInt minute, UInt second)
sets data from six integers
Peak data (also called centroided data or stick data)
Definition: SpectrumSettings.h:74
Electrostatic energy analyzer.
Definition: MassAnalyzer.h:64
flowing afterglow
Definition: IonSource.h:110
Micro electrospray ionization.
Definition: IonSource.h:103
bool has(const Key &key) const
Test whether the map contains the given key.
Definition: Map.h:109
Moving wire.
Definition: IonSource.h:65
Recalculation of precursor m/z.
Definition: DataProcessing.h:65
Definition: ChromatogramSettings.h:70
Conversion dynode electron multiplier.
Definition: IonDetector.h:59
Definition: ChromatogramSettings.h:69
double getMass() const
returns the mass (in gram) (default: 0.0)
String id
Identifier.
Definition: ControlledVocabulary.h:81
Transient recorder.
Definition: IonDetector.h:88
bool rt_set_
Definition: MzMLHandler.h:948
void writeDataProcessing_(std::ostream &os, const String &id, const std::vector< DataProcessing > &dps, Internal::MzMLValidator &validator)
Helper method that writes a data processing list.
Definition: MzMLHandler.h:3644
Time-digital converter.
Definition: IonDetector.h:87
const DRange< 1 > & getIntensityRange() const
returns the intensity range
High-energy collision-induced dissociation.
Definition: Precursor.h:74
Data filtering or extraction.
Definition: DataProcessing.h:71
const String & getNativeIDType() const
Returns the native ID type of the spectra.
General data processing (if no other term applies)
Definition: DataProcessing.h:60
bool hasSuffix(const String &string) const
true if String ends with string, false otherwise
static const DataValue EMPTY
Empty data value for comparisons.
Definition: DataValue.h:63
Data necessary to generate a single spectrum.
Definition: MzMLHandler.h:895
Conversion to DTA format.
Definition: DataProcessing.h:79
Semantically validates MzXML files.
Definition: MzMLValidator.h:52
channeltron
Definition: IonDetector.h:63
Negative polarity.
Definition: IonSource.h:144
integer value
Definition: DataValue.h:69
virtual void startElement(const XMLCh *const , const XMLCh *const , const XMLCh *const qname, const xercesc::Attributes &attributes)
Parsing method for opening tags.
Definition: MzMLHandler.h:1034
const std::vector< MassAnalyzer > & getMassAnalyzers() const
returns a const reference to the mass analyzer list
String toString() const
Conversion to String.
SpectrumType spec_
The current spectrum.
Definition: MzMLHandler.h:862
Conversion to mzXML format.
Definition: DataProcessing.h:78
const AcquisitionInfo & getAcquisitionInfo() const
returns a const reference to the acquisition info
Enhanced multiply charged scan.
Definition: InstrumentSettings.h:65
CoordinateType getMZ() const
Non-mutable access to m/z.
Definition: Peak1D.h:114
microchannel plate detector
Definition: IonDetector.h:65
electron multiplier tube
Definition: IonDetector.h:75
fast atom bombardment
Definition: IonSource.h:86
bool hasRTRange() const
returns true if an RT range has been set
Focal plane array.
Definition: IonDetector.h:57
IonizationMethod getIonizationMethod() const
returns the ionization method
Positive polarity.
Definition: IonSource.h:143
surface-assisted laser desorption ionization
Definition: IonSource.h:133
std::vector< BinaryData > data
Definition: MzMLHandler.h:915
AnalyzerType getType() const
returns the analyzer type
IonOpticsType getIonOptics() const
returns the ion optics type
const StringDataArrays & getStringDataArrays() const
Returns a const reference to the string meta data arrays.
Definition: MSChromatogram.h:262
Membrane inlet.
Definition: IonSource.h:72
Int getCharge() const
Non-mutable access to the charge.
Base class for XML handlers.
Definition: XMLHandler.h:99
void populateSpectraWithData_(std::vector< MzMLHandlerHelper::BinaryData > &input_data, Size &default_arr_length, const PeakFileOptions &peak_file_options, SpectrumType &spectrum)
Fill a single spectrum with data from input.
Definition: MzMLHandler.h:446
bool getSortSpectraByMZ() const
gets whether or not peaks in spectra should be sorted
bool getIntensity32Bit() const
ptrdiff_t SignedSize
Signed Size type e.g. used as pointer difference.
Definition: Types.h:128
Jet separator.
Definition: IonSource.h:61
Baseline reduction.
Definition: DataProcessing.h:66
const std::vector< IonDetector > & getIonDetectors() const
returns a const reference to the ion detector list
Description of a file location, used to store the origin of (meta) data.
Definition: SourceFile.h:47
Raw data (also called profile data)
Definition: SpectrumSettings.h:75
double getAccuracy() const
returns the mass accuracy i.e. how much the theoretical mass may differ from the measured mass (in pp...
flame ionization
Definition: IonSource.h:90
Binary data representation.
Definition: MzMLHandlerHelper.h:58
focal plane collector
Definition: IonDetector.h:69
Little endian type.
Definition: Base64.h:79
Multi-collector.
Definition: IonDetector.h:61
Quadrupole ion trap / Paul ion trap.
Definition: MassAnalyzer.h:57
pyrolysis mass spectrometry
Definition: IonSource.h:116
ion-to-photon detector
Definition: IonDetector.h:70
photoionization
Definition: IonSource.h:115
Description of the software used for processing.
Definition: Software.h:49
bool getCompression() const
MS2+ mass spectrum, is a "mass spectrum".
Definition: InstrumentSettings.h:58
const IntegerDataArrays & getIntegerDataArrays() const
Returns a const reference to the integer meta data arrays.
Definition: MSSpectrum.h:322
static String find(const String &filename, StringList directories=StringList())
Looks up the location of the file filename.
std::vector< std::pair< std::string, long > > spectra_offsets
Definition: MzMLHandler.h:926
const String & getUnit() const
Return the unit associated to this DataValue.
chemi-ionization
Definition: IonSource.h:123
MzMLHandler(const MapType &exp, const String &filename, const String &version, const ProgressLogger &logger)
Constructor for a write-only handler.
Definition: MzMLHandler.h:153
Definition: ControlledVocabulary.h:73
collision quadrupole
Definition: Instrument.h:76
ChromatogramType chromatogram_
The current chromatogram.
Definition: MzMLHandler.h:864
Unknown spectrum type.
Definition: SpectrumSettings.h:73
Definition: ChromatogramSettings.h:72
void writeContainerData(std::ostream &os, const PeakFileOptions &pf_options_, const ContainerT &container, String array_type)
Definition: MzMLHandler.h:268
Faraday cup.
Definition: IonDetector.h:58
Selected reaction monitoring scan Synonyms: 'Multiple reaction monitoring scan', 'SRM scan', 'MRM scan'.
Definition: InstrumentSettings.h:60
void populateChromatogramsWithData()
Populate all chromatograms on the stack with data from input.
Definition: MzMLHandler.h:385
Surface-induced dissociation.
Definition: Precursor.h:69
bool obsolete
Flag that indicates of the term is obsolete.
Definition: ControlledVocabulary.h:84
Configuration class for MSNumpress.
Definition: MSNumpressCoder.h:65
Blackbody infrared radiative dissociation.
Definition: Precursor.h:70
Inductively coupled plasma.
Definition: IonSource.h:71
Int getOrder() const
returns the position of this part in the whole Instrument.
Map< String, SourceFile > source_files_
The source files: id => SourceFile.
Definition: MzMLHandler.h:876
Definition: ControlledVocabulary.h:65
autodetachment
Definition: IonSource.h:120
const ProgressLogger & logger_
Progress logger.
Definition: MzMLHandler.h:934
Map< String, Software > software_
The software list: id => Software.
Definition: MzMLHandler.h:880
double getActivationEnergy() const
returns the activation energy (in electronvolt)
#define LOG_ERROR
Macro to be used if non-fatal error are reported (processing continues)
Definition: LogStream.h:447
void writeHeader_(std::ostream &os, const MapType &exp, std::vector< std::vector< DataProcessing > > &dps, Internal::MzMLValidator &validator)
Definition: MzMLHandler.h:3958
static void decodeBase64Arrays(std::vector< BinaryData > &data_)
SpectrumType getType() const
returns the spectrum type
adiabatic ionization
Definition: IonSource.h:118
const std::vector< DataProcessing > & getDataProcessing() const
returns a const reference to the description of the applied processing
const String & getIdentifier() const
return the identifier/index/number of the acquisition
double toDouble() const
Conversion to double.
Class to hold strings, numeric values, lists of strings and lists of numeric values.
Definition: DataValue.h:57
secondary ion MS
Definition: IonSource.h:92
atmospheric pressure chemical ionization
Definition: IonSource.h:99
double getIsolationWindowUpperOffset() const
Returns the upper offset from the target m/z.
Definition: ControlledVocabulary.h:70
Time-of-flight.
Definition: MassAnalyzer.h:60
bool getZoomScan() const
return if this scan is a zoom (enhanced resolution) scan
ScanMode getScanMode() const
returns the scan mode
Unknown.
Definition: MassAnalyzer.h:55
double getTOFTotalPathLength() const
returns the path length for a TOF mass analyzer (in meter)
magnetic deflection
Definition: Instrument.h:74
const std::set< ActivationMethod > & getActivationMethods() const
returns a const reference to the activation methods
double getMZ() const
returns the target m/z
virtual void endElement(const XMLCh *const , const XMLCh *const , const XMLCh *const qname)
Parsing method for closing tags.
Definition: MzMLHandler.h:1454
Surface enhanced laser desorption ionization.
Definition: IonSource.h:104
String unit_accession
Definition: SemanticValidator.h:79
Cyclotron.
Definition: MassAnalyzer.h:67
MSExperiment< Peak1D > MapType
Definition: PeakPickerIterative.cpp:87
Representation of a controlled vocabulary.
Definition: ControlledVocabulary.h:54
double getMagneticFieldStrength() const
returns the strength of the magnetic field (in T)
Size default_array_length
Definition: MzMLHandler.h:898
Size default_array_length_
The default number of peaks in the current spectrum.
Definition: MzMLHandler.h:868
Data necessary to generate a single chromatogram.
Definition: MzMLHandler.h:913
Pulse counting.
Definition: IonDetector.h:85
Definition: ControlledVocabulary.h:71
point collector
Definition: IonDetector.h:71
negative ion chemical ionization
Definition: IonSource.h:113
Definition: ChromatogramSettings.h:76
SpectrumType spectrum
Definition: MzMLHandler.h:899
void load(const String &filename, CVMappings &cv_mappings, bool strip_namespaces=false)
loads CvMappings from the given file
Definition: ChromatogramSettings.h:71
Definition: MzMLHandlerHelper.h:64
XML handler for MzMLFile.
Definition: MzMLHandler.h:108
Electron transfer dissociation.
Definition: Precursor.h:77
void loadFromOBO(const String &name, const String &filename)
Loads the CV from an OBO file.
void writeSourceFile_(std::ostream &os, const String &id, const SourceFile &software, Internal::MzMLValidator &validator)
Helper method that writes a source file.
Definition: MzMLHandler.h:3599
Definition: ChromatogramSettings.h:75
Int toInt() const
Conversion to int.
Infusion.
Definition: IonSource.h:69
spark ionization
Definition: IonSource.h:128
Surface enhanced neat desorption.
Definition: IonSource.h:105
bool has_unit_accession
Definition: SemanticValidator.h:80
const Precursor & getPrecursor() const
returns a const reference to the precursors
Collision-induced dissociation.
Definition: Precursor.h:66
delayed extraction
Definition: Instrument.h:75
const std::vector< ScanWindow > & getScanWindows() const
returns a const reference to the m/z scan windows
const SourceFile & getSourceFile() const
returns a const reference to the source file
Representation of a parsed CV term.
Definition: SemanticValidator.h:73
Chromatography (liquid)
Definition: IonSource.h:57
MapType * exp_
map pointer for reading
Definition: MzMLHandler.h:852
bool skip_spectrum_
Definition: MzMLHandler.h:945
Pulsed q dissociation.
Definition: Precursor.h:78
Map< String, std::vector< DataProcessing > > processing_
The data processing list: id => Instrument.
Definition: MzMLHandler.h:884
electron ionization
Definition: IonSource.h:84
Linear ion trap.
Definition: MassAnalyzer.h:69
Base64 decoder_
Decoder/Encoder for Base64-data in MzML.
Definition: MzMLHandler.h:931
Reservoir.
Definition: IonSource.h:63
DataType valueType() const
returns the type of value stored
Definition: DataValue.h:351
first stability region
Definition: Instrument.h:81
const DRange< 1 > & getRTRange() const
returns the RT range
Map< String, Sample > samples_
The sample list: id => Sample.
Definition: MzMLHandler.h:878
double getIsolationWindowLowerOffset() const
returns the lower offset from the target m/z
MapType::ChromatogramPeakType ChromatogramPeakType
Chromatogram peak type.
Definition: MzMLHandler.h:253
Electromagnetic radiation scan Synonyms: 'EMR spectrum'.
Definition: InstrumentSettings.h:67
void writeBinaryDataArray(std::ostream &os, const PeakFileOptions &pf_options_, std::vector< DataType > data_to_encode, bool is32bit, String array_type)
Definition: MzMLHandler.h:776
fringing field
Definition: Instrument.h:82
String default_processing_
id of the default data processing (used when no processing is defined)
Definition: MzMLHandler.h:886
PeakFileOptions & getOptions()
Get the peak file options.
Definition: MzMLHandler.h:228
thermal ionization
Definition: IonSource.h:93
Orbitrap.
Definition: MassAnalyzer.h:68
postacceleration detector
Definition: IonDetector.h:72
Stored waveform inverse fourier transform.
Definition: MassAnalyzer.h:66
Calibration of m/z positions.
Definition: DataProcessing.h:69
Moving belt.
Definition: IonSource.h:64
resonance enhanced multiphoton ionization
Definition: IonSource.h:117
String & trim()
removes whitespaces (space, tab, line feed, carriage return) at the beginning and the end of the stri...
Interfaces::IMSDataConsumer< MapType > * consumer_
Consumer class to work on spectra.
Definition: MzMLHandler.h:937
reflectron
Definition: Instrument.h:79
void setSoftware(const Software &software)
sets the software used for processing
Definition: ControlledVocabulary.h:68
conversion dynode
Definition: IonDetector.h:67
CVMappings mapping_
Definition: MzMLHandler.h:952
A 1-dimensional raw data point or peak.
Definition: Peak1D.h:55
soft ionization
Definition: IonSource.h:127
Scan window description.
Definition: ScanWindow.h:47
double value
Definition: DataValue.h:70
plasma desorption
Definition: IonSource.h:91
double getRT() const
Definition: MSSpectrum.h:243
static void writeFooter_(std::ostream &os, const PeakFileOptions &options_, std::vector< std::pair< std::string, long > > &spectra_offsets, std::vector< std::pair< std::string, long > > &chromatograms_offsets)
Write the mzML footer the appropriate compression term given the PeakFileOptions and the NumpressConf...
Photodissociation.
Definition: Precursor.h:76
Unknown.
Definition: IonDetector.h:54
On.
Definition: MassAnalyzer.h:129
ReflectronState getReflectronState() const
returns the reflectron state (for TOF)
Analog-digital converter.
Definition: IonDetector.h:86
static void computeDataProperties_(std::vector< BinaryData > &data_, bool &precision_64, SignedSize &index, String index_name)
XRefType xref_type
xref value-type for the CV-term
Definition: ControlledVocabulary.h:88
Meta information about the sample.
Definition: Sample.h:60
Conversion to mzML format.
Definition: DataProcessing.h:77
Definition: ControlledVocabulary.h:75
MSChromatogram< ChromatogramPeakType > ChromatogramType
Spectrum type.
Definition: MzMLHandler.h:257
neutralization reionization mass spectrometry
Definition: IonSource.h:114
full scan mass spectrum, is a "mass spectrum" Synonyms: 'full spectrum', 'Q1 spectrum', 'Q3 spectrum', 'Single-Stage Mass Spectrometry'
Definition: InstrumentSettings.h:57
inductive detector
Definition: IonDetector.h:74
MSSpectrum< PeakType > SpectrumType
Spectrum type.
Definition: MzMLHandler.h:255
electrospray ionisation
Definition: IonSource.h:83
String file_
File name.
Definition: XMLHandler.h:187
std::vector< BinaryData > data_
The spectrum data (or chromatogram data)
Definition: MzMLHandler.h:866
Normalization of intensity values.
Definition: DataProcessing.h:70
Description of a ion detector (part of a MS Instrument)
Definition: IonDetector.h:47
String name
Definition: SemanticValidator.h:76
double getIsolationWindowUpperOffset() const
returns the upper offset from the target m/z
Definition: ChromatogramSettings.h:77
Information about one raw data spectrum that was combined with several other raw data spectra...
Definition: Acquisition.h:50
Low-energy collision-induced dissociation.
Definition: Precursor.h:75
Emission scan.
Definition: InstrumentSettings.h:68
String name
Text name.
Definition: ControlledVocabulary.h:80
virtual void writeTo(std::ostream &os)
Writes the contents to a stream.
Definition: MzMLHandler.h:3884
vertical ionization
Definition: IonSource.h:130
surface ionization
Definition: IonSource.h:129
Definition: VersionInfo.h:63
void populateChromatogramsWithData_(std::vector< MzMLHandlerHelper::BinaryData > &input_data, Size &default_arr_length, const PeakFileOptions &peak_file_options, ChromatogramType &inp_chromatogram)
Fill a single chromatogram with data from input.
Definition: MzMLHandler.h:626
static String getCompressionTerm_(const PeakFileOptions &opt, MSNumpressCoder::NumpressConfig np_compression, bool use_numpress=false)
Returns the appropriate compression term given the PeakFileOptions and the NumpressConfig.
Nano electrospray ionization.
Definition: IonSource.h:102
const String & getName() const
returns the name of the software
Batch (e.g. in MALDI)
Definition: IonSource.h:56
dissociative ionization
Definition: IonSource.h:124
Selected ion monitoring scan Synonyms: 'Multiple ion monitoring scan', 'SIM scan', 'MIM scan'.
Definition: InstrumentSettings.h:59
Constant neutral loss scan Synonyms: 'CNG scan'.
Definition: InstrumentSettings.h:63
void setUnit(const String &unit)
Sets the unit to the given String.
ChromatogramType getChromatogramType() const
returns the chromatogram type, e.g. a SRM chromatogram
MSNumpressCoder::NumpressConfig getNumpressConfigurationMassTime() const
Set numpress configuration options for m/z or rt dimension.
void writePrecursor_(std::ostream &os, const Precursor &precursor, Internal::MzMLValidator &validator)
Helper method that write precursor information from spectra and chromatograms.
Definition: MzMLHandler.h:3767
const Product & getProduct() const
returns a const reference to the products
Time-delayed fragmentation scan.
Definition: InstrumentSettings.h:66
field desorption
Definition: IonSource.h:89
Invalid conversion exception.
Definition: Exception.h:363
void fatalError(const xercesc::SAXParseException &exception)
Retention time alignment of different maps.
Definition: DataProcessing.h:68
bool isEmpty() const
test if the value is empty
Definition: DataValue.h:360
Loading a file.
Definition: XMLHandler.h:118
const String & getComment() const
returns the comment (default: "")
Definition: MzMLHandlerHelper.h:64
MSNumpressCoder::NumpressConfig getNumpressConfigurationIntensity() const
Set numpress configuration options for intensity dimension.
bool in_spectrum_list_
Flag that indicates that we're inside a spectrum (in contrast to a chromatogram)
Definition: MzMLHandler.h:870
PeakType PeakType
Peak type.
Definition: MSSpectrum.h:105
const String & getFileType() const
returns the file type
Nanospray inlet.
Definition: IonSource.h:73
Invalid value exception.
Definition: Exception.h:336
daly detector
Definition: IonDetector.h:64
glow discharge ionization
Definition: IonSource.h:112
Conversion dynode photo multiplier.
Definition: IonDetector.h:60
bool getFillData() const
returns whether to fill the actual data into the container (spectrum/chromatogram) ...
void getCounts(Size &spectra_counts, Size &chromatogram_counts)
Get the spectra and chromatogram counts of a file.
Definition: MzMLHandler.h:236
Radial ejection linear ion trap.
Definition: MassAnalyzer.h:58
selected ion flow tube
Definition: Instrument.h:77
std::vector< ChromatogramData > chromatogram_data_
Vector of chromatogram data stored for later parallel processing.
Definition: MzMLHandler.h:921
Definition: ChromatogramSettings.h:74
Secure Hash Algorithm-1.
Definition: SourceFile.h:55
Consecutive reaction monitoring scan Synonyms: 'CRM scan'.
Definition: InstrumentSettings.h:61
const IntegerDataArrays & getIntegerDataArrays() const
Returns a const reference to the integer meta data arrays.
Definition: MSChromatogram.h:274
Thermo spray.
Definition: IonSource.h:68
const StringDataArrays & getStringDataArrays() const
Returns a const reference to the string meta data arrays.
Definition: MSSpectrum.h:310
charge exchange ionization
Definition: IonSource.h:122
UInt scan_count
Counting spectra and chromatograms.
Definition: MzMLHandler.h:940
String value
Definition: SemanticValidator.h:77
Magnetic sector.
Definition: MassAnalyzer.h:61
Ion trap.
Definition: MassAnalyzer.h:65
Infrared multiphoton dissociation.
Definition: Precursor.h:72
Smoothing of the signal to reduce noise.
Definition: DataProcessing.h:63
const String & getVersion() const
returns the software version
IonSource::Polarity getPolarity() const
returns the polarity
bool skip_chromatogram_
Flag that indicates whether this spectrum should be skipped (due to options)
Definition: MzMLHandler.h:944
General file format conversion (if no other term applies)
Definition: DataProcessing.h:75
static VersionDetails create(const String &version)
parse String and return as proper struct
const String & getMethodOfCombination() const
returns the method of combination
The interface of a consumer of spectra and chromatograms.
Definition: IMSDataConsumer.h:68
Unknown scan method.
Definition: InstrumentSettings.h:55
String prefix(SizeType length) const
returns the prefix of length length
const String & getChecksum() const
returns the file's checksum
Absorbtion scan.
Definition: InstrumentSettings.h:69
void writeSoftware_(std::ostream &os, const String &id, const Software &software, Internal::MzMLValidator &validator)
Helper method that writes a software.
Definition: MzMLHandler.h:3570
DateTime Class.
Definition: DateTime.h:55
OPENMS_INT64_TYPE Int64
Signed integer type (64bit)
Definition: Types.h:64
Base class for all classes that want to report their progress.
Definition: ProgressLogger.h:55
UInt selected_ion_count_
Count of selected ions.
Definition: MzMLHandler.h:956
const std::vector< Product > & getProducts() const
returns a const reference to the products
const String & getName() const
returns the name of the instrument
Int getFinalMSExponent() const
returns the final MS exponent
ControlledVocabulary::CVTerm getChildWithName_(const String &parent_accession, const String &name) const
Looks up a child CV term of parent_accession with the name name. If no such term is found...
Definition: MzMLHandler.h:3555
void setIdentifier(const String &identifier)
sets the index/number of the scan
Post-source decay.
Definition: Precursor.h:67
MapType::PeakType PeakType
Peak type.
Definition: MzMLHandler.h:251
void encode(std::vector< FromType > &in, ByteOrder to_byte_order, String &out, bool zlib_compression=false)
Encodes a vector of floating point numbers to a Base64 string.
Definition: Base64.h:207
void setOptions(const PeakFileOptions &opt)
Set the peak file options.
Definition: MzMLHandler.h:222
Definition: MSNumpressCoder.h:58
field ionization
Definition: IonSource.h:111
Membrane separator.
Definition: IonSource.h:59
const InstrumentSettings & getInstrumentSettings() const
returns a const reference to the instrument settings of the current spectrum
void writeUserParam_(std::ostream &os, const MetaInfoInterface &meta, UInt indent, String path, Internal::MzMLValidator &validator) const
Writes user terms.
Definition: MzMLHandler.h:3476
void encodeNP(const std::vector< double > &in, String &result, bool zlib_compression, const NumpressConfig &config)
Encodes a vector of floating point numbers into a Base64 string using numpress.
Definition: MSNumpressCoder.h:106
std::vector< Int > & getPossibleChargeStates()
Mutable access to possible charge states.
static bool handleBinaryDataArrayCVParam(std::vector< BinaryData > &data_, const String &accession, const String &value, const String &name)
Peak picking (conversion from raw to peak data)
Definition: DataProcessing.h:67
void writeSpectrum_(std::ostream &os, const SpectrumType &spec, Size s, Internal::MzMLValidator &validator, bool renew_native_ids, std::vector< std::vector< DataProcessing > > &dps)
Definition: MzMLHandler.h:4868
bool has_unit_name
Definition: SemanticValidator.h:82
Precursor ion scan.
Definition: InstrumentSettings.h:64
void fillChromatogramData_()
Fills the current chromatogram with data points and meta data.
MzMLHandler(MapType &exp, const String &filename, const String &version, ProgressLogger &logger)
Constructor for a read-only handler.
Definition: MzMLHandler.h:116
A 1-dimensional raw data point or peak for chromatograms.
Definition: ChromatogramPeak.h:55
Axial ejection linear ion trap.
Definition: MassAnalyzer.h:59
general spectrum type
Definition: InstrumentSettings.h:56
const DRange< 1 > & getMZRange() const
returns the MZ range
std::vector< std::pair< std::string, long > > chromatograms_offsets
Definition: MzMLHandler.h:927
void handleUserParam_(const String &parent_parent_tag, const String &parent_tag, const String &name, const String &type, const String &value)
Handles user terms.
Definition: MzMLHandler.h:3297
MzMLHandlerHelper::BinaryData BinaryData
Definition: MzMLHandler.h:259
associative ionization
Definition: IonSource.h:119
Message-Digest algorithm 5.
Definition: SourceFile.h:56
void writeProduct_(std::ostream &os, const Product &product, Internal::MzMLValidator &validator)
Helper method that write precursor information from spectra and chromatograms.
Definition: MzMLHandler.h:3871
Map< String, Instrument > instruments_
The data processing list: id => Instrument.
Definition: MzMLHandler.h:882
const FloatDataArrays & getFloatDataArrays() const
Definition: MSChromatogram.h:250
String current_id_
Id of the current list. Used for referencing param group, source file, sample, software, ...
Definition: MzMLHandler.h:872
std::vector< BinaryData > data
Definition: MzMLHandler.h:897
Definition: ChromatogramSettings.h:73
const std::vector< Precursor > & getPrecursors() const
returns a const reference to the precursors
Constant neutral gain scan Synonyms: 'CNG scan'.
Definition: InstrumentSettings.h:62
Representation of controlled vocabulary mapping rules (for PSI formats)
Definition: CVMappings.h:57
Options for loading files containing peak data.
Definition: PeakFileOptions.h:48
Sustained off-resonance irradiation.
Definition: Precursor.h:73
Map< String, std::vector< SemanticValidator::CVTerm > > ref_param_
The referencing param groups: id => array (accession, value)
Definition: MzMLHandler.h:874
const FloatDataArrays & getFloatDataArrays() const
Returns a const reference to the float meta data arrays.
Definition: MSSpectrum.h:298
Definition: ControlledVocabulary.h:66
Int getOrder() const
returns the position of this part in the whole Instrument.
const String & getNativeID() const
returns the native identifier for the spectrum, used by the acquisition software. ...
void writeChromatogram_(std::ostream &os, const ChromatogramType &chromatogram, Size c, Internal::MzMLValidator &validator)
Definition: MzMLHandler.h:5201
Electron multiplier.
Definition: IonDetector.h:55
bool skip_data
Definition: MzMLHandler.h:900
desorption/ionization on silicon
Definition: IonSource.h:132
Definition: MzMLHandlerHelper.h:61
void setMSDataConsumer(Interfaces::IMSDataConsumer< MapType > *consumer)
Set the IMSDataConsumer consumer which will consume the read data.
Definition: MzMLHandler.h:243
photodiode array detector
Definition: IonDetector.h:73
int Int
Signed integer type.
Definition: Types.h:96
Open split.
Definition: IonSource.h:60
Map class based on the STL map (containing several convenience functions)
Definition: Map.h:51
Description of a mass analyzer (part of a MS Instrument)
Definition: MassAnalyzer.h:48
Description of an ion source (part of a MS Instrument)
Definition: IonSource.h:47
array detector
Definition: IonDetector.h:66
const MapType * cexp_
map pointer for writing
Definition: MzMLHandler.h:854
const String & getName() const
returns the sample name (default: "")
Conversion to mzData format.
Definition: DataProcessing.h:76
Charge deconvolution.
Definition: DataProcessing.h:61
Electron capture dissociation.
Definition: Precursor.h:71
ChromatogramType chromatogram
Definition: MzMLHandler.h:917
Quadrupole.
Definition: MassAnalyzer.h:56
einzel lens
Definition: Instrument.h:80
Matrix-assisted laser desorption ionization.
Definition: IonSource.h:107
void handleCVParam_(const String &parent_parent_tag, const String &parent_tag, const String &accession, const String &name, const String &value, const String &unit_accession="")
Handles CV terms.
Definition: MzMLHandler.h:1558
liquid secondary ionization
Definition: IonSource.h:125
virtual ~MzMLHandler()
Destructor.
Definition: MzMLHandler.h:190
double getConcentration() const
returns the concentration (in g/l) (default: 0.0)
SampleState getState() const
returns the state of aggregation (default: SAMPLENULL)
UInt chromatogram_count
Definition: MzMLHandler.h:941
bool validateCV_(const ControlledVocabulary::CVTerm &c, const String &path, const Internal::MzMLValidator &validator) const
Helper method to validate if the given CV is allowed in the current location (path) ...
Definition: MzMLHandler.h:3445
Unknown.
Definition: IonSource.h:82
Direct.
Definition: IonSource.h:55
bool hasPrefix(const String &string) const
true if String begins with string, false otherwise
Parse Error exception.
Definition: Exception.h:608
virtual void characters(const XMLCh *const chars, const XMLSize_t length)
Parsing method for character data.
Definition: MzMLHandler.h:1003
Size default_array_length
Definition: MzMLHandler.h:916
Definition: ControlledVocabulary.h:69
kinetic energy analyzer
Definition: Instrument.h:83
double getVolume() const
returns the volume (in ml) (default: 0.0)
laser desorption
Definition: IonSource.h:88
chemical ionisation
Definition: IonSource.h:85
static field
Definition: Instrument.h:84
Used to load CvMapping files.
Definition: CVMappingFile.h:57
Flow injection analysis.
Definition: IonSource.h:66
atmospheric pressure ionisation
Definition: IonSource.h:94