78 boost::icl::interval_set<double> driftTimeRangesSet;
79 vector<string> tokens, tokens2;
80 bal::split(tokens, driftTimeRanges, bal::is_any_of(
" "));
81 BOOST_FOREACH(
const string& token, tokens)
83 bal::split(tokens2, token, bal::is_any_of(
"-"));
84 driftTimeRangesSet.add(boost::icl::continuous_interval<double>(lexical_cast<double>(tokens2[0]), lexical_cast<double>(tokens2[1])));
88 bal::split(tokens, expectedSpectrumTable, bal::is_any_of(
" "));
89 BOOST_FOREACH(
const string& token, tokens)
91 bal::split(tokens2, token, bal::is_any_of(
","));
92 expectedSpectrum3d[
lexical_cast<
double>(tokens2[0])][lexical_cast<double>(tokens2[1])] =
lexical_cast<
double>(tokens2[2]);
96 Spectrum3DPtr resultSpectrum3d = sl.spectrum3d(scanStartTime, driftTimeRangesSet);
99 Spectrum3D inResultButNotExpected, inExpectedButNotResult;
100 BOOST_FOREACH_FIELD((
double actualDriftTime)(
const Spectrum3D::value_type::second_type& resultSpectrum), *resultSpectrum3d)
101 BOOST_FOREACH_FIELD((
double expectedDriftTime)(const
Spectrum3D::value_type::second_type& expectedSpectrum), expectedSpectrum3d)
103 if (
find_nearest(*resultSpectrum3d, expectedDriftTime, 1e-5) == resultSpectrum3d->end())
104 inExpectedButNotResult[expectedDriftTime] = Spectrum3D::value_type::second_type();
105 if (
find_nearest(expectedSpectrum3d, actualDriftTime, 1e-5) == expectedSpectrum3d.end())
106 inResultButNotExpected[actualDriftTime] = Spectrum3D::value_type::second_type();
108 if (fabs(actualDriftTime - expectedDriftTime) < 1e-5)
109 BOOST_FOREACH_FIELD((
double actualMz)(
double actualIntensity), resultSpectrum)
110 BOOST_FOREACH_FIELD((
double expectedMz)(
double expectedIntensity), expectedSpectrum)
112 if (
find_nearest(resultSpectrum, expectedMz, 1e-4) == resultSpectrum.end())
113 inExpectedButNotResult[expectedDriftTime][expectedMz] = expectedIntensity;
114 if (
find_nearest(expectedSpectrum, actualMz, 1e-4) == expectedSpectrum.end())
115 inResultButNotExpected[actualDriftTime][actualMz] = actualIntensity;
119 if (
os_ && !inResultButNotExpected.empty())
121 *
os_ <<
"Extra points in the result were not expected:\n";
122 BOOST_FOREACH_FIELD((
double driftTime)(
const Spectrum3D::value_type::second_type& spectrum), inResultButNotExpected)
124 *
os_ << driftTime <<
":";
125 BOOST_FOREACH_FIELD((
double mz)(
double intensity), spectrum)
126 *
os_ <<
" " << mz <<
"," << intensity;
131 if (
os_ && !inExpectedButNotResult.empty())
133 *
os_ <<
"Missing points in the result that were expected:\n";
134 BOOST_FOREACH_FIELD((
double driftTime)(
const Spectrum3D::value_type::second_type& spectrum), inExpectedButNotResult)
136 *
os_ << driftTime <<
":";
137 BOOST_FOREACH_FIELD((
double mz)(
double intensity), spectrum)
138 *
os_ <<
" " << mz <<
"," << intensity;
boost::container::flat_map< double, boost::container::flat_map< double, float > > Spectrum3D
float lexical_cast(const std::string &str)
Run run
a run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument...
double mz(double neutralMass, int protonDelta, int electronDelta=0, int neutronDelta=0)
boost::shared_ptr< Spectrum3D > Spectrum3DPtr
SpectrumListPtr spectrumListPtr
all mass spectra and the acquisitions underlying them are described and attached here. Subsidiary data arrays are also both described and attached here.
MapT::const_iterator find_nearest(MapT const &m, typename MapT::key_type const &query, typename MapT::key_type const &tolerance)
SpectrumList implementation that can create 3D spectra of ion mobility drift time and m/z...