ProteoWizard
SpectrumList_IonMobility_Test.cpp
Go to the documentation of this file.
1//
2// $Id$
3//
4//
5// Original author: Matt Chambers <matt.chambers <a.t> vanderbilt.edu>
6//
7// Copyright 2016 Vanderbilt University - Nashville, TN 37232
8//
9// Licensed under the Apache License, Version 2.0 (the "License");
10// you may not use this file except in compliance with the License.
11// You may obtain a copy of the License at
12//
13// http://www.apache.org/licenses/LICENSE-2.0
14//
15// Unless required by applicable law or agreed to in writing, software
16// distributed under the License is distributed on an "AS IS" BASIS,
17// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18// See the License for the specific language governing permissions and
19// limitations under the License.
20//
21
29#include "boost/foreach_field.hpp"
30
31using namespace pwiz::util;
32using namespace pwiz::cv;
33using namespace pwiz::msdata;
34using namespace pwiz::analysis;
35
36ostream* os_ = 0;
37
38const int EXPECTED_TEST_COUNT = 4;
39
40void test(const string& filepath, const ReaderList& readerList, int& testCount)
41{
42 MSDataFile msd(filepath, &readerList);
43 const double EPSILON = 1e-4;
44 ostringstream failedTests;
46
48 SpectrumList_IonMobility slim2(slf);
49
50 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::none), failedTests);
51
52 if (bal::ends_with(filepath, "ImsSynth_Chrom.d"))
53 {
54 unit_assert_to_stream(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec == slim.getIonMobilityUnits(), failedTests);
55 unit_assert_to_stream(slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
56 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
57 unit_assert_equal_to_stream(242.55569, slim.ionMobilityToCCS(32.62, 922.01, 1), EPSILON, failedTests);
58 unit_assert_equal_to_stream(195.69509, slim.ionMobilityToCCS(25.78, 400.1755, 1), EPSILON, failedTests);
59 unit_assert_equal_to_stream(243.57694, slim.ionMobilityToCCS(31.55, 254.0593, 1), EPSILON, failedTests);
60 unit_assert_equal_to_stream(202.32441, slim.ionMobilityToCCS(26.98, 622.0291, 1), EPSILON, failedTests);
61 unit_assert_equal_to_stream(254.05743, slim.ionMobilityToCCS(33.92, 609.2808, 1), EPSILON, failedTests);
62 unit_assert_equal_to_stream(172.09947, slim.ionMobilityToCCS(22.38, 294.1601, 1), EPSILON, failedTests);
63
64 unit_assert_equal_to_stream(32.62, slim.ccsToIonMobility(242.55569, 922.01, 1), EPSILON, failedTests);
65 unit_assert_equal_to_stream(25.78, slim.ccsToIonMobility(195.69509, 400.1755, 1), EPSILON, failedTests);
66 unit_assert_equal_to_stream(31.55, slim.ccsToIonMobility(243.57694, 254.0593, 1), EPSILON, failedTests);
67 unit_assert_equal_to_stream(26.98, slim.ccsToIonMobility(202.32441, 622.0291, 1), EPSILON, failedTests);
68 unit_assert_equal_to_stream(33.92, slim.ccsToIonMobility(254.05743, 609.2808, 1), EPSILON, failedTests);
69 unit_assert_equal_to_stream(22.38, slim.ccsToIonMobility(172.09947, 294.1601, 1), EPSILON, failedTests);
70
71 unit_assert_to_stream(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec == slim2.getIonMobilityUnits(), failedTests);
72 unit_assert_to_stream(slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
73 unit_assert_to_stream(!slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
74 }
75 else if (bal::ends_with(filepath, "HDMSe_Short_noLM.raw"))
76 {
77 unit_assert_to_stream(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec == slim.getIonMobilityUnits(), failedTests);
78 unit_assert_to_stream(slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
79 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
80 unit_assert_equal_to_stream(177.4365, slim.ionMobilityToCCS(3.1645, 336.18, 1), EPSILON, failedTests);
81 unit_assert_equal_to_stream(3.1645, slim.ccsToIonMobility(177.4365, 336.18, 1), EPSILON, failedTests);
82
83 /*unit_assert_equal_to_stream(179.48, slim.ionMobilityToCCS(3.2, 309.11, 1), EPSILON, failedTests);
84 unit_assert_equal_to_stream(158.09, slim.ionMobilityToCCS(2.71, 257.16, 1), EPSILON, failedTests);
85 unit_assert_equal_to_stream(202.56, slim.ionMobilityToCCS(3.77, 458.16, 1), EPSILON, failedTests);
86 unit_assert_equal_to_stream(173.46, slim.ionMobilityToCCS(3.11, 334.16, -1), EPSILON, failedTests);*/
87
88 unit_assert_to_stream(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec == slim2.getIonMobilityUnits(), failedTests);
89 unit_assert_to_stream(slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
90 unit_assert_to_stream(!slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
91 }
92 else if (bal::ends_with(filepath, "MSe_Short.raw"))
93 {
94 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
95 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
96 }
97 else if (bal::ends_with(filepath, "HDMSe_Short_noLM.mzML"))
98 {
99 unit_assert_operator_equal_to_stream((int) SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec, (int) slim.getIonMobilityUnits(), failedTests);
100 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
101 unit_assert_to_stream(!slim.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
102
103 unit_assert_operator_equal_to_stream((int) SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec, (int) slim2.getIonMobilityUnits(), failedTests);
104 unit_assert_to_stream(!slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::drift_time_msec), failedTests);
105 unit_assert_to_stream(!slim2.canConvertIonMobilityAndCCS(SpectrumList_IonMobility::IonMobilityUnits::inverse_reduced_ion_mobility_Vsec_per_cm2), failedTests);
106 }
107 else
108 throw runtime_error("Unhandled test file: " + filepath);
109
110 if (!failedTests.str().empty())
111 throw runtime_error(failedTests.str());
112
113 ++testCount;
114}
115
116
117void parseArgs(const vector<string>& args, vector<string>& rawpaths)
118{
119 for (size_t i = 1; i < args.size(); ++i)
120 {
121 if (args[i] == "-v") os_ = &cout;
122 else if (bal::starts_with(args[i], "--")) continue;
123 else rawpaths.push_back(args[i]);
124 }
125}
126
127
128int main(int argc, char* argv[])
129{
130 TEST_PROLOG(argc, argv)
131
132 try
133 {
134 vector<string> args(argv, argv+argc);
135 vector<string> rawpaths;
136 parseArgs(args, rawpaths);
137
138 ExtendedReaderList readerList;
139 int testCount = 0;
140
141 for (const string& filepath : rawpaths)
142 {
143 test(filepath, readerList, testCount);
144 }
145
147 }
148 catch (exception& e)
149 {
150 TEST_FAILED(e.what())
151 }
152 catch (...)
153 {
154 TEST_FAILED("Caught unknown exception.")
155 }
156
158}
int main(int argc, char *argv[])
const int EXPECTED_TEST_COUNT
void parseArgs(const vector< string > &args, vector< string > &rawpaths)
SpectrumList filter, for creating Spectrum sub-lists.
SpectrumList implementation that provides access to vendor-specific ion mobility functions.
virtual double ionMobilityToCCS(double ionMobility, double mz, int charge) const
returns collisional cross-section associated with the ion mobility (units depend on IonMobilityEquipm...
virtual double ccsToIonMobility(double ccs, double mz, int charge) const
returns the ion mobility (units depend on IonMobilityEquipment) associated with the given collisional...
virtual bool canConvertIonMobilityAndCCS(IonMobilityUnits units) const
returns true if file in question contains necessary information for CCS/IonMobility handling (as with...
virtual IonMobilityUnits getIonMobilityUnits() const
default ReaderList, extended to include vendor readers
Reader container (composite pattern).
Definition Reader.hpp:150
a virtual container of integers, accessible via an iterator interface, stored as union of intervals
boost::shared_ptr< SpectrumList > SpectrumListPtr
Definition MSData.hpp:711
MSData object plus file I/O.
Run run
a run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument.
Definition MSData.hpp:886
SpectrumListPtr spectrumListPtr
all mass spectra and the acquisitions underlying them are described and attached here....
Definition MSData.hpp:827
#define unit_assert_equal_to_stream(x, y, epsilon, os)
Definition unit.hpp:102
#define TEST_EPILOG
Definition unit.hpp:183
#define unit_assert_to_stream(x, os)
Definition unit.hpp:88
#define unit_assert_operator_equal_to_stream(expected, actual, os)
Definition unit.hpp:95
#define TEST_FAILED(x)
Definition unit.hpp:177
#define unit_assert_operator_equal(expected, actual)
Definition unit.hpp:92
#define TEST_PROLOG(argc, argv)
Definition unit.hpp:175