void ProbabilisticAnchorGraph::set_particle_probabilities_on_anchors( Particle *p, FittingSolutionRecords sols) { IMP_USAGE_CHECK(sols.size() > 0, "no solutions provided\n"); IMP_NEW(algebra::NearestNeighborD<3>, nn, (positions_)); Ints anchor_counters; anchor_counters.insert(anchor_counters.end(), positions_.size(), 0); for (unsigned int i = 0; i < sols.size(); i++) { algebra::Vector3D loc = sols[i].get_fit_transformation().get_transformed( core::XYZ(p).get_coordinates()); anchor_counters[nn->get_nearest_neighbor(loc)]++; } Floats probs; for (unsigned int i = 0; i < anchor_counters.size(); i++) { probs.push_back(1. * anchor_counters[i] / sols.size()); } particle_to_anchor_probabilities_[p] = probs; }
algebra::Transformation3Ds convert_multifit_format_to_transformations( const FittingSolutionRecords &recs) { algebra::Transformation3Ds ret; for (unsigned int i=0;i<recs.size();i++) { ret.push_back(recs[i].get_fit_transformation()); } return ret; }
em::FittingSolutions convert_multifit_to_em_format( const FittingSolutionRecords &multifit_fits) { em::FittingSolutions output; for(FittingSolutionRecords::const_iterator it = multifit_fits.begin(); it != multifit_fits.end();it++) { for(unsigned int i=0;i<multifit_fits.size();i++) output.add_solution(it->get_fit_transformation(), it->get_fitting_score()); } return output; }
void write_fitting_solutions(const char *fitting_fn, const FittingSolutionRecords &fit_sols, int num_sols) { if (num_sols==-1) { num_sols = fit_sols.size(); } std::fstream out; out.open(fitting_fn, std::fstream::out); IMP_USAGE_CHECK(out.good(), "Problem opening file " << fitting_fn << " for writing"<<std::endl); //write header out<<FittingSolutionRecord::get_record_header(); for(int i=0;i<num_sols;i++) { fit_sols[i].show(out); out<<std::endl; } out.close(); }