use crate::structure::Structure;
use crate::{AnalysisPolicy, Namespace};
use molframe_chem::ComponentProvider;
use molframe_seq::Scoring;
pub trait CompareExt {
fn dockq(
&self,
native: &Structure,
receptor: &str,
ligand: &str,
options: molframe_compare::DockQOptions,
) -> Result<molframe_compare::DockQ, molframe_compare::CompareError>;
fn dockq_in_namespace(
&self,
native: &Structure,
receptor: &str,
ligand: &str,
namespace: Namespace,
options: molframe_compare::DockQOptions,
) -> Result<molframe_compare::DockQ, molframe_compare::CompareError>;
fn qs_score(
&self,
native: &Structure,
first_chain: &str,
second_chain: &str,
options: molframe_compare::QsOptions,
) -> Result<f64, molframe_compare::CompareError>;
fn qs_score_in_namespace(
&self,
native: &Structure,
first_chain: &str,
second_chain: &str,
namespace: Namespace,
options: molframe_compare::QsOptions,
) -> Result<f64, molframe_compare::CompareError>;
fn map_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
min_identity: f64,
) -> Result<Vec<molframe_compare::ChainMapping>, molframe_core::diagnostic::Diagnostic>;
fn assign_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
min_identity: f64,
) -> Result<molframe_compare::ChainAssignment, molframe_core::diagnostic::Diagnostic>;
fn chain_sequences(
&self,
provider: &dyn ComponentProvider,
namespace: Namespace,
) -> Result<Vec<molframe_compare::ChainSequence>, molframe_core::diagnostic::Diagnostic>;
fn map_sequence_to_structure(
&self,
query: &[u8],
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
) -> Result<Vec<molframe_compare::ResidueMatch>, molframe_core::diagnostic::Diagnostic>;
fn governed_dockq(
&self,
reference: &Structure,
receptor: &str,
ligand: &str,
options: molframe_compare::DockQOptions,
policy: &AnalysisPolicy,
) -> Result<crate::Analysis<molframe_compare::DockQ>, molframe_compare::GovernedCompareError>;
fn governed_qs_score(
&self,
reference: &Structure,
first_chain: &str,
second_chain: &str,
options: molframe_compare::QsOptions,
policy: &AnalysisPolicy,
) -> Result<crate::Analysis<f64>, molframe_compare::GovernedCompareError>;
fn governed_map_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
scoring: Scoring,
minimum_identity: f64,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<Vec<molframe_compare::ChainMapping>>,
molframe_compare::GovernedCompareError,
>;
fn governed_assign_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
scoring: Scoring,
minimum_identity: f64,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<molframe_compare::ChainAssignment>,
molframe_compare::GovernedCompareError,
>;
fn governed_map_sequence_to_structure(
&self,
query: &[u8],
provider: &dyn ComponentProvider,
scoring: Scoring,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<Vec<molframe_compare::ResidueMatch>>,
molframe_compare::GovernedCompareError,
>;
}
impl CompareExt for Structure {
fn dockq(
&self,
native: &Structure,
receptor: &str,
ligand: &str,
options: molframe_compare::DockQOptions,
) -> Result<molframe_compare::DockQ, molframe_compare::CompareError> {
molframe_compare::dockq(self.engine(), native.engine(), receptor, ligand, options)
}
fn dockq_in_namespace(
&self,
native: &Structure,
receptor: &str,
ligand: &str,
namespace: Namespace,
options: molframe_compare::DockQOptions,
) -> Result<molframe_compare::DockQ, molframe_compare::CompareError> {
molframe_compare::dockq_in_namespace(
self.engine(),
native.engine(),
receptor,
ligand,
namespace,
options,
)
}
fn qs_score(
&self,
native: &Structure,
first_chain: &str,
second_chain: &str,
options: molframe_compare::QsOptions,
) -> Result<f64, molframe_compare::CompareError> {
molframe_compare::qs_score(
self.engine(),
native.engine(),
first_chain,
second_chain,
options,
)
}
fn qs_score_in_namespace(
&self,
native: &Structure,
first_chain: &str,
second_chain: &str,
namespace: Namespace,
options: molframe_compare::QsOptions,
) -> Result<f64, molframe_compare::CompareError> {
molframe_compare::qs_score_in_namespace(
self.engine(),
native.engine(),
first_chain,
second_chain,
namespace,
options,
)
}
fn map_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
min_identity: f64,
) -> Result<Vec<molframe_compare::ChainMapping>, molframe_core::diagnostic::Diagnostic> {
molframe_compare::map_chains(
self.engine(),
target.engine(),
provider,
namespace,
scoring,
min_identity,
)
}
fn assign_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
min_identity: f64,
) -> Result<molframe_compare::ChainAssignment, molframe_core::diagnostic::Diagnostic> {
molframe_compare::assign_chains(
self.engine(),
target.engine(),
provider,
namespace,
scoring,
min_identity,
)
}
fn chain_sequences(
&self,
provider: &dyn ComponentProvider,
namespace: Namespace,
) -> Result<Vec<molframe_compare::ChainSequence>, molframe_core::diagnostic::Diagnostic> {
molframe_compare::chain_sequences(self.engine(), provider, namespace)
}
fn map_sequence_to_structure(
&self,
query: &[u8],
provider: &dyn ComponentProvider,
namespace: Namespace,
scoring: Scoring,
) -> Result<Vec<molframe_compare::ResidueMatch>, molframe_core::diagnostic::Diagnostic> {
molframe_compare::map_sequence_to_structure(
query,
self.engine(),
provider,
namespace,
scoring,
)
}
fn governed_dockq(
&self,
reference: &Structure,
receptor: &str,
ligand: &str,
options: molframe_compare::DockQOptions,
policy: &AnalysisPolicy,
) -> Result<crate::Analysis<molframe_compare::DockQ>, molframe_compare::GovernedCompareError>
{
molframe_compare::governed_dockq(
self.engine(),
reference.engine(),
receptor,
ligand,
options,
policy,
)
}
fn governed_qs_score(
&self,
reference: &Structure,
first_chain: &str,
second_chain: &str,
options: molframe_compare::QsOptions,
policy: &AnalysisPolicy,
) -> Result<crate::Analysis<f64>, molframe_compare::GovernedCompareError> {
molframe_compare::governed_qs_score(
self.engine(),
reference.engine(),
first_chain,
second_chain,
options,
policy,
)
}
fn governed_map_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
scoring: Scoring,
minimum_identity: f64,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<Vec<molframe_compare::ChainMapping>>,
molframe_compare::GovernedCompareError,
> {
molframe_compare::governed_map_chains(
self.engine(),
target.engine(),
provider,
scoring,
minimum_identity,
policy,
)
}
fn governed_assign_chains(
&self,
target: &Structure,
provider: &dyn ComponentProvider,
scoring: Scoring,
minimum_identity: f64,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<molframe_compare::ChainAssignment>,
molframe_compare::GovernedCompareError,
> {
molframe_compare::governed_assign_chains(
self.engine(),
target.engine(),
provider,
scoring,
minimum_identity,
policy,
)
}
fn governed_map_sequence_to_structure(
&self,
query: &[u8],
provider: &dyn ComponentProvider,
scoring: Scoring,
policy: &AnalysisPolicy,
) -> Result<
crate::Analysis<Vec<molframe_compare::ResidueMatch>>,
molframe_compare::GovernedCompareError,
> {
molframe_compare::governed_map_sequence_to_structure(
query,
self.engine(),
provider,
scoring,
policy,
)
}
}