10 #include <basic/options/keys/sicdock.OptionKeys.gen.hh>
11 #include <basic/options/option.hh>
12 #include <basic/options/option_macros.hh>
13 #include <numeric/constants.hh>
14 #include <numeric/xyz.functions.hh>
15 #include <numeric/xyz.io.hh>
16 #include <ObjexxFCL/format.hh>
17 #include <ObjexxFCL/string.functions.hh>
18 #include <utility/io/ozstream.hh>
19 #include <utility/string_util.hh>
32 using ObjexxFCL::fmt::I;
33 using ObjexxFCL::fmt::F;
34 using ObjexxFCL::fmt::RJ;
43 template<
typename T>
inline T sqr(
T x) {
return x*x; }
47 using namespace ObjexxFCL::fmt;
48 std::ofstream o(fn.c_str());
49 for(
Size i = 1; i <= p.size(); ++i) {
50 std::string rn =
"VIZ"; o<<
"HETATM"<<I(5,i)<<
' '<<
" CA "<<
' '<<rn<<
' '<<
"A"<<I(4,i)<<
" "<<F(8,3,p[i].x())<<F(8,3,p[i].y())<<F(8,3,p[i].z())<<F(6,2,1.0)<<F(6,2,1.0)<<
'\n';
56 if( sqdist > stop*stop ) {
58 }
else if( sqdist < start*start ) {
61 double dist = sqrt( sqdist );
62 return (stop-dist)/(stop-
start);
70 BIN(CLD*basic::options::option[basic::options::OptionKeys::sicdock::hash_2D_vs_3D]()),
76 CLD(basic::options::option[basic::options::OptionKeys::sicdock::clash_dis]()),
78 BIN(CLD*basic::options::option[basic::options::OptionKeys::sicdock::hash_2D_vs_3D]()),
101 init(pose,pose,clash_atoms,clash_atoms);
114 for(
int j = 1; j <= ((pose1.
residue(i).
name3()==
"GLY")?4:5); ++j)
118 for(
int j = 1; j <= ((pose2.
residue(i).
name3()==
"GLY")?4:5); ++j)
121 init(pose1,pose2,clashmap1,clashmap2);
144 double & xmx,
double & xmn,
145 double & ymx,
double & ymn
148 double xmx1=-9e9,xmn1=9e9,ymx1=-9e9,ymn1=9e9;
149 xmx=-9e9,xmn=9e9,ymx=-9e9,ymn=9e9;
151 xmx1 = max(xmx1,ia->x()); xmn1 = min(xmn1,ia->x());
152 ymx1 = max(ymx1,ia->y()); ymn1 = min(ymn1,ia->y());
155 xmx = max(xmx,ib->x()); xmn = min(xmn,ib->x());
156 ymx = max(ymx,ib->y()); ymn = min(ymn,ib->y());
158 xmx = min(xmx,xmx1); xmn = max(xmn,xmn1);
159 ymx = min(ymx,ymx1); ymn = max(ymn,ymn1);
160 if(ymn > ymx || xmn > xmx)
return false;
175 ObjexxFCL::FArray2D<Vec> & ha,
176 ObjexxFCL::FArray2D<Vec> & hb,
182 xlb = (
int)(xmn/BIN)-2; xub = (
int)(xmx/BIN+0.999999999)+2;
183 ylb = (
int)(ymn/BIN)-2; yub = (
int)(ymx/BIN+0.999999999)+2;
184 ha.dimension(xub-xlb+1,yub-ylb+1,
Vec(0,0,-9e9));
185 hb.dimension(xub-xlb+1,yub-ylb+1,
Vec(0,0, 9e9));
186 int const xsize = xub-xlb+1;
187 int const ysize = yub-ylb+1;
189 int const ix = (
int)((ia->x()/BIN)-xlb+0.999999999);
190 int const iy = (
int)((ia->y()/BIN)-ylb+0.999999999);
191 if( ix < 1 || ix > xsize || iy < 1 || iy > ysize )
continue;
192 if( ha(ix,iy).z() < ia->z() ) ha(ix,iy) = *ia;
197 int const ix = (
int)((ib->x()/BIN)-xlb+0.999999999);
198 int const iy = (
int)((ib->y()/BIN)-ylb+0.999999999);
199 if( ix < 1 || ix > xsize || iy < 1 || iy > ysize )
continue;
200 if( hb(ix,iy).z() > ib->z() ) hb(ix,iy) = *ib;
214 ObjexxFCL::FArray2D<Vec>
const & ha,
215 ObjexxFCL::FArray2D<Vec>
const & hb,
216 double const & clashdis2
218 int const xsize=xub-xlb+1, ysize=yub-ylb+1;
220 for(
int i = 1; i <= xsize; ++i) {
221 for(
int j = 1; j <= ysize; ++j) {
222 for(
int k = -1; k <= 1; ++k) {
223 if(i+k < 1 || i+k > xsize)
continue;
224 for(
int l = -1; l <= 1; ++l) {
225 if(j+l < 1 || j+l > ysize)
continue;
226 double const xa1=ha(i,j).x(),ya1=ha(i,j).y(),xb1=hb(i+k,j+l).x(),yb1=hb(i+k,j+l).y(),d21=(xa1-xb1)*(xa1-xb1)+(ya1-yb1)*(ya1-yb1);
227 if(d21<clashdis2){
double const dz=hb(i+k,j+l).z()-ha(i,j).z()-sqrt(clashdis2-d21);
if(dz<m) m=dz; }
242 double const dxy2 =
dof.cross(v-c).length_squared();
258 double const & clash_dis_sq,
259 double const & mindis_approx
261 double mindis = mindis_approx;
262 Mat Rori = rotation_matrix_degrees( (ori.z() < -0.99999) ?
Vec(1,0,0) : (
Vec(0,0,1)+ori.normalized())/2.0 , 180.0 );
263 Vec hash_ori = xform_to_struct2_start.
M.transposed() * ori;
268 xh->visit_lax(v,visitor);
291 for(xyzStripeHashPose::const_iterator i =
h1_->begin(); i !=
h1_->end(); ++i,++ipa) *ipa = xa.
local2global(*i-
h1_->translation());
292 for(xyzStripeHashPose::const_iterator i =
h2_->begin(); i !=
h2_->end(); ++i,++ipb) *ipb = xb.
local2global(*i-
h2_->translation());
294 double xmx,xmn,ymx,ymn;
296 ObjexxFCL::FArray2D<Vec> ha,hb;
299 Mat rot = rotation_matrix_degrees( (ori.z() < -0.99999) ?
Vec(1,0,0) : (
Vec(0,0,1)+ori)/2.0 , 180.0 );
305 fill_plane_hash(pb,pa,xmx,xmn,ymx,ymn,
BIN,ha,hb,xlb,ylb,xub,yub);
308 if( fabs(mindis_approx) > 9e8 )
return 9e9;
311 if( fabs(mindis) > 9e8 )
return 9e9;