FittingSolutionRecords
  convert_transformations_to_multifit_format(
        const algebra::Transformation3Ds &trans) {
  FittingSolutionRecords ret;
  for (unsigned int i=0;i<trans.size();i++) {
    FittingSolutionRecord rec;
    rec.set_fit_transformation(trans[i]);
    ret.push_back(rec);
  }
  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;
}
示例#3
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;
}
FittingSolutionRecords read_fitting_solutions(const char *fitting_fn) {
  std::fstream in;
  FittingSolutionRecords sols;
  in.open(fitting_fn, std::fstream::in);
  if (! in.good()) {
    IMP_WARN("Problem opening file " << fitting_fn <<
             " for reading; returning 0 solutions" << std::endl);
    in.close();
    return sols;
  }
  std::string line;
  getline(in, line); //skip header line
  while (!in.eof()) {
    if (!getline(in, line)) break;
    sols.push_back(parse_fitting_line(line));
  }
  in.close();
  return sols;
}
示例#6
0
IMPMULTIFIT_BEGIN_NAMESPACE

FittingSolutionRecords get_close_to_point(
    const FittingSolutionRecords &fit_sols, atom::Hierarchy mh,
    IMP::Particle *ap, Float dist) {
  FittingSolutionRecords pruned_fit_sols;
  Float dist2 = dist * dist;
  IMP::algebra::Vector3D ap_centroid = IMP::core::XYZ(ap).get_coordinates();
  IMP::algebra::Vector3D mh_centroid =
      IMP::core::get_centroid(IMP::core::XYZs(IMP::core::get_leaves(mh)));
  for (FittingSolutionRecords::const_iterator it = fit_sols.begin();
       it != fit_sols.end(); it++) {
    if (IMP::algebra::get_squared_distance(
            it->get_fit_transformation().get_transformed(mh_centroid),
            ap_centroid) < dist2) {
      pruned_fit_sols.push_back(*it);
    }
  }
  return pruned_fit_sols;
}
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();
}