15 #include <core/types.hh>
16 #include <core/chemical/ChemicalManager.hh>
17 #include <core/import_pose/import_pose.hh>
18 #include <core/io/pdb/pose_io.hh>
19 #include <core/pose/Pose.hh>
20 #include <core/pose/util.hh>
21 #include <protocols/magnesium/util.hh>
22 #include <protocols/magnesium/minimize_util.hh>
23 #include <protocols/magnesium/MgOrbitalFrameFinder.hh>
24 #include <protocols/magnesium/MgWaterHydrogenPacker.hh>
25 #include <protocols/magnesium/MgHydrater.hh>
26 #include <protocols/magnesium/MgMonteCarlo.hh>
27 #include <protocols/magnesium/MgScanner.hh>
28 #include <protocols/viewer/viewers.hh>
29 #include <core/scoring/ScoreFunction.hh>
30 #include <core/scoring/ScoreFunctionFactory.hh>
40 #include <basic/options/keys/out.OptionKeys.gen.hh>
41 #include <basic/options/keys/in.OptionKeys.gen.hh>
42 #include <basic/options/keys/score.OptionKeys.gen.hh>
43 #include <basic/options/keys/magnesium.OptionKeys.gen.hh>
47 using namespace basic::options::OptionKeys;
50 using io::pdb::dump_pdb;
74 using namespace basic::options::OptionKeys;
75 using namespace core::chemical;
77 using namespace core::scoring;
78 using namespace protocols::magnesium;
82 ResidueTypeSetCOP rsd_set( core::chemical::ChemicalManager::get_instance()->residue_type_set( core::chemical::FA_STANDARD ) );
86 for (
Size q = 1; q <= input_pdb_files.size(); q++ ) {
87 std::string
const pdb_file = input_pdb_files[ q ];
88 import_pose::pose_from_pdb(
pose, *rsd_set, file_path +
'/' + pdb_file );
90 std::cout <<
"Doing input file ==> " << pdb_file << std::endl;
92 if ( q == 1 ) protocols::viewer::add_conformation_viewer (
pose.conformation(),
"current", 500, 500, false );
97 if ( input_pdb_files.size() > 0 && pdb_mg_res.size() > 0 ) {
98 runtime_assert( input_pdb_files.size() == input_pdb_mg_res.size() );
103 if (
option[ magnesium::fixup ]() ) {
104 fixup_magnesiums(
pose );
105 TR <<
TR.
Blue <<
"Just did basic fixup -- mg frame orientation & water-bound mg repacking." <<
TR.
Reset << std::endl;
106 TR <<
TR.
Blue <<
"If you want to build mg2+-bound waters, run this app with -hydrate flag." <<
TR.
Reset << std::endl;
108 }
else if (
option[ magnesium::pack_water_hydrogens ]() ) {
109 MgOrbitalFrameFinder mg_orbital_frame_finder;
110 mg_orbital_frame_finder.apply(
pose );
111 remove_waters_except_mg_bound(
pose, get_mg_water_pairs(
pose, pdb_to_pose(
pose, pdb_mg_res ) ) );
112 MgWaterHydrogenPacker mg_water_hydrogen_packer( pdb_to_pose(
pose, pdb_mg_res ) );
113 mg_water_hydrogen_packer.set_use_fast_heuristic( !
option[ magnesium::scored_hydrogen_sampling ]() );
114 mg_water_hydrogen_packer.apply(
pose );
115 tag =
"pack_water_hydrogens";
116 }
else if (
option[ magnesium::hydrate ]() ) {
117 remove_mg_bound_waters(
pose, pdb_to_pose(
pose, pdb_mg_res ),
option[ magnesium::leave_other_waters ] );
118 MgHydrater mg_hydrater( pdb_to_pose(
pose, pdb_mg_res ) );
119 mg_hydrater.set_use_fast_frame_heuristic( !
option[ magnesium::all_hydration_frames ]() );
120 mg_hydrater.set_verbose(
true );
121 mg_hydrater.apply(
pose );
123 if (
option[ magnesium::minimize ]() ) {
124 update_mg_hoh_fold_tree(
pose );
125 minimize_magnesium_and_hydration_shell(
pose, pdb_to_pose(
pose, pdb_mg_res ), get_mg_scorefxn(),
option[ magnesium::minimize_mg_coord_constraint_distance ]() );
130 }
else if (
option[ magnesium::monte_carlo ]() ) {
131 MgMonteCarlo mg_monte_carlo;
133 mg_monte_carlo.set_temperature(
option[ magnesium::montecarlo::temperature ]() );
134 mg_monte_carlo.set_add_delete_frequency(
option[ magnesium::montecarlo::add_delete_frequency ]() );
136 mg_monte_carlo.apply(
pose );
139 strip_out_magnesiums(
pose );
140 add_single_magnesium(
pose );
143 MgScanner mg_scanner;
144 mg_scanner.set_score_cut(
option[ magnesium::score_cut ] );
146 mg_scanner.set_scorefxn( scorefxn );
151 mg_scanner.set_input_scan_res( input_scan_res );
153 mg_scanner.set_hydrate( !
option[ magnesium::lores_scan ]() );
154 mg_scanner.set_minimize_during_scoring(
option[ magnesium::minimize_during_scoring ]() );
155 mg_scanner.set_minimize(
option[ magnesium::minimize ]() );
156 mg_scanner.set_tether_to_closest_res(
option[ magnesium::tether_to_closest_res ]() );
157 mg_scanner.set_xyz_step(
option[ magnesium::xyz_step ]() );
158 mg_scanner.set_minimize_mg_coord_constraint_distance(
option[ magnesium::minimize_mg_coord_constraint_distance ]() );
159 mg_scanner.set_integration_test(
option[ magnesium::integration_test ]() );
160 if (
option[ out::file::o ].
user() ) mg_scanner.set_output_pdb(
option[ out::file::o]() );
161 mg_scanner.set_score_cut_PDB(
option[ magnesium::score_cut_PDB ] );
163 mg_scanner.apply(
pose );
170 std::cout <<
"Outputting: " << outfile << std::endl;
172 pose.dump_pdb( outfile );
182 clock_t
const my_main_time_start( clock() );
184 protocols::viewer::clear_conformation_viewers();
185 std::cout <<
"Total time to run " <<
static_cast<Real>( clock() - my_main_time_start ) / CLOCKS_PER_SEC <<
" seconds." << std::endl;
191 main(
int argc,
char * argv [] )
198 option.add_relevant( magnesium::mg_res );
199 option.add_relevant( magnesium::minimize_during_scoring );
200 option.add_relevant( magnesium::ligand_res );
201 option.add_relevant( magnesium::pose_ligand_res );
202 option.add_relevant( magnesium::lores_scan );
203 option.add_relevant( magnesium::xyz_step );
204 option.add_relevant( magnesium::score_cut );
205 option.add_relevant( magnesium::score_cut_PDB );
206 option.add_relevant( magnesium::integration_test );
207 option.add_relevant( magnesium::tether_to_closest_res );
208 option.add_relevant( magnesium::fixup );
209 option.add_relevant( magnesium::pack_water_hydrogens );
210 option.add_relevant( magnesium::hydrate );
211 option.add_relevant( magnesium::monte_carlo );
212 option.add_relevant( magnesium::scored_hydrogen_sampling );
213 option.add_relevant( magnesium::all_hydration_frames );
214 option.add_relevant( magnesium::leave_other_waters );
215 option.add_relevant( magnesium::minimize );
216 option.add_relevant( magnesium::minimize_mg_coord_constraint_distance );
217 option.add_relevant( magnesium::montecarlo::temperature );
220 option.add_relevant( magnesium::montecarlo::add_delete_frequency );
232 protocols::viewer::viewer_main(
my_main );
235 std::cout <<
"caught exception " << e.
msg() << std::endl;
#define utility_exit_with_message(m)
Exit with file + line + message.
static THREAD_LOCAL basic::Tracer TR("mg_modeler")
virtual std::string const msg() const
void init(int argc, char *argv[])
Command line init() version.
BooleanOptionKey const user("options:user")
#define runtime_assert(_Expression)
Assert that the condition holds. Evaluated for both debug and release builds.
static utility::CSI_Sequence Reset
std::vector with 1-based indexing
std::string replace_in(std::string const &name_in, std::string const &find_string, std::string const &replace_string)
Generate new string from 'source' by replacing all occurrences of 'from' to 'to' string.
rule< Scanner, options_closure::context_t > options
static utility::CSI_Sequence Blue
ocstream cout(std::cout)
Wrapper around std::cout.
BooleanOptionKey const exit("options:exit")
vector1: std::vector with 1-based indexing
Class for handling user debug/warnings/errors. Use instance of this class instead of 'std::cout' for ...
int main(int argc, char *argv[])
Program options global and initialization function.
rule< Scanner, tag_closure::context_t > tag
int const silent
Named verbosity levels.
rule< Scanner, option_closure::context_t > option