26 #include <basic/options/option.hh>
27 #include <basic/options/keys/in.OptionKeys.gen.hh>
28 #include <basic/options/keys/chemical.OptionKeys.gen.hh>
29 #include <utility/vector1.hh>
30 #include <utility/file/file_sys_util.hh>
31 #include <basic/Tracer.hh>
36 static basic::Tracer
TR(
"core.chemical.util");
40 using namespace basic::options;
41 using namespace basic::options::OptionKeys;
42 using namespace core::chemical;
44 std::string const type_set_name( option[ in::file::residue_type_set ]() );
61 if ( !( basic::options::option[ basic::options::OptionKeys::chemical::add_atom_type_set_parameters ].user() ) ) {
66 ( basic::options::option[ basic::options::OptionKeys::chemical::add_atom_type_set_parameters ]() );
67 if ( paramstring.size()%2 != 0 ) {
68 utility_exit_with_message(
"bad format for -add_atom_type_set_parameters; should be: -add_atom_type_set_parameters <tag1> <filename1> <tag2> <filename2> ...");
70 Size const nparams( paramstring.size()/2 );
71 for (
Size i=0; i< nparams; ++i ) {
73 TR.Trace <<
"add_atom_type_set_parameters_from_command_line: desired_tag= " << atom_type_set_tag <<
74 " cmdline-tag= " << tag <<
" filename= " << filename << std::endl;
75 if ( tag == atom_type_set_tag ) {
77 utility_exit_with_message(
"unable to locate/open file: "+filename );
79 TR.Trace <<
"add_atom_type_set_parameters_from_command_line: tag= " << tag <<
" filename= " << filename <<
96 if ( basic::options::option[ basic::options::OptionKeys::chemical::set_atom_properties ].user() ) {
98 ( basic::options::option[ basic::options::OptionKeys::chemical::set_atom_properties ]);
100 std::string const errmsg(
"-set_atom_properties format should be:: -set_atom_properties <set1>:<atom1>:<param1>:<setting1> <set2>:<atom2>:<param2>:<setting2> ...; for example: '-chemical:set_atom_properties fa_standard:OOC:LK_DGFREE:-5 fa_standard:ONH2:LJ_RADIUS:0.5' ");
102 for (
Size i=1; i<= mods.size(); ++i ) {
108 Size const pos1( mod.find(
":") );
109 if ( pos1 == std::string::npos ) utility_exit_with_message(errmsg);
110 std::string const atomset_tag( mod.substr(0,pos1) );
111 if ( atomset_tag != atom_type_set_tag )
continue;
113 Size const pos2( mod.substr(pos1+1).find(
":") );
114 if ( pos2 == std::string::npos ) utility_exit_with_message(errmsg);
115 std::string const atom_name( mod.substr(pos1+1,pos2) );
116 if ( !atom_type_set.
has_atom( atom_name ) ) utility_exit_with_message(errmsg+
". Nonexistent atomname: "+atom_name);
118 Size const pos3( mod.substr(pos1+1+pos2+1).find(
":") );
119 if ( pos3 == std::string::npos ) utility_exit_with_message(errmsg);
120 std::string const param( mod.substr(pos1+1+pos2+1,pos3) );
122 std::string const stringsetting( mod.substr(pos1+1+pos2+1+pos3+1) );
123 if ( !ObjexxFCL::is_float( stringsetting ) ) utility_exit_with_message(errmsg);
124 Real const setting( ObjexxFCL::float_of( stringsetting ) );
126 TR.Trace <<
"modify_atom_properties_from_command_line: setting " << atomset_tag <<
' ' << atom_name <<
' ' <<
127 param <<
' ' << setting << std::endl;
138 atom_type_set[ atom_index ].set_parameter( param, setting );