17 #include <basic/Tracer.hh>
19 #include <ObjexxFCL/format.hh>
21 #include <basic/options/keys/cluster.OptionKeys.gen.hh>
22 #include <basic/options/option.hh>
24 #include <utility/vector1.hh>
30 using namespace ObjexxFCL;
33 static basic::Tracer
tr(
"protocols.cluster",basic::t_info);
39 : assign_new_cluster_tag( assign_new_cluster_tag_in ),
40 limit_cluster_size( basic::options::option[ basic::options::OptionKeys::cluster::limit_cluster_size ] ),
41 cluster_radius( basic::options::option[ basic::options::OptionKeys::cluster::radius ] ),
48 out << RJ( 3,
clusterlist_[i] [ j-1 ]) <<
" " << RJ( 5,i) << RJ(5, j)
65 for ( ClusterBase::ClusterList::const_iterator it = cl.begin(), eit = cl.end();
67 out <<
"CLUSTER " << RJ(3, ncl++ ) <<
" " << RJ(4, it->size()) <<
" ";
69 cit != ecit; ++cit ) {
70 out << RJ( 4, *cit ) <<
" ";
87 in >> tag >> nr >>
size;
88 if ( !in.good() )
break;
89 if ( tag !=
"CLUSTER" ) {
90 in.setstate( std::ios_base::failbit );
94 for (
Size i = 1; i<=size && in.good(); i++) {
97 if ( in.good() ) new_clust.push_back( new_elem );
99 if ( new_clust.size() ==
size ) {
100 cl.push_back( new_clust );
115 tr.Info <<
"---------- Summary ---------------------------------" << std::endl;
120 tr.Info <<
"Cluster: " << i <<
" N: " <<
clusterlist_[i].size() <<
" c." << i <<
".*.pdb " ;
121 tr.Info << std::endl;
128 tr.Info << std::endl;
130 tr.Info <<
"----------------------------------------------------" << std::endl;
132 tr.Info <<
" Structures: " << count << std::endl;
133 tr.Info <<
"----------------------------------------------------" << std::endl;
149 for (
Size i=1; i <= listsize; i++ ) {
151 if ( clusternr[i] > 0)
continue;
152 for (
Size j=1; j <= listsize; j++ ) {
153 if ( clusternr[j] > 0 )
continue;
159 for (
Size i=1; i <= listsize; i++) {
160 if ( neighbors[i] > neighbors[mostneighbors] ) mostneighbors=i;
162 if ( neighbors[ mostneighbors ] == 0)
break;
163 for (
Size i=1; i <= listsize; i++){
164 if ( clusternr[i] > 0 )
continue;
166 clusternr[i] = mostneighbors;
170 clustercentre.push_back(mostneighbors);
177 for(
Size i=1; i <= clustercentre.size(); i++ ) {
178 std::deque< Size > newlist;
179 for(
Size j=1; j <=listsize; j++ ) {
181 if ( clusternr[j] == clustercentre[i] ) {
184 if ( j!= clustercentre[i] ) newlist.push_back(j);
185 else newlist.push_front(j);
204 if ( rms < lowrms ) {
209 if ( lowrmsi != i ) {
212 std::deque< Size >::iterator it =
clusterlist_[i].begin();
221 const std::pair< int, float > & p1,
const std::pair< int, float > & p2 )
223 return p1.second < p2.second;
228 Size const offset( keep_center ? 1 : 0 );
233 cluster_energies.push_back( std::pair< int, Real > ( clusterlist_[i][j-1], score ) );
238 for (
Size j=1; j <= cluster_energies.size(); j++ )
clusterlist_[i].push_back( cluster_energies[j].first );
248 for (
Size j=1; ( j<= temp.size() ) && ( j<=limit ); j++ ) {