9 #ifndef IMPMULTIFIT_PROTEOMICS_READER_H 
   10 #define IMPMULTIFIT_PROTEOMICS_READER_H 
   17 #include <IMP/multifit/multifit_config.h> 
   18 #include <cereal/access.hpp> 
   20 IMPMULTIFIT_BEGIN_NAMESPACE
 
   21 class ProteinRecordData {
 
   28     surface_filename_ = 
"";
 
   31   ProteinRecordData() { reset_all(); }
 
   32   ProteinRecordData(
const std::string &name) {
 
   36   ProteinRecordData(
const std::string &name, 
const std::string fn) {
 
   41   ProteinRecordData(
const std::string &name, 
int start_res, 
int end_res,
 
   42                     const std::string fn) {
 
   45     start_res_ = start_res;
 
   49   ProteinRecordData(
const std::string &name, 
int start_res, 
int end_res,
 
   50                     const std::string &fn, 
const std::string &surface_fn,
 
   51                     const std::string &ref_fn) {
 
   54     start_res_ = start_res;
 
   57     surface_filename_ = surface_fn;
 
   58     ref_filename_ = ref_fn;
 
   64   int start_res_, end_res_;
 
   65   std::string filename_;
 
   66   std::string surface_filename_;
 
   67   std::string ref_filename_;
 
   70   friend class cereal::access;
 
   72   template<
class Archive> 
void serialize(Archive &ar) {
 
   73     ar(name_, start_res_, end_res_, filename_, surface_filename_,
 
   88                   const std::string &mol_fn, 
const std::string &surface_fn,
 
   89                   const std::string &ref_fn) {
 
   90     prot_data_.push_back(ProteinRecordData(name, start_res, end_res, mol_fn,
 
   92     prot_map_[name] = prot_data_.size() - 1;
 
   93     return prot_map_[name];
 
   99                        "protein with name" << rec.name_
 
  100                                            << 
" was added already");
 
  101     prot_data_.push_back(rec);
 
  102     prot_map_[rec.name_] = prot_data_.size() - 1;
 
  103     return prot_map_[rec.name_];
 
  106   int find(
const std::string &name)
 const {
 
  107     if (prot_map_.find(name) == prot_map_.end()) 
return -1;
 
  108     return prot_map_.find(name)->second;
 
  110   void add_interaction(
const Ints &ii, 
bool used_for_filter, 
float linker_len) {
 
  111     interactions_.push_back(ii);
 
  112     interaction_in_filter_.push_back(used_for_filter);
 
  113     interaction_linker_len_.push_back(linker_len);
 
  115   void add_cross_link_interaction(
Int prot1, 
Int res1, 
Int prot2, 
Int res2,
 
  116                                   bool used_in_filter, 
Float linker_len) {
 
  118         std::make_pair(IntPair(prot1, res1), IntPair(prot2, res2)));
 
  119     xlink_in_filter_.push_back(used_in_filter);
 
  120     xlink_len_.push_back(linker_len);
 
  122   void add_ev_pair(
Int prot1, 
Int prot2) {
 
  123     ev_.push_back(std::make_pair(prot1, prot2));
 
  125   int get_number_of_proteins()
 const { 
return prot_data_.size(); }
 
  126   int get_number_of_interactions()
 const { 
return interactions_.size(); }
 
  127   Ints get_interaction(
int interaction_ind)
 const {
 
  129                     "index out of range\n");
 
  130     return interactions_[interaction_ind];
 
  132   bool get_interaction_part_of_filter(
int interaction_ind)
 const {
 
  134                     "index out of range\n");
 
  135     return interaction_in_filter_[interaction_ind];
 
  137   int get_interaction_linker_length(
int interaction_ind)
 const {
 
  139                     "index out of range\n");
 
  140     return interaction_linker_len_[interaction_ind];
 
  142   int get_number_of_cross_links()
 const { 
return xlinks_.size(); }
 
  143   std::pair<IntPair, IntPair> get_cross_link(
int xlink_ind)
 const {
 
  144     IMP_USAGE_CHECK(xlink_ind < (
int)xlinks_.size(), 
"index out of range\n");
 
  145     return xlinks_[xlink_ind];
 
  147   bool get_cross_link_part_of_filter(
int xlink_ind)
 const {
 
  148     IMP_USAGE_CHECK(xlink_ind < (
int)xlinks_.size(), 
"index out of range\n");
 
  149     return xlink_in_filter_[xlink_ind];
 
  151   float get_cross_link_length(
int xlink_ind)
 const {
 
  152     IMP_USAGE_CHECK(xlink_ind < (
int)xlinks_.size(), 
"index out of range\n");
 
  153     return xlink_len_[xlink_ind];
 
  157   int get_number_of_ev_pairs()
 const { 
return ev_.size(); }
 
  158   IntPair get_ev_pair(
int ev_ind)
 const {
 
  163   std::string get_protein_name(
int protein_ind)
 const {
 
  165                     "index out of range\n");
 
  166     return prot_data_[protein_ind].name_;
 
  168   int get_end_res(
int protein_ind)
 const {
 
  170                     "index out of range\n");
 
  171     return prot_data_[protein_ind].end_res_;
 
  173   int get_start_res(
int protein_ind)
 const {
 
  175                     "index out of range\n");
 
  176     return prot_data_[protein_ind].start_res_;
 
  178   std::string get_protein_filename(
int protein_ind)
 const {
 
  180                     "index out of range\n");
 
  181     return prot_data_[protein_ind].filename_;
 
  183   std::string get_reference_filename(
int protein_ind)
 const {
 
  185                     "index out of range\n");
 
  186     return prot_data_[protein_ind].ref_filename_;
 
  188   std::string get_surface_filename(
int protein_ind)
 const {
 
  190                     "index out of range\n");
 
  191     return prot_data_[protein_ind].surface_filename_;
 
  193   ProteinRecordData get_protein_data(
int protein_ind)
 const {
 
  195                     "index out of range\n");
 
  196     return prot_data_[protein_ind];
 
  216   int get_num_allowed_violated_interactions()
 const {
 
  217     return num_allowed_violated_interactions_;
 
  219   void set_num_allowed_violated_interactions(
int n) {
 
  220     num_allowed_violated_interactions_ = n;
 
  222   int get_num_allowed_violated_cross_links()
 const {
 
  223     return num_allowed_violated_xlinks_;
 
  225   void set_num_allowed_violated_cross_links(
int n) {
 
  226     num_allowed_violated_xlinks_ = n;
 
  228   int get_num_allowed_violated_ev()
 const { 
return num_allowed_violated_ev_; }
 
  229   void set_num_allowed_violated_ev(
int n) { num_allowed_violated_ev_ = n; }
 
  232   std::vector<ProteinRecordData> prot_data_;
 
  233   std::map<std::string, int> prot_map_;
 
  235   std::vector<bool> interaction_in_filter_;  
 
  236   Floats interaction_linker_len_;  
 
  237   int num_allowed_violated_interactions_;
 
  240   std::vector<std::pair<IntPair, IntPair> > xlinks_;
 
  241   std::vector<bool> xlink_in_filter_;
 
  243   int num_allowed_violated_xlinks_;
 
  246   int num_allowed_violated_ev_;
 
  254     const char *proteomics_fn);
 
  256 ProteomicsData *get_partial_proteomics_data(
const ProteomicsData *pd,
 
  258 IMPMULTIFIT_END_NAMESPACE
 
Decorator for helping deal with a hierarchy. 
 
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed. 
 
Storage of proteomics data. 
 
IMP::Vector< String > Strings
Standard way to pass a bunch of String values. 
 
IMP::Vector< Float > Floats
Standard way to pass a bunch of Float values. 
 
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object. 
 
Storage of a model, its restraints, constraints and particles. 
 
Handling of file input/output. 
 
int add_protein(std::string name, int start_res, int end_res, const std::string &mol_fn, const std::string &surface_fn, const std::string &ref_fn)
 
A more IMP-like version of the std::vector. 
 
#define IMP_INTERNAL_CHECK(expr, message)
An assertion to check for internal errors in IMP. An IMP::ErrorException will be thrown. 
 
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values. 
 
Common base class for heavy weight IMP objects. 
 
ProteomicsData * read_proteomics_data(const char *proteomics_fn)
Proteomics reader. 
 
IMP::Vector< Ints > IntsList
Standard way to pass a bunch of Ints values. 
 
IMP::Vector< IntPair > IntPairs
 
Object(std::string name)
Construct an object with the given name. 
 
double Float
Basic floating-point value (could be float, double...) 
 
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method. 
 
int Int
Basic integer value. 
 
IMP::Vector< Int > Ints
Standard way to pass a bunch of Int values. 
 
int add_protein(const ProteinRecordData &rec)
 
Sample best solutions using Domino.