1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """Analysis specific code for the hybridisation of different data pipes."""
24
25
26 from lib.errors import RelaxError, RelaxNoSequenceError, RelaxPipeError, RelaxSequenceError
27 from pipe_control import pipes
28 from pipe_control.mol_res_spin import exists_mol_res_spin_data
29 from pipe_control.pipes import check_pipe
30 from pipe_control.sequence import compare_sequence
31
32
34 """Class containing function specific to hybrid models."""
35
36 - def _hybridise(self, hybrid=None, pipe_list=None):
75
76
77 - def data_names(self, set='all', scope=None, error_names=False, sim_names=False):
78 """Return a list of nothing.
79
80 @keyword set: The set of object names to return. This can be set to 'all' for all names, to 'generic' for generic object names, 'params' for analysis specific parameter names, or to 'min' for minimisation specific object names.
81 @type set: str
82 @keyword scope: The scope of the parameter to return. If not set, then all will be returned. If set to 'global' or 'spin', then only the parameters within that scope will be returned.
83 @type scope: str or None
84 @keyword error_names: A flag which if True will add the error object names as well.
85 @type error_names: bool
86 @keyword sim_names: A flag which if True will add the Monte Carlo simulation object names as well.
87 @type sim_names: bool
88 @return: The list of object names.
89 @rtype: list of str
90 """
91
92
93 return []
94
95
96 - def duplicate_data(self, pipe_from=None, pipe_to=None, model_info=None, global_stats=False, verbose=True):
97 """Duplicate the data specific to a single hybrid data pipe.
98
99 @keyword pipe_from: The data pipe to copy the data from.
100 @type pipe_from: str
101 @keyword pipe_to: The data pipe to copy the data to.
102 @type pipe_to: str
103 @keyword model_info: The model information from model_loop().
104 @type model_info: unknown
105 @keyword global_stats: The global statistics flag.
106 @type global_stats: bool
107 @keyword verbose: A flag which if True will cause info to be printed out.
108 @type verbose: bool
109 """
110
111
112 if not pipes.has_pipe(pipe_to):
113 pipes.create(pipe_to, pipe_type='hybrid', switch=False)
114
115
116 dp_from = pipes.get_pipe(pipe_from)
117 dp_to = pipes.get_pipe(pipe_to)
118
119
120 if not exists_mol_res_spin_data(pipe_to):
121 raise RelaxSequenceError(pipe_to)
122
123
124 dp_to.hybrid_pipes = dp_from.hybrid_pipes
125
126
128 """Return a description of the model.
129
130 @keyword model_info: The model information from model_loop().
131 @type model_info: unknown
132 @return: The model description.
133 @rtype: str
134 """
135
136 return "hybrid model"
137
138
140 """Dummy generator method - this should be a global model!"""
141
142 yield 0
143
144
146 """Method stating that this is a global model."""
147
148 return 'global'
149
150
152 """Return the k, n, and chi2 model statistics of the hybrid.
153
154 k - number of parameters.
155 n - number of data points.
156 chi2 - the chi-squared value.
157
158
159 @keyword model_index: The model index. This is zero for the global models or equal to the
160 global spin index (which covers the molecule, residue, and spin
161 indices). This originates from the model_loop().
162 @type model_index: int
163 @keyword spin_id: The spin identification string. Either this or the instance keyword
164 argument must be supplied.
165 @type spin_id: None or str
166 @keyword global_stats: A parameter which determines if global or local statistics are
167 returned. If None, then the appropriateness of global or local
168 statistics is automatically determined.
169 @type global_stats: None or bool
170 @return: The optimisation statistics, in tuple format, of the number of
171 parameters (k), the number of data points (n), and the chi-squared
172 value (chi2).
173 @rtype: tuple of int, int, float
174 """
175
176
177 if model_info == None and spin_id == None:
178 raise RelaxError("Either the model_info or spin_id argument must be supplied.")
179 elif model_info != None and spin_id != None:
180 raise RelaxError("The model_info arg " + repr(model_info) + " and spin_id arg " + repr(spin_id) + " clash. Only one should be supplied.")
181
182
183 k_total = 0
184 n_total = 0
185 chi2_total = 0.0
186
187
188 for pipe in cdp.hybrid_pipes:
189
190 pipes.switch(pipe)
191
192
193 model_statistics = setup.get_specific_fn('model_stats', pipes.get_type(pipe))
194
195
196
197
198 k, n, chi2 = model_statistics(model_info=model_info, spin_id=spin_id, global_stats=global_stats)
199
200
201 if k == None or n == None or chi2 == None:
202 continue
203
204
205 k_total = k_total + k
206 n_total = n_total + n
207 chi2_total = chi2_total + chi2
208
209
210 return k_total, n_total, chi2_total
211
212
214 """Return the number of instances, which for hybrids is always 1.
215
216 @return: The number of instances.
217 @rtype: int
218 """
219
220 return 1
221
222
224 """Dummy function.
225
226 @keyword model_info: The model information from model_loop().
227 @type model_info: unknown
228 @return: True if the data should be skipped, False otherwise.
229 @rtype: bool
230 """
231
232
233 return False
234