ProteoWizard
Functions | Variables
FrequencyDataTest.cpp File Reference
#include "FrequencyData.hpp"
#include "FrequencyDataTestData.hpp"
#include "pwiz/data/misc/CalibrationParameters.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include "pwiz/utility/misc/Filesystem.hpp"
#include "pwiz/utility/misc/Std.hpp"
#include <boost/filesystem/operations.hpp>

Go to the source code of this file.

Functions

void diff (const string &filename1, const string &filename2)
 
void test ()
 
void testFind ()
 
void testAddition ()
 
void testNoiseFloor ()
 
void cleanTests ()
 
void testNoiseFloorVarianceCalculation ()
 
int main (int argc, char *argv[])
 

Variables

ostream * os_
 
string filename1 = "FrequencyDataTest.output1.txt"
 

Function Documentation

§ diff()

void diff ( const string &  filename1,
const string &  filename2 
)

Definition at line 40 of file FrequencyDataTest.cpp.

References os_, and unit_assert.

Referenced by pwiz::proteome::DiffConfig::DiffConfig(), pwiz::tradata::DiffConfig::DiffConfig(), pwiz::msdata::DiffConfig::DiffConfig(), pwiz::identdata::DiffConfig::DiffConfig(), pwiz::data::operator<<(), pwiz::data::diff_impl::ptr_diff(), test(), testAmbiguousResidue(), testAnalysisData(), testAnalysisSoftware(), testBinaryDataArray(), testChromatogram(), testChromatogramList(), testComponent(), testComponentList(), testCompound(), testConfiguration(), testContact(), testContactRole(), testCV(), testCVParam(), testDatabaseTranslation(), testDataCollection(), testDataProcessing(), testEnzyme(), testEnzymes(), testEvidence(), testFileContent(), testFileDescription(), testFilter(), testFragmentArray(), testIdentData(), testIdentifiable(), testInputs(), testInstrument(), testInstrumentConfiguration(), testIonType(), testMassTable(), testMaxPrecisionDiff(), testMeasure(), testModification(), testMSData(), testObject(), testObject_ChromatogramList(), testObject_SpectrumList(), testObjectWithMSData(), testParamContainer(), testParamGroup(), testPeptide(), testPeptideEvidence(), testPeptideHypothesis(), testPerson(), testPrecursor(), testPrediction(), testProcessingMethod(), testProduct(), testProtein(), testProteinAmbiguityGroup(), testProteinDetectionHypothesis(), testProteinDetectionList(), testProteinDetectionProtocol(), testProteinList(), testProteomeData(), testQR(), testRectangularQR(), testResidue(), testRetentionTime(), testRun(), testSample(), testScan(), testScanList(), testScanSettings(), testSearchDatabase(), testSearchModification(), testSerialize(), testSerializeReally(), testSnapModifications(), testSoftware(), testSource(), testSourceFile(), testSpectraData(), testSpectrum(), testSpectrumIdentificationList(), testSpectrumIdentificationProtocol(), testSpectrumList(), testTarget(), testTraData(), testTransition(), testUserParam(), testValidation(), testWriteRead(), testWriteReadBMS1(), testWriteReadBMS2(), testWriteReadCMS1(), testWriteReadCMS2(), testWriteReadMS1(), testWriteReadMS2(), and validateWriteRead().

41 {
42  ifstream file1(filename1.c_str()), file2(filename2.c_str());
43  string line1, line2;
44  while (getline(file1, line1) && getline(file2, line2))
45  unit_assert(line1 == line2);
46  if (os_) *os_ << "diff " << filename1 << " " << filename2 << ": success\n";
47 }
string filename1
ostream * os_
#define unit_assert(x)
Definition: unit.hpp:85

§ test()

void test ( )

Definition at line 53 of file FrequencyDataTest.cpp.

References pwiz::data::CalibrationParameters::A, pwiz::data::FrequencyData::analyze(), pwiz::data::CalibrationParameters::B, pwiz::data::FrequencyData::calibrationParameters(), pwiz::data::FrequencyData::data(), diff(), filename1, pwiz::data::FrequencyData::max(), pwiz::data::FrequencyData::mean(), pwiz::data::FrequencyData::meanSquare(), pwiz::data::FrequencyData::noiseFloor(), pwiz::data::FrequencyData::normalize(), pwiz::data::FrequencyData::observationDuration(), pwiz::data::FrequencyData::observationDurationEstimatedFromData(), os_, pwiz::data::FrequencyData::retentionTime(), pwiz::data::FrequencyData::scale(), pwiz::data::FrequencyData::scanNumber(), pwiz::data::FrequencyData::shift(), pwiz::data::FrequencyData::sumSquares(), Text, pwiz::data::FrequencyData::transform(), unit_assert, unit_assert_equal, pwiz::data::FrequencyData::variance(), and pwiz::data::FrequencyData::write().

Referenced by main().

54 {
55  // create some data, f(x) = abs(5-(x-2))
56  FrequencyData fd;
57  FrequencyData::container& data = fd.data();
58  for (int i=-5; i<=5; i++)
59  data.push_back(FrequencyDatum(i+2, 5-abs(i)));
60  fd.analyze(); // recache after changing data
61 
62  // verify peak()
64  unit_assert(max->x == 2);
65  unit_assert(max->y == 5.);
66 
67  // verify stats
68  unit_assert(fd.mean() == 25./11);
69  unit_assert(fd.meanSquare() == 85./11);
70  unit_assert(fd.sumSquares() == 85.);
71  unit_assert_equal(fd.variance(), 85./11 - 25.*25/11/11, 1e-12);
72 
73  // write out data
74  if (os_) *os_ << "Writing " << filename1 << endl;
76 
77  // read into const FrequencyData
78  string filename2 = "FrequencyDataTest.output2.txt";
80 
81  // verify normalize()
82  fd2.normalize();
83  unit_assert(fd2.shift() == -2);
84  unit_assert(fd2.scale() == 1./5);
85  max = fd2.max();
86  unit_assert(max->x == 0);
87  unit_assert(max->y == 1.);
88 
89  // verify transform(shift, scale)
90  fd2.transform(-fd2.shift(), 1./fd2.scale());
91 
92  // verify read/write
93  if (os_) *os_ << "Writing " << filename2 << endl;
94  fd2.write(filename2, FrequencyData::Text);
95  diff(filename1, filename2);
96 
97  // test subrange
98  string filename3 = "FrequencyDataTest.output3.txt";
99  FrequencyData fd3(fd2, fd2.data().begin(), fd2.max()); // copy first half
100  if (os_) *os_ << "Writing " << filename3 << endl;
101  fd3.write(filename3, FrequencyData::Text);
102  FrequencyData fd4(fd2, fd2.max(), fd2.data().end()); // copy second half
103  ofstream os(filename3.c_str(), ios::app);
104  fd4.write(os, FrequencyData::Text);
105  os.close();
106  diff(filename1, filename3);
107 
108  // read/write binary, and metadata
109  fd.scanNumber(555);
110  fd.retentionTime(444);
112  fd.observationDuration(666);
113  fd.noiseFloor(777);
114  string filename4a = "FrequencyDataTest.output4a.txt";
115  if (os_) *os_ << "Writing " << filename4a << endl;
116  fd.write(filename4a, FrequencyData::Text);
117  string filenameBinary1 = "FrequencyDataTest.output1.cfd";
118  if (os_) *os_ << "Writing " << filenameBinary1 << endl;
119  fd.write(filenameBinary1);
120 
121  FrequencyData fd5(filenameBinary1);
122  unit_assert(fd5.observationDuration() == 666);
123  fd5.observationDuration(fd.observationDurationEstimatedFromData());
124  unit_assert(fd5.scanNumber() == 555);
125  unit_assert(fd5.retentionTime() == 444);
126  unit_assert(fd5.observationDuration() == 1);
127  unit_assert(fd5.noiseFloor() == 777);
128  if (os_) *os_ << "Calibration: " << fd5.calibrationParameters().A << " " << fd5.calibrationParameters().B << endl;
129 
130  string filename4b = "FrequencyDataTest.output4b.txt";
131  if (os_) *os_ << "Writing " << filename4b << endl;
132  fd5.write(filename4b, FrequencyData::Text);
133  diff(filename4a, filename4b);
135 
136  // test window
137  FrequencyData window1(fd, data.begin()+1, 2);
138  FrequencyData window2(fd, fd.max(), 1);
139  FrequencyData window3(fd, data.end()-2, 2);
140  string filename5 = "FrequencyDataTest.output5.txt";
141  if (os_) *os_ << "Writing " << filename5 << endl;
142  ofstream os5(filename5.c_str());
143  window1.write(os5, FrequencyData::Text);
144  window2.write(os5, FrequencyData::Text);
145  window3.write(os5, FrequencyData::Text);
146  os5.close();
147  diff(filename1, filename5);
148 }
double retentionTime() const
std::vector< FrequencyDatum > container
Class for binary storage of complex frequency data.
const_iterator max() const
returns an iterator to FrequencyDatum with highest magnitude
#define unit_assert_equal(x, y, epsilon)
Definition: unit.hpp:99
string filename1
double noiseFloor() const
void write(const std::string &filename, IOMode mode=Binary) const
void analyze()
recache statistics calculations after any direct data changes via non-const data() ...
Text
void diff(const string &filename1, const string &filename2)
double observationDurationEstimatedFromData() const
calculation of the observation duration from the data
double sumSquares() const
const container & data() const
const access to underlying data
double meanSquare() const
double observationDuration() const
container::const_iterator const_iterator
const CalibrationParameters & calibrationParameters() const
ostream * os_
#define unit_assert(x)
Definition: unit.hpp:85

§ testFind()

void testFind ( )

Definition at line 151 of file FrequencyDataTest.cpp.

References pwiz::data::FrequencyData::data(), filename1, pwiz::data::FrequencyData::findNearest(), and unit_assert.

Referenced by main().

152 {
153  const FrequencyData fd(filename1);
154 
155  FrequencyData::const_iterator it = fd.findNearest(-.2);
156  unit_assert(it!=fd.data().end() && it->x==0);
157 
158  it = fd.findNearest(.2);
159  unit_assert(it!=fd.data().end() && it->x==0);
160 
161  it = fd.findNearest(6.1);
162  unit_assert(it!=fd.data().end() && it->x==6);
163 
164  it = fd.findNearest(7.1);
165  unit_assert(it!=fd.data().end() && it->x==7);
166 
167  it = fd.findNearest(666);
168  unit_assert(it!=fd.data().end() && it->x==7);
169 
170  it = fd.findNearest(-666);
171  unit_assert(it==fd.data().begin());
172 }
Class for binary storage of complex frequency data.
string filename1
container::const_iterator const_iterator
#define unit_assert(x)
Definition: unit.hpp:85

§ testAddition()

void testAddition ( )

Definition at line 175 of file FrequencyDataTest.cpp.

References pwiz::data::FrequencyData::data(), filename1, pwiz::data::FrequencyData::transform(), and unit_assert.

Referenced by main().

176 {
179 
180  fd += fd;
181 
182  for (FrequencyData::const_iterator it=fd.data().begin(), jt=fd2.data().begin();
183  it!=fd.data().end();
184  ++it, ++jt)
185  unit_assert(it->y == 2.*jt->y);
186 
187  fd2.transform(0, -2.);
188  fd += fd2;
189 
190  for (FrequencyData::const_iterator it=fd.data().begin(); it!=fd.data().end(); ++it)
191  unit_assert(it->y == 0.);
192 }
Class for binary storage of complex frequency data.
string filename1
container::const_iterator const_iterator
#define unit_assert(x)
Definition: unit.hpp:85

§ testNoiseFloor()

void testNoiseFloor ( )

Definition at line 195 of file FrequencyDataTest.cpp.

References filename1, pwiz::data::FrequencyData::noiseFloor(), os_, and pwiz::data::FrequencyData::variance().

Referenced by main().

196 {
198  if (os_) *os_ << "variance: " << fd.variance() << endl;
199  if (os_) *os_ << "noiseFloor: " << fd.noiseFloor() << endl;
200 }
Class for binary storage of complex frequency data.
string filename1
ostream * os_

§ cleanTests()

void cleanTests ( )

Definition at line 203 of file FrequencyDataTest.cpp.

References pwiz::util::expand_pathmask(), and os_.

Referenced by main().

204 {
205  if (os_) *os_ << "Deleting FrequencyDataTest.output*.txt\n";
206  vector<bfs::path> filepaths;
207  expand_pathmask("FrequencyDataTest.output*.*", filepaths);
208  for (size_t i=0; i < filepaths.size(); ++i)
209  boost::filesystem::remove(filepaths[i]);
210 }
PWIZ_API_DECL int expand_pathmask(const bfs::path &pathmask, vector< bfs::path > &matchingPaths)
expands (aka globs) a pathmask to zero or more matching paths and returns the number of matching path...
ostream * os_

§ testNoiseFloorVarianceCalculation()

void testNoiseFloorVarianceCalculation ( )

Definition at line 213 of file FrequencyDataTest.cpp.

References pwiz::data::FrequencyData::analyze(), pwiz::data::FrequencyData::cutoffNoiseFloor(), pwiz::data::FrequencyData::data(), pwiz::data::CalibrationParameters::frequency(), os_, sampleFrequencyData_, sampleMassData_, sampleMassDataSize_, and unit_assert_equal.

Referenced by main().

214 {
215  if (os_) *os_ << "testNoiseFloorVarianceCalculation()\n";
216  if (os_) *os_ << setprecision(10);
217 
218  // test noise floor calculation on sample frequency data
219 
220  string filename = "FrequencyDataTest.cfd.temp.txt";
221  ofstream temp(filename.c_str());
222  temp << sampleFrequencyData_;
223  temp.close();
224 
225  FrequencyData fd(filename);
226  boost::filesystem::remove(filename);
227 
228  double result = fd.cutoffNoiseFloor();
229  if (os_) *os_ << "result: " << result << endl;
230  unit_assert_equal(result, 29000, 1000);
231 
232  // test noise floor calculation on sample mass data
233 
234  FrequencyData fdMasses;
235  CalibrationParameters cp = CalibrationParameters::thermo_FT();
236 
238  fdMasses.data().push_back(FrequencyDatum(cp.frequency(p->mz), p->intensity));
239  fdMasses.analyze();
240 
241  double result2 = fdMasses.cutoffNoiseFloor();
242  if (os_) *os_ << "result2: " << result2 << endl;
243  unit_assert_equal(result2, 6000, 1000);
244 }
Class for binary storage of complex frequency data.
#define unit_assert_equal(x, y, epsilon)
Definition: unit.hpp:99
void analyze()
recache statistics calculations after any direct data changes via non-const data() ...
const container & data() const
const access to underlying data
const unsigned int sampleMassDataSize_
SampleDatum< double, std::complex< double > > FrequencyDatum
RawMassDatum sampleMassData_[]
ostream * os_
double cutoffNoiseFloor() const
special calculation of noise floor for data with zero holes, e.g.
const char * sampleFrequencyData_

§ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 247 of file FrequencyDataTest.cpp.

References cleanTests(), os_, test(), TEST_EPILOG, TEST_FAILED, TEST_PROLOG, testAddition(), testFind(), testNoiseFloor(), and testNoiseFloorVarianceCalculation().

248 {
249  TEST_PROLOG(argc, argv)
250 
251  try
252  {
253  if (argc>1 && !strcmp(argv[1],"-v")) // verbose
254  os_ = &cout;
255 
256  if (os_) *os_ << "FrequencyDataTest\n";
257 
258  test();
259  testFind();
260  testAddition();
261  testNoiseFloor();
262  cleanTests();
264 
265  if (os_) *os_ << "success\n";
266  }
267  catch (exception& e)
268  {
269  TEST_FAILED(e.what())
270  }
271  catch (...)
272  {
273  TEST_FAILED("Caught unknown exception.")
274  }
275 
277 }
void testFind()
#define TEST_EPILOG
Definition: unit.hpp:182
void testNoiseFloor()
void testAddition()
#define TEST_FAILED(x)
Definition: unit.hpp:176
void test()
ostream * os_
#define TEST_PROLOG(argc, argv)
Definition: unit.hpp:174
void cleanTests()
void testNoiseFloorVarianceCalculation()

Variable Documentation

§ os_

ostream* os_

§ filename1

string filename1 = "FrequencyDataTest.output1.txt"