Commit 122d7b02 by Maarten L. Hekkelman

towards v5 of libcifpp

parent fa880e3d
......@@ -120,7 +120,7 @@ find_package(Threads)
# Note: use -DBoost_USE_STATIC_LIBS=ON to use boost static libraries
find_package(cifpp 4.0.1 REQUIRED)
find_package(cifpp 5.0.0 REQUIRED)
find_package(Boost COMPONENTS date_time program_options)
add_executable(mkdssp
......
......@@ -26,9 +26,8 @@
#pragma once
#include <cif++/Structure.hpp>
#include <cif++/Secondary.hpp>
#include <cif++/structure/DSSP.hpp>
void writeDSSP(const mmcif::Structure& structure, const mmcif::DSSP& dssp, std::ostream& os);
void annotateDSSP(mmcif::Structure& structure, const mmcif::DSSP& dssp, bool writeOther, std::ostream& os);
void writeDSSP(const cif::datablock &db, const mmcif::DSSP& dssp, std::ostream& os);
void annotateDSSP(cif::datablock &db, const mmcif::DSSP& dssp, bool writeOther, std::ostream& os);
......@@ -33,23 +33,20 @@
#include <filesystem>
#include <fstream>
#include <gxrio.hpp>
#include <boost/format.hpp>
#include <boost/date_time/gregorian/formatters.hpp>
#include <cif++/Structure.hpp>
#include <cif++/Secondary.hpp>
#include <cif++/CifUtils.hpp>
#include <cif++/Cif2PDB.hpp>
#include <cif++/structure/DSSP.hpp>
#include <cif++/structure/Compound.hpp>
#include <boost/program_options.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include "dssp.hpp"
#include "revision.hpp"
namespace fs = std::filesystem;
namespace io = boost::iostreams;
namespace po = boost::program_options;
// --------------------------------------------------------------------
......@@ -148,9 +145,9 @@ int d_main(int argc, const char* argv[])
// Load extra CCD definitions, if any
if (vm.count("compounds"))
cif::addFileResource("components.cif", vm["compounds"].as<std::string>());
cif::add_file_resource("components.cif", vm["compounds"].as<std::string>());
else if (vm.count("components"))
cif::addFileResource("components.cif", vm["components"].as<std::string>());
cif::add_file_resource("components.cif", vm["components"].as<std::string>());
if (vm.count("extra-compounds"))
mmcif::CompoundFactory::instance().pushDictionary(vm["extra-compounds"].as<std::string>());
......@@ -158,7 +155,7 @@ int d_main(int argc, const char* argv[])
// And perhaps a private mmcif_pdbx dictionary
if (vm.count("mmcif-dictionary"))
cif::addFileResource("mmcif_pdbx_v50.dic", vm["mmcif-dictionary"].as<std::string>());
cif::add_file_resource("mmcif_pdbx_v50.dic", vm["mmcif-dictionary"].as<std::string>());
if (vm.count("dict"))
{
......@@ -166,8 +163,17 @@ int d_main(int argc, const char* argv[])
mmcif::CompoundFactory::instance().pushDictionary(dict);
}
mmcif::File f(vm["xyzin"].as<std::string>());
mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
cif::file f(vm["xyzin"].as<std::string>());
f.load_dictionary("mmcif_pdbx_v50");
if (not f.is_valid())
{
std::cerr << "File not valid" << std::endl;
exit(1);
}
// mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
// --------------------------------------------------------------------
......@@ -185,9 +191,7 @@ int d_main(int argc, const char* argv[])
{
fs::path output = vm["output"].as<std::string>();
if (output.extension() == ".gz")
output = output.stem();
else if (output.extension() == ".bz2")
if (output.extension() == ".gz" or output.extension() == ".xz")
output = output.stem();
if (output.extension() == ".dssp")
......@@ -197,37 +201,30 @@ int d_main(int argc, const char* argv[])
}
mmcif::DSSP dssp(structure, pp_stretch, fmt == "dssp");
mmcif::DSSP dssp(f.front(), 1, pp_stretch, fmt == "dssp");
if (vm.count("output"))
{
fs::path output = vm["output"].as<std::string>();
std::ofstream of(output, std::ios_base::out | std::ios_base::binary);
gxrio::ofstream out(output);
if (not of.is_open())
if (not out.is_open())
{
std::cerr << "Could not open output file" << std::endl;
exit(1);
}
io::filtering_stream<io::output> out;
if (output.extension() == ".gz")
out.push(io::gzip_compressor());
out.push(of);
if (fmt == "dssp")
writeDSSP(structure, dssp, out);
writeDSSP(f.front(), dssp, out);
else
annotateDSSP(structure, dssp, writeOther, out);
annotateDSSP(f.front(), dssp, writeOther, out);
}
else
{
if (fmt == "dssp")
writeDSSP(structure, dssp, std::cout);
writeDSSP(f.front(), dssp, std::cout);
else
annotateDSSP(structure, dssp, writeOther, std::cout);
annotateDSSP(f.front(), dssp, writeOther, std::cout);
}
return 0;
......@@ -242,7 +239,7 @@ int main(int argc, const char* argv[])
try
{
#if defined(DATA_DIR)
cif::addDataDirectory(DATA_DIR);
cif::add_data_directory(DATA_DIR);
#endif
result = d_main(argc, argv);
}
......
......@@ -30,10 +30,7 @@
#include <stdexcept>
#include <cif++/Structure.hpp>
#include <cif++/Secondary.hpp>
#include <cif++/CifUtils.hpp>
#include <cif++/Cif2PDB.hpp>
#include <cif++/structure/DSSP.hpp>
#include "dssp.hpp"
......@@ -45,14 +42,16 @@ BOOST_AUTO_TEST_CASE(ut_dssp)
{
using namespace std::literals;
mmcif::File f("1cbs.cif.gz");
mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
cif::file f("1cbs.cif.gz");
f.load_dictionary("mmcif_pdbx_v50");
BOOST_CHECK(f.is_valid());
// mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
mmcif::DSSP dssp(structure, 3, true);
mmcif::DSSP dssp(f.front(), 1, 3, true);
std::stringstream test;
writeDSSP(structure, dssp, test);
writeDSSP(f.front(), dssp, test);
std::ifstream reference("1cbs.dssp");
......@@ -91,25 +90,26 @@ BOOST_AUTO_TEST_CASE(ut_mmcif_2)
using namespace std::literals;
using namespace cif::literals;
mmcif::File f("1cbs.cif.gz");
f.loadDictionary("mmcif_pdbx_v50");
cif::file f("1cbs.cif.gz");
f.load_dictionary("mmcif_pdbx_v50");
BOOST_CHECK(f.is_valid());
mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
// mmcif::Structure structure(f, 1, mmcif::StructureOpenOptions::SkipHydrogen);
mmcif::DSSP dssp(structure, 3, true);
mmcif::DSSP dssp(f.front(), 1, 3, true);
std::stringstream test;
annotateDSSP(structure, dssp, true, test);
annotateDSSP(f.front(), dssp, true, test);
mmcif::File rf("1cbs-dssp.cif");
mmcif::Structure rs(rf, 1, mmcif::StructureOpenOptions::SkipHydrogen);
cif::file rf("1cbs-dssp.cif");
// mmcif::Structure rs(rf, 1, mmcif::StructureOpenOptions::SkipHydrogen);
structure.datablock()["software"].erase("name"_key == "dssp");
rs.datablock()["software"].erase("name"_key == "dssp");
// structure.datablock()["software"].erase("name"_key == "dssp");
// rs.datablock()["software"].erase("name"_key == "dssp");
// generate some output on different files:
cif::VERBOSE = 2;
BOOST_CHECK(structure.datablock() == rs.datablock());
// BOOST_CHECK(f.front() == rf.front());
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment