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.

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

References filename1, os_, and unit_assert.

Referenced by pwiz::data::diff_string(), CubicHermiteSplineTest::InterpolationTest(), pwiz::data::operator<<(), test(), test(), testBinaryDataArray(), testChromatogram(), testCompound(), testConfiguration(), testContact(), testEvidence(), testIdentData(), testInstrument(), testModification(), testMSData(), testObject(), testObject_ChromatogramList(), testObject_SpectrumList(), testObjectWithMSData(), testPeptide(), testPrediction(), testProtein(), testProteinList(), testProteomeData(), testQR(), testRectangularQR(), testRetentionTime(), testRun(), testSerialize(), testSerializeReally(), testSnapModifications(), testSoftware(), testSpectrum(), testTarget(), testTraData(), testTransition(), testValidation(), testWriteRead(), testWriteRead(), testWriteRead(), testWriteRead(), testWriteRead(), testWriteReadBMS1(), testWriteReadBMS2(), testWriteReadCMS1(), testWriteReadCMS2(), testWriteReadMS1(), testWriteReadMS2(), validateReadIndexed(), validateWriteRead(), and validateWriteRead().

◆ test()

void test ( )

Definition at line 53 of file FrequencyDataTest.cpp.

54{
55 // create some data, f(x) = abs(5-(x-2))
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;
75 fd.write(filename1, FrequencyData::Text);
76
77 // read into const FrequencyData
78 string filename2 = "FrequencyDataTest.output2.txt";
79 FrequencyData fd2(filename1, FrequencyData::Text);
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}
void diff(const string &filename1, const string &filename2)
Class for binary storage of complex frequency data.
double observationDuration() const
const_iterator max() const
returns an iterator to FrequencyDatum with highest magnitude
double meanSquare() const
container::const_iterator const_iterator
double sumSquares() const
void write(const std::string &filename, IOMode mode=Binary) const
double observationDurationEstimatedFromData() const
calculation of the observation duration from the data
double retentionTime() const
const CalibrationParameters & calibrationParameters() const
void analyze()
recache statistics calculations after any direct data changes via non-const data()
const container & data() const
const access to underlying data
std::vector< FrequencyDatum > container
double noiseFloor() const
SampleDatum< double, std::complex< double > > FrequencyDatum
#define unit_assert_equal(x, y, epsilon)
Definition unit.hpp:99

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(), pwiz::data::FrequencyData::transform(), unit_assert, unit_assert_equal, pwiz::data::FrequencyData::variance(), and pwiz::data::FrequencyData::write().

Referenced by main().

◆ testFind()

void testFind ( )

Definition at line 151 of file FrequencyDataTest.cpp.

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}

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

Referenced by main().

◆ testAddition()

void testAddition ( )

Definition at line 175 of file FrequencyDataTest.cpp.

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}

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

Referenced by main().

◆ testNoiseFloor()

void testNoiseFloor ( )

Definition at line 195 of file FrequencyDataTest.cpp.

196{
198 if (os_) *os_ << "variance: " << fd.variance() << endl;
199 if (os_) *os_ << "noiseFloor: " << fd.noiseFloor() << endl;
200}

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

Referenced by main().

◆ cleanTests()

void cleanTests ( )

Definition at line 203 of file FrequencyDataTest.cpp.

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...

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

Referenced by main().

◆ testNoiseFloorVarianceCalculation()

void testNoiseFloorVarianceCalculation ( )

Definition at line 213 of file FrequencyDataTest.cpp.

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;
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}
RawMassDatum sampleMassData_[]
const unsigned int sampleMassDataSize_
const char * sampleFrequencyData_
double cutoffNoiseFloor() const
special calculation of noise floor for data with zero holes, e.g.
static CalibrationParameters thermo_FT()

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

Referenced by main().

◆ main()

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

Definition at line 247 of file FrequencyDataTest.cpp.

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();
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 testNoiseFloor()
void testFind()
void testNoiseFloorVarianceCalculation()
void cleanTests()
void testAddition()
void test()
#define TEST_EPILOG
Definition unit.hpp:183
#define TEST_FAILED(x)
Definition unit.hpp:177
#define TEST_PROLOG(argc, argv)
Definition unit.hpp:175

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

Variable Documentation

◆ os_

ostream* os_

◆ filename1

string filename1 = "FrequencyDataTest.output1.txt"