34 #include <basic/options/option.hh>
35 #include <basic/options/keys/packing.OptionKeys.gen.hh>
43 #include <basic/basic.hh>
45 #include <basic/Tracer.hh>
51 #include <utility/exit.hh>
52 #include <utility/io/izstream.hh>
53 #include <utility/io/ozstream.hh>
54 #include <utility/vector1.hh>
57 #include <numeric/random/random.hh>
64 static basic::Tracer
SRDL_TR(
"core.pack.dunbrack");
72 Size const n_rotameric_chi,
77 n_rotameric_chi_( n_rotameric_chi ),
78 n_chi_bins_( n_rotameric_chi, 0 ),
79 n_chi_products_( n_rotameric_chi, 1),
81 n_possible_rots_( 0 ),
82 prob_to_accumulate_buried_(0.98),
83 prob_to_accumulate_nonburied_(0.95),
84 packed_rotno_conversion_data_current_( false )
109 for (
Size i = 1; i <= n_chi_bins.size(); ++i ) {
129 using namespace basic::options;
130 if ( option[ OptionKeys::packing::dunbrack_prob_buried ].user() )
132 if ( option[ OptionKeys::packing::dunbrack_prob_nonburied ].user() )
145 using namespace chemical;
147 case aa_ala: rot.resize( 0 );
break;
148 case aa_cys: rot.resize( 1 ); rot[ 1 ] = 3;
break;
149 case aa_asp: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 6;
break;
150 case aa_glu: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = 6;
break;
151 case aa_phe: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 6;
break;
152 case aa_gly: rot.resize( 0 );
break;
153 case aa_his: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 12;
break;
154 case aa_ile: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
155 case aa_lys: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
156 case aa_leu: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
157 case aa_met: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = 3;
break;
158 case aa_asn: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 12;
break;
159 case aa_pro: rot.resize( 3 ); rot[ 1 ] = 2; rot[ 2 ] = rot[ 3 ] = 1;
break;
160 case aa_gln: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = 3; rot[ 3 ] = 12;
break;
161 case aa_arg: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
162 case aa_ser: rot.resize( 1 ); rot[ 1 ] = 3;
break;
163 case aa_thr: rot.resize( 1 ); rot[ 1 ] = 3;
break;
164 case aa_val: rot.resize( 1 ); rot[ 1 ] = 3;
break;
165 case aa_trp: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 12;
break;
166 case aa_tyr: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 6;
break;
186 using namespace chemical;
188 case aa_ala: rot.resize( 0 );
break;
189 case aa_cys: rot.resize( 1 ); rot[ 1 ] = 3;
break;
190 case aa_asp: rot.resize( 1 ); rot[ 1 ] = 3;
break;
191 case aa_glu: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
192 case aa_phe: rot.resize( 1 ); rot[ 1 ] = 3;
break;
193 case aa_gly: rot.resize( 0 );
break;
194 case aa_his: rot.resize( 1 ); rot[ 1 ] = 3;
break;
195 case aa_ile: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
196 case aa_lys: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
197 case aa_leu: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
198 case aa_met: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = 3;
break;
199 case aa_asn: rot.resize( 1 ); rot[ 1 ] = 3;
break;
200 case aa_pro: rot.resize( 3 ); rot[ 1 ] = 2; rot[ 2 ] = rot[ 3 ] = 1;
break;
201 case aa_gln: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
202 case aa_arg: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
203 case aa_ser: rot.resize( 1 ); rot[ 1 ] = 3;
break;
204 case aa_thr: rot.resize( 1 ); rot[ 1 ] = 3;
break;
205 case aa_val: rot.resize( 1 ); rot[ 1 ] = 3;
break;
206 case aa_trp: rot.resize( 1 ); rot[ 1 ] = 3;
break;
207 case aa_tyr: rot.resize( 1 ); rot[ 1 ] = 3;
break;
221 using namespace chemical;
223 case aa_ala: rot.resize( 0 );
break;
224 case aa_cys: rot.resize( 1 ); rot[ 1 ] = 3;
break;
225 case aa_asp: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
226 case aa_glu: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = 3;
break;
227 case aa_phe: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 2;
break;
228 case aa_gly: rot.resize( 0 );
break;
229 case aa_his: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
230 case aa_ile: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
231 case aa_lys: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
232 case aa_leu: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
233 case aa_met: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = 3;
break;
234 case aa_asn: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 6;
break;
235 case aa_pro: rot.resize( 3 ); rot[ 1 ] = 2; rot[ 2 ] = rot[ 3 ] = 1;
break;
236 case aa_gln: rot.resize( 3 ); rot[ 1 ] = rot[ 2 ] = 3; rot[ 3 ] = 4;
break;
237 case aa_arg: rot.resize( 4 ); rot[ 1 ] = rot[ 2 ] = rot[ 3 ] = rot[ 4 ] = 3;
break;
238 case aa_ser: rot.resize( 1 ); rot[ 1 ] = 3;
break;
239 case aa_thr: rot.resize( 1 ); rot[ 1 ] = 3;
break;
240 case aa_val: rot.resize( 1 ); rot[ 1 ] = 3;
break;
241 case aa_trp: rot.resize( 2 ); rot[ 1 ] = rot[ 2 ] = 3;
break;
242 case aa_tyr: rot.resize( 2 ); rot[ 1 ] = 3; rot[ 2 ] = 2;
break;
258 using namespace chemical;
259 using basic::periodic_range;
265 return periodic_range((chi1-chi2),180.);
266 }
else if ( aa ==
aa_asp ) {
267 return periodic_range((chi1-chi2),180.);
269 }
else if ( chino == 3 ) {
271 return periodic_range((chi1-chi2),180.);
274 return periodic_range((chi1-chi2),360.);
389 Size const packed_rotno,
398 Size const packed_rotno,
416 using namespace boost;
420 out.write( (
char*) & n_packed_rots,
sizeof( boost::int32_t ));
428 out.write( (
char*) rotno_2_packed_rotno,
n_possible_rots_ *
sizeof( boost::int32_t ) );
434 boost::int32_t * packed_rotno_2_rotno =
new boost::int32_t[
n_packed_rots_ ];
436 out.write( (
char*) packed_rotno_2_rotno,
n_packed_rots_ *
sizeof( boost::int32_t ) );
437 delete [] packed_rotno_2_rotno; packed_rotno_2_rotno = 0;
463 in.read( (
char*) & n_packed_rots,
sizeof( boost::int32_t ));
470 in.read( (
char*) rotno_2_packed_rotno,
n_possible_rots_ *
sizeof( boost::int32_t ) );
477 boost::int32_t * packed_rotno_2_rotno =
new boost::int32_t[
n_packed_rots_ ];
478 in.read( (
char*) packed_rotno_2_rotno,
n_packed_rots_ *
sizeof( boost::int32_t ) );
481 delete [] packed_rotno_2_rotno; packed_rotno_2_rotno = 0;
514 Size remainder = rotno - 1;
516 std::fill( rotwell.begin(), rotwell.end(), 1 );
545 if ( buried <= 0. || buried > 1.0 ) utility_exit_with_message(
"illegal probability");
551 if ( nonburied <= 0. || nonburied > 1.0 ) utility_exit_with_message(
"illegal probability");
583 utility_exit_with_message(
584 "ERROR: SingleResidueDunbrackLibrary::hokey_template_workaround should never be called!");
655 utility::io::ozstream ozs;
663 utility::io::ozstream os;
671 utility::io::izstream is;
730 numeric::random::RandomGenerator
RG(1);