21 #include <basic/Tracer.hh>
23 #include <utility/vector0.hh>
24 #include <utility/vector1.hh>
32 using namespace chemical;
33 using namespace kinematics;
34 using namespace conformation;
36 static basic::Tracer
TR(
"protocols.dna.SeparateDnaFromNonDna", basic::t_info );
52 return "SeparateDnaFromNonDna";
57 translation_( 1000, 0, 0 )
62 translation_( x, y, z )
73 translation_( other.translation() )
83 TR <<
"old fold tree:\n" << pose.
fold_tree() << std::endl;
91 for (
Size chain_index(1); chain_index <= conf.num_chains(); ++chain_index ) {
92 if ( pose.
residue_type( conf.chain_begin( chain_index ) ).is_DNA() ) {
93 DNA_chain_indices.push_back( chain_index );
94 TR <<
"chain " << chain_index <<
" is a DNA chain" <<
'\n';
96 non_DNA_chain_indices.push_back( chain_index );
97 TR <<
"chain " << chain_index <<
" is a non-DNA chain" <<
'\n';
105 Size const first_nonDNA_chain( non_DNA_chain_indices.front() );
106 Size const nonDNA_anchor_index( conf.chain_begin( first_nonDNA_chain ) );
108 chain_iter != non_DNA_chain_indices.end(); ++chain_iter ) {
109 Size const chain_begin( conf.chain_begin( *chain_iter ) );
111 TR <<
"linking non-DNA chains " << first_nonDNA_chain <<
" and " << *chain_iter
112 <<
" residues " << nonDNA_anchor_index <<
" (";
114 TR << pose.
pdb_info()->number( nonDNA_anchor_index ) <<
") and "
115 << chain_begin <<
" (" << pose.
pdb_info()->number( chain_begin );
117 TR << nonDNA_anchor_index <<
") and " << chain_begin <<
" (" << chain_begin;
119 TR <<
") with a jump" <<
'\n';
121 fold_tree.new_jump( nonDNA_anchor_index, chain_begin, chain_begin-1 );
126 Size const first_DNA_chain( DNA_chain_indices.front() );
127 Size const DNA_anchor_index( conf.chain_begin( first_DNA_chain ) );
129 chain_iter != DNA_chain_indices.end(); ++chain_iter ) {
130 Size const chain_begin( conf.chain_begin( *chain_iter ) );
132 TR <<
"linking DNA chains " << first_DNA_chain <<
" and " << *chain_iter <<
" residues " << DNA_anchor_index <<
" (";
134 TR << pose.
pdb_info()->number( DNA_anchor_index ) <<
") and "
135 << chain_begin <<
" (" << pose.
pdb_info()->number( chain_begin );
137 TR << DNA_anchor_index <<
") and " << chain_begin <<
" (" << chain_begin;
139 TR <<
") with a jump" <<
'\n';
141 fold_tree.new_jump( DNA_anchor_index, chain_begin, chain_begin-1 );
145 TR <<
"linking non-DNA chain group to DNA chain group by jump between non-DNA chain "
146 << first_nonDNA_chain <<
" and DNA chain " << first_DNA_chain <<
" residues "
147 << nonDNA_anchor_index <<
" (";
149 TR << pose.
pdb_info()->number( nonDNA_anchor_index ) <<
") and "
150 << DNA_anchor_index <<
" (" << pose.
pdb_info()->number( DNA_anchor_index );
152 TR << nonDNA_anchor_index <<
") and " << DNA_anchor_index <<
" (" << DNA_anchor_index;
157 Size const jump_start( std::min( nonDNA_anchor_index, DNA_anchor_index ) ),
158 jump_end( std::max( nonDNA_anchor_index, DNA_anchor_index ) );
159 fold_tree.new_jump( jump_start, jump_end, jump_end-1 );
163 TR <<
"new fold tree:\n" << pose.
fold_tree() << std::endl;
167 Jump prot_DNA_jump( pose.
jump( prot_DNA_jump_index ) );
169 TR << std::fixed << std::setprecision(0);
170 TR <<
"separating non-DNA chains from DNA chains by translation ("
172 pose.
set_jump( prot_DNA_jump_index, prot_DNA_jump );