20 #include <ObjexxFCL/FArray2D.hh>
29 #include <basic/Tracer.hh>
30 #include <utility/io/ozstream.hh>
31 #include <utility/exit.hh>
39 #include <numeric/model_quality/RmsData.hh>
40 #include <ObjexxFCL/FArray3.hh>
46 using namespace ObjexxFCL;
48 static basic::Tracer
tr(
"protocols.evaluation.PCA",basic::t_info);
51 using namespace numeric::model_quality;
59 ivm_.redimension( n_atoms_, n_atoms_, 0.0 );
60 Real const invn( 1.0/n_decoys );
61 tr.Debug <<
"IVM-Matrix \n";
62 for (
Size i = 1; i <= n_atoms(); i++ ) {
63 for (
Size j = i+1; j<=n_atoms(); j++ ) {
67 for (
Size n = 1; n<=n_decoys; n++ ) {
68 Vector xi( coords( 1, i, n ), coords( 2, i, n ), coords( 3, i, n ));
69 Vector xj( coords( 1, j, n ), coords( 2, j, n ), coords( 3, j, n ));
70 Real dist = xi.distance(xj);
71 var += dist * dist * invn;
74 ivm_( j, i ) = var - av*av;
75 ivm_( i, j ) = ivm_( j, i);
76 tr.Debug << i <<
" " << j <<
" " << ivm_( i, j ) <<
"\n";
79 tr.Debug << std::endl;
81 utility::io::ozstream os(
"ivm.dat");
82 for (
Size i = 1; i <= n_atoms(); i++ ) {
83 for (
Size j = 1; j<=n_atoms(); j++ ) os << ivm_( i, j ) <<
" ";
91 Real const epsilon2( epsilon*epsilon );
92 tr.Debug <<
"T( " << epsilon <<
" )\n";
93 for (
Size i = 1; i<=n_atoms(); i++ ) {
95 Real invn = 1.0/n_atoms();
96 for (
Size j = 1; j<=n_atoms(); j++ ) {
97 if ( ivm_( i, j) < epsilon2 )
T( i ) += invn;
99 tr.Debug << i <<
" " <<
T( i ) <<
"\n";
101 tr.Debug << std::endl;
106 Real invn = 1.0/n_atoms();
107 Real second_moment = 0.0;
108 Real fourth_moment = 0.0;
110 for (
Size j = 1; j<=n_atoms(); j++ ) {
113 for (
Size j = 1; j<=n_atoms(); j++ ) {
114 Real x =
T( j ) - av;
116 second_moment += x2*invn;
117 fourth_moment += x2 * x2 *invn;
119 return fourth_moment / (second_moment*second_moment);
123 Real depsilon = ( ub - lb ) / ngrid;
125 FArray1D_double grid( ngrid, 0.0 );
126 FArray1D_double kurt( ngrid, 0.0 );
129 tr.Info <<
"kurtosis computed:\n";
130 for (
Size i = 1; i <= ngrid; i++ ) {
131 FArray1P_double Tslice(
T( 1, i ), n_atoms() );
133 order_parameter( epsilon, Tslice );
134 kurt( i ) = kurtosis( Tslice );
135 tr.Info << epsilon <<
" " << kurt( i ) <<
"\n";
138 tr.Info << std::endl;
140 utility::io::ozstream os(
"order.dat");
141 for (
Size j = 1; j<= n_atoms(); j++ ) {
142 for (
Size i = 1; i<= ngrid; i++ ) os <<
T( j, i ) <<
" ";
147 utility::io::ozstream os(
"kurt.dat");
148 for (
Size i = 1; i<= ngrid; i++ ) os << grid( i ) <<
" " << kurt( i ) <<
"\n";