ProteoWizard
Classes | Functions | Variables
MSDataFileTest.cpp File Reference
#include "MSDataFile.hpp"
#include "Diff.hpp"
#include "IO.hpp"
#include "SpectrumListBase.hpp"
#include "ChromatogramListBase.hpp"
#include "examples.hpp"
#include "pwiz/utility/misc/unit.hpp"
#include "pwiz/utility/misc/Filesystem.hpp"
#include "pwiz/utility/misc/Std.hpp"
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/copy.hpp>

Go to the source code of this file.

Classes

class  TestReader

Functions

void hackInMemoryMSData (MSData &msd)
void validateWriteRead (const MSDataFile::WriteConfig &writeConfig, const DiffConfig diffConfig)
void test ()
void demo ()
void testReader ()
void testSHA1 ()
int main (int argc, char *argv[])

Variables

ostream * os_ = 0
string filenameBase_ = "temp.MSDataFileTest"
const char rawHeader_ []

Function Documentation

void hackInMemoryMSData ( MSData msd)

Definition at line 51 of file MSDataFileTest.cpp.

References pwiz::msdata::Run::chromatogramListPtr, pwiz::msdata::MSData::fileDescription, pwiz::msdata::MSData::run, pwiz::msdata::ChromatogramListBase::setDataProcessingPtr(), pwiz::msdata::SpectrumListBase::setDataProcessingPtr(), pwiz::msdata::MSData::softwarePtrs, pwiz::msdata::FileDescription::sourceFilePtrs, and pwiz::msdata::Run::spectrumListPtr.

Referenced by validateWriteRead().

{
// remove metadata ptrs appended on read
vector<SourceFilePtr>& sfs = msd.fileDescription.sourceFilePtrs;
if (!sfs.empty()) sfs.erase(sfs.end()-1);
vector<SoftwarePtr>& sws = msd.softwarePtrs;
if (!sws.empty()) sws.erase(sws.end()-1);
// remove current DataProcessing created on read
SpectrumListBase* sl = dynamic_cast<SpectrumListBase*>(msd.run.spectrumListPtr.get());
}
void validateWriteRead ( const MSDataFile::WriteConfig writeConfig,
const DiffConfig  diffConfig 
)

Definition at line 67 of file MSDataFileTest.cpp.

References diff(), filename1, filenameBase_, pwiz::msdata::MSDataFile::WriteConfig::format, Format_mzXML, hackInMemoryMSData(), pwiz::identdata::examples::initializeTiny(), os_, pwiz::msdata::MSData::run, pwiz::msdata::Run::spectrumListPtr, unit_assert, pwiz::msdata::MSDataFile::write(), and write().

Referenced by test().

{
if (os_) *os_ << "validateWriteRead()\n " << writeConfig << endl;
string filename1 = filenameBase_ + ".1";
string filename2 = filenameBase_ + ".2";
string filename3 = filenameBase_ + ".3";
{
// create MSData object in memory
MSData tiny;
if (writeConfig.format == MSDataFile::Format_mzXML)
{
// remove s22 since it is not written to mzXML
static_cast<SpectrumListSimple&>(*tiny.run.spectrumListPtr).spectra.pop_back();
}
// write to file #1 (static)
MSDataFile::write(tiny, filename1, writeConfig);
// simulate CLI garbage collect behavior, wherein delayed deletes stress
// memory and file handle usage
{
std::vector< boost::shared_ptr< MSDataFile > > msds;
for (int i=0;i<100;i++)
{
boost::shared_ptr<MSDataFile> msd1(new MSDataFile(filename1));
msds.push_back(msd1);
Diff<MSData, DiffConfig> diff(tiny, *msd1, diffConfig);
}
}
// read back into an MSDataFile object
MSDataFile msd1(filename1);
// compare
Diff<MSData, DiffConfig> diff(tiny, msd1, diffConfig);
if (diff && os_) *os_ << diff << endl;
// write to file #2 (member)
msd1.write(filename2, writeConfig);
// read back into another MSDataFile object
MSDataFile msd2(filename2);
// compare
diff(tiny, msd2);
if (diff && os_) *os_ << diff << endl;
// now give the gzip read a workout
bio::filtering_istream tinyGZ(bio::gzip_compressor() | bio::file_descriptor_source(filename1));
bio::copy(tinyGZ, bio::file_descriptor_sink(filename1+".gz", ios::out|ios::binary));
MSDataFile msd3(filename1+".gz");
// compare
diff(tiny, msd3);
if (diff && os_) *os_ << diff << endl;
// test writing to a stream
ostringstream oss;
msd1.write(oss, writeConfig);
string ossStr = oss.str();
ofstream ofs(filename3.c_str());
ofs.write(ossStr.c_str(), ossStr.length());
ofs.close();
// read back into another MSDataFile object
MSDataFile msd4(filename3);
// compare
diff(tiny, msd4);
if (diff && os_) *os_ << diff << endl;
}
// remove temp files
boost::filesystem::remove(filename1);
boost::filesystem::remove(filename2);
boost::filesystem::remove(filename1 + ".gz");
boost::filesystem::remove(filename3);
}
void test ( )

Definition at line 161 of file MSDataFileTest.cpp.

References pwiz::msdata::MSDataFile::WriteConfig::binaryDataEncoderConfig, pwiz::msdata::MSDataFile::WriteConfig::format, Format_mzXML, pwiz::msdata::DiffConfig::ignoreChromatograms, pwiz::msdata::DiffConfig::ignoreMetadata, pwiz::msdata::MSDataFile::WriteConfig::indexed, pwiz::msdata::BinaryDataEncoder::Config::precision, and validateWriteRead().

{
DiffConfig diffConfig;
// mzML 64-bit, full diff
validateWriteRead(writeConfig, diffConfig);
writeConfig.indexed = false;
validateWriteRead(writeConfig, diffConfig); // no index
writeConfig.indexed = true;
// mzML 32-bit, full diff
writeConfig.binaryDataEncoderConfig.precision = BinaryDataEncoder::Precision_32;
validateWriteRead(writeConfig, diffConfig);
// mzXML 32-bit, diff ignoring metadata and chromatograms
diffConfig.ignoreMetadata = true;
diffConfig.ignoreChromatograms = true;
validateWriteRead(writeConfig, diffConfig);
// mzXML 64-bit, diff ignoring metadata and chromatograms
writeConfig.binaryDataEncoderConfig.precision = BinaryDataEncoder::Precision_64;
validateWriteRead(writeConfig, diffConfig);
writeConfig.indexed = false;
validateWriteRead(writeConfig, diffConfig); // no index
writeConfig.indexed = true;
}
void demo ( )
void testReader ( )

Definition at line 260 of file MSDataFileTest.cpp.

References TestReader::count, filenameBase_, os_, rawHeader_, and unit_assert.

Referenced by main().

{
// create a file
string filename = filenameBase_ + ".RAW";
ofstream os(filename.c_str());
os.write(rawHeader_, 18);
os.close();
// open the file with our Reader
TestReader reader;
MSDataFile msd(filename, &reader);
// verify that our reader got called properly
unit_assert(reader.count == 2);
// remove temp file
boost::filesystem::remove(filename);
if (os_) *os_ << endl;
}
void testSHA1 ( )

Definition at line 282 of file MSDataFileTest.cpp.

References pwiz::msdata::MSData::fileDescription, filenameBase_, pwiz::identdata::examples::initializeTiny(), MS_SHA_1, os_, pwiz::msdata::FileDescription::sourceFilePtrs, unit_assert, and write().

Referenced by main().

{
if (os_) *os_ << "testSHA1()\n";
// write out a test file
string filename = filenameBase_ + ".SHA1Test";
MSData tiny;
MSDataFile::write(tiny, filename);
{
// read in without SHA-1 calculation
MSDataFile msd(filename);
if (os_)
{
*os_ << "no SHA-1:\n";
IO::write(writer, *msd.fileDescription.sourceFilePtrs.back());
}
unit_assert(!msd.fileDescription.sourceFilePtrs.empty());
unit_assert(!msd.fileDescription.sourceFilePtrs.back()->hasCVParam(MS_SHA_1));
// read in with SHA-1 calculation
MSDataFile msd_sha1(filename, 0, true);
if (os_)
{
*os_ << "with SHA-1:\n";
IO::write(writer, *msd_sha1.fileDescription.sourceFilePtrs.back());
}
unit_assert(!msd_sha1.fileDescription.sourceFilePtrs.empty());
unit_assert(msd_sha1.fileDescription.sourceFilePtrs.back()->hasCVParam(MS_SHA_1));
}
// clean up
boost::filesystem::remove(filename);
if (os_) *os_ << endl;
}
int main ( int  argc,
char *  argv[] 
)

Definition at line 329 of file MSDataFileTest.cpp.

References e(), os_, test(), TEST_EPILOG, TEST_FAILED, TEST_PROLOG, pwiz::util::testReader(), and testSHA1().

{
TEST_PROLOG(argc, argv)
try
{
if (argc>1 && !strcmp(argv[1],"-v")) os_ = &cout;
test();
//demo();
}
catch (exception& e)
{
TEST_FAILED(e.what())
}
catch (...)
{
TEST_FAILED("Caught unknown exception.")
}
}

Variable Documentation

ostream* os_ = 0

Definition at line 45 of file MSDataFileTest.cpp.

string filenameBase_ = "temp.MSDataFileTest"

Definition at line 48 of file MSDataFileTest.cpp.

Referenced by demo(), test(), testReader(), testSHA1(), and validateWriteRead().

const char rawHeader_[]
Initial value:
{'\x01', '\xA1',
'F', '\0', 'i', '\0', 'n', '\0', 'n', '\0',
'i', '\0', 'g', '\0', 'a', '\0', 'n', '\0'}

Definition at line 215 of file MSDataFileTest.cpp.

Referenced by TestReader::identify(), and testReader().