21 #include <basic/Tracer.hh>
23 #include <basic/options/option.hh>
24 #include <basic/options/keys/OptionKeys.hh>
25 #include <basic/options/keys/qsar.OptionKeys.gen.hh>
28 #include <utility/io/izstream.hh>
29 #include <utility/io/ozstream.hh>
30 #include <utility/vector0.hh>
31 #include <utility/vector1.hh>
32 #include <utility/tag/Tag.hh>
33 #include <utility/exit.hh>
34 #include <utility/tools/make_vector.hh>
35 #include <utility/file/file_sys_util.hh>
36 #include <utility/json_spirit/json_spirit_writer.h>
37 #include <utility/json_spirit/json_spirit_reader.h>
45 #include <boost/bind.hpp>
49 namespace scoring_grid {
51 static basic::Tracer
GridManagerTracer(
"protocols.qsar.scoring_grid.GridManager");
146 return grid_map_.find(grid_type)->second;
153 std::map<std::string,GridBaseOP>::const_iterator it;
156 grid_names.push_back(it->first);
167 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
168 for(;map_iterator !=
grid_map_.end();++map_iterator)
171 GridBaseOP current_grid(*map_iterator->second);
176 component_score += current_score;
178 total_score += component_score;
179 std::pair<std::string, core::Real> new_score(current_grid->get_type(),component_score);
200 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
201 for(;map_iterator !=
grid_map_.end();++map_iterator)
204 GridBaseOP current_grid(*map_iterator->second);
206 for(
core::Size residue_count = 1; residue_count <= residue_vector.size(); ++residue_count )
210 component_score += current_score;
212 total_score += component_score*weight;
213 std::pair<std::string, core::Real> new_score(current_grid->get_type(),component_score);
220 for(
core::Size i = 1; i < residue_vector.size();++i)
222 n_atoms += residue_vector[i]->natoms();
224 return total_score/
static_cast<core::Real>(n_atoms);
234 std::map<std::string,core::Real> score_map;
235 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
236 for(;map_iterator !=
grid_map_.end();++map_iterator)
238 GridBaseOP current_grid(*map_iterator->second);
242 score_map.insert(std::make_pair(grid_type,atom_score*weight));
249 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
250 for(;map_iterator !=
grid_map_.end(); ++map_iterator)
252 GridBaseOP current_grid(*map_iterator->second);
254 current_grid->set_chain(
chain_);
255 current_grid->refresh(pose,center,ligand_chain_ids_to_exclude);
262 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
263 for(;map_iterator !=
grid_map_.end();++map_iterator)
265 GridBaseOP current_grid(*map_iterator->second);
267 current_grid->set_chain(
chain_);
268 current_grid->refresh(pose,center,ligand_chain_id_to_exclude);
277 std::map<std::string,GridMap>::const_iterator grid_cache_entry(
grid_map_cache_.find(chain_hash));
279 bool grid_directory_active = basic::options::option[basic::options::OptionKeys::qsar::grid_dir].user();
281 if(!grid_directory_active)
283 GridManagerTracer <<
"WARNING: option -qsar:grid_dir is not set. Use this flag to specify a directory to store scoring grids. This will save you a huge amount of time" <<std::endl;
288 GridManagerTracer <<
"Found a conformation matching hash: " << chain_hash <<
" Loading from grid cache" <<std::endl;
294 if(grid_directory_active)
297 std::string directory_path(basic::options::option[basic::options::OptionKeys::qsar::grid_dir]());
298 utility::io::izstream grid_file(directory_path+
"/"+chain_hash+
".json.gz");
301 utility::json_spirit::mValue gridmap_data;
302 utility::json_spirit::read(grid_file,gridmap_data);
305 GridManagerTracer <<
"successfully read grids from the disk for conformation matching hash" << chain_hash <<std::endl;
312 GridManagerTracer <<
"No conformation matching hash: " << chain_hash <<
" Updating grid and adding it to the cache" <<std::endl;
314 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
316 for(;map_iterator !=
grid_map_.end();++map_iterator)
319 GridBaseOP current_grid(*map_iterator->second);
322 current_grid->set_chain(
chain_);
323 current_grid->refresh(pose,center);
327 if(basic::options::option[basic::options::OptionKeys::qsar::max_grid_cache_size].user() &&
330 GridManagerTracer <<
"Grid cache exceeds max_cache_size, clearing old scoring grids to save memory." <<std::endl;
335 if(grid_directory_active)
338 std::string directory_path(basic::options::option[basic::options::OptionKeys::qsar::grid_dir]());
339 std::string temp_path(directory_path+
"/"+chain_hash+
".inprogress");
342 utility::io::ozstream progress_file(temp_path);
343 progress_file <<
"temp" <<std::endl;
344 progress_file.close();
346 utility::io::ozstream grid_file(directory_path+
"/"+chain_hash+
".json.gz");
348 grid_file << utility::json_spirit::write(
serialize()) << std::endl;
350 utility::file::file_delete(temp_path);
352 GridManagerTracer <<
"wrote grid matching hash: " << chain_hash <<
" to disk" <<std::endl;
364 utility_exit_with_message(
"hmm, no grids in the grid manager. Are they defined in the XML script?");
367 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
368 for(;map_iterator !=
grid_map_.end();++map_iterator)
370 GridBaseOP current_grid(*map_iterator->second);
390 std::map<std::string,core::Real>::iterator map_iterator(
score_map_.begin());
392 for(;map_iterator !=
score_map_.end(); ++map_iterator)
395 int score(static_cast<int>(map_iterator->second));
400 job->add_string_real_pair(
"grid_"+type_name,score);
402 job->add_string_real_pair(
"grid_total",total_score);
407 std::map<std::string, GridBaseOP>::iterator map_iterator(
grid_map_.begin());
408 for(;map_iterator !=
grid_map_.end(); ++map_iterator)
410 GridBaseOP current_grid(map_iterator->second);
411 current_grid->dump_BRIX(prefix);
417 using utility::json_spirit::Value;
418 std::vector<Value> gridmap_data;
421 Value grid_name(it->first);
422 Value grid(it->second->serialize());
423 std::vector<Value> grid_pair_values;
424 grid_pair_values.push_back(grid_name);
425 grid_pair_values.push_back(grid);
426 Value grid_pair(grid_pair_values);
427 gridmap_data.push_back(grid_pair);
429 return Value(gridmap_data);
435 for(utility::json_spirit::mArray::iterator it = data.begin(); it != data.end();++it)
437 utility::json_spirit::mArray grid_data(it->get_array());
446 std::map<std::string,GridBaseOP>::iterator map_iterator(
grid_map_.begin());
447 for(;map_iterator !=
grid_map_.end();++map_iterator)
449 GridBaseOP current_grid(*map_iterator->second);
450 if(!current_grid->is_in_grid(residue))