#include <math.h>
-double Spectrum::minBand()
+double Spectrum::minPeak()
{
- double value = ( *m_bandlist.begin() )->wavelength;
- QList<band*>::const_iterator it = m_bandlist.begin();
- const QList<band*>::const_iterator itEnd = m_bandlist.end();
+ double value = ( *m_peaklist.begin() )->wavelength;
+ QList<peak*>::const_iterator it = m_peaklist.begin();
+ const QList<peak*>::const_iterator itEnd = m_peaklist.end();
for (;it!=itEnd;++it)
{
if ( value > ( *it )->wavelength )
return value;
}
-double Spectrum::maxBand()
+double Spectrum::maxPeak()
{
- double value = ( *m_bandlist.begin() )->wavelength;
- QList<band*>::const_iterator it = m_bandlist.begin();
- const QList<band*>::const_iterator itEnd = m_bandlist.end();
+ double value = ( *m_peaklist.begin() )->wavelength;
+ QList<peak*>::const_iterator it = m_peaklist.begin();
+ const QList<peak*>::const_iterator itEnd = m_peaklist.end();
for (;it!=itEnd;++it)
{
if ( value < ( *it )->wavelength )
{
Spectrum *spec = new Spectrum();
- QList<band*>::const_iterator it = m_bandlist.begin();
- const QList<band*>::const_iterator itEnd = m_bandlist.end();
+ QList<peak*>::const_iterator it = m_peaklist.begin();
+ const QList<peak*>::const_iterator itEnd = m_peaklist.end();
for ( ; it != itEnd; ++it )
{
if ( ( *it )->wavelength < min || ( *it )->wavelength > max )
continue;
- spec->addBand( *it );
+ spec->addPeak( *it );
}
spec->adjustMinMax();
void Spectrum::adjustIntensities()
{
int maxInt = 0;
- QList<band*>::Iterator it = m_bandlist.begin();
- const QList<band*>::Iterator itEnd = m_bandlist.end();
+ QList<peak*>::Iterator it = m_peaklist.begin();
+ const QList<peak*>::Iterator itEnd = m_peaklist.end();
//find the highest intensity
for ( ; it != itEnd; ++it )
double max = ( double ) maxInt;
//now adjust the intensities.
- it = m_bandlist.begin();
+ it = m_peaklist.begin();
for ( ; it != itEnd; ++it )
{
double curInt = ( ( double )( *it )->intensity );
{
QList<double> list;
- QList<band*>::const_iterator it = m_bandlist.begin();
- const QList<band*>::const_iterator itEnd = m_bandlist.end();
+ QList<peak*>::const_iterator it = m_peaklist.begin();
+ const QList<peak*>::const_iterator itEnd = m_peaklist.end();
for ( ; it != itEnd; ++it )
{
~Spectrum(){};
/**
- * a band is one line in the spectrum of an element
+ * a peak is one line in the spectrum of an element
*/
- class band
+ class peak
{
public:
- band(){
+ peak(){
wavelength = -1.0;
aki = -1.0;
energy1 = -1.0;
};
/**
- * adds the band @p b to the internal
- * lists of bands
+ * adds the peak @p b to the internal
+ * lists of peaks
*/
- void addBand( Spectrum::band* b ){
+ void addPeak( Spectrum::peak* b ){
if ( b )
- m_bandlist.append( b );
+ m_peaklist.append( b );
}
/**
}
/**
- * @return the list of bands of the spectrum
+ * @return the list of peaks of the spectrum
*/
- QList<Spectrum::band*> bandlist(){
- return m_bandlist;
+ QList<Spectrum::peak*> peaklist(){
+ return m_peaklist;
}
- QList<Spectrum::band*> bandList(){
- return bandlist();
+ QList<Spectrum::peak*> peakList(){
+ return peaklist();
}
/**
* smallest wavelenght
*/
void adjustMinMax(){
- m_min = minBand();
- m_max = maxBand();
+ m_min = minPeak();
+ m_max = maxPeak();
}
/**
/**
* @return the smallest wavelength
*/
- double minBand();
+ double minPeak();
/**
* @return the bigest wavelength
*/
- double maxBand();
+ double maxPeak();
/**
* the internal dataset
*/
- QList<band*> m_bandlist;
+ QList<peak*> m_peaklist;
/**
* the cached values of the highest and lowest wavelength
***************************************************************************/
#include "spectrumparser.h"
#include "spectrum.h"
-#include "element.h"
#include <qdom.h>
#include <QList>
#include <QFile>
-#include <QTextStream>
-#include <QString>
+#include <QStringList>
#include <kdebug.h>
-Spectrum* SpectrumParser::loadSpectrum( QFile*file, const QString& id )
+SpectrumParser::SpectrumParser()
+ : QXmlDefaultHandler(),
+ currentSpectrum_(0),
+ inAtomicNumber_(false),
+ inExactMass_(false),
+ inAbundance_(false)
{
- Q_UNUSED( file );
- Q_UNUSED( id );
- return 0;
+ currentElementSymbol_ = "";
}
-void SpectrumParser::saveSpectrum( Spectrum *spectrum )
+bool SpectrumParser::startElement(const QString&, const QString &localName, const QString&, const QXmlAttributes &attrs)
{
- if ( !spectrum ) return;
-
- QDomDocument doc( "SpectrumDocument" );
-
- QFile docfile( "/home/carsten/test.xml" );
-
- QList<Spectrum::band*> blist = spectrum->bandlist();
+ if (localName == "isotope")
+ {
+ currentSpectrum_ = new Spectrum();
+ inSpectrum_ = true;
- QDomElement cmlElement = doc.createElement( "cml" );
- QDomElement spectrumListElement = doc.createElement( "spectrumList" );
- QDomElement spectrumElement = doc.createElement( "spectrum" );
- QDomElement metadataListElement = doc.createElement( "metadataList" );
-
- //metadata
-//X QDomElement metadataElement = doc.createElement( "metadata" );
-//X if ( spectrum )
-//X {
-//X metadataElement.setAttribute("content",spectrum->parentElement()->elname() );
-//X metadataElement.setAttribute("name","ElementName");
-//X }
-
- QDomElement metadataElement2 = doc.createElement( "metadata" );
- metadataElement2.setAttribute("content", "National Institute of Standards and Technology" );
- metadataElement2.setAttribute("name","OWNER");
-
- QDomElement peakListElement = doc.createElement( "peakList" );
-
- doc.appendChild( cmlElement );
- cmlElement.appendChild( spectrumListElement );
- spectrumListElement.appendChild( spectrumElement );
- spectrumElement.appendChild( metadataListElement );
-//X if ( spectrum )
-//X metadataListElement.appendChild( metadataElement );
- metadataListElement.appendChild( metadataElement2 );
- spectrumElement.appendChild( peakListElement );
-
- foreach( Spectrum::band* band, blist )
+ //now save the symbol of the current element
+ for (int i = 0; i < attrs.length(); ++i)
+ {
+ if ( attrs.localName( i ) == "elementType" )
+ currentElementSymbol_ = attrs.value( i );
+ }
+ } else if (inSpectrum_ && localName == "scalar")
{
- QDomElement peakElement = doc.createElement( "peak" );
- peakElement.setAttribute( "id" , "" );
- peakElement.setAttribute( "xUnits", "nm" );
- peakElement.setAttribute( "xValue", band->wavelength );
- peakElement.setAttribute( "yUnits", "Intensity relative to 1000" );
- peakElement.setAttribute( "yValue", band->intensity );
-
- //now the scalar values
- QDomElement scalar = doc.createElement( "scalar" );
- QDomElement scalar2 = doc.createElement( "scalar" );
- QDomElement scalar3 = doc.createElement( "scalar" );
- QDomElement scalar4 = doc.createElement( "scalar" );
- QDomElement scalar5 = doc.createElement( "scalar" );
- QDomElement scalar6 = doc.createElement( "scalar" );
- QDomElement scalar7 = doc.createElement( "scalar" );
- QDomElement scalar8 = doc.createElement( "scalar" );
- QDomElement scalar9 = doc.createElement( "scalar" );
+ for (int i = 0; i < attrs.length(); ++i)
+ {
+ if ( attrs.localName( i ) == "errorValue" )
+ {
+ currentErrorValue_ = QVariant( attrs.value( i ) );
+ continue;
+ }
+
+ if (attrs.value(i) == "bo:atomicNumber")
+ inAtomicNumber_ = true;
+ else if (attrs.value(i) == "bo:exactMass")
+ inExactMass_ = true;
+ }
+ } else if (inSpectrum_ && localName == "bo:relativeAbundance") {
+ kdDebug() << "bo:relativeAbundance" << endl;
+ inAbundance_ = true;
+ }
+ return true;
+}
- scalar.setAttribute( "title","aki" );
- scalar2.setAttribute( "title","energy1" );
- scalar3.setAttribute( "title","energy2" );
- scalar4.setAttribute( "title","term1" );
- scalar5.setAttribute( "title","term2" );
- scalar6.setAttribute( "title","electronconfig1" );
- scalar7.setAttribute( "title","electronconfig2" );
- scalar8.setAttribute( "title","J1" );
- scalar9.setAttribute( "title","J2" );
+bool SpectrumParser::endElement( const QString&, const QString& localName, const QString& )
+{
+ if ( localName == "isotope" )
+ {
+//X currentSpectrum_->addData( new ChemicalDataObject( QVariant( currentElementSymbol_ ), ChemicalDataObject::symbol ) );
+//X isotopes_.append(currentSpectrum_);
+//X
+//X currentSpectrum_ = 0;
+//X currentDataObject_ = 0;
+//X inSpectrum_ = false;
+ }
+ else if ( localName == "scalar" )
+ {
+//X if ( currentDataObject_->type() == ChemicalDataObject::exactMass ){
+//X currentDataObject_->setErrorValue( currentErrorValue_ );
+//X }
+ }
- scalar.setNodeValue( "test123" );//QString::number( band->aki ) );
+ return true;
+}
-//X peakElement.setAttribute( "aki", band->aki );
-//X peakElement.setAttribute( "energy1", band->energy1 );
-//X peakElement.setAttribute( "energy2", band->energy2 );
-//X peakElement.setAttribute( "term1", band->term1 );
-//X peakElement.setAttribute( "term2", band->term2 );
-//X peakElement.setAttribute( "electronconfig1", band->electronconfig1 );
-//X peakElement.setAttribute( "electronconfig2", band->electronconfig2 );
-//X peakElement.setAttribute( "J1", band->J1 );
-//X peakElement.setAttribute( "J2", band->J2 );
+bool SpectrumParser::characters(const QString &ch)
+{
+ currentDataObject_ = new ChemicalDataObject();
+ ChemicalDataObject::BlueObelisk type;
+ QVariant value;
+
+ if ( inExactMass_ ){
+ value = ch.toDouble();
+ type = ChemicalDataObject::exactMass;
+ inExactMass_ = false;
+ }
+ else if (inAtomicNumber_) {
+ value = ch.toInt();
+ type = ChemicalDataObject::atomicNumber;
+ inAtomicNumber_ = false;
+ }
+ else if ( inAbundance_ ){
+ value = ch;
+ type = ChemicalDataObject::relativeAbundance;
+ inAbundance_ = false;
+ }
+ else//it is a non known value. Do not create a wrong object but return
+ return true;
+ currentDataObject_->setData( value );
+ currentDataObject_->setType( type );
- peakElement.appendChild( scalar );
- peakElement.appendChild( scalar2 );
- peakElement.appendChild( scalar3 );
- peakElement.appendChild( scalar4 );
- peakElement.appendChild( scalar5 );
- peakElement.appendChild( scalar6 );
- peakElement.appendChild( scalar7 );
- peakElement.appendChild( scalar8 );
- peakElement.appendChild( scalar9 );
+//X if ( currentSpectrum_ )
+//X currentSpectrum_->addData( currentDataObject_ );
- peakListElement.appendChild( peakElement );
- }
+ return true;
+}
- kdDebug() << "Text: " << doc.toString() << endl;
+QList<Spectrum*> SpectrumParser::getSpectrums()
+{
+ return spectra_;
}
***************************************************************************/
#include <QFile>
+#include <qxml.h>
+
+#include "chemicaldataobject.h"
class Spectrum;
/**
* @author Carsten Niehaus <cniehaus@kde.org>
*/
-class SpectrumParser
+class SpectrumParser : public QXmlDefaultHandler
{
public:
/**
- * Save the Spectrum @p spectrum
- * @param spectrum the Spectrum to save
+ * Constructor
*/
- static void saveSpectrum( Spectrum *spectrum );
+ SpectrumParser();
+ bool startElement( const QString&, const QString &localName, const QString&, const QXmlAttributes &attrs );
- /**
- * @return the Spectrum specified by the @p id
- * @param file the file from which the data will be loaded
- * @param id The id of the Spectrum
- */
- static Spectrum* loadSpectrum( QFile *file, const QString& id );
+ bool endElement( const QString& namespaceURI, const QString &localName, const QString& qName );
+
+ bool characters(const QString &ch);
+
+ QList<Spectrum*> getSpectrums();
+
+ private:
+ ChemicalDataObject *currentDataObject_;
+ ChemicalDataObject::BlueObeliskUnit currentUnit_;
+
+ QVariant currentErrorValue_;
+
+ QString currentElementSymbol_;
+
+ Spectrum* currentSpectrum_;
+ QList<Spectrum*> spectra_;
+ bool inSpectrum_;
+ bool inAtomicNumber_,
+ inExactMass_;
+
+ bool inAbundance_;
};
#endif // SPECTRUMPARSER_H
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<cml id="d418354f8c004e8b5c0f8cf558f758b62af4b481" title="L-Asparagine (4TMS)">
+ <spectrumList>
+ <spectrum id="19942d86f5183cf9f8a0ee38b82913c30424edba" title="L-Asparagine (4TMS)" type="Mass">
+ <metadataList>
+ <metadata content="1871.6" name="RI">
+ </metadata>
+ <metadata content="Asparagine" name="COMPOUND">
+ </metadata>
+ <metadata content="188, 405, 303, 202, 114" name="QM">
+ </metadata>
+ <metadata content="1164EK04_1871.6" name="CAS REGISTRY NO">
+ </metadata>
+ <metadata content="187001-101" name="MPIMP-ID">
+ </metadata>
+ <metadata content="Sigma, A-0884" name="SO">
+ </metadata>
+ <metadata content="2001.05.01" name="DATE">
+ </metadata>
+ <metadata content="EITTMS" name="METHOD">
+ </metadata>
+ <metadata content="19942d86f5183cf9f8a0ee38b82913c30424edba" name="SPECTRUMID">
+ </metadata>
+ <metadata content="Standard" name="SP">
+ </metadata>
+ <metadata content="L-Asparagine (4TMS)" name="Name">
+ </metadata>
+ <metadata content="METB" name="ROLE">
+ </metadata>
+ <metadata content="Kopka J, Max Planck Institute of Molecular Plant Physiology, Department Prof. Willmitzer, Am Muehlenberg 1, D-14476 Golm, Germany" name="OWNER">
+ </metadata>
+ </metadataList>
+ <peakList>
+ <peak id="p0" xUnits="M/Z" xValue="72.0" yUnits="Intensity in %" yValue="25.0">
+ </peak>
+ <peak id="p1" xUnits="M/Z" xValue="73.0" yUnits="Intensity in %" yValue="999.0">
+ </peak>
+ <peak id="p2" xUnits="M/Z" xValue="74.0" yUnits="Intensity in %" yValue="92.0">
+ </peak>
+ <peak id="p3" xUnits="M/Z" xValue="75.0" yUnits="Intensity in %" yValue="145.0">
+ </peak>
+ <peak id="p4" xUnits="M/Z" xValue="76.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p5" xUnits="M/Z" xValue="77.0" yUnits="Intensity in %" yValue="17.0">
+ </peak>
+ <peak id="p6" xUnits="M/Z" xValue="80.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p7" xUnits="M/Z" xValue="86.0" yUnits="Intensity in %" yValue="7.0">
+ </peak>
+ <peak id="p8" xUnits="M/Z" xValue="100.0" yUnits="Intensity in %" yValue="52.0">
+ </peak>
+ <peak id="p9" xUnits="M/Z" xValue="101.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p10" xUnits="M/Z" xValue="114.0" yUnits="Intensity in %" yValue="52.0">
+ </peak>
+ <peak id="p11" xUnits="M/Z" xValue="115.0" yUnits="Intensity in %" yValue="16.0">
+ </peak>
+ <peak id="p12" xUnits="M/Z" xValue="116.0" yUnits="Intensity in %" yValue="26.0">
+ </peak>
+ <peak id="p13" xUnits="M/Z" xValue="125.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p14" xUnits="M/Z" xValue="130.0" yUnits="Intensity in %" yValue="18.0">
+ </peak>
+ <peak id="p15" xUnits="M/Z" xValue="131.0" yUnits="Intensity in %" yValue="22.0">
+ </peak>
+ <peak id="p16" xUnits="M/Z" xValue="132.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p17" xUnits="M/Z" xValue="133.0" yUnits="Intensity in %" yValue="18.0">
+ </peak>
+ <peak id="p18" xUnits="M/Z" xValue="140.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p19" xUnits="M/Z" xValue="142.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p20" xUnits="M/Z" xValue="146.0" yUnits="Intensity in %" yValue="9.0">
+ </peak>
+ <peak id="p21" xUnits="M/Z" xValue="147.0" yUnits="Intensity in %" yValue="137.0">
+ </peak>
+ <peak id="p22" xUnits="M/Z" xValue="148.0" yUnits="Intensity in %" yValue="26.0">
+ </peak>
+ <peak id="p23" xUnits="M/Z" xValue="149.0" yUnits="Intensity in %" yValue="11.0">
+ </peak>
+ <peak id="p24" xUnits="M/Z" xValue="156.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p25" xUnits="M/Z" xValue="163.0" yUnits="Intensity in %" yValue="9.0">
+ </peak>
+ <peak id="p26" xUnits="M/Z" xValue="166.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p27" xUnits="M/Z" xValue="172.0" yUnits="Intensity in %" yValue="48.0">
+ </peak>
+ <peak id="p28" xUnits="M/Z" xValue="174.0" yUnits="Intensity in %" yValue="10.0">
+ </peak>
+ <peak id="p29" xUnits="M/Z" xValue="184.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p30" xUnits="M/Z" xValue="185.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p31" xUnits="M/Z" xValue="188.0" yUnits="Intensity in %" yValue="222.0">
+ </peak>
+ <peak id="p32" xUnits="M/Z" xValue="189.0" yUnits="Intensity in %" yValue="36.0">
+ </peak>
+ <peak id="p33" xUnits="M/Z" xValue="190.0" yUnits="Intensity in %" yValue="17.0">
+ </peak>
+ <peak id="p34" xUnits="M/Z" xValue="202.0" yUnits="Intensity in %" yValue="51.0">
+ </peak>
+ <peak id="p35" xUnits="M/Z" xValue="203.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p36" xUnits="M/Z" xValue="204.0" yUnits="Intensity in %" yValue="31.0">
+ </peak>
+ <peak id="p37" xUnits="M/Z" xValue="213.0" yUnits="Intensity in %" yValue="18.0">
+ </peak>
+ <peak id="p38" xUnits="M/Z" xValue="215.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p39" xUnits="M/Z" xValue="216.0" yUnits="Intensity in %" yValue="27.0">
+ </peak>
+ <peak id="p40" xUnits="M/Z" xValue="220.0" yUnits="Intensity in %" yValue="6.0">
+ </peak>
+ <peak id="p41" xUnits="M/Z" xValue="225.0" yUnits="Intensity in %" yValue="6.0">
+ </peak>
+ <peak id="p42" xUnits="M/Z" xValue="228.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p43" xUnits="M/Z" xValue="231.0" yUnits="Intensity in %" yValue="10.0">
+ </peak>
+ <peak id="p44" xUnits="M/Z" xValue="246.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p45" xUnits="M/Z" xValue="258.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p46" xUnits="M/Z" xValue="278.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p47" xUnits="M/Z" xValue="290.0" yUnits="Intensity in %" yValue="6.0">
+ </peak>
+ <peak id="p48" xUnits="M/Z" xValue="295.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p49" xUnits="M/Z" xValue="299.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p50" xUnits="M/Z" xValue="303.0" yUnits="Intensity in %" yValue="10.0">
+ </peak>
+ <peak id="p51" xUnits="M/Z" xValue="304.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p52" xUnits="M/Z" xValue="325.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p53" xUnits="M/Z" xValue="355.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p54" xUnits="M/Z" xValue="399.0" yUnits="Intensity in %" yValue="5.0">
+ </peak>
+ <peak id="p55" xUnits="M/Z" xValue="405.0" yUnits="Intensity in %" yValue="26.0">
+ </peak>
+ <peak id="p56" xUnits="M/Z" xValue="406.0" yUnits="Intensity in %" yValue="7.0">
+ </peak>
+ <peak id="p57" xUnits="M/Z" xValue="407.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p58" xUnits="M/Z" xValue="441.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p59" xUnits="M/Z" xValue="450.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p60" xUnits="M/Z" xValue="462.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p61" xUnits="M/Z" xValue="470.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p62" xUnits="M/Z" xValue="473.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p63" xUnits="M/Z" xValue="478.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p64" xUnits="M/Z" xValue="485.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p65" xUnits="M/Z" xValue="495.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p66" xUnits="M/Z" xValue="498.0" yUnits="Intensity in %" yValue="3.0">
+ </peak>
+ <peak id="p67" xUnits="M/Z" xValue="502.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p68" xUnits="M/Z" xValue="503.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p69" xUnits="M/Z" xValue="528.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p70" xUnits="M/Z" xValue="549.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p71" xUnits="M/Z" xValue="560.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p72" xUnits="M/Z" xValue="563.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p73" xUnits="M/Z" xValue="564.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ <peak id="p74" xUnits="M/Z" xValue="568.0" yUnits="Intensity in %" yValue="4.0">
+ </peak>
+ <peak id="p75" xUnits="M/Z" xValue="580.0" yUnits="Intensity in %" yValue="1.0">
+ </peak>
+ <peak id="p76" xUnits="M/Z" xValue="591.0" yUnits="Intensity in %" yValue="2.0">
+ </peak>
+ </peakList>
+ </spectrum>
+ </spectrumList>
+</cml>