70 #include <basic/Tracer.hh>
77 #include <utility/vector1.hh>
81 static basic::Tracer
tr(
"protocols.abinitio.StrandConstraints");
83 using namespace basic;
90 StrandConstraints::~StrandConstraints() {}
100 if ( pairings_.size() == 0 )
return true;
101 if ( strand_pairing.
antiparallel() != antiparallel() )
return false;
105 for ( Pairings::const_iterator it=pairings_.begin(), eit = pairings_.end();
108 Size const reg ( it->pairing().get_register() );
124 for ( Pairings::const_iterator it = pairings_.begin(), eit = pairings_.end();
126 it->has_model( pairing_entry.
models()[ 1 ] );
128 if ( compatible( pairing_entry.
pairing() ) ) {
130 pairings_.push_back( pairing_entry );
137 void AlternativePairings::show( std::ostream& out )
const {
138 out <<
"\n\n Set of alternative strand pairings: \n";
139 for ( Pairings::const_iterator it = pairings_.begin(), eit = pairings_.end();
141 out << it->weight() <<
" " << it->pairing() <<
" ";
142 for ( PairingStatEntry::ModelList::const_iterator mit = it->models().begin(), emit = it->models().end();
143 mit != emit; ++mit ) {
152 using namespace core::scoring::constraints;
153 using namespace core::id;
171 BoundFunc const CAfuncAO( 4.2, 4.8, 0.2,
"STRAND_AO" );
172 BoundFunc const CAfuncAI( 5.0, 5.7, 0.3,
"STRAND_AI" );
173 BoundFunc const CAfuncP( 4.5, 5.1, 0.3,
"STRAND_P" );
185 std::map< Size, Real > freq;
187 for ( Pairings::const_iterator it = pairings_.begin(), eit = pairings_.end();
189 Size const start( it->pairing().begin1() );
190 Size const end( it->pairing().end1() );
192 if ( ! it->pairing().is_bulge( pos ) ) freq[ pos ] += it->weight();
193 if ( max_freq < freq[ pos ] ) max_freq = freq[ pos ];
198 if ( max_freq <= 10 )
return;
202 for ( std::map< Size, Real>::const_iterator it = freq.begin(), eit = freq.end();
206 if ( it->second >= max_freq * 0.8 ) {
210 Size pos( it->first );
215 std::map< Size, bool > done;
218 for ( Pairings::const_iterator pit = pairings_.begin(), epit = pairings_.end();
219 pit != epit; ++pit ) {
220 Size pair( pit->pairing().get_pair( pos ) );
222 if ( !done[
pair ] ) {
228 if ( pit->pairing().antiparallel() ) {
229 if ( pit->pairing().get_pleating( pos ) == 2 ) {
230 myfunc = CAfuncAI.
clone();
232 myfunc = CAfuncAO.
clone();
235 myfunc = CAfuncP.
clone();
239 tr.Debug <<
" add constraint for " << pos <<
"->" << pair <<
" " << pit->pairing().get_pleating( pos ) << std::endl;
257 alt_pairs.
show( out );
266 bool success(
false );
267 tr.Debug <<
"add pairing to FuzzyTopology "<< pairing_entry << std::endl;
268 for ( FuzzyTopology::iterator it = fuzzy_topology_.begin(), eit = fuzzy_topology_.end();
269 it != eit && !success; ++it ) {
270 success = it->add_pairing( pairing_entry );
275 fuzzy_topology_.push_back( new_strand );
283 add_pairing( it->second );
285 tr.Info << (*this) << std::endl;
288 void StrandConstraints::show( std::ostream& out )
const {
289 for (FuzzyTopology::const_iterator it = fuzzy_topology_.begin(), eit = fuzzy_topology_.end();
297 for (FuzzyTopology::const_iterator it = fuzzy_topology_.begin(), eit = fuzzy_topology_.end();
299 it->build_constraints( pose, all_constraints );
307 return all_constraints;