50 #include <utility/vector1.hh>
51 #include <utility/io/izstream.hh>
53 #include <basic/database/sql_utils.hh>
54 #include <basic/database/open.hh>
55 #include <basic/Tracer.hh>
57 #include <basic/options/option.hh>
58 #include <utility/file/file_sys_util.hh>
59 #include <utility/sql_database/DatabaseSessionManager.hh>
60 #include <utility/sql_database/types.hh>
65 #include <basic/options/keys/in.OptionKeys.gen.hh>
66 #include <basic/options/keys/corrections.OptionKeys.gen.hh>
67 #include <basic/options/keys/rna.OptionKeys.gen.hh>
76 static basic::Tracer
tr(
"core.chemical.ChemicalManager");
102 std::string const directory( basic::database::full_name(
"chemical/atom_type_sets/"+tag+
"/" ) );
111 return iter->second();
119 ElementSets::const_iterator iter(
element_sets_.find( tag ) );
122 std::string const filename( basic::database::full_name(
"chemical/element_sets/"+tag+
"/element_properties.txt" ));
124 new_set->read_file( filename );
125 iter =
element_sets_.insert( std::make_pair( tag, new_set ) ).first;
127 return iter->second();
138 std::string const directory( basic::database::full_name(
"chemical/orbital_type_sets/"+tag+
"/" ) );
142 return iter->second();
153 std::string const filename( basic::database::full_name(
"chemical/mm_atom_type_sets/"+tag+
"/mm_atom_properties.txt" ));
155 new_set->read_file( filename );
158 return iter->second();
187 using namespace basic;
189 bool const use_corrected_rna_geo = basic::options::option[ basic::options::OptionKeys::rna::corrected_geo ];
190 if (use_corrected_rna_geo && tag ==
"rna") {
197 std::vector< std::string > extra_params_files;
198 std::vector< std::string > extra_patch_files;
199 std::vector<core::chemical::ResidueTypeOP> extra_residues;
204 utility::options::FileVectorOption & fvec
205 = basic::options::option[ basic::options::OptionKeys::in::file::extra_res_fa ];
206 for(
Size i = 1, e = fvec.size(); i <= e; ++i) {
208 extra_params_files.push_back(fname.name());
211 utility::options::PathVectorOption & pvec
212 = basic::options::option[basic::options::OptionKeys::in::file::extra_res_path];
214 for(
Size i=1, e= pvec.size(); i<=e; i++){
218 utility::file::list_dir(directory, files);
219 tr.Debug<< std::endl;
220 for(
size_t j=1; j<= files.size(); j++){
221 if (files[j].find(
"param")!=std::string::npos){
222 tr.Debug << files[j]<<
", ";
224 extra_params_files.push_back(path);
227 tr.Debug<< std::endl;
230 utility::options::PathVectorOption & pvec_batch
231 = basic::options::option[basic::options::OptionKeys::in::file::extra_res_batch_path];
232 for(
Size i=1, e= pvec_batch.size(); i<=e; i++){
236 utility::file::list_dir(directory, subdirs);
237 tr.Debug<< std::endl;
238 for(
size_t j=1; j<= subdirs.size();++j)
240 if(subdirs[j] ==
"." || subdirs[j] ==
"..")
245 utility::file::list_dir(directory+
"/"+subdirs[j],files);
246 for(
size_t k=1; k<= files.size(); k++){
247 if (files[k].find(
"param")!=std::string::npos){
248 tr.Debug << files[k]<<
", ";
249 std::string path= directory+
'/'+subdirs[j]+
'/'+files[k];
250 extra_params_files.push_back(path);
257 utility::options::FileVectorOption & mdlvec
258 = basic::options::option[basic::options::OptionKeys::in::file::extra_res_mol];
263 for(
Size i=1, e = mdlvec.size(); i <= e;++i)
267 parser.
parse_mol_file(atom_types, elements, mm_atom_types, orbital_types);
268 extra_residues.push_back(parser.GetResidueTypeOP());
271 if(basic::options::option[basic::options::OptionKeys::in::file::extra_res_database].user())
273 utility::sql_database::DatabaseMode::e database_mode(
274 utility::sql_database::database_mode_from_name(
275 basic::options::option[basic::options::OptionKeys::in::file::extra_res_database_mode]));
276 std::string database_name(basic::options::option[basic::options::OptionKeys::in::file::extra_res_database]);
277 std::string database_pq_schema(basic::options::option[basic::options::OptionKeys::in::file::extra_res_pq_schema]);
280 utility::sql_database::sessionOP db_session(
281 basic::database::get_db_session(database_mode, database_name, database_pq_schema));
285 if(basic::options::option[basic::options::OptionKeys::in::file::extra_res_database_resname_list].user())
287 utility::file::FileName residue_list = basic::options::option[basic::options::OptionKeys::in::file::extra_res_database_resname_list];
288 utility::io::izstream residue_name_file(residue_list);
290 while(residue_name_file >> residue_name)
303 extra_residues.push_back(new_residue);
309 for(
Size index =1; index <= residue_names_in_database.size();++index)
318 residue_names_in_database[index],
320 extra_residues.push_back(new_residue);
326 utility::options::FileVectorOption & pfvec
327 = basic::options::option[ basic::options::OptionKeys::in::file::extra_patch_fa ];
328 for(
Size i = 1, e = pfvec.size(); i <= e; ++i) {
329 extra_patch_files.push_back( pfvec[i].name());
333 utility::options::FileVectorOption & fvec
334 = basic::options::option[ basic::options::OptionKeys::in::file::extra_res_cen ];
335 for(
Size i = 1, e = fvec.size(); i <= e; ++i) {
337 extra_params_files.push_back(fname.name());
340 utility::options::FileVectorOption & pfvec
341 = basic::options::option[ basic::options::OptionKeys::in::file::extra_patch_cen ];
342 for(
Size i = 1, e = pfvec.size(); i <= e; ++i) {
343 extra_patch_files.push_back( pfvec[i].name());
349 utility::options::FileVectorOption & fvec
350 = basic::options::option[ basic::options::OptionKeys::in::file::extra_res ];
351 for(
Size i = 1, e = fvec.size(); i <= e; ++i) {
353 extra_params_files.push_back(fname.name());
357 tr.Debug <<
"CHEMICAL_MANAGER: read residue types: " << tag << std::endl;
359 std::string temp_str( basic::database::full_name(
"chemical/residue_type_sets/"+tag ) );
361 if (basic::options::option[basic::options::OptionKeys::corrections::chemical::icoor_05_2009]) {
362 temp_str +=
"_05.2009_icoor";
372 for(
core::Size index =0 ;index < extra_residues.size();++index)
375 new_set->add_residue_type(extra_residues[index]);
376 extra_residues[index]->residue_type_set(new_setCAP);
378 extra_residues[index]->residue_type_set(new_set_cap);
384 return iter->second();
407 std::string const filename( basic::database::full_name(
"chemical/atom_type_sets/"+tag+
"/ideal_bond_lengths.txt" ));
409 new_set->read_file( filename );
412 return iter->second();
441 ChemicalManager::copy_residue_type_set(
442 std::string const & old_name,
443 std::string const & new_name
446 residue_type_set( old_name ); // triggers initialization if necessary
447 if ( residue_type_sets_.find( new_name ) ) {
448 utility_exit_with_message( "new name is already being used!" );
450 residue_type_sets_.insert( std::make_pair( new_name, residue_type_sets_.find( old_name )->second->clone() ) );
457 ChemicalManager::copy_atom_type_set(
458 std::string const & old_name,
459 std::string const & new_name
462 atom_type_set( old_name ); // triggers initialization if necessary
463 if ( atom_type_sets_.find( new_name ) ) {
464 utility_exit_with_message( "new name is already being used!" );
466 atom_type_sets_.insert( std::make_pair( new_name, atom_type_sets_.find( old_name )->second->clone() ) );