Commit 122d7b02 by Maarten L. Hekkelman

towards v5 of libcifpp

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