9 #ifndef IMPMULTIFIT_PROTEOMICS_READER_H
10 #define IMPMULTIFIT_PROTEOMICS_READER_H
17 #include <IMP/multifit/multifit_config.h>
18 IMPMULTIFIT_BEGIN_NAMESPACE
19 class ProteinRecordData {
29 ProteinRecordData() {reset_all();
31 ProteinRecordData(
const std::string &name){
35 ProteinRecordData(
const std::string &name,
const std::string fn){
37 name_=name;filename_=fn;
39 ProteinRecordData(
const std::string &name,
40 int start_res,
int end_res,
const std::string fn){
47 ProteinRecordData(
const std::string &name,
48 int start_res,
int end_res,
const std::string &fn,
49 const std::string &surface_fn,
50 const std::string &ref_fn){
56 surface_filename_=surface_fn;
63 int start_res_,end_res_;
64 std::string filename_;
65 std::string surface_filename_;
66 std::string ref_filename_;
79 int end_res,
const std::string &mol_fn,
80 const std::string &surface_fn,
81 const std::string &ref_fn){
82 prot_data_.push_back(ProteinRecordData(name,start_res,end_res,mol_fn,
84 prot_map_[name]=prot_data_.size()-1;
85 return prot_map_[name];
91 "protein with name"<<rec.name_<<
" was added already");
92 prot_data_.push_back(rec);
93 prot_map_[rec.name_]=prot_data_.size()-1;
94 return prot_map_[rec.name_];
97 int find(
const std::string &name)
const {
98 if (prot_map_.find(name) == prot_map_.end())
return -1;
99 return prot_map_.find(name)->second;
101 void add_interaction(
const Ints &ii,
bool used_for_filter,
103 interactions_.push_back(ii);
104 interaction_in_filter_.push_back(used_for_filter);
105 interaction_linker_len_.push_back(linker_len);
107 void add_cross_link_interaction(
Int prot1,
Int res1,
Int prot2,
Int res2,
108 bool used_in_filter,
Float linker_len){
109 xlinks_.push_back(std::make_pair(IntPair(prot1,res1),IntPair(prot2,res2)));
110 xlink_in_filter_.push_back(used_in_filter);
111 xlink_len_.push_back(linker_len);
113 void add_ev_pair(
Int prot1,
Int prot2){
114 ev_.push_back(std::make_pair(prot1,prot2));
116 int get_number_of_proteins()
const {
return prot_data_.size();}
117 int get_number_of_interactions()
const {
return interactions_.size();}
118 Ints get_interaction(
int interaction_ind)
const {
120 "index out of range\n");
121 return interactions_[interaction_ind];}
122 bool get_interaction_part_of_filter(
int interaction_ind)
const {
124 "index out of range\n");
125 return interaction_in_filter_[interaction_ind];
127 int get_interaction_linker_length(
int interaction_ind)
const {
129 "index out of range\n");
130 return interaction_linker_len_[interaction_ind];
132 int get_number_of_cross_links()
const {
return xlinks_.size();}
133 std::pair<IntPair,IntPair> get_cross_link(
int xlink_ind)
const {
135 "index out of range\n");
136 return xlinks_[xlink_ind];
138 bool get_cross_link_part_of_filter(
int xlink_ind)
const {
140 "index out of range\n");
141 return xlink_in_filter_[xlink_ind];
143 float get_cross_link_length(
int xlink_ind)
const {
145 "index out of range\n");
146 return xlink_len_[xlink_ind];
150 int get_number_of_ev_pairs()
const {
return ev_.size();}
151 IntPair get_ev_pair(
int ev_ind)
const {
153 "index out of range\n");
158 std::string get_protein_name(
int protein_ind)
const {
160 "index out of range\n");
161 return prot_data_[protein_ind].name_;
163 int get_end_res(
int protein_ind)
const {
165 "index out of range\n");
166 return prot_data_[protein_ind].end_res_;
168 int get_start_res(
int protein_ind)
const {
170 "index out of range\n");
171 return prot_data_[protein_ind].start_res_;
173 std::string get_protein_filename(
int protein_ind)
const {
175 "index out of range\n");
176 return prot_data_[protein_ind].filename_;
178 std::string get_reference_filename(
int protein_ind)
const {
180 "index out of range\n");
181 return prot_data_[protein_ind].ref_filename_;
183 std::string get_surface_filename(
int protein_ind)
const {
185 "index out of range\n");
186 return prot_data_[protein_ind].surface_filename_;
188 ProteinRecordData get_protein_data(
int protein_ind)
const {
189 IMP_USAGE_CHECK(protein_ind<(
int)prot_data_.size(),
"index out of range\n");
190 return prot_data_[protein_ind];}
209 int get_num_allowed_violated_interactions()
const {
210 return num_allowed_violated_interactions_;}
211 void set_num_allowed_violated_interactions(
int n) {
212 num_allowed_violated_interactions_=n;}
213 int get_num_allowed_violated_cross_links()
const {
214 return num_allowed_violated_xlinks_;}
215 void set_num_allowed_violated_cross_links(
int n) {
216 num_allowed_violated_xlinks_=n;}
217 int get_num_allowed_violated_ev()
const {
218 return num_allowed_violated_ev_;}
219 void set_num_allowed_violated_ev(
int n) {
220 num_allowed_violated_ev_=n;}
223 std::vector<ProteinRecordData> prot_data_;
224 std::map<std::string,int> prot_map_;
226 std::vector<bool> interaction_in_filter_;
227 Floats interaction_linker_len_;
228 int num_allowed_violated_interactions_;
231 std::vector<std::pair<IntPair,IntPair> > xlinks_;
232 std::vector<bool> xlink_in_filter_;
234 int num_allowed_violated_xlinks_;
237 int num_allowed_violated_ev_;
245 const char *proteomics_fn);
247 ProteomicsData *get_partial_proteomics_data(
248 const ProteomicsData *pd,
250 IMPMULTIFIT_END_NAMESPACE
Decorator for helping deal with a hierarchy.
Storage of proteomics data.
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
IMP::base::Vector< String > Strings
Standard way to pass a bunch of String values.
#define IMP_SHOWABLE_INLINE(Name, how_to_show)
Declare the methods needed by an object that can be printed.
Import IMP/kernel/file.h in the namespace.
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)
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
#define IMP_INTERNAL_CHECK(expr, message)
An assertion to check for internal errors in IMP. An IMP::ErrorException will be thrown.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
ProteomicsData * read_proteomics_data(const char *proteomics_fn)
Proteomics reader.
Storage of a model, its restraints, constraints and particles.
Common base class for heavy weight IMP objects.
IMP::base::Vector< Ints > IntsList
Standard way to pass a bunch of Ints values.
IMP::base::Vector< Float > Floats
Standard way to pass a bunch of Float values.
IMP::base::Vector< IntPair > IntPairs
double Float
Basic floating-point value (could be float, double...)
int Int
Basic integer value.
int add_protein(const ProteinRecordData &rec)
A beyesian infererence-based sampler.
IMP::base::Vector< Int > Ints
Standard way to pass a bunch of Int values.