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.