35 #ifndef OPENMS_FORMAT_HANDLERS_MZMLHANDLER_H
36 #define OPENMS_FORMAT_HANDLERS_MZMLHANDLER_H
82 class ControlledVocabulary;
93 template <
typename MapType>
128 LOG_ERROR <<
"MzMLHandler was initialized with an invalid version number: " <<
version_ << std::endl;
160 LOG_ERROR <<
"MzMLHandler was initialized with an invalid version number: " <<
version_ << std::endl;
173 virtual void endElement(
const XMLCh*
const ,
const XMLCh*
const ,
const XMLCh*
const qname);
176 virtual void startElement(
const XMLCh*
const ,
const XMLCh*
const ,
const XMLCh*
const qname,
const xercesc::Attributes& attributes);
179 virtual void characters(
const XMLCh*
const chars,
const XMLSize_t length);
182 virtual void writeTo(std::ostream& os);
218 std::vector<std::vector<DataProcessing> > & dps);
323 template <
typename MapType>
329 char* transcoded_chars = sm_.convert(chars);
331 String& current_tag = open_tags_.back();
333 if (current_tag ==
"binary" )
336 data_.back().base64 += transcoded_chars;
338 else if (current_tag ==
"offset" || current_tag ==
"indexListOffset" || current_tag ==
"fileChecksum" )
347 String transcoded_chars2 = transcoded_chars;
348 transcoded_chars2.
trim();
349 if (transcoded_chars2 !=
"")
350 warning(LOAD,
String(
"Unhandled character content in tag '") + current_tag +
"': " + transcoded_chars2);
354 template <
typename MapType>
357 static const XMLCh* s_count = xercesc::XMLString::transcode(
"count");
358 static const XMLCh* s_default_array_length = xercesc::XMLString::transcode(
"defaultArrayLength");
359 static const XMLCh* s_array_length = xercesc::XMLString::transcode(
"arrayLength");
360 static const XMLCh* s_accession = xercesc::XMLString::transcode(
"accession");
361 static const XMLCh* s_name = xercesc::XMLString::transcode(
"name");
362 static const XMLCh* s_type = xercesc::XMLString::transcode(
"type");
363 static const XMLCh* s_value = xercesc::XMLString::transcode(
"value");
364 static const XMLCh* s_unit_accession = xercesc::XMLString::transcode(
"unitAccession");
365 static const XMLCh* s_id = xercesc::XMLString::transcode(
"id");
366 static const XMLCh* s_spot_id = xercesc::XMLString::transcode(
"spotID");
368 static const XMLCh* s_ref = xercesc::XMLString::transcode(
"ref");
369 static const XMLCh* s_version = xercesc::XMLString::transcode(
"version");
370 static const XMLCh* s_order = xercesc::XMLString::transcode(
"order");
371 static const XMLCh* s_location = xercesc::XMLString::transcode(
"location");
372 static const XMLCh* s_sample_ref = xercesc::XMLString::transcode(
"sampleRef");
373 static const XMLCh* s_software_ref = xercesc::XMLString::transcode(
"softwareRef");
374 static const XMLCh* s_source_file_ref = xercesc::XMLString::transcode(
"sourceFileRef");
375 static const XMLCh* s_default_instrument_configuration_ref = xercesc::XMLString::transcode(
"defaultInstrumentConfigurationRef");
376 static const XMLCh* s_instrument_configuration_ref = xercesc::XMLString::transcode(
"instrumentConfigurationRef");
377 static const XMLCh* s_default_data_processing_ref = xercesc::XMLString::transcode(
"defaultDataProcessingRef");
378 static const XMLCh* s_data_processing_ref = xercesc::XMLString::transcode(
"dataProcessingRef");
379 static const XMLCh* s_start_time_stamp = xercesc::XMLString::transcode(
"startTimeStamp");
380 static const XMLCh* s_external_spectrum_id = xercesc::XMLString::transcode(
"externalSpectrumID");
381 static const XMLCh* s_default_source_file_ref = xercesc::XMLString::transcode(
"defaultSourceFileRef");
382 static const XMLCh* s_scan_settings_ref = xercesc::XMLString::transcode(
"scanSettingsRef");
384 String tag = sm_.convert(qname);
385 open_tags_.push_back(tag);
389 if (open_tags_.size() > 1)
390 parent_tag = *(open_tags_.end() - 2);
392 if (open_tags_.size() > 2)
393 parent_parent_tag = *(open_tags_.end() - 3);
396 if (tag !=
"spectrum" && skip_spectrum_)
399 if (tag ==
"spectrum")
403 default_array_length_ = attributeAsInt_(attributes, s_default_array_length);
406 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
408 spec_.setSourceFile(source_files_[source_file_ref]);
411 spec_.setNativeID(attributeAsString_(attributes, s_id));
414 if (optionalAttributeAsString_(maldi_spot_id, attributes, s_spot_id))
416 spec_.setMetaValue(
"maldi_spot_id", maldi_spot_id);
419 String data_processing_ref;
420 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
422 spec_.setDataProcessing(processing_[data_processing_ref]);
426 spec_.setDataProcessing(processing_[default_processing_]);
429 else if (tag ==
"chromatogram")
432 default_array_length_ = attributeAsInt_(attributes, s_default_array_length);
434 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
436 chromatogram_.setSourceFile(source_files_[source_file_ref]);
439 chromatogram_.setNativeID(attributeAsString_(attributes, s_id));
441 String data_processing_ref;
442 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
444 chromatogram_.setDataProcessing(processing_[data_processing_ref]);
448 chromatogram_.setDataProcessing(processing_[default_processing_]);
451 else if (tag ==
"spectrumList")
454 default_processing_ = attributeAsString_(attributes, s_default_data_processing_ref);
457 if (options_.getMetadataOnly())
460 UInt count = attributeAsInt_(attributes, s_count);
461 exp_->reserveSpaceSpectra(count);
462 logger_.startProgress(0, count,
"loading mzML file");
463 in_spectrum_list_ =
true;
465 else if (tag ==
"chromatogramList")
468 default_processing_ = attributeAsString_(attributes, s_default_data_processing_ref);
471 if (options_.getMetadataOnly())
474 UInt count = attributeAsInt_(attributes, s_count);
475 exp_->reserveSpaceChromatograms(count);
476 logger_.startProgress(0, count,
"loading chromatograms");
477 in_spectrum_list_ =
false;
479 else if (tag ==
"binaryDataArrayList" )
481 data_.reserve(attributeAsInt_(attributes, s_count));
483 else if (tag ==
"binaryDataArray" )
488 Int array_length = (
Int) default_array_length_;
489 optionalAttributeAsInt_(array_length, attributes, s_array_length);
490 data_.back().size = array_length;
493 String data_processing_ref;
494 if (optionalAttributeAsString_(data_processing_ref, attributes, s_data_processing_ref))
496 data_.back().meta.setDataProcessing(processing_[data_processing_ref]);
500 data_.back().meta.setDataProcessing(processing_[data_processing_ref]);
503 else if (tag ==
"cvParam")
506 optionalAttributeAsString_(value, attributes, s_value);
507 String unit_accession =
"";
508 optionalAttributeAsString_(unit_accession, attributes, s_unit_accession);
509 handleCVParam_(parent_parent_tag, parent_tag, attributeAsString_(attributes, s_accession), attributeAsString_(attributes, s_name), value, unit_accession);
511 else if (tag ==
"userParam")
514 optionalAttributeAsString_(type, attributes, s_type);
516 optionalAttributeAsString_(value, attributes, s_value);
517 handleUserParam_(parent_parent_tag, parent_tag, attributeAsString_(attributes, s_name), type, value);
519 else if (tag ==
"referenceableParamGroup")
521 current_id_ = attributeAsString_(attributes, s_id);
523 else if (tag ==
"sourceFile")
525 current_id_ = attributeAsString_(attributes, s_id);
526 source_files_[current_id_].setNameOfFile(attributeAsString_(attributes, s_name));
527 source_files_[current_id_].setPathToFile(attributeAsString_(attributes, s_location));
529 else if (tag ==
"referenceableParamGroupRef")
532 String ref = attributeAsString_(attributes, s_ref);
533 for (
Size i = 0; i < ref_param_[ref].size(); ++i)
535 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);
538 else if (tag ==
"scan")
543 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
545 tmp.
setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
546 tmp.
setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
549 String external_spectrum_id;
550 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
558 String instrument_configuration_ref;
559 if (optionalAttributeAsString_(instrument_configuration_ref, attributes, s_instrument_configuration_ref))
561 warning(LOAD,
"Unhandled attribute 'instrumentConfigurationRef' in 'scan' tag.");
564 spec_.getAcquisitionInfo().push_back(tmp);
566 else if (tag ==
"mzML")
569 String file_version = attributeAsString_(attributes, s_version);
576 warning(LOAD,
String(
"Invalid mzML version string '") + file_version +
"'. Assuming mzML version " + version_ +
"!");
580 if (current_version < mzML_min_version)
582 fatalError(LOAD,
String(
"Only mzML 1.1.0 or higher is supported! This file has version '") + file_version +
"'.");
586 warning(LOAD,
"The mzML file version (" + file_version +
") is newer than the parser version (" + version_ +
"). This might lead to undefined behavior.");
592 if (optionalAttributeAsString_(accession, attributes, s_accession))
594 exp_->setIdentifier(accession);
598 if (optionalAttributeAsString_(
id, attributes, s_id))
600 exp_->setMetaValue(
"mzml_id",
id);
603 else if (tag ==
"contact")
607 else if (tag ==
"sample")
609 current_id_ = attributeAsString_(attributes, s_id);
611 if (optionalAttributeAsString_(name, attributes, s_name))
613 samples_[current_id_].setName(name);
616 else if (tag ==
"run")
620 if (optionalAttributeAsString_(sample_ref, attributes, s_sample_ref))
622 exp_->setSample(samples_[sample_ref]);
625 String instrument_ref = attributeAsString_(attributes, s_default_instrument_configuration_ref);
626 exp_->setInstrument(instruments_[instrument_ref]);
629 if (optionalAttributeAsString_(start_time, attributes, s_start_time_stamp))
631 exp_->setDateTime(asDateTime_(start_time));
634 String default_source_file_ref;
635 if (optionalAttributeAsString_(default_source_file_ref, attributes, s_default_source_file_ref))
637 exp_->getSourceFiles().push_back(source_files_[default_source_file_ref]);
640 else if (tag ==
"software")
642 current_id_ = attributeAsString_(attributes, s_id);
643 software_[current_id_].setVersion(attributeAsString_(attributes, s_version));
645 else if (tag ==
"dataProcessing")
647 current_id_ = attributeAsString_(attributes, s_id);
649 else if (tag ==
"processingMethod")
656 dp.
setSoftware(software_[attributeAsString_(attributes, s_software_ref)]);
660 LOG_ERROR <<
"Warning: Parsing error, \"processingMethod\" is missing the required attribute \"softwareRef\".\n" <<
661 "The software tool which generated this mzML should be fixed. Please notify the maintainers." << std::endl;
663 processing_[current_id_].push_back(dp);
666 else if (tag ==
"instrumentConfiguration")
668 current_id_ = attributeAsString_(attributes, s_id);
672 if (optionalAttributeAsString_(scan_settings_ref, attributes, s_scan_settings_ref))
674 warning(LOAD,
"Unhandled attribute 'scanSettingsRef' in 'instrumentConfiguration' tag.");
677 else if (tag ==
"softwareRef")
680 instruments_[current_id_].setSoftware(software_[attributeAsString_(attributes, s_ref)]);
682 else if (tag ==
"source")
684 instruments_[current_id_].getIonSources().push_back(
IonSource());
685 instruments_[current_id_].getIonSources().back().setOrder(attributeAsInt_(attributes, s_order));
687 else if (tag ==
"analyzer")
689 instruments_[current_id_].getMassAnalyzers().push_back(
MassAnalyzer());
690 instruments_[current_id_].getMassAnalyzers().back().setOrder(attributeAsInt_(attributes, s_order));
692 else if (tag ==
"detector")
694 instruments_[current_id_].getIonDetectors().push_back(
IonDetector());
695 instruments_[current_id_].getIonDetectors().back().setOrder(attributeAsInt_(attributes, s_order));
697 else if (tag ==
"precursor")
699 if (in_spectrum_list_)
702 spec_.getPrecursors().push_back(
Precursor());
706 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
708 spec_.getPrecursors().back().setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
709 spec_.getPrecursors().back().setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
712 String external_spectrum_id;
713 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
715 spec_.getPrecursors().back().setMetaValue(
"external_spectrum_id", external_spectrum_id);
718 selected_ion_count_ = 0;
725 if (optionalAttributeAsString_(source_file_ref, attributes, s_source_file_ref))
727 chromatogram_.getPrecursor().setMetaValue(
"source_file_name", source_files_[source_file_ref].getNameOfFile());
728 chromatogram_.getPrecursor().setMetaValue(
"source_file_path", source_files_[source_file_ref].getPathToFile());
731 String external_spectrum_id;
732 if (optionalAttributeAsString_(external_spectrum_id, attributes, s_external_spectrum_id))
734 chromatogram_.getPrecursor().setMetaValue(
"external_spectrum_id", external_spectrum_id);
736 selected_ion_count_ = 0;
739 else if (tag ==
"product")
742 if (in_spectrum_list_)
744 spec_.getProducts().push_back(
Product());
748 chromatogram_.setProduct(
Product());
751 else if (tag ==
"selectedIon")
754 ++selected_ion_count_;
756 else if (tag ==
"selectedIonList")
759 if (attributeAsInt_(attributes, s_count) > 1)
761 warning(LOAD,
"OpenMS can currently handle only one selection ion per precursor! Only the first ion is loaded!");
764 else if (tag ==
"scanWindow")
766 spec_.getInstrumentSettings().getScanWindows().push_back(
ScanWindow());
770 template <
typename MapType>
773 static UInt scan_count = 0;
774 static UInt chromatogram_count = 0;
776 static const XMLCh* s_spectrum = xercesc::XMLString::transcode(
"spectrum");
777 static const XMLCh* s_chromatogram = xercesc::XMLString::transcode(
"chromatogram");
778 static const XMLCh* s_spectrum_list = xercesc::XMLString::transcode(
"spectrumList");
779 static const XMLCh* s_chromatogram_list = xercesc::XMLString::transcode(
"chromatogramList");
780 static const XMLCh* s_mzml = xercesc::XMLString::transcode(
"mzML");
782 open_tags_.pop_back();
784 if (equal_(qname, s_spectrum))
790 if (spec_.getRT() == -1.0 && spec_.metaValueExists(
"elution time (seconds)"))
792 spec_.setRT(spec_.getMetaValue(
"elution time (seconds)"));
804 exp_->addSpectrum(spec_);
807 skip_spectrum_ =
false;
808 logger_.setProgress(++scan_count);
810 default_array_length_ = 0;
812 else if (equal_(qname, s_chromatogram))
814 fillChromatogramData_();
815 exp_->addChromatogram(chromatogram_);
816 logger_.setProgress(++chromatogram_count);
818 default_array_length_ = 0;
820 else if (equal_(qname, s_spectrum_list))
822 in_spectrum_list_ =
false;
823 logger_.endProgress();
825 else if (equal_(qname, s_chromatogram_list))
827 in_spectrum_list_ =
false;
828 logger_.endProgress();
830 else if (equal_(qname, s_mzml))
833 chromatogram_count = 0;
836 source_files_.clear();
839 instruments_.clear();
846 template <
typename MapType>
850 for (
Size i = 0; i < data_.size(); i++)
854 data_[i].base64.removeWhitespaces();
857 if (data_[i].data_type == BinaryData::DT_FLOAT)
859 if (data_[i].precision == BinaryData::PRE_64)
862 if (data_[i].size != data_[i].floats_64.size())
864 warning(LOAD,
String(
"Float binary data array '") + data_[i].meta.getName() +
"' of spectrum '" + spec_.getNativeID() +
"' has length " + data_[i].floats_64.size() +
", but should have length " + data_[i].size +
".");
865 data_[i].size = data_[i].floats_64.size();
868 else if (data_[i].precision == BinaryData::PRE_32)
871 if (data_[i].size != data_[i].floats_32.size())
873 warning(LOAD,
String(
"Float binary data array '") + data_[i].meta.getName() +
"' of spectrum '" + spec_.getNativeID() +
"' has length " + data_[i].floats_32.size() +
", but should have length " + data_[i].size +
".");
874 data_[i].size = data_[i].floats_32.size();
878 else if (data_[i].data_type == BinaryData::DT_INT)
880 if (data_[i].precision == BinaryData::PRE_64)
883 if (data_[i].size != data_[i].ints_64.size())
885 warning(LOAD,
String(
"Integer binary data array '") + data_[i].meta.getName() +
"' of spectrum '" + spec_.getNativeID() +
"' has length " + data_[i].ints_64.size() +
", but should have length " + data_[i].size +
".");
886 data_[i].size = data_[i].ints_64.size();
889 else if (data_[i].precision == BinaryData::PRE_32)
892 if (data_[i].size != data_[i].ints_32.size())
894 warning(LOAD,
String(
"Integer binary data array '") + data_[i].meta.getName() +
"' of spectrum '" + spec_.getNativeID() +
"' has length " + data_[i].ints_32.size() +
", but should have length " + data_[i].size +
".");
895 data_[i].size = data_[i].ints_32.size();
899 else if (data_[i].data_type == BinaryData::DT_STRING)
901 decoder_.decodeStrings(data_[i].base64, data_[i].decoded_char, data_[i].compression);
902 if (data_[i].size != data_[i].decoded_char.size())
904 warning(LOAD,
String(
"String binary data array '") + data_[i].meta.getName() +
"' of spectrum '" + spec_.getNativeID() +
"' has length " + data_[i].decoded_char.size() +
", but should have length " + data_[i].size +
".");
905 data_[i].size = data_[i].decoded_char.size();
911 bool mz_precision_64 =
true;
912 bool int_precision_64 =
true;
915 for (
Size i = 0; i < data_.size(); i++)
917 if (data_[i].meta.getName() ==
"m/z array")
920 mz_precision_64 = (data_[i].precision == BinaryData::PRE_64);
922 if (data_[i].meta.getName() ==
"intensity array")
925 int_precision_64 = (data_[i].precision == BinaryData::PRE_64);
930 if (int_index == -1 || mz_index == -1)
933 if (default_array_length_ != 0)
935 warning(LOAD,
String(
"The m/z or intensity array of spectrum '") + spec_.getNativeID() +
"' is missing and default_array_length_ is " + default_array_length_ +
".");
942 if ((data_[mz_index].ints_32.size() > 0) || (data_[mz_index].ints_64.size() > 0))
944 fatalError(LOAD,
"Encoding m/z array as integer is not allowed!");
946 if ((data_[int_index].ints_32.size() > 0) || (data_[int_index].ints_64.size() > 0))
948 fatalError(LOAD,
"Encoding intensity array as integer is not allowed!");
952 Size mz_size = mz_precision_64 ? data_[mz_index].floats_64.size() : data_[mz_index].floats_32.size();
953 Size int_size = int_precision_64 ? data_[int_index].floats_64.size() : data_[int_index].floats_32.size();
955 if (mz_size != int_size)
957 fatalError(LOAD,
String(
"The length of m/z and integer values of spectrum '") + spec_.getNativeID() +
"' differ (mz-size: " + mz_size +
", int-size: " + int_size +
"! Not reading spectrum!");
959 bool repair_array_length =
false;
960 if (default_array_length_ != mz_size)
962 warning(LOAD,
String(
"The m/z array of spectrum '") + spec_.getNativeID() +
"' has the size " + mz_size +
", but it should have size " + default_array_length_ +
" (defaultArrayLength).");
963 repair_array_length =
true;
965 if (default_array_length_ != int_size)
967 warning(LOAD,
String(
"The intensity array of spectrum '") + spec_.getNativeID() +
"' has the size " + int_size +
", but it should have size " + default_array_length_ +
" (defaultArrayLength).");
968 repair_array_length =
true;
970 if (repair_array_length)
972 default_array_length_ = int_size;
973 warning(LOAD,
String(
"Fixing faulty defaultArrayLength to ") + default_array_length_ +
".");
977 if (data_.size() > 2)
979 for (
Size i = 0; i < data_.size(); i++)
981 if (data_[i].meta.getName() !=
"m/z array" && data_[i].meta.getName() !=
"intensity array")
983 if (data_[i].data_type == BinaryData::DT_FLOAT)
986 spec_.getFloatDataArrays().resize(spec_.getFloatDataArrays().size() + 1);
988 spec_.getFloatDataArrays().back().reserve(data_[i].size);
990 spec_.getFloatDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
992 else if (data_[i].data_type == BinaryData::DT_INT)
995 spec_.getIntegerDataArrays().resize(spec_.getIntegerDataArrays().size() + 1);
997 spec_.getIntegerDataArrays().back().reserve(data_[i].size);
999 spec_.getIntegerDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
1001 else if (data_[i].data_type == BinaryData::DT_STRING)
1004 spec_.getStringDataArrays().resize(spec_.getStringDataArrays().size() + 1);
1006 spec_.getStringDataArrays().back().reserve(data_[i].decoded_char.size());
1008 spec_.getStringDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
1016 for (
Size i = 0; i < data_.size(); i++)
1018 if (data_[i].meta.getName() ==
"m/z array" || data_[i].meta.getName() ==
"intensity array")
1020 std::vector<UInt> keys;
1021 data_[i].meta.getKeys(keys);
1022 for (
Size k = 0;
k < keys.size(); ++
k)
1024 spec_.setMetaValue(keys[
k], data_[i].meta.getMetaValue(keys[k]));
1030 spec_.reserve(default_array_length_);
1031 for (
Size n = 0; n < default_array_length_; n++)
1033 DoubleReal mz = mz_precision_64 ? data_[mz_index].floats_64[n] : data_[mz_index].floats_32[n];
1034 DoubleReal intensity = int_precision_64 ? data_[int_index].floats_64[n] : data_[int_index].floats_32[n];
1035 if ((!options_.hasMZRange() || options_.getMZRange().encloses(
DPosition<1>(mz)))
1036 && (!options_.hasIntensityRange() || options_.getIntensityRange().encloses(
DPosition<1>(intensity))))
1040 tmp.setIntensity(intensity);
1042 spec_.push_back(tmp);
1045 UInt meta_float_array_index = 0;
1046 UInt meta_int_array_index = 0;
1047 UInt meta_string_array_index = 0;
1048 for (
Size i = 0; i < data_.size(); i++)
1050 if (data_[i].meta.getName() !=
"m/z array" && data_[i].meta.getName() !=
"intensity array")
1052 if (data_[i].data_type == BinaryData::DT_FLOAT)
1054 if (n < data_[i].size)
1056 DoubleReal value = (data_[i].precision == BinaryData::PRE_64) ? data_[i].floats_64[n] : data_[i].floats_32[n];
1057 spec_.getFloatDataArrays()[meta_float_array_index].push_back(value);
1059 ++meta_float_array_index;
1061 else if (data_[i].data_type == BinaryData::DT_INT)
1063 if (n < data_[i].size)
1065 Int64 value = (data_[i].precision == BinaryData::PRE_64) ? data_[i].ints_64[n] : data_[i].ints_32[n];
1066 spec_.getIntegerDataArrays()[meta_int_array_index].push_back(value);
1068 ++meta_int_array_index;
1070 else if (data_[i].data_type == BinaryData::DT_STRING)
1072 if (n < data_[i].decoded_char.size())
1074 String value = data_[i].decoded_char[n];
1075 spec_.getStringDataArrays()[meta_string_array_index].push_back(value);
1077 ++meta_string_array_index;
1085 template <
typename MapType>
1089 for (
Size i = 0; i < data_.size(); i++)
1093 data_[i].base64.removeWhitespaces();
1096 if (data_[i].data_type == BinaryData::DT_FLOAT)
1098 if (data_[i].precision == BinaryData::PRE_64)
1101 if (data_[i].size != data_[i].floats_64.size())
1103 warning(LOAD,
String(
"Float binary data array '") + data_[i].meta.getName() +
"' of chromatogram '" + chromatogram_.getNativeID() +
"' has length " + data_[i].floats_64.size() +
", but should have length " + data_[i].size +
".");
1106 else if (data_[i].precision == BinaryData::PRE_32)
1109 if (data_[i].size != data_[i].floats_32.size())
1111 warning(LOAD,
String(
"Float binary data array '") + data_[i].meta.getName() +
"' of chromatogram '" + chromatogram_.getNativeID() +
"' has length " + data_[i].floats_32.size() +
", but should have length " + data_[i].size +
".");
1115 else if (data_[i].data_type == BinaryData::DT_INT)
1117 if (data_[i].precision == BinaryData::PRE_64)
1120 if (data_[i].size != data_[i].ints_64.size())
1122 warning(LOAD,
String(
"Integer binary data array '") + data_[i].meta.getName() +
"' of chromatogram '" + chromatogram_.getNativeID() +
"' has length " + data_[i].ints_64.size() +
", but should have length " + data_[i].size +
".");
1125 else if (data_[i].precision == BinaryData::PRE_32)
1128 if (data_[i].size != data_[i].ints_32.size())
1130 warning(LOAD,
String(
"Integer binary data array '") + data_[i].meta.getName() +
"' of chromatogram '" + chromatogram_.getNativeID() +
"' has length " + data_[i].ints_32.size() +
", but should have length " + data_[i].size +
".");
1134 else if (data_[i].data_type == BinaryData::DT_STRING)
1136 decoder_.decodeStrings(data_[i].base64, data_[i].decoded_char, data_[i].compression);
1137 if (data_[i].size != data_[i].decoded_char.size())
1139 warning(LOAD,
String(
"String binary data array '") + data_[i].meta.getName() +
"' of chromatogram '" + chromatogram_.getNativeID() +
"' has length " + data_[i].decoded_char.size() +
", but should have length " + data_[i].size +
".");
1145 bool int_precision_64 =
true;
1146 bool rt_precision_64 =
true;
1149 for (
Size i = 0; i < data_.size(); i++)
1151 if (data_[i].meta.getName() ==
"intensity array")
1154 int_precision_64 = (data_[i].precision == BinaryData::PRE_64);
1156 if (data_[i].meta.getName() ==
"time array")
1159 rt_precision_64 = (data_[i].precision == BinaryData::PRE_64);
1164 if (int_index == -1 || rt_index == -1)
1167 if (default_array_length_ != 0)
1169 warning(LOAD,
String(
"The m/z or intensity array of chromatogram '") + chromatogram_.getNativeID() +
"' is missing and default_array_length_ is " + default_array_length_ +
".");
1175 Size rt_size = rt_precision_64 ? data_[rt_index].floats_64.size() : data_[rt_index].floats_32.size();
1176 if (default_array_length_ != rt_size)
1178 warning(LOAD,
String(
"The base64-decoded rt array of chromatogram '") + chromatogram_.getNativeID() +
"' has the size " + rt_size +
", but it should have size " + default_array_length_ +
" (defaultArrayLength).");
1180 Size int_size = int_precision_64 ? data_[int_index].floats_64.size() : data_[int_index].floats_32.size();
1181 if (default_array_length_ != int_size)
1183 warning(LOAD,
String(
"The base64-decoded intensity array of chromatogram '") + chromatogram_.getNativeID() +
"' has the size " + int_size +
", but it should have size " + default_array_length_ +
" (defaultArrayLength).");
1187 if (data_.size() > 2)
1189 for (
Size i = 0; i < data_.size(); i++)
1191 if (data_[i].meta.getName() !=
"intensity array" && data_[i].meta.getName() !=
"time array")
1193 if (data_[i].data_type == BinaryData::DT_FLOAT)
1196 chromatogram_.getFloatDataArrays().resize(chromatogram_.getFloatDataArrays().size() + 1);
1198 chromatogram_.getFloatDataArrays().back().reserve(data_[i].size);
1200 chromatogram_.getFloatDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
1202 else if (data_[i].data_type == BinaryData::DT_INT)
1205 chromatogram_.getIntegerDataArrays().resize(chromatogram_.getIntegerDataArrays().size() + 1);
1207 chromatogram_.getIntegerDataArrays().back().reserve(data_[i].size);
1209 chromatogram_.getIntegerDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
1211 else if (data_[i].data_type == BinaryData::DT_STRING)
1214 chromatogram_.getStringDataArrays().resize(chromatogram_.getStringDataArrays().size() + 1);
1216 chromatogram_.getStringDataArrays().back().reserve(data_[i].decoded_char.size());
1218 chromatogram_.getStringDataArrays().back().MetaInfoDescription::operator=(data_[i].meta);
1226 for (
Size i = 0; i < data_.size(); i++)
1228 if (data_[i].meta.getName() ==
"time array" || data_[i].meta.getName() ==
"intensity array")
1230 std::vector<UInt> keys;
1231 data_[i].meta.getKeys(keys);
1232 for (
Size k = 0;
k < keys.size(); ++
k)
1234 chromatogram_.setMetaValue(keys[
k], data_[i].meta.getMetaValue(keys[k]));
1240 chromatogram_.reserve(default_array_length_);
1241 for (
Size n = 0; n < default_array_length_; n++)
1243 DoubleReal rt = rt_precision_64 ? data_[rt_index].floats_64[n] : data_[rt_index].floats_32[n];
1244 DoubleReal intensity = int_precision_64 ? data_[int_index].floats_64[n] : data_[int_index].floats_32[n];
1245 if ((!options_.hasRTRange() || options_.getRTRange().encloses(
DPosition<1>(rt)))
1246 && (!options_.hasIntensityRange() || options_.getIntensityRange().encloses(
DPosition<1>(intensity))))
1250 tmp.setIntensity(intensity);
1252 chromatogram_.push_back(tmp);
1255 UInt meta_float_array_index = 0;
1256 UInt meta_int_array_index = 0;
1257 UInt meta_string_array_index = 0;
1258 for (
Size i = 0; i < data_.size(); i++)
1260 if (data_[i].meta.getName() !=
"intensity array" && data_[i].meta.getName() !=
"time array")
1262 if (data_[i].data_type == BinaryData::DT_FLOAT)
1264 if (n < data_[i].size)
1266 DoubleReal value = (data_[i].precision == BinaryData::PRE_64) ? data_[i].floats_64[n] : data_[i].floats_32[n];
1267 chromatogram_.getFloatDataArrays()[meta_float_array_index].push_back(value);
1269 ++meta_float_array_index;
1271 else if (data_[i].data_type == BinaryData::DT_INT)
1273 if (n < data_[i].size)
1275 Int64 value = (data_[i].precision == BinaryData::PRE_64) ? data_[i].ints_64[n] : data_[i].ints_32[n];
1276 chromatogram_.getIntegerDataArrays()[meta_int_array_index].push_back(value);
1278 ++meta_int_array_index;
1280 else if (data_[i].data_type == BinaryData::DT_STRING)
1282 if (n < data_[i].decoded_char.size())
1284 String value = data_[i].decoded_char[n];
1285 chromatogram_.getStringDataArrays()[meta_string_array_index].push_back(value);
1287 ++meta_string_array_index;
1295 template <
typename MapType>
1303 if (!cv_.exists(accession))
1306 if (parent_tag !=
"sample")
1308 warning(LOAD,
String(
"Unknown cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1319 warning(LOAD,
String(
"Obsolete CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"'.");
1322 String parsed_name = name;
1325 correct_name.
trim();
1326 if (parsed_name != correct_name)
1328 warning(LOAD,
String(
"Name of CV term not correct: '") + term.
id +
" - " + parsed_name +
"' should be '" + correct_name +
"'");
1332 warning(LOAD,
String(
"Obsolete CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"'.");
1342 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must not have a value. The value is '" + value +
"'.");
1361 termValue = value.
toInt();
1365 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must have an integer value. The value is '" + value +
"'.");
1378 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must have a floating-point value. The value is '" + value +
"'.");
1392 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' must be a valid date. The value is '" + value +
"'.");
1406 warning(LOAD,
String(
"The CV term '") + accession +
" - " + term.
name +
"' used in tag '" + parent_tag +
"' should have a numerical value. The value is '" + value +
"'.");
1411 if (unit_accession !=
"") termValue.
setUnit(unit_accession);
1414 if (parent_tag ==
"run")
1417 if (accession ==
"MS:1000858")
1419 exp_->setFractionIdentifier(value);
1422 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1425 else if (parent_tag ==
"binaryDataArray")
1428 if (accession ==
"MS:1000523")
1430 data_.back().precision = BinaryData::PRE_64;
1431 data_.back().data_type = BinaryData::DT_FLOAT;
1433 else if (accession ==
"MS:1000521")
1435 data_.back().precision = BinaryData::PRE_32;
1436 data_.back().data_type = BinaryData::DT_FLOAT;
1438 else if (accession ==
"MS:1000519")
1440 data_.back().precision = BinaryData::PRE_32;
1441 data_.back().data_type = BinaryData::DT_INT;
1443 else if (accession ==
"MS:1000522")
1445 data_.back().precision = BinaryData::PRE_64;
1446 data_.back().data_type = BinaryData::DT_INT;
1448 else if (accession ==
"MS:1001479")
1450 data_.back().precision = BinaryData::PRE_NONE;
1451 data_.back().data_type = BinaryData::DT_STRING;
1454 else if (accession ==
"MS:1000786")
1456 data_.back().meta.setName(value);
1458 else if (cv_.isChildOf(accession,
"MS:1000513"))
1460 data_.back().meta.setName(cv_.getTerm(accession).name);
1463 else if (accession ==
"MS:1000574")
1465 data_.back().compression =
true;
1467 else if (accession ==
"MS:1000576")
1469 data_.back().compression =
false;
1472 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1475 else if (parent_tag ==
"spectrum")
1478 if (accession ==
"MS:1000294")
1482 else if (accession ==
"MS:1000579")
1486 else if (accession ==
"MS:1000580")
1490 else if (accession ==
"MS:1000581")
1494 else if (accession ==
"MS:1000582")
1498 else if (accession ==
"MS:1000583")
1502 else if (accession ==
"MS:1000804")
1506 else if (accession ==
"MS:1000805")
1510 else if (accession ==
"MS:1000806")
1514 else if (accession ==
"MS:1000325")
1518 else if (accession ==
"MS:1000326")
1522 else if (accession ==
"MS:1000341")
1526 else if (accession ==
"MS:1000789")
1530 else if (accession ==
"MS:1000790")
1535 else if (accession ==
"MS:1000127")
1539 else if (accession ==
"MS:1000128")
1543 else if (accession ==
"MS:1000525")
1548 else if (accession ==
"MS:1000511")
1550 spec_.setMSLevel(value.
toInt());
1552 if (options_.hasMSLevels() && !options_.containsMSLevel(spec_.getMSLevel()))
1554 skip_spectrum_ =
true;
1557 else if (accession ==
"MS:1000497")
1559 spec_.getInstrumentSettings().setZoomScan(
true);
1561 else if (accession ==
"MS:1000285")
1564 spec_.setMetaValue(
"total ion current", termValue);
1566 else if (accession ==
"MS:1000504")
1569 spec_.setMetaValue(
"base peak m/z", termValue);
1571 else if (accession ==
"MS:1000505")
1574 spec_.setMetaValue(
"base peak intensity", termValue);
1576 else if (accession ==
"MS:1000527")
1579 spec_.setMetaValue(
"highest observed m/z", termValue);
1581 else if (accession ==
"MS:1000528")
1584 spec_.setMetaValue(
"lowest observed m/z", termValue);
1586 else if (accession ==
"MS:1000618")
1589 spec_.setMetaValue(
"highest observed wavelength", termValue);
1591 else if (accession ==
"MS:1000619")
1594 spec_.setMetaValue(
"lowest observed wavelength", termValue);
1596 else if (accession ==
"MS:1000796")
1599 spec_.setMetaValue(
"spectrum title", termValue);
1601 else if (accession ==
"MS:1000797")
1604 spec_.setMetaValue(
"peak list scans", termValue);
1606 else if (accession ==
"MS:1000798")
1609 spec_.setMetaValue(
"peak list raw scans", termValue);
1612 else if (accession ==
"MS:1000129")
1616 else if (accession ==
"MS:1000130")
1621 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1624 else if (parent_tag ==
"scanWindow")
1626 if (accession ==
"MS:1000501")
1628 spec_.getInstrumentSettings().getScanWindows().back().begin = value.
toDouble();
1630 else if (accession ==
"MS:1000500")
1632 spec_.getInstrumentSettings().getScanWindows().back().end = value.
toDouble();
1635 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1638 else if (parent_tag ==
"referenceableParamGroup")
1645 ref_param_[current_id_].push_back(term);
1648 else if (parent_tag ==
"selectedIon")
1651 if (selected_ion_count_ > 1)
1654 if (accession ==
"MS:1000744")
1657 if (in_spectrum_list_)
1659 spec_.getPrecursors().back().setMZ(value.
toDouble());
1663 chromatogram_.getPrecursor().setMZ(value.
toDouble());
1666 else if (accession ==
"MS:1000041")
1668 if (in_spectrum_list_)
1670 spec_.getPrecursors().back().setCharge(value.
toInt());
1674 chromatogram_.getPrecursor().setCharge(value.
toInt());
1677 else if (accession ==
"MS:1000042")
1679 if (in_spectrum_list_)
1681 spec_.getPrecursors().back().setIntensity(value.
toDouble());
1685 chromatogram_.getPrecursor().setIntensity(value.
toDouble());
1688 else if (accession ==
"MS:1000633")
1690 if (in_spectrum_list_)
1692 spec_.getPrecursors().back().getPossibleChargeStates().push_back(value.
toInt());
1696 chromatogram_.getPrecursor().getPossibleChargeStates().push_back(value.
toInt());
1700 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1703 else if (parent_tag ==
"activation")
1706 if (in_spectrum_list_)
1708 if (accession ==
"MS:1000245")
1711 spec_.getPrecursors().back().setMetaValue(
"charge stripping",
String(
"true"));
1713 else if (accession ==
"MS:1000045")
1716 spec_.getPrecursors().back().setMetaValue(
"collision energy", termValue);
1718 else if (accession ==
"MS:1000412")
1721 spec_.getPrecursors().back().setMetaValue(
"buffer gas", termValue);
1723 else if (accession ==
"MS:1000419")
1726 spec_.getPrecursors().back().setMetaValue(
"collision gas", termValue);
1728 else if (accession ==
"MS:1000509")
1730 spec_.getPrecursors().back().setActivationEnergy(value.
toDouble());
1732 else if (accession ==
"MS:1000138")
1735 spec_.getPrecursors().back().setMetaValue(
"percent collision energy", termValue);
1737 else if (accession ==
"MS:1000869")
1740 spec_.getPrecursors().back().setMetaValue(
"collision gas pressure", termValue);
1743 else if (accession ==
"MS:1000044")
1747 else if (accession ==
"MS:1000133")
1749 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::CID);
1751 else if (accession ==
"MS:1000134")
1753 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PD);
1755 else if (accession ==
"MS:1000135")
1757 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PSD);
1759 else if (accession ==
"MS:1000136")
1761 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::SID);
1763 else if (accession ==
"MS:1000242")
1765 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::BIRD);
1767 else if (accession ==
"MS:1000250")
1769 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::ECD);
1771 else if (accession ==
"MS:1000262")
1773 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::IMD);
1775 else if (accession ==
"MS:1000282")
1777 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::SORI);
1779 else if (accession ==
"MS:1000422")
1781 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::HCID);
1783 else if (accession ==
"MS:1000433")
1785 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::LCID);
1787 else if (accession ==
"MS:1000435")
1789 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PHD);
1791 else if (accession ==
"MS:1000598")
1793 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::ETD);
1795 else if (accession ==
"MS:1000599")
1797 spec_.getPrecursors().back().getActivationMethods().insert(
Precursor::PQD);
1800 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1804 if (accession ==
"MS:1000245")
1807 chromatogram_.getPrecursor().setMetaValue(
"charge stripping",
String(
"true"));
1809 else if (accession ==
"MS:1000045")
1812 chromatogram_.getPrecursor().setMetaValue(
"collision energy", termValue);
1814 else if (accession ==
"MS:1000412")
1817 chromatogram_.getPrecursor().setMetaValue(
"buffer gas", termValue);
1819 else if (accession ==
"MS:1000419")
1822 chromatogram_.getPrecursor().setMetaValue(
"collision gas", termValue);
1824 else if (accession ==
"MS:1000509")
1826 chromatogram_.getPrecursor().setActivationEnergy(value.
toDouble());
1828 else if (accession ==
"MS:1000138")
1831 chromatogram_.getPrecursor().setMetaValue(
"percent collision energy", termValue);
1833 else if (accession ==
"MS:1000869")
1836 chromatogram_.getPrecursor().setMetaValue(
"collision gas pressure", termValue);
1839 else if (accession ==
"MS:1000044")
1843 else if (accession ==
"MS:1000133")
1845 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::CID);
1847 else if (accession ==
"MS:1000134")
1849 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PD);
1851 else if (accession ==
"MS:1000135")
1853 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PSD);
1855 else if (accession ==
"MS:1000136")
1857 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::SID);
1859 else if (accession ==
"MS:1000242")
1861 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::BIRD);
1863 else if (accession ==
"MS:1000250")
1865 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::ECD);
1867 else if (accession ==
"MS:1000262")
1869 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::IMD);
1871 else if (accession ==
"MS:1000282")
1873 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::SORI);
1875 else if (accession ==
"MS:1000422")
1877 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::HCID);
1879 else if (accession ==
"MS:1000433")
1881 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::LCID);
1883 else if (accession ==
"MS:1000435")
1885 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PHD);
1887 else if (accession ==
"MS:1000598")
1889 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::ETD);
1891 else if (accession ==
"MS:1000599")
1893 chromatogram_.getPrecursor().getActivationMethods().insert(
Precursor::PQD);
1896 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1900 else if (parent_tag ==
"isolationWindow")
1902 if (parent_parent_tag ==
"precursor")
1904 if (accession ==
"MS:1000827")
1906 if (in_spectrum_list_)
1908 spec_.getPrecursors().back().setMZ(value.
toDouble());
1912 chromatogram_.getPrecursor().setMZ(value.
toDouble());
1915 else if (accession ==
"MS:1000828")
1917 if (in_spectrum_list_)
1919 spec_.getPrecursors().back().setIsolationWindowLowerOffset(value.
toDouble());
1923 chromatogram_.getPrecursor().setIsolationWindowLowerOffset(value.
toDouble());
1926 else if (accession ==
"MS:1000829")
1928 if (in_spectrum_list_)
1930 spec_.getPrecursors().back().setIsolationWindowUpperOffset(value.
toDouble());
1934 chromatogram_.getPrecursor().setIsolationWindowUpperOffset(value.
toDouble());
1938 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1940 else if (parent_parent_tag ==
"product")
1942 if (accession ==
"MS:1000827")
1944 if (in_spectrum_list_)
1946 spec_.getProducts().back().setMZ(value.
toDouble());
1950 chromatogram_.getProduct().setMZ(value.
toDouble());
1953 else if (accession ==
"MS:1000829")
1955 if (in_spectrum_list_)
1957 spec_.getProducts().back().setIsolationWindowUpperOffset(value.
toDouble());
1961 chromatogram_.getProduct().setIsolationWindowUpperOffset(value.
toDouble());
1964 else if (accession ==
"MS:1000828")
1966 if (in_spectrum_list_)
1968 spec_.getProducts().back().setIsolationWindowLowerOffset(value.
toDouble());
1972 chromatogram_.getProduct().setIsolationWindowLowerOffset(value.
toDouble());
1976 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1980 else if (parent_tag ==
"scanList")
1982 if (cv_.isChildOf(accession,
"MS:1000570"))
1984 spec_.getAcquisitionInfo().setMethodOfCombination(cv_.getTerm(accession).name);
1987 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
1990 else if (parent_tag ==
"scan")
1993 if (accession ==
"MS:1000502")
1996 spec_.setMetaValue(
"dwell time", termValue);
1998 else if (accession ==
"MS:1000011")
2001 spec_.setMetaValue(
"mass resolution", termValue);
2003 else if (accession ==
"MS:1000015")
2006 spec_.setMetaValue(
"scan rate", termValue);
2008 else if (accession ==
"MS:1000016")
2010 if (unit_accession ==
"UO:0000031")
2012 spec_.setRT(60.0 * value.
toDouble());
2018 if (options_.hasRTRange() && !options_.getRTRange().encloses(
DPosition<1>(spec_.getRT())))
2020 skip_spectrum_ =
true;
2023 else if (accession ==
"MS:1000826")
2025 if (unit_accession ==
"UO:0000031")
2027 spec_.setMetaValue(
"elution time (seconds)", 60.0 * value.
toDouble());
2031 spec_.setMetaValue(
"elution time (seconds)", value.
toDouble());
2034 else if (accession ==
"MS:1000512")
2037 spec_.setMetaValue(
"filter string", termValue);
2039 else if (accession ==
"MS:1000803")
2042 spec_.setMetaValue(
"analyzer scan offset", termValue);
2044 else if (accession ==
"MS:1000616")
2047 spec_.setMetaValue(
"preset scan configuration", termValue);
2049 else if (accession ==
"MS:1000800")
2052 spec_.setMetaValue(
"mass resolving power", termValue);
2054 else if (accession ==
"MS:1000880")
2057 spec_.setMetaValue(
"interchannel delay", termValue);
2060 else if (accession ==
"MS:1000092")
2063 spec_.setMetaValue(
"scan direction",
String(
"decreasing"));
2065 else if (accession ==
"MS:1000093")
2068 spec_.setMetaValue(
"scan direction",
String(
"increasing"));
2071 else if (accession ==
"MS:1000094")
2074 spec_.setMetaValue(
"scan law",
String(
"exponential"));
2076 else if (accession ==
"MS:1000095")
2079 spec_.setMetaValue(
"scan law",
String(
"linear"));
2081 else if (accession ==
"MS:1000096")
2084 spec_.setMetaValue(
"scan law",
String(
"quadratic"));
2087 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2090 else if (parent_tag ==
"contact")
2092 if (accession ==
"MS:1000586")
2094 exp_->getContacts().back().setName(value);
2096 else if (accession ==
"MS:1000587")
2098 exp_->getContacts().back().setAddress(value);
2100 else if (accession ==
"MS:1000588")
2102 exp_->getContacts().back().setURL(value);
2104 else if (accession ==
"MS:1000589")
2106 exp_->getContacts().back().setEmail(value);
2108 else if (accession ==
"MS:1000590")
2110 exp_->getContacts().back().setInstitution(value);
2113 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2116 else if (parent_tag ==
"sourceFile")
2118 if (accession ==
"MS:1000569")
2122 else if (accession ==
"MS:1000568")
2126 else if (cv_.isChildOf(accession,
"MS:1000560"))
2128 source_files_[current_id_].setFileType(cv_.getTerm(accession).name);
2130 else if (cv_.isChildOf(accession,
"MS:1000767"))
2132 source_files_[current_id_].setNativeIDType(cv_.getTerm(accession).name);
2135 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2138 else if (parent_tag ==
"sample")
2140 if (accession ==
"MS:1000004")
2142 samples_[current_id_].setMass(value.
toDouble());
2144 else if (accession ==
"MS:1000001")
2146 samples_[current_id_].setNumber(value);
2148 else if (accession ==
"MS:1000005")
2150 samples_[current_id_].setVolume(value.
toDouble());
2152 else if (accession ==
"MS:1000006")
2154 samples_[current_id_].setConcentration(value.
toDouble());
2156 else if (accession ==
"MS:1000053")
2159 samples_[current_id_].setMetaValue(
"sample batch", termValue);
2161 else if (accession ==
"MS:1000047")
2165 else if (accession ==
"MS:1000048")
2169 else if (accession ==
"MS:1000049")
2173 else if (accession ==
"MS:1000050")
2177 else if (accession ==
"MS:1000051")
2181 else if (accession ==
"MS:1000052")
2188 samples_[current_id_].setMetaValue(
String(name), termValue);
2193 samples_[current_id_].setMetaValue(
"GO cellular component",
String(name));
2198 samples_[current_id_].setMetaValue(
"brenda source tissue",
String(name));
2201 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2204 else if (parent_tag ==
"instrumentConfiguration")
2207 if (accession ==
"MS:1000031")
2211 else if (cv_.isChildOf(accession,
"MS:1000031"))
2213 instruments_[current_id_].setName(cv_.getTerm(accession).name);
2216 else if (accession ==
"MS:1000529")
2219 instruments_[current_id_].setMetaValue(
"instrument serial number", termValue);
2221 else if (accession ==
"MS:1000032")
2223 instruments_[current_id_].setCustomizations(value);
2225 else if (accession ==
"MS:1000236")
2228 instruments_[current_id_].setMetaValue(
"transmission", termValue);
2231 else if (accession ==
"MS:1000246")
2235 else if (accession ==
"MS:1000221")
2239 else if (accession ==
"MS:1000275")
2243 else if (accession ==
"MS:1000281")
2247 else if (accession ==
"MS:1000286")
2251 else if (accession ==
"MS:1000300")
2255 else if (accession ==
"MS:1000307")
2259 else if (accession ==
"MS:1000309")
2263 else if (accession ==
"MS:1000310")
2267 else if (accession ==
"MS:1000311")
2271 else if (accession ==
"MS:1000320")
2276 else if (accession ==
"MS:1000304")
2279 instruments_[current_id_].setMetaValue(
"accelerating voltage", termValue);
2281 else if (accession ==
"MS:1000216")
2284 instruments_[current_id_].setMetaValue(
"field-free region",
String(
"true"));
2286 else if (accession ==
"MS:1000308")
2289 instruments_[current_id_].setMetaValue(
"electric field strength", termValue);
2291 else if (accession ==
"MS:1000319")
2294 instruments_[current_id_].setMetaValue(
"space charge effect",
String(
"true"));
2297 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2299 else if (parent_tag ==
"source")
2302 if (accession ==
"MS:1000055")
2306 else if (accession ==
"MS:1000056")
2308 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::DIRECT);
2310 else if (accession ==
"MS:1000057")
2314 else if (accession ==
"MS:1000058")
2318 else if (accession ==
"MS:1000059")
2322 else if (accession ==
"MS:1000060")
2326 else if (accession ==
"MS:1000061")
2330 else if (accession ==
"MS:1000062")
2334 else if (accession ==
"MS:1000063")
2338 else if (accession ==
"MS:1000064")
2342 else if (accession ==
"MS:1000065")
2346 else if (accession ==
"MS:1000066")
2350 else if (accession ==
"MS:1000067")
2354 else if (accession ==
"MS:1000068")
2356 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::SEPTUM);
2358 else if (accession ==
"MS:1000069")
2362 else if (accession ==
"MS:1000248")
2364 instruments_[current_id_].getIonSources().back().setInletType(
IonSource::BATCH);
2366 else if (accession ==
"MS:1000249")
2370 else if (accession ==
"MS:1000396")
2374 else if (accession ==
"MS:1000485")
2379 else if (accession ==
"MS:1000071")
2381 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CI);
2383 else if (accession ==
"MS:1000073")
2385 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::ESI);
2387 else if (accession ==
"MS:1000074")
2389 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FAB);
2391 else if (accession ==
"MS:1000227")
2393 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MPI);
2395 else if (accession ==
"MS:1000240")
2397 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::API);
2399 else if (accession ==
"MS:1000247")
2401 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::DI);
2403 else if (accession ==
"MS:1000255")
2405 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FA);
2407 else if (accession ==
"MS:1000258")
2409 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FII);
2411 else if (accession ==
"MS:1000259")
2413 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::GD_MS);
2415 else if (accession ==
"MS:1000271")
2417 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NICI);
2419 else if (accession ==
"MS:1000272")
2421 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NRMS);
2423 else if (accession ==
"MS:1000273")
2425 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PI);
2427 else if (accession ==
"MS:1000274")
2429 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PYMS);
2431 else if (accession ==
"MS:1000276")
2433 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::REMPI);
2435 else if (accession ==
"MS:1000380")
2437 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AI);
2439 else if (accession ==
"MS:1000381")
2441 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::ASI);
2443 else if (accession ==
"MS:1000383")
2445 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AD);
2447 else if (accession ==
"MS:1000384")
2449 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AUI);
2451 else if (accession ==
"MS:1000385")
2453 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CEI);
2455 else if (accession ==
"MS:1000386")
2457 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::CHEMI);
2459 else if (accession ==
"MS:1000388")
2461 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::DISSI);
2463 else if (accession ==
"MS:1000389")
2465 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::EI);
2467 else if (accession ==
"MS:1000395")
2469 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::LSI);
2471 else if (accession ==
"MS:1000399")
2473 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PEI);
2475 else if (accession ==
"MS:1000400")
2477 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::PD);
2479 else if (accession ==
"MS:1000402")
2481 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SI);
2483 else if (accession ==
"MS:1000403")
2485 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SOI);
2487 else if (accession ==
"MS:1000404")
2489 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SPI);
2491 else if (accession ==
"MS:1000406")
2493 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SUI);
2495 else if (accession ==
"MS:1000407")
2497 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::TI);
2499 else if (accession ==
"MS:1000408")
2501 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::VI);
2503 else if (accession ==
"MS:1000446")
2505 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FIB);
2507 else if (accession ==
"MS:1000070")
2509 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::APCI);
2511 else if (accession ==
"MS:1000239")
2513 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::AP_MALDI);
2515 else if (accession ==
"MS:1000382")
2517 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::APPI);
2519 else if (accession ==
"MS:1000075")
2521 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MALDI);
2523 else if (accession ==
"MS:1000257")
2525 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::FD);
2527 else if (accession ==
"MS:1000387")
2529 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SILI);
2531 else if (accession ==
"MS:1000393")
2533 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::LD);
2535 else if (accession ==
"MS:1000405")
2537 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SALDI);
2539 else if (accession ==
"MS:1000397")
2541 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::MESI);
2543 else if (accession ==
"MS:1000398")
2545 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::NESI);
2547 else if (accession ==
"MS:1000278")
2549 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SELDI);
2551 else if (accession ==
"MS:1000279")
2553 instruments_[current_id_].getIonSources().back().setIonizationMethod(
IonSource::SEND);
2555 else if (accession ==
"MS:1000008")
2560 else if (accession ==
"MS:1000392")
2563 instruments_[current_id_].getIonSources().back().setMetaValue(
"ionization efficiency", termValue);
2565 else if (accession ==
"MS:1000486")
2568 instruments_[current_id_].getIonSources().back().setMetaValue(
"source potential", termValue);
2570 else if (accession ==
"MS:1000875")
2573 instruments_[current_id_].getIonSources().back().setMetaValue(
"declustering potential", termValue);
2575 else if (accession ==
"MS:1000876")
2578 instruments_[current_id_].getIonSources().back().setMetaValue(
"cone voltage", termValue);
2580 else if (accession ==
"MS:1000877")
2583 instruments_[current_id_].getIonSources().back().setMetaValue(
"tube lens", termValue);
2586 else if (accession ==
"MS:1000843")
2589 instruments_[current_id_].getIonSources().back().setMetaValue(
"wavelength", termValue);
2591 else if (accession ==
"MS:1000844")
2594 instruments_[current_id_].getIonSources().back().setMetaValue(
"focus diameter x", termValue);
2596 else if (accession ==
"MS:1000845")
2599 instruments_[current_id_].getIonSources().back().setMetaValue(
"focus diameter y", termValue);
2601 else if (accession ==
"MS:1000846")
2604 instruments_[current_id_].getIonSources().back().setMetaValue(
"pulse energy", termValue);
2606 else if (accession ==
"MS:1000847")
2609 instruments_[current_id_].getIonSources().back().setMetaValue(
"pulse duration", termValue);
2611 else if (accession ==
"MS:1000848")
2614 instruments_[current_id_].getIonSources().back().setMetaValue(
"attenuation", termValue);
2616 else if (accession ==
"MS:1000849")
2619 instruments_[current_id_].getIonSources().back().setMetaValue(
"impact angle", termValue);
2622 else if (accession ==
"MS:1000850")
2625 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"gas laser");
2627 else if (accession ==
"MS:1000851")
2630 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"solid-state laser");
2632 else if (accession ==
"MS:1000852")
2635 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"dye-laser");
2637 else if (accession ==
"MS:1000853")
2640 instruments_[current_id_].getIonSources().back().setMetaValue(
"laser type",
"free electron laser");
2643 else if (accession ==
"MS:1000834")
2646 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix solution", termValue);
2648 else if (accession ==
"MS:1000835")
2651 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix solution concentration", termValue);
2654 else if (accession ==
"MS:1000836")
2657 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"dried dropplet");
2659 else if (accession ==
"MS:1000837")
2662 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"printed");
2664 else if (accession ==
"MS:1000838")
2667 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
"sprayed");
2669 else if (accession ==
"MS:1000839")
2672 instruments_[current_id_].getIonSources().back().setMetaValue(
"matrix application type",
" precoated plate");
2675 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2677 else if (parent_tag ==
"analyzer")
2680 if (accession ==
"MS:1000079")
2684 else if (accession ==
"MS:1000080")
2688 else if (accession ==
"MS:1000081")
2692 else if (accession ==
"MS:1000084")
2696 else if (accession ==
"MS:1000254")
2700 else if (accession ==
"MS:1000264")
2702 instruments_[current_id_].getMassAnalyzers().back().setType(
MassAnalyzer::IT);
2704 else if (accession ==
"MS:1000284")
2708 else if (accession ==
"MS:1000288")
2712 else if (accession ==
"MS:1000484")
2716 else if (accession ==
"MS:1000078")
2720 else if (accession ==
"MS:1000082")
2724 else if (accession ==
"MS:1000083")
2728 else if (accession ==
"MS:1000291")
2732 else if (accession ==
"MS:1000443")
2737 else if (accession ==
"MS:1000014")
2739 instruments_[current_id_].getMassAnalyzers().back().setAccuracy(value.
toDouble());
2741 else if (accession ==
"MS:1000022")
2743 instruments_[current_id_].getMassAnalyzers().back().setTOFTotalPathLength(value.
toDouble());
2745 else if (accession ==
"MS:1000024")
2747 instruments_[current_id_].getMassAnalyzers().back().setFinalMSExponent(value.
toInt());
2749 else if (accession ==
"MS:1000025")
2751 instruments_[current_id_].getMassAnalyzers().back().setMagneticFieldStrength(value.
toDouble());
2753 else if (accession ==
"MS:1000105")
2755 instruments_[current_id_].getMassAnalyzers().back().setReflectronState(
MassAnalyzer::OFF);
2757 else if (accession ==
"MS:1000106")
2759 instruments_[current_id_].getMassAnalyzers().back().setReflectronState(
MassAnalyzer::ON);
2762 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2764 else if (parent_tag ==
"detector")
2767 if (accession ==
"MS:1000107")
2771 else if (accession ==
"MS:1000110")
2775 else if (accession ==
"MS:1000112")
2779 else if (accession ==
"MS:1000114")
2783 else if (accession ==
"MS:1000115")
2787 else if (accession ==
"MS:1000116")
2791 else if (accession ==
"MS:1000253")
2795 else if (accession ==
"MS:1000345")
2799 else if (accession ==
"MS:1000346")
2803 else if (accession ==
"MS:1000347")
2807 else if (accession ==
"MS:1000348")
2811 else if (accession ==
"MS:1000349")
2815 else if (accession ==
"MS:1000350")
2819 else if (accession ==
"MS:1000351")
2823 else if (accession ==
"MS:1000621")
2827 else if (accession ==
"MS:1000624")
2831 else if (accession ==
"MS:1000108")
2835 else if (accession ==
"MS:1000109")
2839 else if (accession ==
"MS:1000111")
2843 else if (accession ==
"MS:1000113")
2847 else if (accession ==
"MS:1000026")
2852 else if (accession ==
"MS:1000028")
2854 instruments_[current_id_].getIonDetectors().back().setResolution(value.
toDouble());
2856 else if (accession ==
"MS:1000029")
2858 instruments_[current_id_].getIonDetectors().back().setADCSamplingFrequency(value.
toDouble());
2861 else if (accession ==
"MS:1000117")
2863 instruments_[current_id_].getIonDetectors().back().setAcquisitionMode(
IonDetector::ADC);
2865 else if (accession ==
"MS:1000118")
2869 else if (accession ==
"MS:1000119")
2871 instruments_[current_id_].getIonDetectors().back().setAcquisitionMode(
IonDetector::TDC);
2873 else if (accession ==
"MS:1000120")
2878 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2880 else if (parent_tag ==
"processingMethod")
2883 if (accession ==
"MS:1000629")
2885 processing_[current_id_].back().setMetaValue(
"low_intensity_threshold", termValue);
2887 else if (accession ==
"MS:1000631")
2889 processing_[current_id_].back().setMetaValue(
"high_intensity_threshold", termValue);
2891 else if (accession ==
"MS:1000787")
2893 processing_[current_id_].back().setMetaValue(
"inclusive_low_intensity_threshold", termValue);
2895 else if (accession ==
"MS:1000788")
2897 processing_[current_id_].back().setMetaValue(
"inclusive_high_intensity_threshold", termValue);
2899 else if (accession ==
"MS:1000747")
2901 processing_[current_id_].back().setCompletionTime(asDateTime_(value));
2904 else if (accession ==
"MS:1000530")
2908 else if (accession ==
"MS:1000544")
2912 else if (accession ==
"MS:1000545")
2916 else if (accession ==
"MS:1000546")
2920 else if (accession ==
"MS:1000741")
2925 else if (accession ==
"MS:1000543")
2929 else if (accession ==
"MS:1000033")
2933 else if (accession ==
"MS:1000034")
2937 else if (accession ==
"MS:1000035" || cv_.isChildOf(accession,
"MS:1000035"))
2941 else if (accession ==
"MS:1000592" || cv_.isChildOf(accession,
"MS:1000592"))
2945 else if (accession ==
"MS:1000778" || cv_.isChildOf(accession,
"MS:1000778"))
2949 else if (accession ==
"MS:1000780" || cv_.isChildOf(accession,
"MS:1000780"))
2953 else if (accession ==
"MS:1000593")
2957 else if (accession ==
"MS:1000745")
2961 else if (accession ==
"MS:1001484")
2965 else if (accession ==
"MS:1001485")
2969 else if (accession ==
"MS:1001486" || cv_.isChildOf(accession,
"MS:1001486"))
2974 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2976 else if (parent_tag ==
"fileContent")
2978 if (cv_.isChildOf(accession,
"MS:1000524"))
2983 else if (cv_.isChildOf(accession,
"MS:1000525"))
2989 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
2991 else if (parent_tag ==
"software")
2993 if (cv_.isChildOf(accession,
"MS:1000531"))
2995 if (accession ==
"MS:1000799")
2997 software_[current_id_].setName(value);
3001 software_[current_id_].setName(name);
3006 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3010 else if (parent_tag ==
"chromatogram")
3012 if (accession ==
"MS:1000810")
3016 else if (accession ==
"MS:1000235")
3020 else if (accession ==
"MS:1000627")
3024 else if (accession ==
"MS:1000628")
3028 else if (accession ==
"MS:1001472")
3032 else if (accession ==
"MS:1001473")
3036 else if (accession ==
"MS:1001474")
3040 else if (accession ==
"MS:1000811")
3044 else if (accession ==
"MS:1000812")
3048 else if (accession ==
"MS:1000813")
3052 else if (accession ==
"MS:1000809")
3054 chromatogram_.setName(value);
3057 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3059 else if (parent_tag ==
"target")
3064 warning(LOAD,
String(
"Unhandled cvParam '") + accession +
"' in tag '" + parent_tag +
"'.");
3067 template <
typename MapType>
3073 if (type ==
"xsd:double" || type ==
"xsd:float")
3078 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")
3089 if (parent_tag ==
"run")
3091 exp_->setMetaValue(name, data_value);
3093 else if (parent_tag ==
"instrumentConfiguration")
3095 instruments_[current_id_].setMetaValue(name, data_value);
3097 else if (parent_tag ==
"source")
3099 instruments_[current_id_].getIonSources().back().setMetaValue(name, data_value);
3101 else if (parent_tag ==
"analyzer")
3103 instruments_[current_id_].getMassAnalyzers().back().setMetaValue(name, data_value);
3105 else if (parent_tag ==
"detector")
3107 instruments_[current_id_].getIonDetectors().back().setMetaValue(name, data_value);
3109 else if (parent_tag ==
"sample")
3111 samples_[current_id_].setMetaValue(name, data_value);
3113 else if (parent_tag ==
"software")
3115 software_[current_id_].setMetaValue(name, data_value);
3117 else if (parent_tag ==
"contact")
3119 exp_->getContacts().back().setMetaValue(name, data_value);
3121 else if (parent_tag ==
"sourceFile")
3123 source_files_[current_id_].setMetaValue(name, data_value);
3125 else if (parent_tag ==
"binaryDataArray")
3127 data_.back().meta.setMetaValue(name, data_value);
3129 else if (parent_tag ==
"spectrum")
3131 spec_.setMetaValue(name, data_value);
3133 else if (parent_tag ==
"chromatogram")
3135 chromatogram_.setMetaValue(name, data_value);
3137 else if (parent_tag ==
"scanList")
3139 spec_.getAcquisitionInfo().setMetaValue(name, data_value);
3141 else if (parent_tag ==
"scan")
3143 spec_.getAcquisitionInfo().back().setMetaValue(name, data_value);
3145 else if (parent_tag ==
"scanWindow")
3147 spec_.getInstrumentSettings().getScanWindows().back().setMetaValue(name, data_value);
3149 else if (parent_tag ==
"isolationWindow")
3152 if (parent_parent_tag ==
"precursor")
3154 if (in_spectrum_list_)
3156 spec_.getPrecursors().back().setMetaValue(name, data_value);
3160 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3163 else if (parent_parent_tag ==
"product")
3165 if (in_spectrum_list_)
3167 spec_.getProducts().back().setMetaValue(name, data_value);
3171 chromatogram_.getProduct().setMetaValue(name, data_value);
3175 else if (parent_tag ==
"selectedIon")
3178 if (selected_ion_count_ > 1)
3182 if (in_spectrum_list_)
3184 spec_.getPrecursors().back().setMetaValue(name, data_value);
3188 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3191 else if (parent_tag ==
"activation")
3194 if (in_spectrum_list_)
3196 spec_.getPrecursors().back().setMetaValue(name, data_value);
3200 chromatogram_.getPrecursor().setMetaValue(name, data_value);
3203 else if (parent_tag ==
"processingMethod")
3205 processing_[current_id_].back().setMetaValue(name, data_value);
3207 else if (parent_tag ==
"fileContent")
3212 warning(LOAD,
String(
"Unhandled userParam '") + name +
"' in tag '" + parent_tag +
"'.");
3215 template <
typename MapType>
3225 return validator.SemanticValidator::locateTerm(path, sc);
3228 template <
typename MapType>
3231 String cvTerm =
"<cvParam cvRef=\"" + c.
id.
prefix(
':') +
"\" accession=\"" + c.
id +
"\" name=\"" + c.
name;
3236 cvTerm +=
"\" value=\"" + stringMetaValue;
3242 cvTerm +=
"\" unitAccession=\"" + unit.
id +
"\" unitName=\"" + unit.
name +
"\" unitCvRef=\"" + unit.
id.
prefix(2);
3249 template <
typename MapType>
3252 std::vector<String> cvParams;
3253 std::vector<String> userParams;
3255 std::vector<String> keys;
3258 for (std::vector<String>::iterator key = keys.begin(); key != keys.end(); ++key)
3263 if (*key ==
"GO cellular component" || *key ==
"brenda source tissue")
3268 if (cv_.hasTermWithName((
String) metaValue))
3279 bool writtenAsCVTerm =
false;
3280 if (cv_.hasTermWithName(*key))
3283 if (validateCV_(c, path, validator))
3286 cvParams.push_back(writeCV_(c, meta.
getMetaValue(*key)));
3287 writtenAsCVTerm =
true;
3292 if (!writtenAsCVTerm)
3294 String userParam =
"<userParam name=\"" + *key +
"\" type=\"";
3300 userParam +=
"xsd:integer";
3304 userParam +=
"xsd:double";
3308 userParam +=
"xsd:string";
3312 userParam +=
"\" value=\"" + s +
"\"/>" +
"\n";
3314 userParams.push_back(userParam);
3320 for (std::vector<String>::iterator term = cvParams.begin(); term != cvParams.end(); ++term)
3322 os <<
String(indent,
'\t') << *term;
3325 for (std::vector<String>::iterator term = userParams.begin(); term != userParams.end(); ++term)
3327 os <<
String(indent,
'\t') << *term;
3331 template <
typename MapType>
3334 std::set<String> terms;
3335 cv_.getAllChildTerms(terms, parent_accession);
3336 for (std::set<String>::const_iterator it = terms.begin(); it != terms.end(); ++it)
3338 if (cv_.getTerm(*it).name == name)
3340 return cv_.getTerm(*it);
3346 template <
typename MapType>
3349 os <<
"\t\t<software id=\"" <<
id <<
"\" version=\"" << software.
getVersion() <<
"\" >\n";
3351 if (so_term.
id ==
"MS:1000799")
3353 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000799\" name=\"custom unreleased software tool\" value=\"\" />\n";
3355 else if (so_term.
id !=
"")
3357 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"" << so_term.
id <<
"\" name=\"" << so_term.
name <<
"\" />\n";
3361 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000799\" name=\"custom unreleased software tool\" value=\"" << software.
getName() <<
"\" />\n";
3363 writeUserParam_(os, software, 3,
"/mzML/Software/cvParam/@accession", validator);
3364 os <<
"\t\t</software>\n";
3367 template <
typename MapType>
3370 os <<
"\t\t\t<sourceFile id=\"" <<
id <<
"\" name=\"" << source_file.
getNameOfFile() <<
"\" location=\"" << source_file.
getPathToFile() <<
"\">\n";
3374 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000569\" name=\"SHA-1\" value=\"" << source_file.
getChecksum() <<
"\" />\n";
3378 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000568\" name=\"MD5\" value=\"" << source_file.
getChecksum() <<
"\" />\n";
3382 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000569\" name=\"SHA-1\" value=\"\" />\n";
3386 if (ft_term.
id !=
"")
3388 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << ft_term.
id <<
"\" name=\"" << ft_term.
name <<
"\" />\n";
3392 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000564\" name=\"PSI mzData file\" />\n";
3396 if (id_term.
id !=
"")
3398 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << id_term.
id <<
"\" name=\"" << id_term.
name <<
"\" />\n";
3402 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000777\" name=\"spectrum identifier nativeID format\" />\n";
3404 writeUserParam_(os, source_file, 4,
"/mzML/fileDescription/sourceFileList/sourceFile/cvParam/@accession", validator);
3405 os <<
"\t\t\t</sourceFile>\n";
3408 template <
typename MapType>
3411 os <<
"\t\t<dataProcessing id=\"" <<
id <<
"\">\n";
3416 os <<
"\t\t\t<processingMethod order=\"0\" softwareRef=\"so_default\">\n";
3417 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000544\" name=\"Conversion to mzML\" />\n";
3418 os <<
"\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"fictional processing method used to fulfill format requirements\" />\n";
3419 os <<
"\t\t\t</processingMethod>\n";
3422 bool written =
false;
3423 for (
Size i = 0; i < dps.size(); ++i)
3426 os <<
"\t\t\t<processingMethod order=\"0\" softwareRef=\"so_" <<
id <<
"_pm_" << i <<
"\">\n";
3429 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000543\" name=\"data processing action\" />\n";
3434 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000034\" name=\"charge deconvolution\" />\n";
3439 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000033\" name=\"deisotoping\" />\n";
3444 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000592\" name=\"smoothing\" />\n";
3449 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000778\" name=\"charge state calculation\" />\n";
3454 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000780\" name=\"precursor recalculation\" />\n";
3459 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000593\" name=\"baseline reduction\" />\n";
3464 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000035\" name=\"peak picking\" />\n";
3469 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000745\" name=\"retention time alignment\" />\n";
3474 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001485\" name=\"m/z calibration\" />\n";
3479 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001484\" name=\"intensity normalization\" />\n";
3484 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001486\" name=\"data filtering\" />\n";
3490 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000530\" name=\"file format conversion\" />\n";
3495 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000546\" name=\"Conversion to mzData\" />\n";
3500 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000544\" name=\"Conversion to mzML\" />\n";
3505 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000545\" name=\"Conversion to mzXML\" />\n";
3510 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000741\" name=\"Conversion to dta\" />\n";
3515 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000543\" name=\"data processing action\" />\n";
3519 if (dps[i].getCompletionTime().isValid())
3521 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";
3524 writeUserParam_(os, dps[i], 4,
"/mzML/dataProcessingList/dataProcessing/processingMethod/cvParam/@accession", validator);
3525 os <<
"\t\t\t</processingMethod>\n";
3528 os <<
"\t\t</dataProcessing>\n";
3531 template <
typename MapType>
3534 os <<
"\t\t\t\t\t<precursor>\n";
3538 os <<
"\t\t\t\t\t\t<isolationWindow>\n";
3539 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";
3540 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";
3541 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";
3542 os <<
"\t\t\t\t\t\t</isolationWindow>\n";
3548 os <<
"\t\t\t\t\t\t<selectedIonList count=\"1\">\n";
3549 os <<
"\t\t\t\t\t\t\t<selectedIon>\n";
3550 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";
3551 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000041\" name=\"charge state\" value=\"" << precursor.
getCharge() <<
"\" />\n";
3552 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";
3555 os <<
"\t\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000633\" name=\"possible charge state\" value=\"" << precursor.
getPossibleChargeStates()[j] <<
"\" />\n";
3558 os <<
"\t\t\t\t\t\t\t</selectedIon>\n";
3559 os <<
"\t\t\t\t\t\t</selectedIonList>\n";
3564 os <<
"\t\t\t\t\t\t<activation>\n";
3567 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";
3571 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000133\" name=\"collision-induced dissociation\" />\n";
3575 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000134\" name=\"plasma desorption\" />\n";
3579 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000135\" name=\"post-source decay\" />\n";
3583 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000136\" name=\"surface-induced dissociation\" />\n";
3587 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000242\" name=\"blackbody infrared radiative dissociation\" />\n";
3591 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000250\" name=\"electron capture dissociation\" />\n";
3595 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000262\" name=\"infrared multiphoton dissociation\" />\n";
3599 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000282\" name=\"sustained off-resonance irradiation\" />\n";
3603 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000422\" name=\"high-energy collision-induced dissociation\" />\n";
3607 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000433\" name=\"low-energy collision-induced dissociation\" />\n";
3611 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000435\" name=\"photodissociation\" />\n";
3615 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000598\" name=\"electron transfer dissociation\" />\n";
3619 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000599\" name=\"pulsed q dissociation\" />\n";
3623 os <<
"\t\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000044\" name=\"dissociation method\" />\n";
3626 writeUserParam_(os, precursor, 6,
"/mzML/run/spectrumList/spectrum/precursorList/precursor/activation/cvParam/@accession", validator);
3627 os <<
"\t\t\t\t\t\t</activation>\n";
3628 os <<
"\t\t\t\t\t</precursor>\n";
3632 template <
typename MapType>
3635 os <<
"\t\t\t\t\t<product>\n";
3636 os <<
"\t\t\t\t\t\t<isolationWindow>\n";
3637 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";
3638 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";
3639 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";
3640 writeUserParam_(os, product, 7,
"/mzML/run/spectrumList/spectrum/productList/product/isolationWindow/cvParam/@accession", validator);
3641 os <<
"\t\t\t\t\t\t</isolationWindow>\n";
3642 os <<
"\t\t\t\t\t</product>\n";
3645 template <
typename MapType>
3648 const MapType& exp = *(cexp_);
3649 logger_.startProgress(0, exp.size() + exp.getChromatograms().size(),
"storing mzML file");
3653 std::vector<std::vector<DataProcessing> > dps;
3657 writeHeader_(os, exp, dps, validator);
3662 if (exp.size() != 0)
3668 os <<
"\t\t<spectrumList count=\"" << exp.size() <<
"\" defaultDataProcessingRef=\"dp_sp_0\">\n";
3671 bool renew_native_ids =
false;
3672 for (
Size s = 0; s < exp.size(); ++s)
3674 if (!exp[s].getNativeID().has(
'='))
3676 renew_native_ids =
true;
3681 if (renew_native_ids)
3683 warning(STORE,
String(
"Invalid native IDs detected. Using spectrum identifier nativeID format (spectrum=xsd:nonNegativeInteger) for all spectra."));
3687 for (
Size s = 0; s < exp.size(); ++s)
3689 logger_.setProgress(progress++);
3691 writeSpectrum_(os, spec, s, validator, renew_native_ids, dps);
3693 os <<
"\t\t</spectrumList>\n";
3699 if (!exp.getChromatograms().empty())
3705 os <<
"\t\t<chromatogramList count=\"" << exp.getChromatograms().size() <<
"\" defaultDataProcessingRef=\"dp_sp_0\">\n";
3706 for (
Size c = 0;
c != exp.getChromatograms().size(); ++
c)
3708 logger_.setProgress(progress++);
3710 writeChromatogram_(os, chromatogram,
c, validator);
3712 os <<
"\t\t</chromatogramList>" <<
"\n";
3716 logger_.endProgress();
3719 template <
typename MapType>
3723 os <<
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
3724 <<
"<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=\"" << exp.getIdentifier() <<
"\" version=\"" << version_ <<
"\">\n";
3728 os <<
"\t<cvList count=\"5\">\n"
3729 <<
"\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"
3730 <<
"\t\t<cv id=\"UO\" fullName=\"Unit Ontology\" URI=\"http://obo.cvs.sourceforge.net/obo/obo/ontology/phenotype/unit.obo\"/>\n"
3731 <<
"\t\t<cv id=\"BTO\" fullName=\"BrendaTissue545\" version=\"unknown\" URI=\"http://www.brenda-enzymes.info/ontology/tissue/tree/update/update_files/BrendaTissueOBO\"/>\n"
3732 <<
"\t\t<cv id=\"GO\" fullName=\"Gene Ontology - Slim Versions\" version=\"unknown\" URI=\"http://www.geneontology.org/GO_slims/goslim_goa.obo\"/>\n"
3733 <<
"\t\t<cv id=\"PATO\" fullName=\"Quality ontology\" version=\"unknown\" URI=\"http://obo.cvs.sourceforge.net/*checkout*/obo/obo/ontology/phenotype/quality.obo\"/>\n"
3738 os <<
"\t<fileDescription>\n";
3739 os <<
"\t\t<fileContent>\n";
3741 for (
Size i = 0; i < exp.size(); ++i)
3743 ++file_content[exp[i].getInstrumentSettings().getScanMode()];
3747 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
3751 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000579\" name=\"MS1 spectrum\" />\n";
3755 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000580\" name=\"MSn spectrum\" />\n";
3759 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000582\" name=\"SIM spectrum\" />\n";
3763 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000583\" name=\"SRM spectrum\" />\n";
3767 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000581\" name=\"CRM spectrum\" />\n";
3771 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000341\" name=\"precursor ion spectrum\" />\n";
3775 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000325\" name=\"constant neutral gain spectrum\" />\n";
3779 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000326\" name=\"constant neutral loss spectrum\" />\n";
3783 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000804\" name=\"electromagnetic radiation spectrum\" />\n";
3787 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000805\" name=\"emission spectrum\" />\n";
3791 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000806\" name=\"absorption spectrum\" />\n";
3795 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"enhanced multiply charged spectrum\" />\n";
3799 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"time-delayed fragmentation spectrum\" />\n";
3803 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
3806 os <<
"\t\t</fileContent>\n";
3811 UInt sf_sp_count = 0;
3812 for (
Size i = 0; i < exp.size(); ++i)
3817 if (exp.getSourceFiles().size() > 0 || sf_sp_count > 0)
3819 os <<
"\t\t<sourceFileList count=\"" << exp.getSourceFiles().size() + sf_sp_count <<
"\">\n";
3821 for (
Size i=0; i<exp.getSourceFiles().size(); ++i)
3823 writeSourceFile_(os,
String(
"sf_ru_") +
String(i), exp.getSourceFiles()[i], validator);
3826 if (sf_sp_count > 0 )
3829 for (
Size i = 0; i < exp.size(); ++i)
3831 if (exp[i].getSourceFile() != sf_default)
3833 writeSourceFile_(os,
String(
"sf_sp_") + i, exp[i].getSourceFile(), validator);
3837 os <<
"\t\t</sourceFileList>\n";
3842 for (
Size i = 0; i < exp.getContacts().size(); ++i)
3845 os <<
"\t\t<contact>\n";
3846 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000586\" name=\"contact name\" value=\"" << cp.
getLastName() <<
", " << cp.
getFirstName() <<
"\" />\n";
3847 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000590\" name=\"contact organization\" value=\"" << cp.
getInstitution() <<
"\" />\n";
3851 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000587\" name=\"contact address\" value=\"" << cp.
getAddress() <<
"\" />\n";
3855 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000588\" name=\"contact URL\" value=\"" << cp.
getURL() <<
"\" />\n";
3859 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000589\" name=\"contact email\" value=\"" << cp.
getEmail() <<
"\" />\n";
3863 os <<
"\t\t\t<userParam name=\"contact_info\" type=\"xsd:string\" value=\"" << cp.
getContactInfo() <<
"\" />\n";
3865 writeUserParam_(os, cp, 3,
"/mzML/fileDescription/contact/cvParam/@accession", validator);
3866 os <<
"\t\t</contact>\n";
3868 os <<
"\t</fileDescription>\n";
3872 const Sample& sa = exp.getSample();
3873 os <<
"\t<sampleList count=\"1\">\n";
3874 os <<
"\t\t<sample id=\"sa_0\" name=\"" << sa.
getName() <<
"\">\n";
3877 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000001\" name=\"sample number\" value=\"" << sa.
getNumber() <<
"\" />\n";
3879 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000004\" name=\"sample mass\" value=\"" << sa.
getMass() <<
"\" unitAccession=\"UO:0000021\" unitName=\"gram\" unitCvRef=\"UO\" />\n";
3880 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000005\" name=\"sample volume\" value=\"" << sa.
getVolume() <<
"\" unitAccession=\"UO:0000098\" unitName=\"milliliter\" unitCvRef=\"UO\" />\n";
3881 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";
3884 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000047\" name=\"emulsion\" />\n";
3888 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000048\" name=\"gas\" />\n";
3892 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000049\" name=\"liquid\" />\n";
3896 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000050\" name=\"solid\" />\n";
3900 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000051\" name=\"solution\" />\n";
3904 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000052\" name=\"suspension\" />\n";
3908 os <<
"\t\t\t<userParam name=\"comment\" type=\"xsd:string\" value=\"" << sa.
getComment() <<
"\" />\n";
3910 writeUserParam_(os, sa, 3,
"/mzML/sampleList/sample/cvParam/@accession", validator);
3911 os <<
"\t\t</sample>\n";
3912 os <<
"\t</sampleList>\n";
3919 Size num_software(2);
3920 for (
Size s = 0; s < exp.size(); ++s)
3922 if (find(dps.begin(), dps.end(), exp[s].getDataProcessing()) == dps.end())
3924 dps.push_back(exp[s].getDataProcessing());
3925 num_software += exp[s].getDataProcessing().size();
3928 for (
Size s = 0; s < exp.getChromatograms().size(); ++s)
3930 if (find(dps.begin(), dps.end(), exp.getChromatograms()[s].getDataProcessing()) == dps.end())
3932 dps.push_back(exp.getChromatograms()[s].getDataProcessing());
3933 num_software += exp.getChromatograms()[s].getDataProcessing().size();
3938 Size num_bi_software(0);
3940 for (
Size s = 0; s < exp.size(); ++s)
3942 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
3944 for (
Size i = 0; i < exp[s].getFloatDataArrays()[m].getDataProcessing().size(); ++i)
3951 os <<
"\t<softwareList count=\"" << num_software + num_bi_software <<
"\">\n";
3953 writeSoftware_(os,
"so_in_0", exp.getInstrument().getSoftware(), validator);
3956 writeSoftware_(os,
"so_default",
Software(), validator);
3959 for (
Size s1 = 0; s1 != dps.size(); ++s1)
3961 for (
Size s2 = 0; s2 != dps[s1].size(); ++s2)
3963 writeSoftware_(os,
String(
"so_dp_sp_") + s1 +
"_pm_" + s2, dps[s1][s2].getSoftware(), validator);
3968 for (
Size s = 0; s < exp.size(); ++s)
3970 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
3972 for (
Size i = 0; i < exp[s].getFloatDataArrays()[m].getDataProcessing().size(); ++i)
3974 writeSoftware_(os,
String(
"so_dp_sp_") + s +
"_bi_" + m +
"_pm_" + i, exp[s].getFloatDataArrays()[m].getDataProcessing()[i].getSoftware(), validator);
3978 os <<
"\t</softwareList>\n";
3984 os <<
"\t<instrumentConfigurationList count=\"1\">\n";
3985 os <<
"\t\t<instrumentConfiguration id=\"ic_0\">\n";
3987 if (in_term.
id !=
"")
3989 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"" << in_term.
id <<
"\" name=\"" << in_term.
name <<
"\" />\n";
3993 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000031\" name=\"instrument model\" />\n";
3998 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000032\" name=\"customization\" value=\"" << in.
getCustomizations() <<
"\" />\n";
4004 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000221\" name=\"magnetic deflection\" />\n";
4008 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000246\" name=\"delayed extraction\" />\n";
4012 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000275\" name=\"collision quadrupole\" />\n";
4016 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000281\" name=\"selected ion flow tube\" />\n";
4020 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000286\" name=\"time lag focusing\" />\n";
4024 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000300\" name=\"reflectron\" />\n";
4028 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000307\" name=\"einzel lens\" />\n";
4032 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000309\" name=\"first stability region\" />\n";
4036 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000310\" name=\"fringing field\" />\n";
4040 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000311\" name=\"kinetic energy analyzer\" />\n";
4044 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000320\" name=\"static field\" />\n";
4047 writeUserParam_(os, in, 3,
"/mzML/instrumentConfigurationList/instrumentConfiguration/cvParam/@accession", validator);
4049 if (component_count != 0)
4051 os <<
"\t\t\t<componentList count=\"" << (std::max)((
Size)3, component_count) <<
"\">\n";
4058 os <<
"\t\t\t\t<source order=\"" << so.
getOrder() <<
"\">\n";
4062 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000055\" name=\"continuous flow fast atom bombardment\" />\n";
4066 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000056\" name=\"direct inlet\" />\n";
4070 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000057\" name=\"electrospray inlet\" />\n";
4074 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000058\" name=\"flow injection analysis\" />\n";
4078 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000059\" name=\"inductively coupled plasma\" />\n";
4082 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000060\" name=\"infusion\" />\n";
4086 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000061\" name=\"jet separator\" />\n";
4090 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000062\" name=\"membrane separator\" />\n";
4094 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000063\" name=\"moving belt\" />\n";
4098 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000064\" name=\"moving wire\" />\n";
4102 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000065\" name=\"open split\" />\n";
4106 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000066\" name=\"particle beam\" />\n";
4110 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000067\" name=\"reservoir\" />\n";
4114 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000068\" name=\"septum\" />\n";
4118 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000069\" name=\"thermospray inlet\" />\n";
4122 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000248\" name=\"direct insertion probe\" />\n";
4126 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000249\" name=\"direct liquid introduction\" />\n";
4130 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000396\" name=\"membrane inlet\" />\n";
4134 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000485\" name=\"nanospray inlet\" />\n";
4139 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000070\" name=\"atmospheric pressure chemical ionization\" />\n";
4143 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000071\" name=\"chemical ionization\" />\n";
4147 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000073\" name=\"electrospray ionization\" />\n";
4151 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000074\" name=\"fast atom bombardment ionization\" />\n";
4155 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000075\" name=\"matrix-assisted laser desorption ionization\" />\n";
4159 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000227\" name=\"multiphoton ionization\" />\n";
4163 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000239\" name=\"atmospheric pressure matrix-assisted laser desorption ionization\" />\n";
4167 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000240\" name=\"atmospheric pressure ionization\" />\n";
4171 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000247\" name=\"desorption ionization\" />\n";
4175 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000255\" name=\"flowing afterglow\" />\n";
4179 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000257\" name=\"field desorption\" />\n";
4183 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000258\" name=\"field ionization\" />\n";
4187 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000259\" name=\"glow discharge ionization\" />\n";
4191 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000271\" name=\"Negative ion chemical ionization\" />\n";
4195 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000272\" name=\"neutralization reionization mass spectrometry\" />\n";
4199 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000273\" name=\"photoionization\" />\n";
4203 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000274\" name=\"pyrolysis mass spectrometry\" />\n";
4207 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000276\" name=\"resonance enhanced multiphoton ionization\" />\n";
4211 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000278\" name=\"surface enhanced laser desorption ionization\" />\n";
4215 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000279\" name=\"surface enhanced neat desorption\" />\n";
4219 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000380\" name=\"adiabatic ionization\" />\n";
4223 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000381\" name=\"associative ionization\" />\n";
4227 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000382\" name=\"atmospheric pressure photoionization\" />\n";
4231 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000383\" name=\"autodetachment\" />\n";
4235 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000384\" name=\"autoionization\" />\n";
4239 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000385\" name=\"charge exchange ionization\" />\n";
4243 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000386\" name=\"chemi-ionization\" />\n";
4247 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000387\" name=\"desorption/ionization on silicon\" />\n";
4251 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000388\" name=\"dissociative ionization\" />\n";
4255 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000389\" name=\"electron ionization\" />\n";
4259 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000393\" name=\"laser desorption ionization\" />\n";
4263 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000395\" name=\"liquid secondary ionization\" />\n";
4267 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000397\" name=\"microelectrospray\" />\n";
4271 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000398\" name=\"nanoelectrospray\" />\n";
4275 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000399\" name=\"penning ionization\" />\n";
4279 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000400\" name=\"plasma desorption ionization\" />\n";
4283 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000402\" name=\"secondary ionization\" />\n";
4287 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000403\" name=\"soft ionization\" />\n";
4291 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000404\" name=\"spark ionization\" />\n";
4295 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000405\" name=\"surface-assisted laser desorption ionization\" />\n";
4299 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000406\" name=\"surface ionization\" />\n";
4303 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000407\" name=\"thermal ionization\" />\n";
4307 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000408\" name=\"vertical ionization\" />\n";
4311 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000446\" name=\"fast ion bombardment\" />\n";
4315 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000008\" name=\"ionization type\" />\n";
4318 writeUserParam_(os, so, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/source/cvParam/@accession", validator);
4319 os <<
"\t\t\t\t</source>\n";
4324 os <<
"\t\t\t\t<source order=\"1234\">\n";
4325 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000446\" name=\"fast ion bombardment\" />\n";
4326 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented ion source, to fulfill mzML schema\" />\n";
4327 os <<
"\t\t\t\t</source>\n";
4335 os <<
"\t\t\t\t<analyzer order=\"" << ma.
getOrder() <<
"\">\n";
4337 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";
4339 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";
4340 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000024\" name=\"final MS exponent\" value=\"" << ma.
getFinalMSExponent() <<
"\" />\n";
4341 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";
4345 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000106\" name=\"reflectron on\" />\n";
4350 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000105\" name=\"reflectron off\" />\n";
4355 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000079\" name=\"fourier transform ion cyclotron resonance mass spectrometer\" />\n";
4359 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000080\" name=\"magnetic sector\" />\n";
4363 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000081\" name=\"quadrupole\" />\n";
4367 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000084\" name=\"time-of-flight\" />\n";
4371 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000254\" name=\"electrostatic energy analyzer\" />\n";
4375 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000264\" name=\"ion trap\" />\n";
4379 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000284\" name=\"stored waveform inverse fourier transform\" />\n";
4383 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000288\" name=\"cyclotron\" />\n";
4387 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000484\" name=\"orbitrap\" />\n";
4391 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000078\" name=\"axial ejection linear ion trap\" />\n";
4395 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000082\" name=\"quadrupole ion trap\" />\n";
4399 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000083\" name=\"radial ejection linear ion trap\" />\n";
4403 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000291\" name=\"linear ion trap\" />\n";
4407 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000443\" name=\"mass analyzer type\" />\n";
4410 writeUserParam_(os, ma, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/analyzer/cvParam/@accession", validator);
4411 os <<
"\t\t\t\t</analyzer>\n";
4416 os <<
"\t\t\t\t<analyzer order=\"1234\">\n";
4417 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000288\" name=\"cyclotron\" />\n";
4418 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented mass analyzer, to fulfill mzML schema\" />\n";
4419 os <<
"\t\t\t\t</analyzer>\n";
4427 os <<
"\t\t\t\t<detector order=\"" <<
id.getOrder() <<
"\">\n";
4429 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000028\" name=\"detector resolution\" value=\"" <<
id.getResolution() <<
"\" />\n";
4430 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";
4434 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000117\" name=\"analog-digital converter\" />\n";
4438 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000118\" name=\"pulse counting\" />\n";
4442 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000119\" name=\"time-digital converter\" />\n";
4446 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000120\" name=\"transient recorder\" />\n";
4451 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000107\" name=\"channeltron\" />\n";
4455 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000110\" name=\"daly detector\" />\n";
4459 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000112\" name=\"faraday cup\" />\n";
4463 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000114\" name=\"microchannel plate detector\" />\n";
4467 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000115\" name=\"multi-collector\" />\n";
4471 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000116\" name=\"photomultiplier\" />\n";
4475 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000253\" name=\"electron multiplier\" />\n";
4479 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000345\" name=\"array detector\" />\n";
4483 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000346\" name=\"conversion dynode\" />\n";
4487 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000347\" name=\"dynode\" />\n";
4491 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000348\" name=\"focal plane collector\" />\n";
4495 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000349\" name=\"ion-to-photon detector\" />\n";
4499 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000350\" name=\"point collector\" />\n";
4503 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000351\" name=\"postacceleration detector\" />\n";
4507 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000621\" name=\"photodiode array detector\" />\n";
4511 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000624\" name=\"inductive detector\" />\n";
4515 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000108\" name=\"conversion dynode electron multiplier\" />\n";
4519 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000109\" name=\"conversion dynode photomultiplier\" />\n";
4523 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000111\" name=\"electron multiplier tube\" />\n";
4527 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000113\" name=\"focal plane array\" />\n";
4531 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000026\" name=\"detector type\" />\n";
4534 writeUserParam_(os,
id, 5,
"/mzML/instrumentConfigurationList/instrumentConfiguration/componentList/detector/cvParam/@accession", validator);
4535 os <<
"\t\t\t\t</detector>\n";
4540 os <<
"\t\t\t\t<detector order=\"1234\">\n";
4541 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000107\" name=\"channeltron\" />\n";
4542 os <<
"\t\t\t\t\t<userParam name=\"warning\" type=\"xsd:string\" value=\"invented ion detector, to fulfill mzML schema\" />\n";
4543 os <<
"\t\t\t\t</detector>\n";
4545 os <<
"\t\t\t</componentList>\n";
4547 os <<
"\t\t\t<softwareRef ref=\"so_in_0\" />\n";
4548 os <<
"\t\t</instrumentConfiguration>\n";
4549 os <<
"\t</instrumentConfigurationList>\n";
4557 for (
Size s = 0; s < exp.size(); ++s)
4559 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4565 os <<
"\t<dataProcessingList count=\"" << (std::max)((
Size)1, dps.size() + num_bi_dps) <<
"\">\n";
4569 std::vector<DataProcessing> dummy;
4570 writeDataProcessing_(os,
"dp_sp_0", dummy, validator);
4573 for (
Size s = 0; s < dps.size(); ++s)
4575 writeDataProcessing_(os,
String(
"dp_sp_") + s, dps[s], validator);
4579 for (
Size s = 0; s < exp.size(); ++s)
4581 for (
Size m = 0; m < exp[s].getFloatDataArrays().size(); ++m)
4583 writeDataProcessing_(os,
String(
"dp_sp_") + s +
"_bi_" + m, exp[s].getFloatDataArrays()[m].getDataProcessing(), validator);
4587 os <<
"\t</dataProcessingList>\n";
4595 os <<
"\t<run id=\"ru_0\" defaultInstrumentConfigurationRef=\"ic_0\" sampleRef=\"sa_0\"";
4596 if (exp.getDateTime().isValid())
4598 os <<
" startTimeStamp=\"" << exp.getDateTime().get().substitute(
' ',
'T') <<
"\"";
4600 if (exp.getSourceFiles().size() > 0)
4602 os <<
" defaultSourceFileRef=\"sf_ru_0\"";
4607 if (exp.getFractionIdentifier() !=
"")
4609 os <<
"\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000858\" name=\"fraction identifier\" value=\"" << exp.getFractionIdentifier() <<
"\" />\n";
4612 writeUserParam_(os, exp, 2,
"/mzML/run/cvParam/@accession", validator);
4616 template <
typename MapType>
4620 std::vector<std::vector<DataProcessing> > & dps)
4624 if (renew_native_ids)
4625 native_id =
String(
"spectrum=") + s;
4627 os <<
"\t\t\t<spectrum id=\"" << native_id <<
"\" index=\"" << s <<
"\" defaultArrayLength=\"" << spec.size() <<
"\"";
4630 os <<
" sourceFileRef=\"sf_sp_" << s <<
"\"";
4636 Size dp_ref_num = s;
4639 for (
Size i = 0; i < dps.size(); ++i)
4648 os <<
" dataProcessingRef=\"dp_sp_" << dp_ref_num <<
"\"";
4655 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000127\" name=\"centroid spectrum\" />\n";
4659 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000128\" name=\"profile spectrum\" />\n";
4663 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000525\" name=\"spectrum representation\" />\n";
4669 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000511\" name=\"ms level\" value=\"" << spec.
getMSLevel() <<
"\" />\n";
4673 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000497\" name=\"zoom scan\" />\n";
4679 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
4683 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000579\" name=\"MS1 spectrum\" />\n";
4687 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000580\" name=\"MSn spectrum\" />\n";
4691 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000582\" name=\"SIM spectrum\" />\n";
4695 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000583\" name=\"SRM spectrum\" />\n";
4699 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000581\" name=\"CRM spectrum\" />\n";
4703 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000341\" name=\"precursor ion spectrum\" />\n";
4707 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000325\" name=\"constant neutral gain spectrum\" />\n";
4711 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000326\" name=\"constant neutral loss spectrum\" />\n";
4715 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000804\" name=\"electromagnetic radiation spectrum\" />\n";
4719 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000805\" name=\"emission spectrum\" />\n";
4723 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000806\" name=\"absorption spectrum\" />\n";
4727 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"enhanced multiply charged spectrum\" />\n";
4731 os <<
"\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000789\" name=\"time-delayed fragmentation spectrum\" />\n";
4735 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000294\" name=\"mass spectrum\" />\n";
4741 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000129\" name=\"negative scan\" />\n";
4745 os <<
"\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000130\" name=\"positive scan\" />\n";
4748 writeUserParam_(os, spec, 4,
"/mzML/run/spectrumList/spectrum/cvParam/@accession", validator);
4754 if (ai_term.id !=
"")
4756 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << ai_term.
id <<
"\" name=\"" << ai_term.name <<
"\" />\n";
4760 os <<
"\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000795\" name=\"no combination\" />\n";
4762 writeUserParam_(os, spec.
getAcquisitionInfo(), 5,
"/mzML/run/spectrumList/spectrum/scanList/cvParam/@accession", validator);
4770 os <<
"\t\t\t\t\t<scan ";
4772 os <<
"externalSpectrumID=\"" << ac.
getIdentifier() <<
"\"";
4776 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";
4778 writeUserParam_(os, ac, 6,
"/mzML/run/spectrumList/spectrum/scanList/scan/cvParam/@accession", validator);
4785 os <<
"\t\t\t\t\t\t\t<scanWindow>\n";
4786 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";
4787 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";
4788 writeUserParam_(os, spec.
getInstrumentSettings().
getScanWindows()[j], 8,
"/mzML/run/spectrumList/spectrum/scanList/scan/scanWindowList/scanWindow/cvParam/@accession", validator);
4789 os <<
"\t\t\t\t\t\t\t</scanWindow>\n";
4791 os <<
"\t\t\t\t\t\t</scanWindowList>\n";
4793 os <<
"\t\t\t\t\t</scan>\n";
4798 os <<
"\t\t\t\t\t<scan>\n";
4799 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";
4806 os <<
"\t\t\t\t\t\t\t<scanWindow>\n";
4807 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";
4808 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";
4809 writeUserParam_(os, spec.
getInstrumentSettings().
getScanWindows()[j], 8,
"/mzML/run/spectrumList/spectrum/scanList/scan/scanWindowList/scanWindow/cvParam/@accession", validator);
4810 os <<
"\t\t\t\t\t\t\t</scanWindow>\n";
4812 os <<
"\t\t\t\t\t\t</scanWindowList>\n";
4814 os <<
"\t\t\t\t\t</scan>\n";
4816 os <<
"\t\t\t\t</scanList>\n";
4823 os <<
"\t\t\t<precursorList count=\"" << spec.
getPrecursors().size() <<
"\">\n";
4828 os <<
"\t\t\t</precursorList>\n";
4836 os <<
"\t\t\t\t<productList count=\"" << spec.
getProducts().size() <<
"\">\n";
4839 writeProduct_(os, spec.
getProducts()[p], validator);
4841 os <<
"\t\t\t\t</productList>\n";
4847 if (spec.size() != 0)
4850 if (options_.getCompression())
4852 compression_term =
"<cvParam cvRef=\"MS\" accession=\"MS:1000574\" name=\"zlib compression\" />";
4856 compression_term =
"<cvParam cvRef=\"MS\" accession=\"MS:1000576\" name=\"no compression\" />";
4863 if (options_.getMz32Bit())
4865 std::vector<Real> data_to_encode(spec.size());
4866 for (
Size p = 0; p < spec.size(); ++p)
4867 data_to_encode[p] = spec[p].getMZ();
4869 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
4870 os <<
"\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";
4871 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000521\" name=\"32-bit float\" />\n";
4875 std::vector<DoubleReal> data_to_encode(spec.size());
4876 for (
Size p = 0; p < spec.size(); ++p)
4877 data_to_encode[p] = spec[p].getMZ();
4879 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
4880 os <<
"\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";
4881 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
4884 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
4885 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
4886 os <<
"\t\t\t\t\t</binaryDataArray>\n";
4891 if (options_.getIntensity32Bit())
4893 std::vector<Real> data_to_encode(spec.size());
4894 for (
Size p = 0; p < spec.size(); ++p)
4895 data_to_encode[p] = spec[p].getIntensity();
4897 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
4898 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000515\" name=\"intensity array\" unitAccession=\"MS:1000131\" unitName=\"number of counts\" unitCvRef=\"MS\"/>\n";
4899 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000521\" name=\"32-bit float\" />\n";
4903 std::vector<DoubleReal> data_to_encode(spec.size());
4904 for (
Size p = 0; p < spec.size(); ++p)
4905 data_to_encode[p] = spec[p].getIntensity();
4907 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
4908 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000515\" name=\"intensity array\" unitAccession=\"MS:1000131\" unitName=\"number of counts\" unitCvRef=\"MS\"/>\n";
4909 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
4911 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
4912 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
4913 os <<
"\t\t\t\t\t</binaryDataArray>\n";
4919 std::vector<DoubleReal> data64_to_encode(array.size());
4920 for (
Size p = 0; p < array.size(); ++p)
4921 data64_to_encode[p] = array[p];
4923 String data_processing_ref_string =
"";
4924 if (array.getDataProcessing().size() != 0)
4926 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
4928 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
4929 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
4930 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
4932 if (bi_term.
id !=
"")
4934 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
4938 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
4940 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
4941 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
4942 os <<
"\t\t\t\t\t</binaryDataArray>\n";
4948 std::vector<Int64> data64_to_encode(array.size());
4949 for (
Size p = 0; p < array.size(); ++p)
4950 data64_to_encode[p] = array[p];
4952 String data_processing_ref_string =
"";
4953 if (array.getDataProcessing().size() != 0)
4955 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
4957 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
4958 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000522\" name=\"64-bit integer\" />\n";
4959 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
4961 if (bi_term.
id !=
"")
4963 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
4967 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
4969 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
4970 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
4971 os <<
"\t\t\t\t\t</binaryDataArray>\n";
4977 std::vector<String> data_to_encode;
4978 data_to_encode.resize(array.size());
4979 for (
Size p = 0; p < array.size(); ++p)
4980 data_to_encode[p] = array[p];
4981 decoder_.encodeStrings(data_to_encode, encoded_string, options_.getCompression());
4982 String data_processing_ref_string =
"";
4983 if (array.getDataProcessing().size() != 0)
4985 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + s +
"_bi_" + m +
"\"";
4987 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
4988 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001479\" name=\"null-terminated ASCII string\" />\n";
4989 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
4990 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
4991 writeUserParam_(os, array, 6,
"/mzML/run/spectrumList/spectrum/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
4992 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
4993 os <<
"\t\t\t\t\t</binaryDataArray>\n";
4995 os <<
"\t\t\t\t</binaryDataArrayList>\n";
4998 os <<
"\t\t\t</spectrum>\n";
5004 template <
typename MapType>
5009 os <<
" <chromatogram id=\"" << chromatogram.
getNativeID() <<
"\" index=\"" << c <<
"\" defaultArrayLength=\"" << chromatogram.size() <<
"\">" <<
"\n";
5014 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000810\" name=\"mass chromatogram\" />\n";
5018 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000235\" name=\"total ion current chromatogram\" />\n";
5022 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000627\" name=\"selected ion current chromatogram\" />\n";
5026 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000628\" name=\"basepeak chromatogram\" />\n";
5030 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001472\" name=\"selected ion monitoring chromatogram\" />\n";
5034 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001473\" name=\"selected reaction monitoring chromatogram\" />\n";
5038 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000811\" name=\"electromagnetic radiation chromatogram\" />\n";
5042 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000812\" name=\"absorption chromatogram\" />\n";
5046 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000813\" name=\"emission chromatogram\" />\n";
5052 writePrecursor_(os, chromatogram.
getPrecursor(), validator);
5053 writeProduct_(os, chromatogram.
getProduct(), validator);
5059 if (options_.getCompression())
5061 compression_term =
"<cvParam cvRef=\"MS\" accession=\"MS:1000574\" name=\"zlib compression\" />";
5065 compression_term =
"<cvParam cvRef=\"MS\" accession=\"MS:1000576\" name=\"no compression\" />";
5072 if (options_.getMz32Bit())
5074 std::vector<Real> data_to_encode(chromatogram.size());
5075 for (
Size p = 0; p < chromatogram.size(); ++p)
5076 data_to_encode[p] = chromatogram[p].getRT();
5078 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
5079 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000595\" name=\"time array\" unitAccession=\"UO:0000010\" unitName=\"second\" unitCvRef=\"MS\" />\n";
5080 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000521\" name=\"32-bit float\" />\n";
5084 std::vector<DoubleReal> data_to_encode(chromatogram.size());
5085 for (
Size p = 0; p < chromatogram.size(); ++p)
5086 data_to_encode[p] = chromatogram[p].getRT();
5088 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
5089 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000595\" name=\"time array\" unitAccession=\"UO:0000010\" unitName=\"second\" unitCvRef=\"MS\" />\n";
5090 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
5092 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5093 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5094 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5099 if (options_.getIntensity32Bit())
5101 std::vector<Real> data_to_encode(chromatogram.size());
5102 for (
Size p = 0; p < chromatogram.size(); ++p)
5103 data_to_encode[p] = chromatogram[p].getIntensity();
5105 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
5106 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000515\" name=\"intensity array\" unitAccession=\"MS:1000131\" unitName=\"number of counts\" unitCvRef=\"MS\"/>\n";
5107 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000521\" name=\"32-bit float\" />\n";
5111 std::vector<DoubleReal> data_to_encode(chromatogram.size());
5112 for (
Size p = 0; p < chromatogram.size(); ++p)
5113 data_to_encode[p] = chromatogram[p].getIntensity();
5115 os <<
"\t\t\t\t\t<binaryDataArray encodedLength=\"" << encoded_string.size() <<
"\">\n";
5116 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000515\" name=\"intensity array\" unitAccession=\"MS:1000131\" unitName=\"number of counts\" unitCvRef=\"MS\"/>\n";
5117 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
5119 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5120 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5121 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5126 const typename ChromatogramType::FloatDataArray& array = chromatogram.
getFloatDataArrays()[m];
5127 std::vector<DoubleReal> data64_to_encode(array.size());
5128 for (
Size p = 0; p < array.size(); ++p)
5129 data64_to_encode[p] = array[p];
5131 String data_processing_ref_string =
"";
5132 if (array.getDataProcessing().size() != 0)
5134 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5136 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5137 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000523\" name=\"64-bit float\" />\n";
5138 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5140 if (bi_term.
id !=
"")
5142 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5146 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5148 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5149 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5150 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5155 const typename ChromatogramType::IntegerDataArray& array = chromatogram.
getIntegerDataArrays()[m];
5156 std::vector<Int64> data64_to_encode(array.size());
5157 for (
Size p = 0; p < array.size(); ++p)
5158 data64_to_encode[p] = array[p];
5160 String data_processing_ref_string =
"";
5161 if (array.getDataProcessing().size() != 0)
5163 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5165 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5166 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000522\" name=\"64-bit integer\" />\n";
5167 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5169 if (bi_term.
id !=
"")
5171 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"" << bi_term.
id <<
"\" name=\"" << bi_term.
name <<
"\" />\n";
5175 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5177 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5178 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5179 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5184 const typename ChromatogramType::StringDataArray& array = chromatogram.
getStringDataArrays()[m];
5185 std::vector<String> data_to_encode;
5186 data_to_encode.resize(array.size());
5187 for (
Size p = 0; p < array.size(); ++p)
5188 data_to_encode[p] = array[p];
5189 decoder_.encodeStrings(data_to_encode, encoded_string, options_.getCompression());
5190 String data_processing_ref_string =
"";
5191 if (array.getDataProcessing().size() != 0)
5193 data_processing_ref_string =
String(
"dataProcessingRef=\"dp_sp_") + c +
"_bi_" + m +
"\"";
5195 os <<
"\t\t\t\t\t<binaryDataArray arrayLength=\"" << array.size() <<
"\" encodedLength=\"" << encoded_string.size() <<
"\" " << data_processing_ref_string <<
">\n";
5196 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1001479\" name=\"null-terminated ASCII string\" />\n";
5197 os <<
"\t\t\t\t\t\t" << compression_term <<
"\n";
5198 os <<
"\t\t\t\t\t\t<cvParam cvRef=\"MS\" accession=\"MS:1000786\" name=\"non-standard data array\" value=\"" << array.getName() <<
"\" />\n";
5199 writeUserParam_(os, array, 6,
"/mzML/run/chromatogramList/chromatogram/binaryDataArrayList/binaryDataArray/cvParam/@accession", validator);
5200 os <<
"\t\t\t\t\t\t<binary>" << encoded_string <<
"</binary>\n";
5201 os <<
"\t\t\t\t\t</binaryDataArray>\n";
5203 os <<
"\t\t\t\t</binaryDataArrayList>\n";
5204 os <<
"\t\t\t</chromatogram>" <<
"\n";
5209 template <
typename MapType>
const String & getPathToFile() const
returns the file path
Deisotoping.
Definition: DataProcessing.h:62
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. ...
Descripton 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
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:92
PeakFileOptions options_
Options that can be set for loading/storing.
Definition: MzMLHandler.h:232
Description of a MS instrument.
Definition: Instrument.h:64
bool hasUnit() const
Check if the value has a unit.
Definition: DataValue.h:349
Fourier transform ion cyclotron resonance mass spectrometer.
Definition: MassAnalyzer.h:62
Off.
Definition: MassAnalyzer.h:130
const String & getNameOfFile() const
returns the file name
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
DoubleReal getVolume() const
returns the volume (in ml) (default: 0.0)
String writeCV_(const ControlledVocabulary::CVTerm &c, const DataValue &metaValue) const
Helper method to write an CV based on a meta value.
Definition: MzMLHandler.h:3229
dynode
Definition: IonDetector.h:68
A more convenient string class.
Definition: String.h:56
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: "")
bool compression
Definition: MzMLHandler.h:206
std::vector< String > decoded_char
Definition: MzMLHandler.h:212
Definition: MzMLHandler.h:204
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:94
const std::vector< IonSource > & getIonSources() const
returns a const reference to the ion source list
ControlledVocabulary cv_
Controlled vocabulary (psi-ms from OpenMS/share/OpenMS/CV/psi-ms.obo)
Definition: MzMLHandler.h:274
penning ionization
Definition: IonSource.h:126
atmospheric pressure matrix-assisted laser desorption ionization
Definition: IonSource.h:131
UInt getMSLevel() const
Returns the MS level.
Definition: MSSpectrum.h:231
InletType getInletType() const
returns the inlet type
Multiphoton ionization.
Definition: IonSource.h:108
DoubleReal toDouble() const
Conversion to double.
DoubleReal getAccuracy() const
returns the mass accuracy i.e. how much the theoretical mass may differ from the measured mass (in pp...
String version_
Schema version.
Definition: XMLHandler.h:162
Determination of the peak charge.
Definition: DataProcessing.h:64
Septum.
Definition: IonSource.h:62
IntensityType getIntensity() const
Definition: Peak1D.h:103
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:87
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
String id
Identifier.
Definition: ControlledVocabulary.h:81
Transient recorder.
Definition: IonDetector.h:88
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:3409
Time-digital converter.
Definition: IonDetector.h:87
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
static const DataValue EMPTY
Empty data value for comparisons.
Definition: DataValue.h:63
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:355
const std::vector< MassAnalyzer > & getMassAnalyzers() const
returns a const reference to the mass analyer list
DoubleReal getActivationEnergy() const
returns the activation energy (in electronvolt)
SpectrumType spec_
The current spectrum.
Definition: MzMLHandler.h:237
Conversion to mzXML format.
Definition: DataProcessing.h:78
Peak2D PeakType
Definition: MassTrace.h:49
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:108
microchannel plate detector
Definition: IonDetector.h:65
electron multiplier tube
Definition: IonDetector.h:75
fast atom bombardment
Definition: IonSource.h:86
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< DoubleReal > floats_64
Definition: MzMLHandler.h:209
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:239
Definition: MzMLHandler.h:207
Membrane inlet.
Definition: IonSource.h:72
Int getCharge() const
Non-mutable access to the charge.
Base class for XML handlers.
Definition: XMLHandler.h:89
ptrdiff_t SignedSize
Signed Size type e.g. used as pointer difference.
Definition: Types.h:151
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
DoubleReal getMagneticFieldStrength() const
returns the strength of the magnetic field (in T)
XMLHandler()
Not implemented.
flame ionization
Definition: IonSource.h:90
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
DoubleReal getIsolationWindowLowerOffset() const
returns the lower offset from the target m/z
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:294
static String find(const String &filename, StringList directories=StringList())
Looks up the location of the file filename.
DoubleReal getTOFTotalPathLength() const
returns the path length for a TOF mass analyzer (in meter)
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:133
Definition: ControlledVocabulary.h:73
collision quadrupole
Definition: Instrument.h:76
ChromatogramType chromatogram_
The current chromatogram.
Definition: MzMLHandler.h:239
Unknown spectrum type.
Definition: SpectrumSettings.h:73
Definition: ChromatogramSettings.h:72
Faraday cup.
Definition: IonDetector.h:58
Selected reaction monitoring scan Synonyms: 'Multiple reaction monitoring scan', 'SRM scan', 'MRM scan'.
Definition: InstrumentSettings.h:60
DoubleReal getIsolationWindowUpperOffset() const
returns the upper offset from the target m/z
Surface-induced dissociation.
Definition: Precursor.h:69
bool obsolete
Flag that indicates of the term is obsolete.
Definition: ControlledVocabulary.h:84
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:251
Definition: ControlledVocabulary.h:65
autodetachment
Definition: IonSource.h:120
const ProgressLogger & logger_
Progress logger.
Definition: MzMLHandler.h:268
Definition: MzMLHandler.h:207
Map< String, Software > software_
The software list: id => Software.
Definition: MzMLHandler.h:255
#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:3720
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
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
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
magnetic deflection
Definition: Instrument.h:74
const std::set< ActivationMethod > & getActivationMethods() const
returns a const reference to the activation methods
virtual void endElement(const XMLCh *const , const XMLCh *const , const XMLCh *const qname)
Parsing method for closing tags.
Definition: MzMLHandler.h:771
Surface enhanced laser desorption ionization.
Definition: IonSource.h:104
String unit_accession
Definition: SemanticValidator.h:79
Cyclotron.
Definition: MassAnalyzer.h:67
Representation of a controlled vocabulary.
Definition: ControlledVocabulary.h:54
DoubleReal getConcentration() const
returns the concentration (in g/l) (default: 0.0)
Size default_array_length_
The default number of peaks in the current spectrum.
Definition: MzMLHandler.h:243
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
void load(const String &filename, CVMappings &cv_mappings, bool strip_namespaces=false)
loads CvMappings from the given file
Definition: ChromatogramSettings.h:71
XML handler for MzMLFile.
Definition: MzMLHandler.h:94
Electron transfer dissociation.
Definition: Precursor.h:77
Definition: MzMLHandler.h:204
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:3368
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
void writeFooter_(std::ostream &os)
Definition: MzMLHandler.h:5210
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:227
bool skip_spectrum_
Flag that indicates whether this spectrum should be skipped (due to options)
Definition: MzMLHandler.h:271
Pulsed q dissociation.
Definition: Precursor.h:78
Map< String, std::vector< DataProcessing > > processing_
The data processing list: id => Instrument.
Definition: MzMLHandler.h:259
enum OpenMS::Internal::MzMLHandler::BinaryData::@11 data_type
DoubleReal getMZ() const
returns the target m/z
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:265
String base64
Definition: MzMLHandler.h:203
Reservoir.
Definition: IonSource.h:63
DataType valueType() const
returns the type of value stored
Definition: DataValue.h:330
first stability region
Definition: Instrument.h:81
Map< String, Sample > samples_
The sample list: id => Sample.
Definition: MzMLHandler.h:253
MapType::ChromatogramPeakType ChromatogramPeakType
Chromatogram peak type.
Definition: MzMLHandler.h:194
Electromagnetic radiation scan Synonyms: 'EMR spectrum'.
Definition: InstrumentSettings.h:67
fringing field
Definition: Instrument.h:82
String default_processing_
id of the default data processing (used when no processing is defined)
Definition: MzMLHandler.h:261
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...
MetaInfoDescription meta
Definition: MzMLHandler.h:213
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:275
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
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
std::vector< Real > floats_32
Definition: MzMLHandler.h:208
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:198
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:196
electrospray ionisation
Definition: IonSource.h:83
std::vector< BinaryData > data_
The spectrum data (or chromatogram data)
Definition: MzMLHandler.h:241
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
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:3646
vertical ionization
Definition: IonSource.h:130
DoubleReal getIsolationWindowUpperOffset() const
returns the upper offset from the target m/z
surface ionization
Definition: IonSource.h:129
Definition: VersionInfo.h:62
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
void writePrecursor_(std::ostream &os, const Precursor &precursor, Internal::MzMLValidator &validator)
Helper method that write precursor information from spectra and chromatograms.
Definition: MzMLHandler.h:3532
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
void fillData_()
Fills the current spectrum with peaks and meta data.
Definition: MzMLHandler.h:847
Invalid conversion exception.
Definition: Exception.h:363
Size size
Definition: MzMLHandler.h:205
Retention time alignment of different maps.
Definition: DataProcessing.h:68
bool isEmpty() const
test if the value is empty
Definition: DataValue.h:339
const String & getComment() const
returns the comment (default: "")
bool in_spectrum_list_
Flag that indicates that we're inside a spectrum (in contrast to a chromatogram)
Definition: MzMLHandler.h:245
const String & getFileType() const
returns the file type
Nanospray inlet.
Definition: IonSource.h:73
daly detector
Definition: IonDetector.h:64
Definition: MzMLHandler.h:207
glow discharge ionization
Definition: IonSource.h:112
Conversion dynode photo multiplier.
Definition: IonDetector.h:60
Radial ejection linear ion trap.
Definition: MassAnalyzer.h:58
selected ion flow tube
Definition: Instrument.h:77
Definition: ChromatogramSettings.h:74
Secure Hash Algorithm-1.
Definition: SourceFile.h:55
std::vector< Int64 > ints_64
Definition: MzMLHandler.h:211
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:251
Thermo spray.
Definition: IonSource.h:68
const StringDataArrays & getStringDataArrays() const
Returns a const reference to the string meta data arrays.
Definition: MSSpectrum.h:282
charge exchange ionization
Definition: IonSource.h:122
enum OpenMS::Internal::MzMLHandler::BinaryData::@10 precision
Definition: MzMLHandler.h:204
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
Spectrum representation.
Definition: MzMLHandler.h:201
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
size_t Size
Size type e.g. used as variable which can hold result of size()
Definition: Types.h:144
const String & getMethodOfCombination() const
returns the method of combination
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:3347
DateTime Class.
Definition: DateTime.h:55
String & substitute(char from, char to)
Replaces all occurences of the character from by the character to.
OPENMS_INT64_TYPE Int64
Signed integer type (64bit)
Definition: Types.h:68
Base class for all classes that want to report their progess.
Definition: ProgressLogger.h:56
UInt selected_ion_count_
Count of selected ions.
Definition: MzMLHandler.h:279
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:3332
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:192
void setOptions(const PeakFileOptions &opt)
Definition: MzMLHandler.h:184
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:3250
std::vector< Int > & getPossibleChargeStates()
Mutable access to possible charge states.
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:4617
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.
Definition: MzMLHandler.h:1086
MzMLHandler(MapType &exp, const String &filename, const String &version, ProgressLogger &logger)
Constructor for a read-only handler.
Definition: MzMLHandler.h:101
DoubleReal getMass() const
returns the mass (in gram) (default: 0.0)
Axial ejection linear ion trap.
Definition: MassAnalyzer.h:59
general spectrum type
Definition: InstrumentSettings.h:56
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:3068
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:3633
Map< String, Instrument > instruments_
The data processing list: id => Instrument.
Definition: MzMLHandler.h:257
DoubleReal getRT() const
Definition: MSSpectrum.h:215
const FloatDataArrays & getFloatDataArrays() const
Definition: MSChromatogram.h:227
String current_id_
Id of the current list. Used for referencing param group, source file, sample, software, ...
Definition: MzMLHandler.h:247
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:56
Options for loading files containing peak data.
Definition: PeakFileOptions.h:47
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:249
const FloatDataArrays & getFloatDataArrays() const
Returns a const reference to the float meta data arrays.
Definition: MSSpectrum.h:270
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:5005
Electron multiplier.
Definition: IonDetector.h:55
desorption/ionization on silicon
Definition: IonSource.h:132
photodiode array detector
Definition: IonDetector.h:73
int Int
Signed integer type.
Definition: Types.h:100
Open split.
Definition: IonSource.h:60
Map class based on the STL map (containing serveral convenience functions)
Definition: Map.h:50
Descripton of a mass analyzer (part of a MS Instrument)
Definition: MassAnalyzer.h:48
Description of a ion source (part of a MS Instrument)
Definition: IonSource.h:47
array detector
Definition: IonDetector.h:66
std::vector< Int32 > ints_32
Definition: MzMLHandler.h:210
const MapType * cexp_
map pointer for writing
Definition: MzMLHandler.h:229
const String & getName() const
retuns the sample name (default: "")
Convertion to mzData format.
Definition: DataProcessing.h:76
Charge deconvolution.
Definition: DataProcessing.h:61
Electron capture dissociation.
Definition: Precursor.h:71
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:1296
DoubleReal getIsolationWindowLowerOffset() const
returns the lower offset from the target m/z
liquid secondary ionization
Definition: IonSource.h:125
virtual ~MzMLHandler()
Destructor.
Definition: MzMLHandler.h:165
SampleState getState() const
returns the state of aggregation (default: SAMPLENULL)
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:3216
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:324
Definition: MzMLHandler.h:207
Definition: ControlledVocabulary.h:69
kinetic energy analyzer
Definition: Instrument.h:83
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:56
Flow injection analysis.
Definition: IonSource.h:66
atmospheric pressure ionisation
Definition: IonSource.h:94