19#include "rxdock/Config.h"
20#include "rxdock/Coord.h"
21#include "rxdock/PrincipalAxes.h"
22#include "rxdock/RealGrid.h"
32 Cavity(
const CoordList &coordList,
const Vector gridStep)
33 : m_coordList(coordList), m_gridStep(gridStep),
34 m_prAxes(GetPrincipalAxesOfAtoms(coordList)),
35 m_minCoord(Min(coordList)), m_maxCoord(Max(coordList)) {}
38 Cavity(json j) { j.get_to(*
this); }
48 friend std::ostream &operator<<(std::ostream &s,
const Cavity &cavity) {
55 virtual void Print(std::ostream &s)
const {
56 s <<
"Size=" << m_coordList.size() <<
" points; Vol=" << GetVolume()
57 <<
" A^3; Min=" << m_minCoord <<
"; Max=" << m_maxCoord
58 <<
"; Center=" << m_prAxes.com <<
"; Extent=" << m_maxCoord - m_minCoord;
63 Vector extent = m_maxCoord - m_minCoord;
65 Eigen::Vector3d nXYZ = extent.xyz.array() / m_gridStep.xyz.array();
66 unsigned int nX =
static_cast<unsigned int>(nXYZ(0)) + 3;
67 unsigned int nY =
static_cast<unsigned int>(nXYZ(1)) + 3;
68 unsigned int nZ =
static_cast<unsigned int>(nXYZ(2)) + 3;
70 new RealGrid(m_minCoord - m_gridStep, m_gridStep, nX, nY, nZ));
71 for (CoordListConstIter iter = m_coordList.begin();
72 iter != m_coordList.end(); iter++) {
73 spGrid->SetValue(*iter, 1.0);
81 const Coord &GetCenterOfMass()
const {
return m_prAxes.com; }
82 const PrincipalAxes &GetPrincipalAxes()
const {
return m_prAxes; }
83 int GetNumCoords()
const {
return m_coordList.size(); }
84 const CoordList &GetCoordList()
const {
return m_coordList; }
85 const Coord &GetMinCoord()
const {
return m_minCoord; }
86 const Coord &GetMaxCoord()
const {
return m_maxCoord; }
87 const Vector &GetGridStep()
const {
return m_gridStep; }
88 double GetVolume()
const {
89 return m_coordList.size() * m_gridStep.xyz.prod();
92 friend void to_json(json &j,
const Cavity &c) {
93 j = json{{
"grid-step", c.m_gridStep}, {
"coordinates", c.m_coordList}};
96 friend void from_json(
const json &j,
Cavity &c) {
97 j.at(
"grid-step").get_to(c.m_gridStep);
98 j.at(
"coordinates").get_to(c.m_coordList);
124 CoordList m_coordList;
133typedef std::vector<CavityPtr> CavityList;
134typedef CavityList::iterator CavityListIter;
135typedef CavityList::const_iterator CavityListConstIter;
149 return Length2(spCav1->GetCenterOfMass() - c) <
150 Length2(spCav2->GetCenterOfMass() - c);
158 return spCav1->GetNumCoords() > spCav2->GetNumCoords();
170 bool operator()(
CavityPtr spCavity)
const {
171 return Length2(spCavity->GetCenterOfMass() - c) <= r2;
180 return spCav->GetMinCoord();
182inline const Coord &ExtractCavityMaxCoord(CavityPtr spCav) {
183 return spCav->GetMaxCoord();
Definition PrincipalAxes.h:29