10 #if (defined _WIN32) && (!defined WIN_PYROSETTA)
11 #define ZLIB_WINAPI // REQUIRED FOR WINDOWS
23 #include <utility/io/izstream.hh>
25 #include <basic/Tracer.hh>
30 static basic::Tracer
TR(
"protocols.frags.TorsionFragment");
33 #include <ObjexxFCL/string.functions.hh>
36 #include <utility/exit.hh>
37 #include <utility/vector1.hh>
61 std::cerr <<
"ERROR! USING **DEPRECATED** FRAGMENTS. PLEASE SWITCH TO src/core/fragments/* FRAGMENTS!" << std::endl;
64 Size const seqpos( begin + i - 1 );
65 for (
Size j=1; j<= bb.size(); ++j ) {
85 utility::io::izstream data ( filename );
86 std::cerr <<
"ERROR! USING **DEPRECATED** FRAGMENTS. PLEASE SWITCH TO src/core/fragments/* FRAGMENTS!" << std::endl;
88 std::cerr <<
"Cannot open " + ObjexxFCL::string_of(frag_size) +
"-mer fragment library file: " + filename +
"\n" ;
92 while( getline( data, line ) ) {
93 std::istringstream line_stream( line );
95 Size position, neighbors;
96 line_stream >> tag1 >> position >> tag2 >> neighbors;
97 if (line_stream.fail() || tag1 !=
"position:" || tag2 !=
"neighbors:" ) {
98 std::cerr <<
" format errors in fragment library file: " << line << std::endl;
105 for (
Size i=1; i<=neighbors; ++i ) {
109 for (
Size j=1; j<=frag_size; ++j ) {
111 std::istringstream line_stream( line );
113 line_stream >> pdb >> chain >> seqpos >> aa >> secstruct;
117 last_seqpos = seqpos;
119 if (last_pdb != pdb || last_chain != chain || last_seqpos != (seqpos-j+1) ) {
120 std::cerr <<
"fragment reading error -- pdb, chain and seqpos mismatch\n"
121 <<
"position: " << position <<
"; neighbor: " << i <<
"; line: " << j << std::endl;
126 fragment->set_secstruct(j,secstruct);
127 for (
Size k=1; k<=nbb; ++k ) {
129 line_stream >> torsion;
130 fragment->set_torsion(j,k,torsion);
138 TR.Info <<
"read succesfully " << frag_size <<
"-mer fragment library file: " << filename << std::endl;
163 runtime_assert( my_size < src_size );
165 std::map< Size, Size > seg_map;
168 for (
Size i = 1; i <= src_lib_op->size(); ++i ) {
169 Size current_nbrs( (*src_lib_op)[i].
size() );
170 if ( !prev_nbrs && current_nbrs ) {
171 runtime_assert( !seg_start );
173 }
else if ( prev_nbrs && !current_nbrs ) {
174 runtime_assert( seg_start && seg_start <i );
175 seg_map.insert( std::make_pair( seg_start, i-1 ) );
177 }
else if ( i == src_lib_op->size() && prev_nbrs && current_nbrs ) {
178 runtime_assert( seg_start && seg_start < i );
179 seg_map.insert( std::make_pair( seg_start, i ) );
182 prev_nbrs = current_nbrs;
184 runtime_assert( !seg_start );
186 if ( !seg_map.size() ) {
187 std::cerr <<
"Warning: source fragment library does not have any data!" << std::endl;
192 Size const size_diff(src_size - my_size);
193 resize( src_lib_op->size() + size_diff );
195 Size const offset( size_diff%2 == 0 ? size_diff/2 : (size_diff-1)/2 );
198 for ( std::map<Size, Size>::const_iterator it = seg_map.begin(),
199 it_end = seg_map.end(); it != it_end; it++ ) {
200 Size const seg_begin(it->first);
201 Size const seg_end(it->second);
202 Size lib_index, copy_start;
203 for (
Size my_index = seg_begin, my_end = seg_end+size_diff; my_index <= my_end; my_index++ ) {
207 if ( my_index < seg_begin + offset ) {
208 lib_index = seg_begin;
209 copy_start = 1 + my_index - seg_begin;
210 }
else if ( my_index > seg_end + offset ) {
212 copy_start = 1 + my_index - seg_end;
214 lib_index = my_index - offset;
215 copy_start = 1 + offset;
219 for (
Size i = 1; i <= src_residue_lib.
size(); ++i ) {
221 Size const nbb( src_fragment.
nbb() );
223 for (
Size j = 1, jj = copy_start; j <= my_size; ++j, ++jj ) {
224 for (
Size k = 1; k <= nbb; ++k ) {
225 my_fragment->set_torsion( j, k, src_fragment.
get_torsion(jj, k) );
227 my_fragment->set_secstruct( j, src_fragment.
get_secstruct(jj) );
229 my_residue_lib->append_fragment( my_fragment );
242 os <<
"TorsionFragmentLibrary:: size= " <<
size() << std::endl;
244 os <<
"window: " << i <<
" depth: " << fragments_[i]->size() << std::endl;