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 
28 #include "SpectrumList_Filter.hpp"
29 #include "boost/foreach_field.hpp"
30 
31 using namespace pwiz::util;
32 using namespace pwiz::cv;
33 using namespace pwiz::msdata;
34 using namespace pwiz::analysis;
35 
36 ostream* os_ = 0;
37 
38 const int EXPECTED_TEST_COUNT = 4;
39 
40 void 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 
117 void 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 
128 int 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 }
pwiz::msdata::SpectrumListPtr
boost::shared_ptr< SpectrumList > SpectrumListPtr
Definition: MSData.hpp:711
pwiz::cv
Definition: cv.hpp:108
parseArgs
void parseArgs(const vector< string > &args, vector< string > &rawpaths)
Definition: SpectrumList_IonMobility_Test.cpp:117
pwiz::analysis
Definition: ChromatogramList_Filter.hpp:37
pwiz::msdata::MSData::run
Run run
a run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument.
Definition: MSData.hpp:886
os_
ostream * os_
Definition: SpectrumList_IonMobility_Test.cpp:36
pwiz::msdata
Definition: DemuxTypes.hpp:27
ExtendedReaderList.hpp
unit_assert_operator_equal
#define unit_assert_operator_equal(expected, actual)
Definition: unit.hpp:92
EXPECTED_TEST_COUNT
const int EXPECTED_TEST_COUNT
Definition: SpectrumList_IonMobility_Test.cpp:38
unit_assert_equal_to_stream
#define unit_assert_equal_to_stream(x, y, epsilon, os)
Definition: unit.hpp:102
pwiz::util
Definition: almost_equal.hpp:33
almost_equal.hpp
TEST_EPILOG
#define TEST_EPILOG
Definition: unit.hpp:183
pwiz::analysis::SpectrumList_IonMobility::getIonMobilityUnits
virtual IonMobilityUnits getIonMobilityUnits() const
pwiz::analysis::SpectrumList_FilterPredicate_MSLevelSet
Definition: SpectrumList_Filter.hpp:176
pwiz::msdata::ReaderList
Reader container (composite pattern).
Definition: Reader.hpp:150
pwiz::analysis::SpectrumList_IonMobility::ionMobilityToCCS
virtual double ionMobilityToCCS(double ionMobility, double mz, int charge) const
returns collisional cross-section associated with the ion mobility (units depend on IonMobilityEquipm...
Std.hpp
pwiz::msdata::ExtendedReaderList
default ReaderList, extended to include vendor readers
Definition: ExtendedReaderList.hpp:38
pwiz::analysis::SpectrumList_Filter
SpectrumList filter, for creating Spectrum sub-lists.
Definition: SpectrumList_Filter.hpp:45
unit_assert_to_stream
#define unit_assert_to_stream(x, os)
Definition: unit.hpp:88
pwiz::analysis::SpectrumList_IonMobility
SpectrumList implementation that provides access to vendor-specific ion mobility functions.
Definition: SpectrumList_IonMobility.hpp:36
pwiz::msdata::Run::spectrumListPtr
SpectrumListPtr spectrumListPtr
all mass spectra and the acquisitions underlying them are described and attached here....
Definition: MSData.hpp:827
TEST_FAILED
#define TEST_FAILED(x)
Definition: unit.hpp:177
TEST_PROLOG
#define TEST_PROLOG(argc, argv)
Definition: unit.hpp:175
SpectrumList_Filter.hpp
test
void test(const string &filepath, const ReaderList &readerList, int &testCount)
Definition: SpectrumList_IonMobility_Test.cpp:40
MSDataFile.hpp
pwiz::msdata::MSDataFile
MSData object plus file I/O.
Definition: MSDataFile.hpp:41
pwiz::analysis::SpectrumList_IonMobility::canConvertIonMobilityAndCCS
virtual bool canConvertIonMobilityAndCCS(IonMobilityUnits units) const
returns true if file in question contains necessary information for CCS/IonMobility handling (as with...
unit_assert_operator_equal_to_stream
#define unit_assert_operator_equal_to_stream(expected, actual, os)
Definition: unit.hpp:95
unit.hpp
main
int main(int argc, char *argv[])
Definition: SpectrumList_IonMobility_Test.cpp:128
pwiz::analysis::SpectrumList_IonMobility::ccsToIonMobility
virtual double ccsToIonMobility(double ccs, double mz, int charge) const
returns the ion mobility (units depend on IonMobilityEquipment) associated with the given collisional...
pwiz::util::IntegerSet
a virtual container of integers, accessible via an iterator interface, stored as union of intervals
Definition: IntegerSet.hpp:38
SpectrumList_IonMobility.hpp