]> Git trees. - libqmvoc.git/commitdiff
* Add a test-file for xmlspec
authorCarsten Niehaus <cniehaus@gmx.de>
Mon, 31 Oct 2005 11:17:19 +0000 (11:17 +0000)
committerCarsten Niehaus <cniehaus@gmx.de>
Mon, 31 Oct 2005 11:17:19 +0000 (11:17 +0000)
* make the spectrumparser SAX

svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=476034

libscience/spectrum.cpp
libscience/spectrum.h
libscience/spectrumparser.cpp
libscience/spectrumparser.h
libscience/tests/cmlspec_example.cml [new file with mode: 0644]

index 66388a0138929df28728c36cd6771fe19a193084..b73c8f062c4ec9f7e8cde614cf02af69b5ac9df2 100644 (file)
 
 #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 )
@@ -38,11 +38,11 @@ double Spectrum::minBand()
        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 )
@@ -56,15 +56,15 @@ Spectrum* Spectrum::adjustToWavelength( double min, double max )
 {
        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();
@@ -75,8 +75,8 @@ Spectrum* Spectrum::adjustToWavelength( double min, double max )
 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 )
@@ -91,7 +91,7 @@ void Spectrum::adjustIntensities()
        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 );
@@ -105,8 +105,8 @@ QList<double> Spectrum::wavelengths( double min, double max )
 {
        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 )
        {
index 10922394b7e17d4f6ae126b895f7a06fbcde8b02..bc2bdfc5db5d60798ee25439a8f1254229ac2224 100644 (file)
@@ -45,12 +45,12 @@ class Spectrum
                ~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;
@@ -83,12 +83,12 @@ class Spectrum
                };
 
                /**
-                * 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 );
                }
 
                /**
@@ -131,14 +131,14 @@ class Spectrum
                }
 
                /**
-                * @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();
                }
        
                /**
@@ -146,8 +146,8 @@ class Spectrum
                 * smallest wavelenght
                 */
                void adjustMinMax(){
-                       m_min = minBand();
-                       m_max = maxBand();
+                       m_min = minPeak();
+                       m_max = maxPeak();
                }
 
                /**
@@ -161,17 +161,17 @@ class Spectrum
                /**
                 * @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
index 12917a6c56b311fe6626567141e20d1716947a20..4128609c5d1c1d1a2f20d956409c1d0c9faa9f44 100644 (file)
@@ -12,116 +12,114 @@ email                : cniehaus@kde.org
  ***************************************************************************/
 #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_;
 }
index f5bbcfe0aea4742af7d21b2c03b615dfbb868a6b..8f6b39f6cdb2e3f23a17541c24c57035c9e3d985 100644 (file)
  ***************************************************************************/
 
 #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
 
diff --git a/libscience/tests/cmlspec_example.cml b/libscience/tests/cmlspec_example.cml
new file mode 100644 (file)
index 0000000..e0c33cf
--- /dev/null
@@ -0,0 +1,191 @@
+<?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>