6#ifndef NURI_TOOLS_GALIGN_H_
7#define NURI_TOOLS_GALIGN_H_
12#include <absl/base/attributes.h>
23 class GARotationInfo {
25 static std::vector<GARotationInfo> from(
const Molecule &mol,
26 const Matrix3Xd &ref);
28 Matrix3Xd &rotate(Matrix3Xd &pts,
double angle)
const;
30 int origin()
const {
return origin_; }
31 int ref()
const {
return ref_; }
32 double normalizer()
const {
return normalizer_; }
33 const ArrayXi &moving()
const {
return moving_; }
51 const Matrix3Xd &
ref()
const {
return *ref_; }
53 const Vector3d &
cntr()
const {
return cntr_; }
59 int dcut()
const {
return static_cast<int>(neighbor_vec_.rows()); }
61 const std::vector<internal::GARotationInfo> &
rot_info()
const {
65 const ArrayXi &
atom_types()
const {
return atom_types_; }
67 auto vdw_radii()
const {
return vdw_rads_vols_.col(0); }
69 auto vdw_vols()
const {
return vdw_rads_vols_.col(1); }
71 const ArrayXXd &
dists()
const {
return dists_; }
73 const MatrixXd &
nv()
const {
return neighbor_vec_; }
75 double overlap()
const {
return overlap_; }
80 internal::Nonnull<const Molecule *> mol_;
81 internal::Nonnull<const Matrix3Xd *> ref_;
86 std::vector<internal::GARotationInfo> rot_info_;
89 ArrayX2d vdw_rads_vols_;
92 MatrixXd neighbor_vec_;
98 Isometry3d
xform = Isometry3d::Identity();
130 ABSL_ATTRIBUTE_PURE_FUNCTION ABSL_ATTRIBUTE_HOT
extern double
132 const ArrayXXd &dists,
double scale);
134 ABSL_ATTRIBUTE_PURE_FUNCTION ABSL_ATTRIBUTE_HOT
extern double
135 shape_overlap(
const GARigidMolInfo &query,
const Matrix3Xd &qconf,
139 inline double align_score(
const GARigidMolInfo &query,
const Matrix3Xd &qconf,
142 return shape_overlap(query, qconf, templ, tconf, scale) / templ.
overlap();
145 std::vector<GAlignResult>
146 rigid_galign_impl(
const GARigidMolInfo &query,
const GARigidMolInfo &templ,
147 int max_conf = 1,
double scale = 0.7,
double min_msd = 9.0);
149 std::vector<GAlignResult>
150 flexible_galign_impl(
const GARigidMolInfo &query,
const GARigidMolInfo &templ,
151 int max_conf = 1,
double scale = 0.7,
152 const GASamplingArgs &sampling = {},
153 const GAMinimizeArgs &minimize = {});
157 const Matrix3Xd &seed,
159 bool flexible =
true,
int max_conf = 1,
161 const GAMinimizeArgs &minimize = {});
const MatrixXd & nv() const
Definition galign.h:73
double overlap() const
Definition galign.h:75
const ArrayXi & atom_types() const
Definition galign.h:65
GARigidMolInfo(const Molecule &mol, const Matrix3Xd &ref, double vdw_scale=0.8, double hetero_scale=0.7, int dcut=6)
auto vdw_radii() const
Definition galign.h:67
int n() const
Definition galign.h:77
auto vdw_vols() const
Definition galign.h:69
double vdw_scale() const
Definition galign.h:55
const std::vector< internal::GARotationInfo > & rot_info() const
Definition galign.h:61
double hetero_scale() const
Definition galign.h:57
const Vector3d & cntr() const
Definition galign.h:53
int dcut() const
Definition galign.h:59
const Matrix3Xd & ref() const
Definition galign.h:51
const ArrayXXd & dists() const
Definition galign.h:71
const Molecule & mol() const
Definition galign.h:49
Read-only molecule class.
Definition molecule.h:943
int num_atoms() const
Get the number of atoms in the molecule.
Definition molecule.h:1011
std::vector< GAlignResult > galign(const Molecule &mol, const Matrix3Xd &seed, const GARigidMolInfo &templ, bool flexible=true, int max_conf=1, const GASamplingArgs &sampling={}, const GAMinimizeArgs &minimize={})
constexpr DT deg2rad(DT deg)
Definition geometry.h:306
double ftol
Definition galign.h:125
double gamma
Definition galign.h:121
double rho
Definition galign.h:122
int max_iters
Definition galign.h:126
double alpha
Definition galign.h:120
double sigma
Definition galign.h:123
int rigid_max_conf
Definition galign.h:108
double mut_prob
Definition galign.h:116
int max_gen
Definition galign.h:112
int sample_size
Definition galign.h:111
int pool_size
Definition galign.h:110
double max_trs
Definition galign.h:103
int mut_cnt
Definition galign.h:115
double max_tors
Definition galign.h:105
int patience
Definition galign.h:113
double max_rot
Definition galign.h:104
double rigid_min_msd
Definition galign.h:107
double align_score
Definition galign.h:99
Matrix3Xd conf
Definition galign.h:97
Isometry3d xform
Definition galign.h:98