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";
125 demuxParams.
optimization = DemuxOptimization::OVERLAP_ONLY;
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";
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"))
bool TryGetOriginalIndex(const msdata::SpectrumIdentity &spectrumIdentity, size_t &index)
Tries to read the original index of the spectrum before demultiplexing using the SpectrumIdentity of ...
MSDPair(MSDataPtr msdata, SpectrumListPtr spectrumList)
void testMSXOnly(const string &filepath)
boost::shared_ptr< PeakDetector > PeakDetectorPtr
MS_isolation_window_lower_offset
isolation window lower offset: The extent of the isolation window in m/z below the isolation window t...
User-defined options for demultiplexing.
a virtual container of integers, accessible via an iterator interface, stored as union of intervals ...
void parseArgs(const vector< string > &args, vector< string > &rawpaths)
#define unit_assert_equal(x, y, epsilon)
Optimization optimization
Optimizations can be chosen when experimental design is known.
const size_t TEST_SPECTRUM_OVERLAP
boost::shared_ptr< MSData > MSDataPtr
default ReaderList, extended to include vendor readers
int main(int argc, char *argv[])
SpectrumList decorator implementation that can demultiplex spectra of several precursor windows acqui...
const size_t TEST_SPECTRUM_OVERLAP_ORIGINAL
#define unit_assert_operator_equal(expected, actual)
void GetMask(const vector< double > &original, const vector< double > &derived, vector< size_t > &mask) const
const size_t TEST_SPECTRUM_OVERLAP_DEMUX_INDEX
boost::shared_ptr< SpectrumList > SpectrumListPtr
MS_isolation_window_target_m_z
isolation window target m/z: The primary or reference m/z about which the isolation window is defined...
Helper functions for demultiplexing Helper functions include nice methods of accessing CV parameters ...
SpectrumList implementation to replace peak profiles with picked peaks.
const size_t NUM_DECONV_IN_TEST_SPECTRUM_OVERLAP
const size_t TEST_SPECTRUM_MSX
const size_t NUM_DECONV_IN_TEST_SPECTRUM_MSX
#define TEST_PROLOG(argc, argv)
const size_t TEST_SPECTRUM_MSX_DEMUX_INDEX
MS_isolation_window_upper_offset
isolation window upper offset: The extent of the isolation window in m/z above the isolation window t...
SpectrumListPtr spectrumList
void testOverlapOnly(const string &filepath)
MSDPair GenerateSpectrumList(const string &inputFile, bool demux=false, const SpectrumList_Demux::Params ¶ms=SpectrumList_Demux::Params()) const
const size_t TEST_SPECTRUM_MSX_ORIGINAL