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 warnings import warn
27
28
29 from generic_fns import pipes
30 from generic_fns.mol_res_spin import exists_mol_res_spin_data
31 from generic_fns.sequence import compare_sequence
32 from relax_errors import RelaxError, RelaxNoSequenceError, RelaxPipeError, RelaxSequenceError
33 from relax_warnings import RelaxDeselectWarning
34 import specific_fns.setup
35
36
38 """Class containing function specific to hybrid models."""
39
40 - def _hybridise(self, hybrid=None, pipe_list=None):
79
80
81 - def duplicate_data(self, pipe_from=None, pipe_to=None, model_info=None, global_stats=False, verbose=True):
82 """Duplicate the data specific to a single hybrid data pipe.
83
84 @keyword pipe_from: The data pipe to copy the data from.
85 @type pipe_from: str
86 @keyword pipe_to: The data pipe to copy the data to.
87 @type pipe_to: str
88 @keyword model_info: The model information from model_info().
89 @type model_info: int
90 @keyword global_stats: The global statistics flag.
91 @type global_stats: bool
92 @keyword verbose: A flag which if True will cause info to be printed out.
93 @type verbose: bool
94 """
95
96
97 if not pipes.has_pipe(pipe_to):
98 pipes.create(pipe_to, pipe_type='hybrid', switch=False)
99
100
101 dp_from = pipes.get_pipe(pipe_from)
102 dp_to = pipes.get_pipe(pipe_to)
103
104
105 if not exists_mol_res_spin_data(pipe_to):
106 raise RelaxSequenceError(pipe_to)
107
108
109 dp_to.hybrid_pipes = dp_from.hybrid_pipes
110
111
113 """Return a description of the model.
114
115 @param model_info: The model information from the model_loop(). This is unused.
116 @type model_info: int
117 @return: The model description.
118 @rtype: str
119 """
120
121 return "hybrid model"
122
123
125 """Dummy generator method - this should be a global model!"""
126
127 yield 0
128
129
131 """Method stating that this is a global model."""
132
133 return 'global'
134
135
137 """Return the k, n, and chi2 model statistics of the hybrid.
138
139 k - number of parameters.
140 n - number of data points.
141 chi2 - the chi-squared value.
142
143
144 @keyword model_index: The model index. This is zero for the global models or equal to the
145 global spin index (which covers the molecule, residue, and spin
146 indices). This originates from the model_loop().
147 @type model_index: int
148 @keyword spin_id: The spin identification string. Either this or the instance keyword
149 argument must be supplied.
150 @type spin_id: None or str
151 @keyword global_stats: A parameter which determines if global or local statistics are
152 returned. If None, then the appropriateness of global or local
153 statistics is automatically determined.
154 @type global_stats: None or bool
155 @return: The optimisation statistics, in tuple format, of the number of
156 parameters (k), the number of data points (n), and the chi-squared
157 value (chi2).
158 @rtype: tuple of int, int, float
159 """
160
161
162 if model_info == None and spin_id == None:
163 raise RelaxError("Either the model_info or spin_id argument must be supplied.")
164 elif model_info != None and spin_id != None:
165 raise RelaxError("The model_info arg " + repr(model_info) + " and spin_id arg " + repr(spin_id) + " clash. Only one should be supplied.")
166
167
168 k_total = 0
169 n_total = 0
170 chi2_total = 0.0
171
172
173 for pipe in cdp.hybrid_pipes:
174
175 pipes.switch(pipe)
176
177
178 model_statistics = setup.get_specific_fn('model_stats', pipes.get_type(pipe))
179
180
181
182
183 k, n, chi2 = model_statistics(model_info=model_info, spin_id=spin_id, global_stats=global_stats)
184
185
186 if k == None or n == None or chi2 == None:
187 continue
188
189
190 k_total = k_total + k
191 n_total = n_total + n
192 chi2_total = chi2_total + chi2
193
194
195 return k_total, n_total, chi2_total
196
197
199 """Return the number of instances, which for hybrids is always 1.
200
201 @return: The number of instances.
202 @rtype: int
203 """
204
205 return 1
206
207
209 """Dummy function.
210
211 @param model_info: The model index from model_loop().
212 @type model_info: int
213 @return: True if the data should be skipped, False otherwise.
214 @rtype: bool
215 """
216
217
218 return False
219