From a4182f880d747a35926ecb48b2f2cf7f29ae3cb7 Mon Sep 17 00:00:00 2001 From: "Maarten L. Hekkelman" Date: Tue, 17 Feb 2026 14:23:39 +0100 Subject: [PATCH] Updated for libcifpp 10 --- CMakeLists.txt | 4 ++-- libdssp/src/dssp-io.cpp | 44 +++++++++++++++++++++-------------------- libdssp/src/dssp.cpp | 2 +- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f1aa6af..1e5f91d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,14 +118,14 @@ CPMFindPackage( EXCLUDE_FROM_ALL YES) # No longer using CPM for libcifpp. It is now simply required to install it first. -find_package(cifpp 9.0.6 QUIET) +find_package(cifpp 10.0.0 QUIET) if(NOT (cifpp_FOUND OR TARGET cifpp)) # message(FATAL_ERROR "Could not find libcifpp. Please make sure you install libcifpp first, code can be found at https://github.com/PDB-REDO/libcifpp") CPMAddPackage( NAME cifpp GIT_REPOSITORY "https://github.com/PDB-REDO/libcifpp" - GIT_TAG v9.0.6 + GIT_TAG v10.0.0 EXCLUDE_FROM_ALL YES) endif() diff --git a/libdssp/src/dssp-io.cpp b/libdssp/src/dssp-io.cpp index e87e519..c937cb9 100644 --- a/libdssp/src/dssp-io.cpp +++ b/libdssp/src/dssp-io.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -276,7 +277,7 @@ void writeBridgePairs(cif::datablock &db, const dssp &dssp) data.emplace_back("acceptor_1_auth_seq_id", acceptor.auth_seq_id()); data.emplace_back("acceptor_1_auth_asym_id", acceptor.auth_asym_id()); data.emplace_back("acceptor_1_pdbx_PDB_ins_code", acceptor.pdb_ins_code()); - data.emplace_back("acceptor_1_energy", acceptorEnergy, 1); + data.emplace_back("acceptor_1_energy", cif::item_value{ acceptorEnergy, 1 }); } else { @@ -287,7 +288,7 @@ void writeBridgePairs(cif::datablock &db, const dssp &dssp) data.emplace_back("acceptor_2_auth_seq_id", acceptor.auth_seq_id()); data.emplace_back("acceptor_2_auth_asym_id", acceptor.auth_asym_id()); data.emplace_back("acceptor_2_pdbx_PDB_ins_code", acceptor.pdb_ins_code()); - data.emplace_back("acceptor_2_energy", acceptorEnergy, 1); + data.emplace_back("acceptor_2_energy", cif::item_value{ acceptorEnergy, 1 }); } } @@ -302,7 +303,7 @@ void writeBridgePairs(cif::datablock &db, const dssp &dssp) data.emplace_back("donor_1_auth_seq_id", donor.auth_seq_id()); data.emplace_back("donor_1_auth_asym_id", donor.auth_asym_id()); data.emplace_back("donor_1_pdbx_PDB_ins_code", donor.pdb_ins_code()); - data.emplace_back("donor_1_energy", donorEnergy, 1); + data.emplace_back("donor_1_energy", cif::item_value{ donorEnergy, 1 }); } else { @@ -313,7 +314,7 @@ void writeBridgePairs(cif::datablock &db, const dssp &dssp) data.emplace_back("donor_2_auth_seq_id", donor.auth_seq_id()); data.emplace_back("donor_2_auth_asym_id", donor.auth_asym_id()); data.emplace_back("donor_2_pdbx_PDB_ins_code", donor.pdb_ins_code()); - data.emplace_back("donor_2_energy", donorEnergy, 1); + data.emplace_back("donor_2_energy", cif::item_value{ donorEnergy, 1 }); } } } @@ -518,37 +519,38 @@ void writeStatistics(cif::datablock &db, const dssp &dssp) if (stats.accessible_surface > 0) surface_accessibility = stats.accessible_surface; - auto stats_i = dssp_statistics.emplace({ // - { "entry_id", db.name() }, + auto stats_i = dssp_statistics.emplace({ { "entry_id", db.name() }, { "nr_of_residues", stats.count.residues }, { "nr_of_chains", stats.count.chains }, { "nr_of_ss_bridges_total", stats.count.SS_bridges }, { "nr_of_ss_bridges_intra_chain", stats.count.intra_chain_SS_bridges }, - { "nr_of_ss_bridges_inter_chain", stats.count.SS_bridges - stats.count.intra_chain_SS_bridges }, - { "accessible_surface_of_protein", surface_accessibility, 2 } }); + { "nr_of_ss_bridges_inter_chain", stats.count.SS_bridges - stats.count.intra_chain_SS_bridges } }); + + if (surface_accessibility) + (*stats_i)["accessible_surface_of_protein"] = { *surface_accessibility, 2 }; auto &dssp_struct_hbonds = db["dssp_statistics_hbond"]; dssp_struct_hbonds.emplace({ { "entry_id", db.name() }, { "type", "O(I)-->H-N(J)" }, { "count", stats.count.H_bonds }, - { "count_per_100", stats.count.H_bonds * 100.0 / stats.count.residues, 1 } }); + { "count_per_100", { stats.count.H_bonds * 100.0 / stats.count.residues, 1 } } }); dssp_struct_hbonds.emplace({ { "entry_id", db.name() }, { "type", "PARALLEL BRIDGES" }, { "count", stats.count.H_bonds_in_parallel_bridges }, - { "count_per_100", stats.count.H_bonds_in_parallel_bridges * 100.0 / stats.count.residues, 1 } }); + { "count_per_100", { stats.count.H_bonds_in_parallel_bridges * 100.0 / stats.count.residues, 1 } } }); dssp_struct_hbonds.emplace({ { "entry_id", db.name() }, { "type", "ANTIPARALLEL BRIDGES" }, { "count", stats.count.H_bonds_in_antiparallel_bridges }, - { "count_per_100", stats.count.H_bonds_in_antiparallel_bridges * 100.0 / stats.count.residues, 1 } }); + { "count_per_100", { stats.count.H_bonds_in_antiparallel_bridges * 100.0 / stats.count.residues, 1 } } }); for (int k = 0; k < 11; ++k) dssp_struct_hbonds.emplace({ { "entry_id", db.name() }, { "type", "O(I)-->H-N(I"s + (k - 5 < 0 ? '-' : '+') + std::to_string(abs(k - 5)) + ")" }, { "count", stats.count.H_Bonds_per_distance[k] }, - { "count_per_100", stats.count.H_Bonds_per_distance[k] * 100.0 / stats.count.residues, 1 } }); + { "count_per_100", { stats.count.H_Bonds_per_distance[k] * 100.0 / stats.count.residues, 1 } } }); auto &dssp_statistics_histogram = db["dssp_statistics_histogram"]; @@ -701,36 +703,36 @@ void writeSummary(cif::datablock &db, const dssp &dssp) { "ladder_1", ladders[0] }, { "ladder_2", ladders[1] }, - { "x_ca", cax, 1 }, - { "y_ca", cay, 1 }, - { "z_ca", caz, 1 }, + { "x_ca", { cax, 1 } }, + { "y_ca", { cay, 1 } }, + { "z_ca", { caz, 1 } }, }; if (writeAccessibility) - data.emplace_back("accessibility", res.accessibility(), 1); + data.emplace_back("accessibility", cif::item_value{ res.accessibility(), 1 }); if (res.tco().has_value()) - data.emplace_back("TCO", *res.tco(), 3); + data.emplace_back("TCO", cif::item_value{ *res.tco(), 3 }); else data.emplace_back("TCO", "."); if (res.kappa().has_value()) - data.emplace_back("kappa", *res.kappa(), 1); + data.emplace_back("kappa", cif::item_value{ *res.kappa(), 1 }); else data.emplace_back("kappa", "."); if (res.alpha().has_value()) - data.emplace_back("alpha", *res.alpha(), 1); + data.emplace_back("alpha", cif::item_value{ *res.alpha(), 1 }); else data.emplace_back("alpha", "."); if (res.phi().has_value()) - data.emplace_back("phi", *res.phi(), 1); + data.emplace_back("phi", cif::item_value{ *res.phi(), 1 }); else data.emplace_back("phi", "."); if (res.psi().has_value()) - data.emplace_back("psi", *res.psi(), 1); + data.emplace_back("psi", cif::item_value{ *res.psi(), 1 }); else data.emplace_back("psi", "."); diff --git a/libdssp/src/dssp.cpp b/libdssp/src/dssp.cpp index 81a5679..d41b60c 100644 --- a/libdssp/src/dssp.cpp +++ b/libdssp/src/dssp.cpp @@ -278,7 +278,7 @@ struct dssp::residue p = {}; } - void addAtom(cif::row_handle atom) + void addAtom(cif::const_row_handle atom) { std::string asymID, compID, atomID, type, authAsymID; std::optional altID;