Updated for libcifpp 10

This commit is contained in:
Maarten L. Hekkelman
2026-02-17 14:23:39 +01:00
parent ffa9733b03
commit a4182f880d
3 changed files with 26 additions and 24 deletions

View File

@@ -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()

View File

@@ -33,6 +33,7 @@
#include <algorithm>
#include <cif++.hpp>
#include <cif++/dictionary_parser.hpp>
#include <cif++/row.hpp>
#include <format>
#include <iostream>
#include <type_traits>
@@ -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", ".");

View File

@@ -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<std::string> altID;