30 #include "pwiz_tools/common/FullReaderList.hpp"
32 #include <boost/make_shared.hpp>
34 #define _VERIFY_EXACT_SPECTRUM
61 MSDPair GenerateSpectrumList(
const string& inputFile,
65 void GetMask(
const vector<double>& original,
const vector<double>& derived, vector<size_t>& mask)
const;
72 FullReaderList readers;
73 MSDataPtr msdPtr = boost::make_shared<MSDataFile>(inputFile, &readers);
80 msdPtr->filterApplied();
83 return MSDPair(msdPtr, centroidedPtr);
86 msdPtr->filterApplied();
87 msdPtr->run.spectrumListPtr = demuxList;
88 return MSDPair(msdPtr, demuxList);
91 void DemuxTest::GetMask(
const vector<double>& original,
const vector<double>& derived, vector<size_t>& mask)
const
93 unit_assert(std::is_sorted(original.begin(), original.end()));
94 unit_assert(std::is_sorted(derived.begin(), derived.end()));
96 auto originalIt = original.begin();
97 for (
auto derivedIt = derived.begin(); derivedIt != derived.end(); ++derivedIt)
99 for (; originalIt != original.end(); ++originalIt)
101 if (abs(*originalIt - *derivedIt) < 1.0e-5)
103 mask.push_back(originalIt - original.begin());
115 bfs::path overlapTestFile = filepath;
118 bfs::path testOutputFile =
"OverlapTestOutput.mzML";
123 auto originalSpectrumList =
test.GenerateSpectrumList(overlapTestFile.string());
125 demuxParams.
optimization = DemuxOptimization::OVERLAP_ONLY;
126 auto demuxList =
test.GenerateSpectrumList(overlapTestFile.string(),
true, demuxParams);
130 size_t originalIndex;
136 size_t originalIndexFromDemux;
143 auto originalMzs = originalSpectrum->getMZArray()->data;
144 auto originalIntensities = originalSpectrum->getIntensityArray()->data;
148 vector<double> peakSums(originalIntensities.size(), 0.0);
151 auto demuxSpectrum = demuxList.spectrumList->spectrum(demuxIndex);
152 auto demuxIntensities = demuxSpectrum->getIntensityArray()->data;
153 auto demuxMzs = demuxSpectrum->getMZArray()->data;
155 vector<size_t> indexMask;
156 test.GetMask(originalMzs, demuxMzs, indexMask);
159 for (
auto index : indexMask)
161 peakSums[index] += demuxIntensities.at(j++);
166 for (
size_t i = 0; i < peakSums.size(); ++i)
174 auto originalPrecursor = originalSpectrum->precursors[0];
179 auto windowStart = originalTarget - originalLowerOffset;
182 double expectedTarget = windowStart + expectedOffset + 2.0 * expectedOffset * i;
184 auto demuxSpectrum = demuxList.spectrumList->spectrum(demuxIndex);
185 auto demuxPrecursor = demuxSpectrum->precursors[0];
193 const double minimumWindowSize = 0.01;
201 #ifdef _VERIFY_EXACT_SPECTRUM
215 vector<double> intensityValues =
253 auto demuxIntensities = demuxSpectrumAbsoluteCheck->getIntensityArray()->data;
254 auto demuxMzs = demuxSpectrumAbsoluteCheck->getMZArray()->data;
258 for (
size_t i = 0; i < intensityValues.size(); ++i)
268 bfs::path msxTestFile = filepath;
271 bfs::path testOutputFile =
"MsxTestOutput.mzML";
276 auto originalSpectrumList =
test.GenerateSpectrumList(msxTestFile.string());
278 auto demuxList =
test.GenerateSpectrumList(msxTestFile.string(),
true, demuxParams);
282 size_t originalIndex;
288 size_t originalIndexFromDemux;
295 auto originalMzs = originalSpectrum->getMZArray()->data;
296 auto originalIntensities = originalSpectrum->getIntensityArray()->data;
300 vector<double> peakSums(originalIntensities.size(), 0.0);
303 auto demuxSpectrum = demuxList.spectrumList->spectrum(demuxIndex);
304 auto demuxIntensities = demuxSpectrum->getIntensityArray()->data;
305 auto demuxMzs = demuxSpectrum->getMZArray()->data;
307 vector<size_t> indexMask;
308 test.GetMask(originalMzs, demuxMzs, indexMask);
311 for (
auto index : indexMask)
313 peakSums[index] += demuxIntensities.at(j++);
318 for (
size_t i = 0; i < peakSums.size(); ++i)
326 struct SimplePrecursor
332 bool operator<(
const SimplePrecursor& rhs)
const {
return this->target < rhs.target; }
335 vector<SimplePrecursor> originalPrecursors;
336 for (
auto& precursor : originalSpectrum->precursors)
342 originalPrecursors.push_back(p);
344 sort(originalPrecursors.begin(), originalPrecursors.end());
348 const auto& originalPrecursor = originalPrecursors.at(i);
350 auto demuxSpectrum = demuxList.spectrumList->spectrum(demuxIndex);
351 auto demuxPrecursor = demuxSpectrum->precursors[0];
359 const double minimumWindowSize = 0.01;
361 unit_assert_equal(originalPrecursor.target, actualTarget, minimumWindowSize / 2.0);
362 unit_assert_equal(originalPrecursor.lowerOffset, actualLowerOffset, minimumWindowSize);
363 unit_assert_equal(originalPrecursor.upperOffset, actualUpperOffset, minimumWindowSize);
367 #ifdef _VERIFY_EXACT_SPECTRUM
380 vector<double> intensityValues =
414 auto demuxIntensities = demuxSpectrumAbsoluteCheck->getIntensityArray()->data;
415 auto demuxMzs = demuxSpectrumAbsoluteCheck->getMZArray()->data;
419 for (
size_t i = 0; i < intensityValues.size(); ++i)
427 void parseArgs(
const vector<string>& args, vector<string>& rawpaths)
429 for (
size_t i = 1; i < args.size(); ++i)
431 if (args[i] ==
"-v")
os_ = &cout;
432 else if (bal::starts_with(args[i],
"--"))
continue;
433 else rawpaths.push_back(args[i]);
438 int main(
int argc,
char* argv[])
444 vector<string> args(argv, argv + argc);
445 vector<string> rawpaths;
450 BOOST_FOREACH(
const string& filepath, rawpaths)
452 if (bal::ends_with(filepath,
"MsxTest.mzML"))
456 else if (bal::ends_with(filepath,
"OverlapTest.mzML"))