37 namespace model_quality {
174 double distance_tolerance
177 using namespace ObjexxFCL;
190 if ( distance_tolerance == -1.0 ) {
191 distance_tolerance = ( rmstol * 7.0 ) / 4.0;
194 double distance_increment = distance_tolerance / 7.0;
215 for (
int i = 1; i <= nsup*3; ++i ) {
226 for (
int i = 1; i <= nsup; ++i ) {
230 double rmsmax = 1000.0;
233 for (
int i = 1; i <= nsup-l+1; ++i ) {
235 rmsdata->clear_rms();
241 for (
int j = 1; j <= nsup; ++j ) {
242 if ( j >= i && j <= i+l-1 ) {
243 rmsdata->add_rms(j,xp0,xe0);
247 logical_w(j) =
false;
258 if ( (lmax > smax) && (rms <= rmstol) ) {
260 for (
int n = 1; n <= nsup; ++n ) {
261 if ( logical_w(n) ) {
269 }
else if ( (lmax == smax) && (rms < rmsmax) ) {
271 for (
int n = 1; n <= nsup; ++n ) {
272 if ( logical_w(n) ) {
288 int const last = lmax;
289 double min_d2 =
square ( distance_tolerance + 1.0 );
291 while ( t < distance_tolerance ) {
292 t += distance_increment;
299 for (
int n = 1; n <= nsup; ++n ) {
300 if ( !logical_w(n) ) {
302 double const xpek1 = xp(k+1) - xe(k+1);
303 double const xpek2 = xp(k+2) - xe(k+2);
304 double const xpek3 = xp(k+3) - xe(k+3);
306 ( xpek1 * xpek1 ) + ( xpek2 * xpek2 ) + ( xpek3 * xpek3 );
309 rmsdata->add_rms(n,xp0,xe0);
314 if ( d2 <= min_d2 ) min_d2 = d2;
320 if ( lmax != last ) {
323 t = std::sqrt( min_d2 );
339 if ( (lmax > smax) && (rms <= rmstol) ) {
341 for (
int n = 1; n <= nsup; ++n ) {
342 if ( logical_w(n) ) {
350 }
else if ( (lmax == smax) && (rms < rmsmax) ) {
352 for (
int n = 1; n <= nsup; ++n ) {
353 if ( logical_w(n) ) {
376 for (
int i = 1; i <= nr; ++i ) {
385 psi = (
static_cast< double >( smax ) / nsup ) * 100.0;
397 for (
int i = 1; i <= nsup; ++i ) {
398 if ( wmax(i) == 1.0 ) {
401 for (
int j = 1; j <= 3; ++j ) {
402 double const xpekj = xp(k+j) - xe(k+j);
405 d = std::sqrt(d) / rmstol;
406 score += 1.0 / ( 1.0 + ( d * d ) );
411 if ( smax <=1 ) nali=smax;
429 am = 747.29 *
std::pow( static_cast< double >( nr ), -0.7971 );
430 as = 124.99 *
std::pow( static_cast< double >( nr ), -0.6882 );
431 zscore = (psi-am)/as;
433 evalue = 0.5 *
erfcc(zscore/std::sqrt(2.0));
435 znew = 0.730*((1.2825755*zscore)+0.5772);
436 evalue = 1.0-std::exp(-std::exp(-znew));
438 if ( evalue < 2.650
E-14 ) evalue = 2.650E-14;
471 double erfcc = t*std::exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
472 t*(.09678418+t*(-.18628806+t*(.27886807+t*(-1.13520398+t*(1.48851587+
473 t*(-.82215223+t*.17087277)))))))));
474 if ( x < 0.0 ) erfcc = 2.0 -
erfcc;
513 using namespace ObjexxFCL;
519 static double const ZERO = { 0.0 };
527 for (
int i = 1; i <= NAT; ++i ) {
528 double const WT_i = WT(i);
530 SUMX +=
C(i3+1) * WT_i;
531 SUMY +=
C(i3+2) * WT_i;
532 SUMZ +=
C(i3+3) * WT_i;
548 for (
int i = 1; i <= NAT; ++i ) {
RMS functions imported from rosetta++.
FArray1A & dimension(IR const &I_a)
Dimension by IndexRanges.
FArray1A: Fortran-Compatible 1D Argument Array.
T square(T const &x)
square( x ) == x^2
static RmsData * instance()
T abs(T const &x)
std::abs( x ) == | x |
RmsData is a class intended to replace the global rms_obj namespace from rosetta++. Initial implementation is with a singleton design pattern to mimic a global namespace from rosetta++.
void rmsfitca2(int npoints, ObjexxFCL::FArray2A< double > xx, ObjexxFCL::FArray2A< double > yy, ObjexxFCL::FArray1A< double > ww, int natsel, double &esq)
computes the rms between two weighted point vectors.
DimensionExpressionPow pow(Dimension const &dim1, Dimension const &dim2)
pow( Dimension, Dimension )
void maxsub(int &nsup, ObjexxFCL::FArray1A_double xe, ObjexxFCL::FArray1A_double xp, double &rms, double &psi, int &nali, double &zscore, double &evalue, double &score, double rmstol, double distance_tolerance)
identify the largest subset of CA atoms of a model that superimposes "well" (under certain rms cutoff...
void rmsfitca3(int npoints, ObjexxFCL::FArray2A< double > xx0, ObjexxFCL::FArray2A< double > xx, ObjexxFCL::FArray2A< double > yy0, ObjexxFCL::FArray2A< double > yy, double &esq)
void COMAS(ObjexxFCL::FArray1A_double C, ObjexxFCL::FArray1A_double WT, int NAT, double &XC, double &YC, double &ZC)