NuriKit v0.1.0b2
Loading...
Searching...
No Matches
galign.h
Go to the documentation of this file.
1//
2// Project NuriKit - Copyright 2025 SNU Compbio Lab.
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#ifndef NURI_TOOLS_GALIGN_H_
7#define NURI_TOOLS_GALIGN_H_
8
10#include <vector>
11
12#include <absl/base/attributes.h>
13#include <Eigen/Dense>
15
16#include "nuri/eigen_config.h"
17#include "nuri/core/geometry.h"
18#include "nuri/core/molecule.h"
19#include "nuri/utils.h"
20
21namespace nuri {
22namespace internal {
23 class GARotationInfo {
24 public:
25 static std::vector<GARotationInfo> from(const Molecule &mol,
26 const Matrix3Xd &ref);
27
28 Matrix3Xd &rotate(Matrix3Xd &pts, double angle) const;
29
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_; }
34
35 private:
36 int origin_;
37 int ref_;
38 double normalizer_;
39 ArrayXi moving_;
40 };
41} // namespace internal
42
44public:
45 GARigidMolInfo(const Molecule &mol, const Matrix3Xd &ref,
46 double vdw_scale = 0.8, double hetero_scale = 0.7,
47 int dcut = 6);
48
49 const Molecule &mol() const { return *mol_; }
50
51 const Matrix3Xd &ref() const { return *ref_; }
52
53 const Vector3d &cntr() const { return cntr_; }
54
55 double vdw_scale() const { return vdw_scale_; }
56
57 double hetero_scale() const { return hetero_scale_; }
58
59 int dcut() const { return static_cast<int>(neighbor_vec_.rows()); }
60
61 const std::vector<internal::GARotationInfo> &rot_info() const {
62 return rot_info_;
63 }
64
65 const ArrayXi &atom_types() const { return atom_types_; }
66
67 auto vdw_radii() const { return vdw_rads_vols_.col(0); }
68
69 auto vdw_vols() const { return vdw_rads_vols_.col(1); }
70
71 const ArrayXXd &dists() const { return dists_; }
72
73 const MatrixXd &nv() const { return neighbor_vec_; }
74
75 double overlap() const { return overlap_; }
76
77 int n() const { return mol().num_atoms(); }
78
79private:
80 internal::Nonnull<const Molecule *> mol_;
81 internal::Nonnull<const Matrix3Xd *> ref_;
82 Vector3d cntr_;
83 double vdw_scale_;
84 double hetero_scale_;
85
86 std::vector<internal::GARotationInfo> rot_info_;
87
88 ArrayXi atom_types_;
89 ArrayX2d vdw_rads_vols_;
90
91 ArrayXXd dists_;
92 MatrixXd neighbor_vec_;
93 double overlap_;
94};
95
97 Matrix3Xd conf;
98 Isometry3d xform = Isometry3d::Identity();
99 double align_score = -1.0;
100};
101
103 double max_trs = 2.5;
104 double max_rot = deg2rad(120);
106
107 double rigid_min_msd = 9.0;
109
110 int pool_size = 10;
111 int sample_size = 30;
112 int max_gen = 50;
113 int patience = 5;
114
115 int mut_cnt = 5;
116 double mut_prob = 0.5;
117};
118
120 double alpha = 1.0;
121 double gamma = 2.0;
122 double rho = 0.5;
123 double sigma = 0.5;
124
125 double ftol = 1e-2;
126 int max_iters = 300;
127};
128
129namespace internal {
130 ABSL_ATTRIBUTE_PURE_FUNCTION ABSL_ATTRIBUTE_HOT extern double
131 shape_overlap(const GARigidMolInfo &query, const GARigidMolInfo &templ,
132 const ArrayXXd &dists, double scale);
133
134 ABSL_ATTRIBUTE_PURE_FUNCTION ABSL_ATTRIBUTE_HOT extern double
135 shape_overlap(const GARigidMolInfo &query, const Matrix3Xd &qconf,
136 const GARigidMolInfo &templ, const Matrix3Xd &tconf,
137 double scale);
138
139 inline double align_score(const GARigidMolInfo &query, const Matrix3Xd &qconf,
140 const GARigidMolInfo &templ, const Matrix3Xd &tconf,
141 double scale) {
142 return shape_overlap(query, qconf, templ, tconf, scale) / templ.overlap();
143 }
144
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);
148
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 = {});
154} // namespace internal
155
156extern std::vector<GAlignResult> galign(const Molecule &mol,
157 const Matrix3Xd &seed,
158 const GARigidMolInfo &templ,
159 bool flexible = true, int max_conf = 1,
160 const GASamplingArgs &sampling = {},
161 const GAMinimizeArgs &minimize = {});
162} // namespace nuri
163
164#endif /* NURI_TOOLS_GALIGN_H_ */
Definition galign.h:43
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
Definition crdgen.h:16
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
Definition galign.h:119
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
Definition galign.h:102
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
Definition galign.h:96
double align_score
Definition galign.h:99
Matrix3Xd conf
Definition galign.h:97
Isometry3d xform
Definition galign.h:98