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 }
const int EXPECTED_TEST_COUNT
SpectrumList implementation that provides access to vendor-specific ion mobility functions.
a virtual container of integers, accessible via an iterator interface, stored as union of intervals ...
Definition: IntegerSet.hpp:37
#define TEST_EPILOG
Definition: unit.hpp:183
virtual IonMobilityUnits getIonMobilityUnits() const
Reader container (composite pattern).
Definition: Reader.hpp:148
#define unit_assert_equal_to_stream(x, y, epsilon, os)
Definition: unit.hpp:102
virtual double ionMobilityToCCS(double ionMobility, double mz, int charge) const
returns collisional cross-section associated with the ion mobility (units depend on IonMobilityEquipm...
default ReaderList, extended to include vendor readers
virtual bool canConvertIonMobilityAndCCS(IonMobilityUnits units) const
returns true if file in question contains necessary information for CCS/IonMobility handling (as with...
#define unit_assert_operator_equal(expected, actual)
Definition: unit.hpp:92
Run run
a run in mzML should correspond to a single, consecutive and coherent set of scans on an instrument...
Definition: MSData.hpp:886
boost::shared_ptr< SpectrumList > SpectrumListPtr
Definition: MSData.hpp:711
MSData object plus file I/O.
Definition: MSDataFile.hpp:40
int main(int argc, char *argv[])
void test(const string &filepath, const ReaderList &readerList, int &testCount)
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.
Definition: MSData.hpp:827
#define unit_assert_to_stream(x, os)
Definition: unit.hpp:88
#define TEST_FAILED(x)
Definition: unit.hpp:177
#define TEST_PROLOG(argc, argv)
Definition: unit.hpp:175
#define unit_assert_operator_equal_to_stream(expected, actual, os)
Definition: unit.hpp:95
SpectrumList filter, for creating Spectrum sub-lists.
void parseArgs(const vector< string > &args, vector< string > &rawpaths)
virtual double ccsToIonMobility(double ccs, double mz, int charge) const
returns the ion mobility (units depend on IonMobilityEquipment) associated with the given collisional...
Definition: cv.hpp:108