15 #include <utility/vector1.hh>
16 #include <numeric/interpolation/spline/Bicubic_spline.hh>
17 #include <numeric/interpolation/spline/Cubic_spline.hh>
18 #include <numeric/MathVector_operations.hh>
22 #include <utility/io/izstream.hh>
24 #include <basic/database/open.hh>
27 #include <utility/exit.hh>
28 #include <utility/string_util.hh>
31 #include <basic/options/keys/OptionKeys.hh>
32 #include <basic/options/keys/in.OptionKeys.gen.hh>
33 #include <basic/options/option.hh>
53 if(basic::options::option[ basic::options::OptionKeys::in::add_orbitals] !=
true ){
54 utility_exit_with_message(
"Trying to run orbitals score without orbitals! Pass the flag -add_orbitals!" );
58 std::map<core::Size, std::pair<core::Size, core::Size> > DHO_Hpol_scOrbscH_map;
60 std::map<core::Size, std::pair<core::Size, core::Size> > DHO_bbOrbscH_map;
62 std::map<core::Size, std::pair<core::Size, core::Size> > DHO_HARO_scOrbscH_map;
72 numeric::MathMatrix<core::Real> Hpol_scOrbH_matrix(DHO_Hpol_scOrbscH_map[count].second, DHO_Hpol_scOrbscH_map[count].first, & DHO_Hpol_scOrbH_vector[count][1] );
74 numeric::MathMatrix<core::Real> Hpol_bbOrbH_matrix(DHO_bbOrbscH_map[count].second, DHO_bbOrbscH_map[count].first, & DHO_Hpol_bbOrbH_vector[count][1] );
75 numeric::MathMatrix<core::Real> Haro_scOrbH_matrix(DHO_HARO_scOrbscH_map[count].second, DHO_HARO_scOrbscH_map[count].first, & DHO_Haro_scOrbH_vector[count][1]);
77 DHO_Hpol_scOrbH_vector_matrix.push_back(Hpol_scOrbH_matrix);
78 DHO_Hpol_bbOrbH_vector_matrix.push_back(Hpol_bbOrbH_matrix);
79 DHO_Haro_scOrbH_vector_matrix.push_back(Haro_scOrbH_matrix);
87 numeric::interpolation::spline::BorderFlag behavior[2] = {
88 numeric::interpolation::spline::e_Natural,
89 numeric::interpolation::spline::e_Natural };
93 bool const linear_cont[2] = {
false,
false };
96 std::pair< core::Real, core::Real >
const first_deriv[2] = {
97 std::pair< core::Real, core::Real >(0.0,0.0),
98 std::pair< core::Real, core::Real >(0.0,0.0) };
101 numeric::interpolation::spline::BicubicSpline bicubic_spline;
107 bicubic_spline.train(behavior, start, delta, DHO_Hpol_scOrbH_vector_matrix[count], linear_cont, first_deriv);
108 DHO_Hpol_scOrbH_vector_spline.push_back( bicubic_spline );
110 bicubic_spline.train(behavior, start, delta, DHO_Hpol_bbOrbH_vector_matrix[count], linear_cont, first_deriv);
111 DHO_Hpol_bbOrbH_vector_spline.push_back( bicubic_spline );
113 bicubic_spline.train(behavior, start, delta, DHO_Haro_scOrbH_vector_matrix[count], linear_cont, first_deriv);
114 DHO_Haro_scOrbH_vector_spline.push_back( bicubic_spline );
171 std::map<core::Size, std::pair<core::Size, core::Size> > AOH_Hpol_scOrbscH_map;
173 std::map<core::Size, std::pair<core::Size, core::Size> > AOH_bbOrbscH_map;
175 std::map<core::Size, std::pair<core::Size, core::Size> > AOH_HARO_scOrbscH_map;
188 numeric::MathMatrix<core::Real> Hpol_scOrbH_matrix(AOH_Hpol_scOrbscH_map[count].second, AOH_Hpol_scOrbscH_map[count].first, & AOH_Hpol_scOrbH_vector[count][1] );
189 numeric::MathMatrix<core::Real> Hpol_bbOrbH_matrix(AOH_bbOrbscH_map[count].second, AOH_bbOrbscH_map[count].first, & AOH_Hpol_bbOrbH_vector[count][1] );
190 numeric::MathMatrix<core::Real> Haro_scOrbH_matrix(AOH_HARO_scOrbscH_map[count].second, AOH_HARO_scOrbscH_map[count].first, & AOH_Haro_scOrbH_vector[count][1]);
192 AOH_Hpol_scOrbH_vector_matrix.push_back(Hpol_scOrbH_matrix);
193 AOH_Hpol_bbOrbH_vector_matrix.push_back(Hpol_bbOrbH_matrix);
194 AOH_Haro_scOrbH_vector_matrix.push_back(Haro_scOrbH_matrix);
203 bicubic_spline.train(behavior, start, delta, AOH_Hpol_scOrbH_vector_matrix[count], linear_cont, first_deriv);
204 AOH_Hpol_scOrbH_vector_spline.push_back( bicubic_spline );
206 bicubic_spline.train(behavior, start, delta, AOH_Hpol_bbOrbH_vector_matrix[count], linear_cont, first_deriv);
207 AOH_Hpol_bbOrbH_vector_spline.push_back( bicubic_spline );
209 bicubic_spline.train(behavior, start, delta, AOH_Haro_scOrbH_vector_matrix[count], linear_cont, first_deriv);
210 AOH_Haro_scOrbH_vector_spline.push_back( bicubic_spline );
288 std::map<core::Size, std::pair<core::Size, core::Size> > AOD_orb_orb_map;
291 std::map<core::Size, std::pair<core::Size, core::Size> > DOA_orb_orb_map;
297 for(
core::Size count=1; count <= 5; ++count ) {
299 numeric::MathMatrix<core::Real> AOD_orb_orb_matrix(AOD_orb_orb_map[count].second, AOD_orb_orb_map[count].first, & AOD_orb_orb_vector[count][1] );
300 numeric::MathMatrix<core::Real> DOA_orb_orb_matrix(DOA_orb_orb_map[count].second, DOA_orb_orb_map[count].first, & DOA_orb_orb_vector[count][1] );
302 AOD_orb_orb_vector_matrix.push_back(AOD_orb_orb_matrix);
303 DOA_orb_orb_vector_matrix.push_back(DOA_orb_orb_matrix);
310 bicubic_spline.train(behavior, start, delta, AOD_orb_orb_vector_matrix[count], linear_cont, first_deriv);
311 AOD_orb_orb_vector_spline.push_back( bicubic_spline );
313 bicubic_spline.train(behavior, start, delta, DOA_orb_orb_vector_matrix[count], linear_cont, first_deriv);
314 DOA_orb_orb_vector_spline.push_back( bicubic_spline );
352 std::map<core::Size, std::pair<core::Size, core::Size> > ACO_AOH_orb_Hpol_map;
358 numeric::MathMatrix<core::Real> ACO_AOH_orb_Hpol_matrix(ACO_AOH_orb_Hpol_map[1].second, ACO_AOH_orb_Hpol_map[1].first, & ACO_AOH_orb_Hpol_vector[1][1] );
359 ACO_AOH_orb_Hpol_vector_matrix.push_back(ACO_AOH_orb_Hpol_matrix);
365 bicubic_spline.train(behavior, start, delta, ACO_AOH_orb_Hpol_vector_matrix[1], linear_cont, first_deriv);
366 ACO_AOH_orb_Hpol_vector_spline.push_back( bicubic_spline );
381 std::map<
core::Size, std::pair<core::Size, core::Size> > & orbital_angle_dist_map
387 utility::io::izstream stream;
388 basic::database::open( stream, file );
391 for(
core::Size count=1; utility::io::getline(stream, line); ++count ) {
393 if(split_string[1]==
"Orbital"){
396 }
else if(split_string[1] ==
"Size"){
397 core::Size angle_bins = utility::string2int(split_string[2]);
398 core::Size dist_bins = utility::string2int(split_string[3]);
399 std::pair<core::Size, core::Size> angle_dist(angle_bins, dist_bins);
400 orbital_angle_dist_map.insert(
std::pair<
core::Size, std::pair<core::Size, core::Size> >(orbital_type, angle_dist));
401 energy_vector[orbital_type].resize((angle_bins*dist_bins), 0);
403 for(
core::Size x=1; x<= orbital_angle_dist_map[orbital_type].first; ++x){
404 energy_vector[orbital_type][overall_count] = utility::string2float(split_string[x]);
410 return energy_vector;
424 bool check_derivative
428 if ( (distance > 4.0 ) ) { energy = distance_derivative = angle_derivative = 0.0;
return; }
432 numeric::MathVector<core::Real> dist_angle_pair(numeric::MakeVector(distance, DHO_angle));
433 if(check_derivative){
434 if(h_enum == Hpol_scOrbH){
435 const numeric::interpolation::spline::BicubicSpline &spline( DHO_Hpol_scOrbH_splines_[orb_type_name]);
436 distance_derivative = spline.dFdx(dist_angle_pair);
437 angle_derivative = spline.dFdy(dist_angle_pair);
440 distance_derivative = ((distance_derivative*scOrb_scOrb_weight_));
441 angle_derivative = ((angle_derivative*scOrb_scOrb_weight_));
445 if(h_enum == Haro_scOrbH){
446 const numeric::interpolation::spline::BicubicSpline &spline(DHO_Haro_scOrbH_splines_[orb_type_name]);
447 distance_derivative = spline.dFdx(dist_angle_pair);
448 angle_derivative = spline.dFdy(dist_angle_pair);
450 if(h_enum == Hpol_bbOrbH){
451 const numeric::interpolation::spline::BicubicSpline &spline(DHO_Hpol_bbOrbH_splines_[orb_type_name]);
452 distance_derivative = spline.dFdx(dist_angle_pair);
453 angle_derivative = spline.dFdy(dist_angle_pair);
456 if(h_enum == Hpol_scOrbH){
457 const numeric::interpolation::spline::BicubicSpline &spline(DHO_Hpol_scOrbH_splines_[orb_type_name]);
458 energy = spline.F(dist_angle_pair);
461 energy = ((energy*scOrb_scOrb_weight_));
464 if(h_enum == Haro_scOrbH){
465 const numeric::interpolation::spline::BicubicSpline &spline(DHO_Haro_scOrbH_splines_[orb_type_name]);
466 energy = spline.F(dist_angle_pair);
468 if(h_enum == Hpol_bbOrbH){
469 const numeric::interpolation::spline::BicubicSpline &spline(DHO_Hpol_bbOrbH_splines_[orb_type_name]);
470 energy = spline.F(dist_angle_pair);
485 bool check_derivative,
489 if ( distance > 4.0 ) { energy = distance_derivative = angle_derivative = 0.0;
return; }
493 numeric::MathVector<core::Real> dist_angle_pair(numeric::MakeVector(distance, AOH_angle));
494 if(check_derivative){
495 if(h_enum == Hpol_scOrbH){
496 const numeric::interpolation::spline::BicubicSpline &spline( AOH_Hpol_scOrbH_splines_[orb_type_name]);
497 distance_derivative = spline.dFdx(dist_angle_pair);
498 angle_derivative = spline.dFdy(dist_angle_pair);
501 distance_derivative = ((distance_derivative*scOrb_scOrb_weight_));
502 angle_derivative = ((angle_derivative*scOrb_scOrb_weight_));
506 if(h_enum == Haro_scOrbH){
508 const numeric::interpolation::spline::BicubicSpline &spline(ACO_AOH_orb_Hpol_splines_[orb_type_name]);
509 distance_derivative = spline.dFdx(dist_angle_pair);
510 angle_derivative = spline.dFdy(dist_angle_pair);
512 const numeric::interpolation::spline::BicubicSpline &spline(AOH_Haro_scOrbH_splines_[orb_type_name]);
513 distance_derivative = spline.dFdx(dist_angle_pair);
514 angle_derivative = spline.dFdy(dist_angle_pair);
518 if(h_enum == Hpol_bbOrbH){
519 const numeric::interpolation::spline::BicubicSpline &spline(AOH_Hpol_bbOrbH_splines_[orb_type_name]);
520 distance_derivative = spline.dFdx(dist_angle_pair);
521 angle_derivative = spline.dFdy(dist_angle_pair);
524 if(h_enum == Hpol_scOrbH){
525 const numeric::interpolation::spline::BicubicSpline &spline(AOH_Hpol_scOrbH_splines_[orb_type_name]);
526 energy = spline.F(dist_angle_pair);
529 energy = ((energy*scOrb_scOrb_weight_));
532 if(h_enum == Haro_scOrbH){
534 const numeric::interpolation::spline::BicubicSpline &spline(ACO_AOH_orb_Hpol_splines_[orb_type_name]);
535 energy = spline.F(dist_angle_pair);
537 const numeric::interpolation::spline::BicubicSpline &spline(AOH_Haro_scOrbH_splines_[orb_type_name]);
538 energy = spline.F(dist_angle_pair);
541 if(h_enum == Hpol_bbOrbH){
542 const numeric::interpolation::spline::BicubicSpline &spline(AOH_Hpol_bbOrbH_splines_[orb_type_name]);
543 energy = spline.F(dist_angle_pair);
556 bool check_derivative
560 numeric::MathVector<core::Real> dist_angle_pair(numeric::MakeVector(distance, AOO_angle));
561 if(check_derivative){
566 distance_derivative = spline.dFdx(dist_angle_pair);
567 angle_derivative = spline.dFdy(dist_angle_pair);
571 distance_derivative = spline.dFdx(dist_angle_pair);
572 angle_derivative = spline.dFdy(dist_angle_pair);
576 distance_derivative = spline.dFdx(dist_angle_pair);
577 angle_derivative = spline.dFdy(dist_angle_pair);
583 distance_derivative = spline.dFdx(dist_angle_pair);
584 angle_derivative = spline.dFdy(dist_angle_pair);
588 distance_derivative = spline.dFdx(dist_angle_pair);
589 angle_derivative = spline.dFdy(dist_angle_pair);
597 energy = spline.F(dist_angle_pair);
601 energy = spline.F(dist_angle_pair);
605 energy = spline.F(dist_angle_pair);
611 energy = spline.F(dist_angle_pair);
615 energy = spline.F(dist_angle_pair);
627 bool check_derivative
631 numeric::MathVector<core::Real> dist_angle_pair(numeric::MakeVector(distance, DOO_angle));
633 if(check_derivative){
638 distance_derivative = spline.dFdx(dist_angle_pair);
639 angle_derivative = spline.dFdy(dist_angle_pair);
643 distance_derivative = spline.dFdx(dist_angle_pair);
644 angle_derivative = spline.dFdy(dist_angle_pair);
648 distance_derivative = spline.dFdx(dist_angle_pair);
649 angle_derivative = spline.dFdy(dist_angle_pair);
655 distance_derivative = spline.dFdx(dist_angle_pair);
656 angle_derivative = spline.dFdy(dist_angle_pair);
660 distance_derivative = spline.dFdx(dist_angle_pair);
661 angle_derivative = spline.dFdy(dist_angle_pair);
669 energy = spline.F(dist_angle_pair);
673 energy = spline.F(dist_angle_pair);
677 energy = spline.F(dist_angle_pair);
683 energy = spline.F(dist_angle_pair);
687 energy = spline.F(dist_angle_pair);