33 #include <basic/Tracer.hh>
34 #include <ObjexxFCL/string.functions.hh>
35 #include <basic/prof.hh>
37 #include <numeric/deriv/distance_deriv.hh>
42 #include <utility/vector1.hh>
45 static basic::Tracer
tr(
"core.io.constraints");
50 namespace constraints {
59 for ( Atoms::const_iterator it =
atoms1_.begin(); it !=
atoms1_.end(); ++it ) {
62 atom.
rsd() = (*smap)[ it->rsd() ];
65 if ( !id1.
valid() )
return NULL;
66 ids1.push_back( id1 );
68 for ( Atoms::const_iterator it =
atoms2_.begin(); it !=
atoms2_.end(); ++it ) {
71 atom.
rsd() = (*smap)[ it->rsd() ];
74 if ( !id2.
valid() )
return NULL;
75 ids2.push_back( id2 );
81 out <<
"AmbiguousNMRDistanceConstraint (";
82 for ( Atoms::const_iterator it =
atoms1_.begin(); it !=
atoms1_.end(); ++it ) {
83 out << it->atomno() <<
"," << it->rsd() <<
"||";
86 for ( Atoms::const_iterator it =
atoms2_.begin(); it !=
atoms2_.end(); ++it ) {
87 out << it->atomno() <<
"," << it->rsd();
93 using namespace core::chemical;
101 using namespace core::chemical;
107 using namespace core::chemical;
110 if ( (name.substr(0,2) ==
"QA" || name ==
"HA") && ( aa ==
aa_gly )) {
111 atoms.push_back( NamedAtomID(
"1HA", res ) );
112 atoms.push_back( NamedAtomID(
"2HA", res ) );
113 }
else if ( ( name ==
"QB" || name ==
"HB" ) && (
130 atoms.push_back( NamedAtomID(
"1HB", res ) );
131 atoms.push_back( NamedAtomID(
"2HB", res ) );
132 if ( aa ==
aa_ala ) atoms.push_back( NamedAtomID(
"3HB", res ) );
133 }
else if ( ( name ==
"QD1" || name ==
"HD1" ) && (
136 atoms.push_back( NamedAtomID(
"1HD1", res ) );
137 atoms.push_back( NamedAtomID(
"2HD1", res ) );
138 atoms.push_back( NamedAtomID(
"3HD1", res ) );
139 }
else if ( ( name ==
"QD2" || name ==
"HD2" ) && (
142 atoms.push_back( NamedAtomID(
"1HD2", res ) );
143 atoms.push_back( NamedAtomID(
"2HD2", res ) );
144 if ( aa ==
aa_leu ) atoms.push_back( NamedAtomID(
"3HD2", res ) );
145 }
else if ( ( name ==
"QQD" || name ==
"QD" ) && aa ==
aa_leu ) {
146 atoms.push_back( NamedAtomID(
"1HD2", res ) );
147 atoms.push_back( NamedAtomID(
"2HD2", res ) );
148 atoms.push_back( NamedAtomID(
"3HD2", res ) );
149 atoms.push_back( NamedAtomID(
"1HD1", res ) );
150 atoms.push_back( NamedAtomID(
"2HD1", res ) );
151 atoms.push_back( NamedAtomID(
"3HD1", res ) );
152 }
else if ( ( name ==
"QD" || name ==
"HD" ) && (
160 atoms.push_back( NamedAtomID(
"1HD", res ) );
161 atoms.push_back( NamedAtomID(
"2HD", res ) );
163 atoms.push_back( NamedAtomID(
"HD1", res ) );
164 atoms.push_back( NamedAtomID(
"HD2", res ) );
166 }
else if ( ( name ==
"QE" || name ==
"HE" ) && (
173 atoms.push_back( NamedAtomID(
"HE1", res ) );
174 atoms.push_back( NamedAtomID(
"HE2", res ) );
175 }
else if ( aa ==
aa_trp ) {
176 atoms.push_back( NamedAtomID(
"HE1", res ) );
177 atoms.push_back( NamedAtomID(
"HE3", res ) );
179 atoms.push_back( NamedAtomID(
"1HE", res ) );
180 atoms.push_back( NamedAtomID(
"2HE", res ) );
182 atoms.push_back( NamedAtomID(
"3HE", res ) );
185 }
else if ( ( name ==
"QG" || name ==
"HG" ) && (
192 atoms.push_back( NamedAtomID(
"1HG", res ) );
193 atoms.push_back( NamedAtomID(
"2HG", res ) );
195 }
else if (( name ==
"QG2" || name ==
"HG2" ) && (
199 atoms.push_back( NamedAtomID(
"1HG2", res ) );
200 atoms.push_back( NamedAtomID(
"2HG2", res ) );
201 atoms.push_back( NamedAtomID(
"3HG2", res ) );
202 }
else if ( ( name ==
"QQG" || name ==
"HG" ) && (
205 atoms.push_back( NamedAtomID(
"1HG2", res ) );
206 atoms.push_back( NamedAtomID(
"2HG2", res ) );
207 atoms.push_back( NamedAtomID(
"3HG2", res ) );
208 atoms.push_back( NamedAtomID(
"1HG1", res ) );
209 atoms.push_back( NamedAtomID(
"2HG1", res ) );
210 if ( aa !=
aa_ile ) atoms.push_back( NamedAtomID(
"3HG1", res ) );
211 }
else if (( name ==
"QG1" || name ==
"HG1" ) && (
214 atoms.push_back( NamedAtomID(
"1HG1", res ) );
215 atoms.push_back( NamedAtomID(
"2HG1", res ) );
216 if ( aa !=
aa_ile ) atoms.push_back( NamedAtomID(
"3HG1", res ) );
217 }
else if (( name ==
"QE2" || name ==
"HE2" || name ==
"HE" ) && aa ==
aa_gln ) {
218 atoms.push_back( NamedAtomID(
"1HE2", res ) );
219 atoms.push_back( NamedAtomID(
"2HE2", res ) );
220 }
else if (( name ==
"HZ" || name ==
"QZ" ) && ( aa ==
aa_trp || aa ==
aa_lys ) ) {
222 atoms.push_back( NamedAtomID(
"1HZ", res ) );
223 atoms.push_back( NamedAtomID(
"2HZ", res ) );
224 atoms.push_back( NamedAtomID(
"3HZ", res ) );
226 atoms.push_back( NamedAtomID(
"HZ2", res ) );
227 atoms.push_back( NamedAtomID(
"HZ3", res ) );
229 }
else if ( name ==
"HB1" ) {
230 atoms.push_back( NamedAtomID(
"1HB", res ) );
231 }
else if ( name ==
"HB2" ) {
232 atoms.push_back( NamedAtomID(
"2HB", res ) );
233 }
else if ( name ==
"HB3" ) {
235 atoms.push_back( NamedAtomID(
"1HB", res ) );
237 atoms.push_back( NamedAtomID(
"3HB", res ) );
239 }
else if ( name ==
"HD1" && !
is_aromatic( aa ) ) {
240 atoms.push_back( NamedAtomID(
"1HD", res ) );
241 }
else if ( name ==
"HD2" && !
is_aromatic( aa ) ) {
242 atoms.push_back( NamedAtomID(
"2HD", res ) );
243 }
else if ( name ==
"HD3" ) {
244 atoms.push_back( NamedAtomID(
"1HD", res ) );
246 }
else if ( name ==
"HG1" && aa !=
aa_thr ) {
247 atoms.push_back( NamedAtomID(
"1HG", res ) );
248 }
else if ( name ==
"HG2" ) {
249 atoms.push_back( NamedAtomID(
"2HG", res ) );
250 }
else if ( name ==
"HG3" ) {
251 atoms.push_back( NamedAtomID(
"1HG", res ) );
253 }
else if ( name ==
"HA1" ) {
254 atoms.push_back( NamedAtomID(
"1HA", res ) );
255 }
else if ( name ==
"HA2" ) {
256 atoms.push_back( NamedAtomID(
"2HA", res ) );
257 }
else if ( name ==
"HA3" ) {
258 atoms.push_back( NamedAtomID(
"1HA", res ) );
260 }
else if ( name ==
"HZ1" && aa ==
aa_lys ) {
261 atoms.push_back( NamedAtomID(
"1HZ", res ) );
262 }
else if ( name ==
"HZ2" && aa ==
aa_lys ) {
263 atoms.push_back( NamedAtomID(
"2HZ", res ) );
264 }
else if ( name ==
"HZ3" && aa ==
aa_lys ) {
265 atoms.push_back( NamedAtomID(
"3HZ", res ) );
267 else if (( name ==
"HE1" || name ==
"HE2" || name==
"HE3" ) && !
is_aromatic( aa ) )
269 if ( ( name ==
"HE3" && aa !=
aa_met ) || name ==
"HE1" ) {
270 atoms.push_back( NamedAtomID(
"1HE", res ) );
271 }
else if ( name ==
"HE2" ) {
272 atoms.push_back( NamedAtomID(
"2HE", res ) );
274 }
else if ( name ==
"HE3" ) {
275 atoms.push_back( NamedAtomID(
"3HE", res ) );
279 else if ( name ==
"HD11" ) {
280 atoms.push_back( NamedAtomID(
"1HD1", res ) );
281 }
else if ( name ==
"HD12" ) {
282 atoms.push_back( NamedAtomID(
"2HD1", res ) );
283 }
else if ( name ==
"HD13" ) {
284 atoms.push_back( NamedAtomID(
"3HD1", res ) );
285 }
else if ( name ==
"HD21" ) {
286 atoms.push_back( NamedAtomID(
"1HD2", res ) );
287 }
else if ( name ==
"HD22" ) {
288 atoms.push_back( NamedAtomID(
"2HD2", res ) );
289 }
else if ( name ==
"HD23" ) {
290 atoms.push_back( NamedAtomID(
"3HD2", res ) );
291 }
else if ( name ==
"HG11" ) {
292 atoms.push_back( NamedAtomID(
"1HG1", res ) );
293 }
else if ( name ==
"HG12" ) {
294 atoms.push_back( NamedAtomID(
"2HG1", res ) );
295 }
else if ( name ==
"HG13" ) {
297 atoms.push_back( NamedAtomID(
"1HG1", res ) );
299 atoms.push_back( NamedAtomID(
"3HG1", res ) );
301 }
else if ( name ==
"HG21" ) {
302 atoms.push_back( NamedAtomID(
"1HG2", res ) );
303 }
else if ( name ==
"HG22" ) {
304 atoms.push_back( NamedAtomID(
"2HG2", res ) );
305 }
else if ( name ==
"HG23" ) {
306 atoms.push_back( NamedAtomID(
"3HG2", res ) );
307 }
else if ( name ==
"HE11" ) {
308 atoms.push_back( NamedAtomID(
"1HE1", res ) );
309 }
else if ( name ==
"HE12" ) {
310 atoms.push_back( NamedAtomID(
"2HE1", res ) );
311 }
else if ( name ==
"HE13" ) {
312 atoms.push_back( NamedAtomID(
"3HE1", res ) );
313 }
else if ( name ==
"HE21" ) {
314 atoms.push_back( NamedAtomID(
"1HE2", res ) );
315 }
else if ( name ==
"HE22" ) {
316 atoms.push_back( NamedAtomID(
"2HE2", res ) );
317 }
else if ( name ==
"HH11" ) {
318 atoms.push_back( NamedAtomID(
"1HH1", res ) );
319 }
else if ( name ==
"HH12" ) {
320 atoms.push_back( NamedAtomID(
"2HH1", res ) );
321 }
else if ( name ==
"HH21" ) {
322 atoms.push_back( NamedAtomID(
"1HH2", res ) );
323 }
else if ( name ==
"HH22" ) {
324 atoms.push_back( NamedAtomID(
"2HH2", res ) );
325 }
else if ( (name ==
"HH1" || name ==
"QH1" ) && aa ==
aa_arg ) {
326 atoms.push_back( NamedAtomID(
"1HH1", res ) );
327 atoms.push_back( NamedAtomID(
"2HH1", res ) );
328 }
else if ( (name ==
"HH2" || name ==
"QH2" ) && aa ==
aa_arg ) {
329 atoms.push_back( NamedAtomID(
"1HH2", res ) );
330 atoms.push_back( NamedAtomID(
"2HH2", res ) );
331 }
else if ( (name ==
"HH" || name ==
"QQH" ) && aa ==
aa_arg ) {
332 atoms.push_back( NamedAtomID(
"1HH1", res ) );
333 atoms.push_back( NamedAtomID(
"2HH1", res ) );
334 atoms.push_back( NamedAtomID(
"1HH2", res ) );
335 atoms.push_back( NamedAtomID(
"2HH2", res ) );
337 atoms.push_back( NamedAtomID( name, res ) );
344 using namespace core::chemical;
350 if ( ( name.substr(0,2) ==
"HD" ) && aa ==
aa_his ) {
354 if ( ( name.substr(0,2) ==
"HE" ) && aa ==
aa_his ) {
360 if ( name ==
"H" && res == 1 && pose.
is_fullatom() ) {
370 for ( NamedAtoms::const_iterator it= named_atoms.begin(); it!=named_atoms.end(); ++it ) {
373 while ( atoms.size() && !atoms.back().valid() ) atoms.pop_back();
379 using namespace core::chemical;
388 if ( ( name.substr(0,2) ==
"HD" ) && aa ==
aa_his ) {
392 if ( ( name.substr(0,2) ==
"HE" ) && aa ==
aa_his ) {
398 if ( name ==
"H" && res == 1 && pose.
is_fullatom() ) {
402 }
else if ( (name.substr(0,2) ==
"QA" || name ==
"HA") && ( aa ==
aa_gly )) {
405 }
else if ( ( name ==
"QB" || name ==
"HB" ) && (
425 }
else if ( ( name ==
"QD1" || name ==
"HD1" ) && (
431 }
else if ( ( name ==
"QD2" || name ==
"HD2" ) && (
437 }
else if ( ( name ==
"QQD" || name ==
"QD" ) && aa ==
aa_leu ) {
444 }
else if ( ( name ==
"QD" || name ==
"HD" ) && (
458 }
else if ( ( name ==
"QE" || name ==
"HE" ) && (
467 }
else if ( aa ==
aa_trp ) {
477 }
else if ( ( name ==
"QG" || name ==
"HG" ) && (
487 }
else if (( name ==
"QG2" || name ==
"HG2" ) && (
494 }
else if ( ( name ==
"QQG" || name ==
"HG" ) && (
503 }
else if (( name ==
"QG1" || name ==
"HG1" ) && (
509 }
else if (( name ==
"QE2" || name ==
"HE2" || name ==
"HE" ) && aa ==
aa_gln ) {
512 }
else if (( name ==
"HZ" || name ==
"QZ" ) && ( aa ==
aa_trp || aa ==
aa_lys ) ) {
521 }
else if ( name ==
"HB1" ) {
523 }
else if ( name ==
"HB2" ) {
525 }
else if ( name ==
"HB3" ) {
531 }
else if ( name ==
"HD1" && !
is_aromatic( pose, res ) ) {
533 }
else if ( name ==
"HD2" && !
is_aromatic( pose, res ) ) {
535 }
else if ( name ==
"HD3" ) {
538 }
else if ( name ==
"HG1" && aa !=
aa_thr ) {
540 }
else if ( name ==
"HG2" ) {
542 }
else if ( name ==
"HG3" ) {
545 }
else if ( name ==
"HA1" ) {
547 }
else if ( name ==
"HA2" ) {
549 }
else if ( name ==
"HA3" ) {
553 else if (( name ==
"HE1" || name ==
"HE2" || name==
"HE3" ) && !
is_aromatic( pose, res ) )
555 if ( name ==
"HE3" && aa !=
aa_met ) {
562 else if ( name ==
"HD11" ) {
564 }
else if ( name ==
"HD12" ) {
566 }
else if ( name ==
"HD13" ) {
568 }
else if ( name ==
"HD21" ) {
570 }
else if ( name ==
"HD22" ) {
572 }
else if ( name ==
"HD23" ) {
574 }
else if ( name ==
"HG11" ) {
576 }
else if ( name ==
"HG12" ) {
578 }
else if ( name ==
"HG13" ) {
584 }
else if ( name ==
"HG21" ) {
586 }
else if ( name ==
"HG22" ) {
588 }
else if ( name ==
"HG23" ) {
590 }
else if ( name ==
"HE11" ) {
592 }
else if ( name ==
"HE12" ) {
594 }
else if ( name ==
"HE13" ) {
596 }
else if ( name ==
"HE21" ) {
598 }
else if ( name ==
"HE22" ) {
600 }
else if ( name ==
"HH11" ) {
602 }
else if ( name ==
"HH12" ) {
604 }
else if ( name ==
"HH21" ) {
606 }
else if ( name ==
"HH22" ) {
608 }
else if ( (name ==
"HH1" || name ==
"QH1" ) && aa ==
aa_arg ) {
611 }
else if ( (name ==
"HH2" || name ==
"QH2" ) && aa ==
aa_arg ) {
614 }
else if ( (name ==
"HH" || name ==
"QQH" ) && aa ==
aa_arg ) {
623 tr.Trace <<
"as atom: " << atoms.back();
626 while ( atoms.size() && !atoms.back().valid() ) atoms.pop_back();
630 basic::ProfileThis doit( basic::NOESY_ASSIGN_REQUIRES_CB_MAPPING );
632 using namespace core::chemical;
633 Size ct_backbone( 0 );
634 for (
Size i=1; i<=atoms.size(); ++i ) {
639 ct_backbone -= ( ct_backbone == 1 && res_type.
aa() !=
aa_gly && res_type.
atom_index(
"CB" ) == atoms[ 1 ].atomno() );
640 if ( ct_backbone == 0 )
return true;
641 if ( ct_backbone == atoms.size() )
return false;
650 basic::ProfileThis doit( basic::NOESY_ASSIGN_NMR_STRING );
651 atom_str =
" BOGUS ";
652 if ( atoms.size() == 1 ) {
653 atom_str = pose.
residue( atoms[ 1 ].rsd() ).
atom_name( atoms[ 1 ].atomno() );
654 }
else if ( atoms.size() == 2 && atoms[ 1 ].rsd() == atoms[ 2 ].rsd()
655 && pose.
residue( atoms[ 1 ].rsd() ).
atom_name( atoms[ 1 ].atomno() ).substr( 1, 2 ) ==
"HB"
656 && pose.
residue( atoms[ 2 ].rsd() ).
atom_name( atoms[ 2 ].atomno() ).substr( 1, 2 ) ==
"HB" ) {
658 }
else if ( atoms.size() == 3
659 && atoms[ 1 ].rsd() == atoms[ 2 ].rsd() && atoms[ 1 ].rsd() == atoms[ 3 ].rsd() ) {
661 if ( pose.
residue( atoms[ 2 ].rsd() ).atom_name( atoms[ 2 ].atomno() ).substr( 1, 3 ) == methyl
662 && pose.
residue( atoms[ 3 ].rsd() ).
atom_name( atoms[ 3 ].atomno() ).substr( 1, 3 ) == methyl ) {
663 if ( atoms[ 1 ].rsd() == 1 ) {
666 atom_str =
"Q"+methyl.substr(1);
669 atom_str =
" untranslatable-3-atom-combi";
670 tr.Trace <<
"could not translate: "
673 << pose.
residue( atoms[ 3 ].rsd() ).
atom_name( atoms[ 3 ].atomno() ) << std::endl;
675 }
else if ( atoms.size() == 2
676 && atoms[ 1 ].rsd() == atoms[ 2 ].rsd() ) {
677 if ( pose.
residue( atoms[ 1 ].rsd() ).atom_name( atoms[ 1 ].atomno() ).substr(0,2)==
" H" ) {
678 atom_str =
"Q"+pose.
residue( atoms[ 1 ].rsd() ).
atom_name( atoms[ 1 ].atomno() ).substr(2,1);
681 if ( pose.
residue( atoms[ 2 ].rsd() ).atom_name( atoms[ 2 ].atomno() ).substr( 1, 3 ) == methyl ) {
682 atom_str =
"Q"+methyl.substr(1);
684 atom_str =
" untranslatable-2-methyl-atom-combi ";
685 tr.Trace <<
"could not translate: " << pose.
residue( atoms[ 1 ].rsd() ).
atom_name( atoms[ 1 ].atomno() ) <<
" " << pose.
residue( atoms[ 2 ].rsd() ).
atom_name( atoms[ 2 ].atomno() ) << std::endl;
688 }
else if ( atoms.size() == 6
689 && atoms[ 1 ].rsd() == atoms[ 2 ].rsd() && atoms[ 1 ].rsd() == atoms[ 3 ].rsd()
690 && atoms[ 1 ].rsd() == atoms[ 4 ].rsd() && atoms[ 1 ].rsd() == atoms[ 5 ].rsd()
691 && atoms[ 1 ].rsd() == atoms[ 6 ].rsd() ) {
693 if ( pose.
residue( atoms[ 2 ].rsd() ).atom_name( atoms[ 2 ].atomno() ).substr( 1, 2 ) == methyl
694 && pose.
residue( atoms[ 3 ].rsd() ).
atom_name( atoms[ 3 ].atomno() ).substr( 1, 2 ) == methyl ) {
695 atom_str =
"QQ"+methyl.substr(1);
697 atom_str =
" untranslatable-6-atom-combi ";
698 tr.Trace <<
"could not translate: "
704 << pose.
residue( atoms[ 6 ].rsd() ).
atom_name( atoms[ 6 ].atomno() ) << std::endl;
707 std::istringstream eat_white_space( atom_str );
708 eat_white_space >> atom_str;
717 << def_atoms1 <<
" " <<
atoms1_[ 1 ].rsd() <<
" "
718 << def_atoms2 <<
" " <<
atoms2_[ 1 ].rsd() <<
" ";
720 else out << std::endl;
724 bool still_ambiguous(
false );
726 basic::ProfileThis doit( basic::NOESY_ASSIGN_MAP2CB );
734 still_ambiguous |= (
atoms1_.size() > 1 );
740 still_ambiguous |= (
atoms2_.size() > 1 );
742 tr.Debug <<
"map_to_CEN: " << atom1 <<
" " <<
resid( 1 ) <<
" --> " << atom2 <<
" " <<
resid( 2 ) << (still_ambiguous ?
" ambiguous " :
" straight ") << std::endl;
744 basic::ProfileThis doit( basic::NOESY_ASSIGN_MAP2CB_NEW );
745 if ( still_ambiguous ) {
796 Real cum_dist( 0.0 );
797 for ( Atoms::const_iterator it1 =
atoms1_.begin(); it1 !=
atoms1_.end(); ++it1 ) {
798 for (Atoms::const_iterator it2 =
atoms2_.begin(); it2 !=
atoms2_.end(); ++it2 ) {
799 Vector const & xyz1(
xyz( *it1 ) ), xyz2(
xyz( *it2 ) );
800 Vector const f2( xyz1 - xyz2 );
803 Real const inv_dist2( inv_dist*inv_dist );
845 if ( verbose_level > 80 ) {
846 out <<
"\nAmbiguousNMRDistanceConstraint ( "
848 <<
atoms1_.front().rsd() <<
" - "
850 <<
atoms2_.front().rsd() <<
" ) ";
859 return func_->show_violations( out,
dist( pose ), verbose_level, threshold );
875 if ( not_methyl_1 && not_methyl_2 ) {
886 Real in_deriv = -1.0/6.0 * pow( eff_dist, 7.0 );
891 for (Atoms::const_iterator it = the_other_atoms.begin(); it != the_other_atoms.end(); ++it ) {
896 numeric::deriv::distance_f1_f2_deriv(
xyz( atom ),
xyz( other_atom ), rdist, f1, f2 );
897 Real wderiv = -6.0*pow(rdist,-7.0) * in_deriv * out_wderiv ;
911 for ( Atoms::const_iterator it =
atoms1_.begin(); it !=
atoms1_.end(); ++it ) {
914 ids1.push_back(
atom );
916 for ( Atoms::const_iterator it =
atoms2_.begin(); it !=
atoms2_.end(); ++it ) {
919 ids2.push_back(
atom );
944 tr.Warning <<
"Error constructing from atoms: read in atom names("
945 << a1.
atom() <<
"," << a2.
atom() <<
"), " << std::endl;
970 tr.Debug <<
"read: " << name1 <<
" " << name2 <<
" " << res1 <<
" " << res2 <<
" func: " << func_type << std::endl;
972 tr.Warning <<
"ignored constraint (residue number to high for pose: " << pose.
total_residue() <<
" !)"
973 << name1 <<
" " << name2 <<
" " << res1 <<
" " << res2 << std::endl;
974 data.setstate( std::ios_base::failbit );
982 tr.Warning <<
"Error reading atoms: read in atom names("
983 << name1 <<
"," << name2 <<
"), " << std::endl;
985 data.setstate( std::ios_base::failbit );
990 func_->read_data( data );
994 while( data.good() && (data.get() !=
'\n') ) {}
995 if ( !data.good() ) data.setstate( std::ios_base::eofbit );
998 if (
tr.Debug.visible() ) {
999 func_->show_definition(
tr.Debug );
1000 tr.Debug << std::endl;