示例#1
0
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();
}