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