ProteoWizard
SpectrumListFactoryTest.cpp
Go to the documentation of this file.
1 //
2 // $Id: SpectrumListFactoryTest.cpp 4129 2012-11-20 00:05:37Z chambm $
3 //
4 //
5 // Original author: Darren Kessner <darren@proteowizard.org>
6 //
7 // Copyright 2008 Spielberg Family Center for Applied Proteomics
8 // Cedars-Sinai Medical Center, Los Angeles, California 90048
9 //
10 // Licensed under the Apache License, Version 2.0 (the "License");
11 // you may not use this file except in compliance with the License.
12 // You may obtain a copy of the License at
13 //
14 // http://www.apache.org/licenses/LICENSE-2.0
15 //
16 // Unless required by applicable law or agreed to in writing, software
17 // distributed under the License is distributed on an "AS IS" BASIS,
18 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 // See the License for the specific language governing permissions and
20 // limitations under the License.
21 //
22 
23 
24 #include "SpectrumListFactory.hpp"
27 #include <cstring>
28 
29 
30 using namespace pwiz::analysis;
31 using namespace pwiz::util;
32 using namespace pwiz::cv;
33 using namespace pwiz::msdata;
34 
35 
36 ostream* os_ = 0;
37 
38 
39 void testUsage()
40 {
41  if (os_) *os_ << "SpectrumListFactory::usage():\n" << SpectrumListFactory::usage() << endl;
42 }
43 
44 
45 void testWrap()
46 {
47  MSData msd;
49 
51 
52  unit_assert(sl.get());
53  unit_assert(sl->size() > 2);
54 
55  // CompassXtract and pwiz data processing
57  unit_assert_operator_equal(1, msd.allDataProcessingPtrs()[1]->processingMethods.size());
58 
59  SpectrumListFactory::wrap(msd, "scanNumber [19,20]");
60  unit_assert(sl->size() == 2);
61 
62  SpectrumListFactory::wrap(msd, "index [1,1]");
63  unit_assert(sl->size() == 1);
64  unit_assert(sl->spectrumIdentity(0).id == "scan=20");
65 
66  vector<double> profileData(sl->spectrum(0)->getMZArray()->data);
67  unit_assert(profileData.size() == 10);
68  unit_assert(profileData[0] == 0);
69  unit_assert(profileData[9] == 18);
70 
72  unit_assert_operator_equal(1, msd.allDataProcessingPtrs()[1]->processingMethods.size());
73 
74  SpectrumListFactory::wrap(msd, "peakPicking true [1,6]");
75 
76  vector<double> peakData(sl->spectrum(0)->getMZArray()->data);
77  unit_assert(peakData.size() == 1);
78  unit_assert(peakData[0] == 0);
79 
81  unit_assert_operator_equal(2, msd.allDataProcessingPtrs()[1]->processingMethods.size());
82 }
83 
84 
86 {
87  MSData msd;
89 
91  unit_assert(sl.get());
92  unit_assert(sl->size() > 2);
93 
94  double timeHighInSeconds = 5.9 * 60; // between first and second scan
95  ostringstream oss;
96  oss << "scanTime [0," << timeHighInSeconds << "]";
97  SpectrumListFactory::wrap(msd, oss.str());
98  unit_assert(sl->size() == 2);
99  unit_assert(sl->spectrumIdentity(0).id == "scan=19");
100  unit_assert(sl->spectrumIdentity(1).id == "sample=1 period=1 cycle=23 experiment=1"); // not in scan time order (42 seconds)
101 }
102 
103 
105 {
106  MSData msd;
108 
110  unit_assert(sl.get());
111  unit_assert(sl->size() == 5);
112 
113  sl->spectrum(0)->scanList.scans[0].set(MS_scan_start_time, 35, UO_second);
114  sl->spectrum(2)->scanList.scans[0].set(MS_scan_start_time, 0.5, UO_minute);
115 
116  SpectrumListFactory::wrap(msd, "sortByScanTime");
117  unit_assert(sl->size() == 5);
118  unit_assert(sl->spectrumIdentity(0).id == "scan=21");
119  unit_assert(sl->spectrumIdentity(1).id == "scan=19");
120  unit_assert(sl->spectrumIdentity(2).id == "sample=1 period=1 cycle=23 experiment=1");
121 }
122 
123 
125 {
126  MSData msd;
128 
130  unit_assert(sl.get() && sl->size()>2);
131  SpectrumPtr spectrum = sl->spectrum(0, true);
132  vector<MZIntensityPair> data;
133  spectrum->getMZIntensityPairs(data);
134  unit_assert(data.size() == 15);
135 
136  SpectrumListFactory::wrap(msd, "mzWindow [9.5,15]");
137 
138  spectrum = sl->spectrum(0, true);
139  spectrum->getMZIntensityPairs(data);
140  unit_assert(data.size() == 5);
141 
142  spectrum = sl->spectrum(1, true);
143  spectrum->getMZIntensityPairs(data);
144  unit_assert(data.size() == 3);
145 }
146 
147 
149 {
150  MSData msd;
152 
154  unit_assert(sl.get());
155  unit_assert(sl->size() == 5);
156 
157  ostringstream oss;
158  oss << "msLevel 2";
159  SpectrumListFactory::wrap(msd, oss.str());
160  unit_assert(sl->size() == 2);
161  unit_assert(sl->spectrumIdentity(0).id == "scan=20");
162 }
163 
164 
166 {
167  // test that the minimum length is 1 (due to 0 being the "unset" value)
168  {
169  MSData msd;
171 
173  unit_assert(sl.get());
174  unit_assert(sl->size() == 5);
175 
176  SpectrumListFactory::wrap(msd, "defaultArrayLength 0-");
177  unit_assert(sl->size() == 4);
178  unit_assert(sl->find("scan=21") == sl->size());
179  }
180 
181  // test filtering out all spectra
182  {
183  MSData msd;
186 
187  SpectrumListFactory::wrap(msd, "defaultArrayLength 100-");
188  unit_assert(sl->size() == 0);
189  }
190 
191  // test filtering out empty spectra
192  {
193  MSData msd;
196 
197  SpectrumListFactory::wrap(msd, "defaultArrayLength 1-");
198  unit_assert(sl->size() == 4);
199  unit_assert(sl->find("scan=21") == sl->size());
200  }
201 
202  // test filtering out spectra with defaultArrayLength > 14
203  {
204  MSData msd;
207 
208  SpectrumListFactory::wrap(msd, "defaultArrayLength 15-");
209  unit_assert(sl->size() == 2);
210  unit_assert(sl->find("scan=20") == sl->size());
211  unit_assert(sl->find("scan=21") == sl->size());
212  }
213 
214  // test filtering out spectra with 0 < defaultArrayLength < 15
215  {
216  MSData msd;
219 
220  SpectrumListFactory::wrap(msd, "defaultArrayLength 1-14");
221  unit_assert(sl->size() == 2);
222  unit_assert(sl->find("scan=20") == 0);
223  }
224 }
225 
227 {
228  // test filter by CID activation
229  {
230  MSData msd;
232  SpectrumListFactory::wrap(msd, "msLevel 2-");
233  SpectrumListFactory::wrap(msd, "activation CID");
234  unit_assert(msd.run.spectrumListPtr->size() == 1);
235  }
236  // test filter by ETD activation
237  {
238  MSData msd;
240  SpectrumListFactory::wrap(msd, "msLevel 2-");
241  SpectrumListFactory::wrap(msd, "activation ETD");
242  unit_assert(msd.run.spectrumListPtr->size() == 1);
243  }
244  // test filter by HCD activation
245  {
246  MSData msd;
248  SpectrumListFactory::wrap(msd, "msLevel 2-");
249  SpectrumListFactory::wrap(msd, "activation HCD");
250  unit_assert(msd.run.spectrumListPtr->size() == 0);
251  }
252  // test filter by IRMPD activation
253  {
254  MSData msd;
256  SpectrumListFactory::wrap(msd, "msLevel 2-");
257  SpectrumListFactory::wrap(msd, "activation IRMPD");
258  unit_assert(msd.run.spectrumListPtr->size() == 0);
259  }
260  // test invalid argument
261  {
262  MSData msd;
264 
265  unit_assert_throws(SpectrumListFactory::wrap(msd, "activation UNEXPECTED_INPUT"), runtime_error);
266  }
267 }
268 
270 {
271  // test filter by ITMS analyzer type
272  {
273  MSData msd;
275 
276  SpectrumListFactory::wrap(msd, "analyzerType ITMS");
277  unit_assert(msd.run.spectrumListPtr->size() == 5);
278  }
279  // test filter by ITMS analyzer type (new syntax)
280  {
281  MSData msd;
283 
284  SpectrumListFactory::wrap(msd, "analyzerType it");
285  unit_assert(msd.run.spectrumListPtr->size() == 5);
286  }
287  // test filter by FTMS analyzer type
288  {
289  MSData msd;
291 
292  SpectrumListFactory::wrap(msd, "analyzer FTMS");
293  unit_assert(msd.run.spectrumListPtr->size() == 0);
294  }
295  // test filter by Orbi analyzer type
296  {
297  MSData msd;
299 
300  SpectrumListFactory::wrap(msd, "analyzer Orbi");
301  unit_assert(msd.run.spectrumListPtr->size() == 0);
302  }
303  // test filter by TOF analyzer type
304  {
305  MSData msd;
307 
308  SpectrumListFactory::wrap(msd, "analyzer TOF");
309  unit_assert(msd.run.spectrumListPtr->size() == 0);
310  }
311  // test invalid argument
312  {
313  MSData msd;
315 
316  unit_assert_throws(SpectrumListFactory::wrap(msd, "analyzer UNEXPECTED_INPUT"), runtime_error)
317  }
318 }
319 
321 {
322  // test filter by positive polarity
323  {
324  MSData msd;
326 
328  unit_assert(sl.get());
329  unit_assert(sl->size() == 5);
330 
331  SpectrumListFactory::wrap(msd, "polarity positive");
332  unit_assert(sl->size() == 3);
333  }
334  // test filter by + polarity
335  {
336  MSData msd;
338 
340  unit_assert(sl.get());
341  unit_assert(sl->size() == 5);
342 
343  SpectrumListFactory::wrap(msd, "polarity +");
344  unit_assert(sl->size() == 3);
345  }
346  // test filter by negative polarity
347  {
348  MSData msd;
350 
352  unit_assert(sl.get());
353  unit_assert(sl->size() == 5);
354 
355  SpectrumListFactory::wrap(msd, "polarity -");
356  unit_assert(sl->size() == 2);
357  }
358  // test invalid argument
359  {
360  MSData msd;
362 
364  unit_assert(sl.get());
365  unit_assert(sl->size() == 5);
366  unit_assert_throws(SpectrumListFactory::wrap(msd, "polarity UNEXPECTED_INPUT"), runtime_error)
367  }
368 }
369 
371 {
372  MSData msd;
374 
375  {
376  SpectrumListFactory::wrap(msd, "titleMaker <Id>");
378  unit_assert_operator_equal("scan=19", sl->spectrum(0)->cvParam(MS_spectrum_title).value);
379  unit_assert_operator_equal("scan=20", sl->spectrum(1)->cvParam(MS_spectrum_title).value);
380  unit_assert_operator_equal("scan=21", sl->spectrum(2)->cvParam(MS_spectrum_title).value);
381  unit_assert_operator_equal("scan=22", sl->spectrum(3)->cvParam(MS_spectrum_title).value);
382  unit_assert_operator_equal("sample=1 period=1 cycle=23 experiment=1", sl->spectrum(4)->cvParam(MS_spectrum_title).value);
383  }
384 
385  {
386  // the outer titleMaker overrides the inner one
387  SpectrumListFactory::wrap(msd, "titleMaker <Index>; <SpectrumType>, <MsLevel>");
389  unit_assert_operator_equal("0; MS1 spectrum, 1", sl->spectrum(0)->cvParam(MS_spectrum_title).value);
390  unit_assert_operator_equal("1; MSn spectrum, 2", sl->spectrum(1)->cvParam(MS_spectrum_title).value);
391  unit_assert_operator_equal("2; MS1 spectrum, 1", sl->spectrum(2)->cvParam(MS_spectrum_title).value);
392  unit_assert_operator_equal("3; MSn spectrum, 2", sl->spectrum(3)->cvParam(MS_spectrum_title).value);
393  unit_assert_operator_equal("4; MS1 spectrum, 1", sl->spectrum(4)->cvParam(MS_spectrum_title).value);
394  }
395 
396  {
397  SpectrumListFactory::wrap(msd, "titleMaker <ScanNumber> <MsLevel> <ActivationType> <ChargeState> <PrecursorSpectrumId>");
399  unit_assert_operator_equal("19 1 ", sl->spectrum(0)->cvParam(MS_spectrum_title).value);
400  unit_assert_operator_equal("20 2 CID 2 scan=19", sl->spectrum(1)->cvParam(MS_spectrum_title).value);
401  unit_assert_operator_equal("21 1 ", sl->spectrum(2)->cvParam(MS_spectrum_title).value);
402  unit_assert_operator_equal("22 2 ETD/CID 2 scan=19", sl->spectrum(3)->cvParam(MS_spectrum_title).value);
403  unit_assert_operator_equal("5 1 ", sl->spectrum(4)->cvParam(MS_spectrum_title).value);
404  }
405 }
406 
407 void test()
408 {
409  testUsage();
410  testWrap();
414  testWrapMSLevel();
420 }
421 
422 
423 int main(int argc, char* argv[])
424 {
425  TEST_PROLOG(argc, argv)
426 
427  try
428  {
429  if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
430  test();
431  }
432  catch (exception& e)
433  {
434  TEST_FAILED(e.what())
435  }
436  catch (...)
437  {
438  TEST_FAILED("Caught unknown exception.")
439  }
440 
442 }
443