16 #ifndef INCLUDED_core_io_silent_ProteinSilentStruct_tmpl_hh
17 #define INCLUDED_core_io_silent_ProteinSilentStruct_tmpl_hh
35 #include <ObjexxFCL/char.functions.hh>
36 #include <utility/exit.hh>
38 #include <basic/Tracer.hh>
39 #include <basic/prof.hh>
54 #include <basic/options/option.hh>
55 #include <basic/options/keys/in.OptionKeys.gen.hh>
59 #include <numeric/model_quality/rms.hh>
62 #include <boost/lexical_cast.hpp>
65 #include <platform/types.hh>
166 #include <utility/Bound.fwd.hh>
167 #include <utility/Bound.hh>
168 #include <utility/down_cast.hh>
169 #include <utility/vector0_bool.hh>
170 #include <utility/vector1.fwd.hh>
171 #include <utility/vector1.hh>
172 #include <utility/vector1_bool.hh>
173 #include <utility/vectorL.fwd.hh>
174 #include <utility/vectorL.hh>
175 #include <utility/vectorL_Selector.hh>
176 #include <utility/vectorL_bool.hh>
177 #include <utility/file/FileName.fwd.hh>
178 #include <utility/file/FileName.hh>
179 #include <utility/file/PathName.fwd.hh>
180 #include <utility/file/PathName.hh>
181 #include <utility/keys/AutoKey.fwd.hh>
182 #include <utility/keys/AutoKey.hh>
183 #include <utility/keys/Key.fwd.hh>
184 #include <utility/keys/Key.hh>
185 #include <utility/keys/Key2Tuple.fwd.hh>
186 #include <utility/keys/Key2Tuple.hh>
187 #include <utility/keys/Key3Tuple.fwd.hh>
188 #include <utility/keys/Key3Tuple.hh>
189 #include <utility/keys/Key4Tuple.fwd.hh>
190 #include <utility/keys/Key4Tuple.hh>
191 #include <utility/keys/KeyLess.fwd.hh>
192 #include <utility/keys/KeyLookup.fwd.hh>
193 #include <utility/keys/KeyLookup.hh>
194 #include <utility/keys/NoClient.fwd.hh>
195 #include <utility/keys/NoClient.hh>
196 #include <utility/keys/SmallKeyVector.fwd.hh>
197 #include <utility/keys/SmallKeyVector.hh>
198 #include <utility/keys/UserKey.fwd.hh>
199 #include <utility/keys/VariantKey.fwd.hh>
200 #include <utility/keys/VariantKey.hh>
201 #include <utility/options/AnyOption.fwd.hh>
202 #include <utility/options/AnyOption.hh>
203 #include <utility/options/AnyVectorOption.fwd.hh>
204 #include <utility/options/AnyVectorOption.hh>
205 #include <utility/options/BooleanOption.fwd.hh>
206 #include <utility/options/BooleanOption.hh>
207 #include <utility/options/BooleanVectorOption.fwd.hh>
208 #include <utility/options/BooleanVectorOption.hh>
209 #include <utility/options/FileOption.fwd.hh>
210 #include <utility/options/FileOption.hh>
211 #include <utility/options/FileVectorOption.fwd.hh>
212 #include <utility/options/FileVectorOption.hh>
213 #include <utility/options/IntegerOption.fwd.hh>
214 #include <utility/options/IntegerOption.hh>
215 #include <utility/options/IntegerVectorOption.fwd.hh>
216 #include <utility/options/IntegerVectorOption.hh>
217 #include <utility/options/Option.fwd.hh>
218 #include <utility/options/Option.hh>
219 #include <utility/options/OptionCollection.fwd.hh>
220 #include <utility/options/OptionCollection.hh>
221 #include <utility/options/PathOption.fwd.hh>
222 #include <utility/options/PathOption.hh>
223 #include <utility/options/PathVectorOption.fwd.hh>
224 #include <utility/options/PathVectorOption.hh>
225 #include <utility/options/RealOption.fwd.hh>
226 #include <utility/options/RealOption.hh>
227 #include <utility/options/RealVectorOption.fwd.hh>
228 #include <utility/options/RealVectorOption.hh>
229 #include <utility/options/ScalarOption.fwd.hh>
230 #include <utility/options/ScalarOption.hh>
231 #include <utility/options/ScalarOption_T_.fwd.hh>
232 #include <utility/options/ScalarOption_T_.hh>
233 #include <utility/options/StringOption.fwd.hh>
234 #include <utility/options/StringOption.hh>
235 #include <utility/options/StringVectorOption.fwd.hh>
236 #include <utility/options/StringVectorOption.hh>
237 #include <utility/options/VariantOption.fwd.hh>
238 #include <utility/options/VariantOption.hh>
239 #include <utility/options/VectorOption.fwd.hh>
240 #include <utility/options/VectorOption.hh>
241 #include <utility/options/VectorOption_T_.fwd.hh>
242 #include <utility/options/VectorOption_T_.hh>
243 #include <utility/options/mpi_stderr.hh>
244 #include <utility/options/keys/AnyOptionKey.fwd.hh>
245 #include <utility/options/keys/AnyOptionKey.hh>
246 #include <utility/options/keys/AnyVectorOptionKey.fwd.hh>
247 #include <utility/options/keys/AnyVectorOptionKey.hh>
248 #include <utility/options/keys/BooleanOptionKey.fwd.hh>
249 #include <utility/options/keys/BooleanOptionKey.hh>
250 #include <utility/options/keys/BooleanVectorOptionKey.fwd.hh>
251 #include <utility/options/keys/BooleanVectorOptionKey.hh>
252 #include <utility/options/keys/FileOptionKey.fwd.hh>
253 #include <utility/options/keys/FileOptionKey.hh>
254 #include <utility/options/keys/FileVectorOptionKey.fwd.hh>
255 #include <utility/options/keys/FileVectorOptionKey.hh>
256 #include <utility/options/keys/IntegerOptionKey.fwd.hh>
257 #include <utility/options/keys/IntegerOptionKey.hh>
258 #include <utility/options/keys/IntegerVectorOptionKey.fwd.hh>
259 #include <utility/options/keys/IntegerVectorOptionKey.hh>
260 #include <utility/options/keys/OptionKey.fwd.hh>
261 #include <utility/options/keys/OptionKey.hh>
262 #include <utility/options/keys/OptionKeys.hh>
263 #include <utility/options/keys/PathOptionKey.fwd.hh>
264 #include <utility/options/keys/PathOptionKey.hh>
265 #include <utility/options/keys/PathVectorOptionKey.fwd.hh>
266 #include <utility/options/keys/PathVectorOptionKey.hh>
267 #include <utility/options/keys/RealOptionKey.fwd.hh>
268 #include <utility/options/keys/RealOptionKey.hh>
269 #include <utility/options/keys/RealVectorOptionKey.fwd.hh>
270 #include <utility/options/keys/RealVectorOptionKey.hh>
271 #include <utility/options/keys/ScalarOptionKey.fwd.hh>
272 #include <utility/options/keys/ScalarOptionKey.hh>
273 #include <utility/options/keys/StringOptionKey.fwd.hh>
274 #include <utility/options/keys/StringOptionKey.hh>
275 #include <utility/options/keys/StringVectorOptionKey.fwd.hh>
276 #include <utility/options/keys/StringVectorOptionKey.hh>
277 #include <utility/options/keys/VectorOptionKey.fwd.hh>
278 #include <utility/options/keys/VectorOptionKey.hh>
279 #include <utility/options/keys/all.hh>
280 #include <utility/pointer/ReferenceCount.fwd.hh>
281 #include <utility/pointer/ReferenceCount.hh>
282 #include <utility/pointer/access_ptr.fwd.hh>
283 #include <utility/pointer/access_ptr.hh>
284 #include <utility/pointer/owning_ptr.functions.hh>
285 #include <utility/pointer/owning_ptr.fwd.hh>
286 #include <utility/pointer/owning_ptr.hh>
287 #include <utility/signals/BufferedSignalHub.fwd.hh>
288 #include <utility/signals/BufferedSignalHub.hh>
289 #include <utility/signals/Link.fwd.hh>
290 #include <utility/signals/Link.hh>
291 #include <utility/signals/LinkUnit.fwd.hh>
292 #include <utility/signals/LinkUnit.hh>
293 #include <utility/signals/PausableSignalHub.fwd.hh>
294 #include <utility/signals/PausableSignalHub.hh>
295 #include <utility/signals/SignalHub.fwd.hh>
296 #include <utility/signals/SignalHub.hh>
297 #include <numeric/numeric.functions.hh>
298 #include <numeric/sphericalVector.fwd.hh>
299 #include <numeric/trig.functions.hh>
300 #include <numeric/types.hh>
301 #include <numeric/xyz.functions.fwd.hh>
302 #include <numeric/xyzMatrix.fwd.hh>
303 #include <numeric/xyzMatrix.hh>
304 #include <numeric/xyzVector.fwd.hh>
305 #include <numeric/xyzVector.hh>
306 #include <numeric/internal/ColPointers.hh>
307 #include <numeric/internal/ColVectors.hh>
308 #include <numeric/internal/ColsPointer.hh>
309 #include <numeric/internal/RowPointers.hh>
310 #include <numeric/internal/RowVectors.hh>
311 #include <numeric/internal/RowsPointer.hh>
312 #include <ObjexxFCL/Dimension.fwd.hh>
313 #include <ObjexxFCL/Dimension.hh>
314 #include <ObjexxFCL/DimensionExpression.hh>
315 #include <ObjexxFCL/DynamicIndexRange.fwd.hh>
316 #include <ObjexxFCL/DynamicIndexRange.hh>
317 #include <ObjexxFCL/FArray.fwd.hh>
318 #include <ObjexxFCL/FArray.hh>
319 #include <ObjexxFCL/FArray1.fwd.hh>
320 #include <ObjexxFCL/FArray1.hh>
321 #include <ObjexxFCL/FArray1A.fwd.hh>
322 #include <ObjexxFCL/FArray1A.hh>
323 #include <ObjexxFCL/FArray1D.fwd.hh>
324 #include <ObjexxFCL/FArray1D.hh>
325 #include <ObjexxFCL/FArray1P.fwd.hh>
326 #include <ObjexxFCL/FArray1P.hh>
327 #include <ObjexxFCL/FArray2.fwd.hh>
328 #include <ObjexxFCL/FArray2.hh>
329 #include <ObjexxFCL/FArray2A.fwd.hh>
330 #include <ObjexxFCL/FArray2A.hh>
331 #include <ObjexxFCL/FArray2D.fwd.hh>
332 #include <ObjexxFCL/FArray2D.hh>
333 #include <ObjexxFCL/FArray2P.fwd.hh>
334 #include <ObjexxFCL/FArray2P.hh>
335 #include <ObjexxFCL/FArrayInitializer.fwd.hh>
336 #include <ObjexxFCL/FArrayInitializer.hh>
337 #include <ObjexxFCL/FArraySection.fwd.hh>
338 #include <ObjexxFCL/FArraySection.hh>
339 #include <ObjexxFCL/FArrayTraits.fwd.hh>
340 #include <ObjexxFCL/FArrayTraits.hh>
341 #include <ObjexxFCL/Fstring.fwd.hh>
342 #include <ObjexxFCL/IndexRange.fwd.hh>
343 #include <ObjexxFCL/IndexRange.hh>
344 #include <ObjexxFCL/InitializerSentinel.hh>
345 #include <ObjexxFCL/Observer.fwd.hh>
346 #include <ObjexxFCL/Observer.hh>
347 #include <ObjexxFCL/ObserverMulti.hh>
348 #include <ObjexxFCL/ObserverSingle.hh>
349 #include <ObjexxFCL/ProxySentinel.hh>
350 #include <ObjexxFCL/SetWrapper.fwd.hh>
351 #include <ObjexxFCL/Star.fwd.hh>
352 #include <ObjexxFCL/Star.hh>
353 #include <ObjexxFCL/StaticIndexRange.fwd.hh>
354 #include <ObjexxFCL/StaticIndexRange.hh>
355 #include <ObjexxFCL/TypeTraits.hh>
356 #include <ObjexxFCL/byte.fwd.hh>
357 #include <ObjexxFCL/format.hh>
358 #include <ObjexxFCL/proxy_const_assert.hh>
359 #include <ObjexxFCL/string.functions.hh>
360 #include <ObjexxFCL/ubyte.fwd.hh>
372 #include <basic/MetricValue.fwd.hh>
373 #include <basic/Tracer.fwd.hh>
374 #include <basic/datacache/BasicDataCache.fwd.hh>
375 #include <basic/options/keys/OptionKeys.hh>
376 #include <basic/options/keys/run.OptionKeys.gen.hh>
377 #include <boost/bind.hpp>
378 #include <boost/function.hpp>
379 #include <boost/functional/hash.hpp>
390 using namespace ObjexxFCL;
391 using namespace ObjexxFCL::fmt;
392 static basic::Tracer
pss_tr(
"core.io.silent");
407 basic::ProfileThis doit( basic::SILENT_FILL_STRUCT );
411 pss_tr.Error <<
"ERROR: trying to use a 'protein' type silent file for a non-ideal pose" << std::endl;
412 pss_tr.Error <<
"consider using the '-out:file:silent_struct_type binary' flag" << std::endl;
417 if ( tag ==
"empty_tag" ) set_tag_from_pose( pose );
419 using namespace core::chemical;
422 energies_from_pose( pose );
436 coords ( i, resi.
xyz(1) );
440 for (
Size kk = 1; kk <= max_chi(); ++kk ) {
449 coords ( i, resi.
xyz( important_atom ) );
453 for (
Size kk = 1; kk <= max_chi(); ++kk ) {
454 if ( resi.
nchi() >= kk ) {
455 chi( i, kk, resi.
chi(kk) );
464 for (
Size nr = 1; nr <= fold_tree().num_jump(); nr++) {
465 add_jump( pose.
jump(nr) );
476 bool success(
false );
480 if ( iter->substr(0,9) !=
"SEQUENCE:" ) {
490 sequence ( seqdata->sequence() );
491 energy_names = enames ->energy_names();
498 if ( !read_sequence( *iter ) )
return false;
500 read_score_headers( *iter, energy_names, container ); ++iter;
505 Size const total_residue = one_letter_sequence().length();
506 resize( total_residue );
510 std::istringstream line_stream( *iter );
512 if ( iter->substr(0,6) ==
"REMARK" ) {
518 comment_from_line( *iter );
522 if ( iter->substr(0,7) ==
"SCORE: " ) {
523 resize( total_residue );
527 if ( line_stream.fail() || tag !=
"SCORE:" ) {
528 pss_tr.Error <<
"bad format in first score line of silent file" << std::endl;
529 pss_tr.Error <<
"line = " << *iter << std::endl;
530 pss_tr.Error <<
"tag = " << tag << std::endl;
533 parse_energies( line_stream, energy_names );
536 if ( iter->substr(0,10) ==
"FOLD_TREE " ) {
540 pss_tr.Debug <<
"read fold-tree " << f;
541 pss_tr.Debug <<
"reading " << f.num_jump() <<
" jumps " << std::endl;
543 }
else if ( iter->substr(0,2) ==
"RT" ) {
546 pss_tr.Debug <<
"read jump " << jump << std::endl;
548 bJumps_use_IntraResStub_ =
false;
550 }
else if ( iter->substr(0,9) ==
"SEQUENCE:" ) {
551 pss_tr.Warning <<
"skipping duplicate sequence declaration " << std::endl;
554 if (( iter2 !=
end ) && iter2->substr(0,7) ==
"SCORE: " ) {
555 pss_tr.Warning <<
"re-reading score declaration from second line... " << std::endl;
556 read_score_headers( *iter2, energy_names, container );
560 }
else if ( iter->substr(0,19) ==
"ANNOTATED_SEQUENCE:" ) {
563 line_stream >> annotated_seq;
564 sequence( annotated_seq );
566 }
else if ( iter->substr(0,4) ==
"JUMP" ) {
572 if ( nr != fold_tree().num_jump() ) {
573 pss_tr.Warning <<
"WARNING: corrupted silent file read line JUMP X -- X ";
574 pss_tr.Warning <<
"should match number of jumps in FOLD_TREE " << std::endl;
576 for (
Size i = 1; i<= nr; i++ ) {
581 bJumps_use_IntraResStub_ =
true;
583 }
else if ( iter->substr( 0, 13 ) ==
"CHAIN_ENDINGS" ) {
584 chain_endings_.clear();
585 parse_chain_endings( line_stream );
591 Real x, y, z, my_phi, my_psi, my_omega;
595 if ( !is_int( tag ) ) {
596 pss_tr.Error <<
"ERROR: !is_int( " << tag <<
" ) from line (" << *iter <<
")" << std::endl;
597 pss_tr.Error <<
"Are you trying to read a binary silent file ? Use -in:file:silent_struct_type binary " << std::endl;
602 seqpos = int_of( tag );
603 if ( seqpos <= 0 || seqpos > nres() ) {
604 pss_tr.Error <<
"ERROR: incorrect sequence number " << seqpos <<
" (nres = "
605 << nres() <<
" ) from line (" << *iter <<
")\n";
609 read_flag[ seqpos ] =
true;
611 line_stream >> ss >> my_phi >> my_psi >> my_omega >> x >> y >> z;
614 phi ( seqpos, my_phi );
615 psi ( seqpos, my_psi );
616 omega ( seqpos, my_omega );
617 secstruct( seqpos, ss );
618 coords ( seqpos, temp_vec );
625 while ( !line_stream.fail() ) {
626 if ( is_float( tag ) ) {
629 if ( chi_idx > max_chi() ) {
630 pss_tr.Warning <<
"parse error (" << *iter <<
" ) " << tag <<
" has to many chi-angles" << std::endl;
634 chi( seqpos, chi_idx, float_of(tag) );
641 if ( tag != decoy_tag() ) {
642 pss_tr.Warning <<
"parse error(" << *iter <<
") " << tag <<
" != " << decoy_tag() << std::endl;
649 if ( fold_tree().num_jump() != jumps_.size() ) {
650 pss_tr.Warning <<
"parse error: found only " << jumps_.size()
651 <<
" RT-lines for a fold-tree with " << fold_tree().num_jump()
652 <<
" for decoy tag " << decoy_tag() << std::endl;
658 = find( read_flag.begin(), read_flag.end(), false );
660 if ( bad_pos != read_flag.end() ) {
661 pss_tr.Error <<
"ERROR: did not find coordinates for all sequence positions for "
662 << decoy_tag() << std::endl;
665 it !=
end; ++it, ++idx
667 if ( !*it )
pss_tr.Error <<
"Couldn't read position " << idx << std::endl;
673 if ( fold_tree().size() < 1 ) {
674 fold_tree_.simple_tree( nres() );
675 pss_tr.Debug <<
" generating simple fold-tree " << fold_tree();
678 if ( bJumps_use_IntraResStub_ ) {
680 fold_tree_.put_jump_stubs_intra_residue();
695 secstruct_.resize( nres() );
696 phi_ .resize( nres() );
697 psi_ .resize( nres() );
698 omega_ .resize( nres() );
699 coords_ .resize( nres() );
700 secstruct_.reserve( nres() );
701 phi_ .reserve( nres() );
702 psi_ .reserve( nres() );
703 omega_ .reserve( nres() );
704 coords_ .reserve( nres() );
705 fold_tree_.simple_tree( nres() );
717 chi_.resize( nres() );
718 chi_.reserve( nres() );
730 using namespace core::chemical;
732 pss_tr.Debug <<
"fill_pose: SilentStruct is " << ( fullatom() ?
"fullatom" :
"centroid" ) << std::endl;
738 fill_pose( pose, *residue_set );
746 basic::ProfileThis doit( basic::SILENT_FILL_POSE );
747 runtime_assert( nres() != 0 );
748 runtime_assert( sequence() !=
"" );
755 pss_tr.Debug <<
"FOLD TREE: " << fold_tree();
761 for (
Size nr = 1; nr <= fold_tree().num_jump(); nr++) {
762 if ( !bJumps_use_IntraResStub_ ) {
765 Size start = fold_tree().jump_edge( nr ).start();
766 Size stop = fold_tree().jump_edge( nr ).stop();
774 if ( nres() != one_letter_sequence().length() ) {
775 utility_exit_with_message(
"RuntimeAssert failed: nres() == one_letter_sequence().length()" );
778 { basic::ProfileThis doit( basic::SILENT_SET_POSE_COORDS );
780 for (
Size seqpos = 1; seqpos <= nres(); ++seqpos ) {
790 pose.
set_chi( jj, seqpos, chi(seqpos,jj) );
797 if ( !chain_endings().empty() ) {
811 output <<
"REMARK PROTEIN SILENTFILE";
812 if ( is_single_precision() ) output <<
" SINGLE_PRECISION\n";
814 if ( fold_tree().
size() > 1 ) {
815 output <<
"FOLD_TREE ";
817 it != it_end; ++it ) {
821 output <<
' ' << decoy_tag() <<
"\n";
823 for (
Size i = 1; i <= fold_tree().num_jump(); i++ ) {
824 output << jump( i ) <<
' ' << decoy_tag() <<
"\n";
828 output <<
"ANNOTATED_SEQUENCE: " << sequence() <<
" " << decoy_tag() <<
"\n";
831 if ( !chain_endings().empty() ) {
832 output << chain_endings_str() <<
' ' << decoy_tag() <<
'\n';
837 for (
Size i = 1; i <= nres(); ++i ) {
840 << secstruct(i) <<
' '
843 << F( 9, 3,
omega(i) )
844 << F( 9, 3, coords(i).x() )
845 << F( 9, 3, coords(i).y() )
846 << F( 9, 3, coords(i).z() );
849 for (
Size chino = 1; chino <= max_chi(); ++chino ) {
850 Real chi_to_print = 0.0;
851 if ( chino <= n_chi(i) ) {
852 chi_to_print = chi(i,chino);
854 output << F( 9, 3, chi_to_print );
858 output <<
' ' << decoy_tag();
866 FArray2D< Real > rebuilt_coords (3, coords_.size() ), original_coords( 3, coords_.size() );
870 fill_pose( temp_pose );
873 for (
Size k = 1; k <= 3; ++k ) {
874 rebuilt_coords (k,i) = temp_pose.
residue(i).
xyz( atom_name )[k-1];
875 original_coords(k,i) = coords_[i][k-1];
879 Real rmsd = numeric::model_quality::rms_wrapper( temp_pose.
total_residue(), rebuilt_coords, original_coords );
884 ObjexxFCL::FArray2D< Real >
887 FArray2D< Real > my_coords( 3, n_residues );
888 for (
Size i = 1; i <= n_residues; ++i ) {
889 for (
Size k = 1; k <= 3; ++k ) {
890 my_coords(k,i) = coords_[i][k-1];
899 FArray2D< Real > my_coords = get_CA_xyz();
900 FArray2D< Real > other_coords = other_pss.
get_CA_xyz();
901 Real rmsd = numeric::model_quality::rms_wrapper( nres(), my_coords, other_coords );
911 resize( src.
nres() );
914 for (
Size i = 1; i <= nres(); ++i ) {
918 coords ( i, src.
coords(i) );
923 for (
Size jj = 1; jj <= src.
njumps(); ++jj ) {
924 add_rt( src.
jump(jj) );
942 while ( stream.good() ) {
948 for (
Size i = 1, ie = v.size(); i < ie; ++i ) {
949 add_chain_ending( boost::lexical_cast< Size >( v[ i ] ) );
956 std::ostringstream ss;
957 ss <<
"CHAIN_ENDINGS ";
969 if ( (*i) < 1 || (*i) > nres() ) {
970 pss_tr.Fatal <<
"ERROR: chain_endings() invalid chain ending " << (*i) << std::endl;
975 chain_endings_ = endings;
976 std::sort( chain_endings_.begin(), chain_endings_.end() );
981 if ( seqpos < 1 || seqpos >= nres() ) {
982 pss_tr.Fatal <<
"ERROR: add_chain_ending() invalid chain ending " << seqpos << std::endl;
986 chain_endings_.push_back( seqpos );
987 std::sort( chain_endings_.begin(), chain_endings_.end() );
993 if ( chi_num > max_chi() ) {
995 "Error: trying to chi " + string_of(chi_num) +
996 " when max_chi is " + string_of( max_chi() ) +
'\n'
998 utility_exit_with_message( msg );
1003 if ( chi_num > n_chi(seqpos) ) {
1004 pss_tr.Error <<
"Error: attempting to access chi that doesn't exist!"
1005 <<
"(chi = " << chi_num <<
" seqpos = " << seqpos <<
")"
1009 return chi_[seqpos][chi_num];
1015 if ( chi_num > max_chi() ) {
1017 "Error: trying to set chi " + string_of(chi_num) +
1018 " when max_chi is " + string_of( max_chi() ) +
'\n'
1020 utility_exit_with_message( msg );
1023 if ( chi_num > chi_[seqpos].
size() ) {
1024 chi_[seqpos].resize( chi_num );
1027 chi_[seqpos][chi_num] = chi;
1033 return chi_[seqpos].size();
1038 chi_[seqpos] = chis;
1053 sizeof(char)* secstruct_.capacity() +
1054 sizeof(var)* phi_.capacity() +
1055 sizeof(var)* psi_.capacity() +
1056 sizeof(var)* omega_.capacity() +
1059 sizeof(
Size) * chain_endings_.capacity()+
1060 sizeof( fold_tree_ ) +
1061 sizeof( symminfo_ );
1062 for( chi_iterator it = chi_.begin(); it < chi_.end(); ++it ) sum += (*it).capacity() *
sizeof(
T ) ;