1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 from Numeric import Float64, matrixmultiply, ones, sum, transpose, zeros
25 from math import pi
26 import sys
27
28 from direction_cosine import *
29 from weights import *
30 from correlation_time import *
31 from jw_mf_comps import *
32 from jw_mf import *
33 from ri_comps import *
34 from ri_prime import *
35 from ri import *
36 from chi2 import *
37
38
40 - def __init__(self, init_params=None, param_set=None, diff_type=None, diff_params=None, scaling_matrix=None, num_res=None, equations=None, param_types=None, param_values=None, relax_data=None, errors=None, bond_length=None, csa=None, num_frq=0, frq=None, num_ri=None, remap_table=None, noe_r1_table=None, ri_labels=None, gx=0, gh=0, g_ratio=0, h_bar=0, mu0=0, num_params=None, vectors=None):
41 """The model-free minimisation class.
42
43 This class should be initialised before every calculation.
44
45
46 Arguments
47 ~~~~~~~~~
48
49 equation: The model-free equation string which should be either 'mf_orig' or 'mf_ext'.
50
51 param_types: An array of the parameter types used in minimisation.
52
53 relax_data: An array containing the experimental relaxation values.
54
55 errors: An array containing the experimental errors.
56
57 bond_length: The fixed bond length in meters.
58
59 csa: The fixed CSA value.
60
61 diff_type: The diffusion tensor string which should be either 'sphere', 'spheroid', or
62 'ellipsoid'.
63
64 diff_params: An array with the diffusion parameters.
65
66 scaling_matrix: A diagonal matrix of scaling factors.
67
68
69
70 Additional layer of equations to simplify the relaxation equations, gradients, and Hessians.
71 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
72
73 The R1 and R2 equations are left alone, while the NOE is calculated from the R1 and
74 sigma_noe values.
75
76
77 The relaxation equations
78 ~~~~~~~~~~~~~~~~~~~~~~~~
79
80 Data structure: data.ri
81 Dimension: 1D, (relaxation data)
82 Type: Numeric array, Float64
83 Dependencies: data.ri_prime
84 Required by: data.chi2, data.dchi2, data.d2chi2
85
86
87 R1() = R1'()
88
89
90 R2() = R2'()
91
92 gH sigma_noe()
93 NOE() = 1 + -- . -----------
94 gN R1()
95
96
97
98 The relaxation gradients
99 ~~~~~~~~~~~~~~~~~~~~~~~~
100
101 Data structure: data.dri
102 Dimension: 2D, (parameters, relaxation data)
103 Type: Numeric array, Float64
104 Dependencies: data.ri_prime, data.dri_prime
105 Required by: data.dchi2, data.d2chi2
106
107
108 dR1() dR1'()
109 ------- = -------
110 dthetaj dthetaj
111
112
113 dR2() dR2'()
114 ------- = -------
115 dthetaj dthetaj
116
117
118 dNOE() gH 1 / dsigma_noe() dR1() \
119 ------- = -- . ------- . | R1() . ------------ - sigma_noe() . ------- |
120 dthetaj gN R1()**2 \ dthetaj dthetaj /
121
122
123
124 The relaxation Hessians
125 ~~~~~~~~~~~~~~~~~~~~~~~
126
127 Data structure: data.d2ri
128 Dimension: 3D, (parameters, parameters, relaxation data)
129 Type: Numeric array, Float64
130 Dependencies: data.ri_prime, data.dri_prime, data.d2ri_prime
131 Required by: data.d2chi2
132
133
134 d2R1() d2R1'()
135 --------------- = ---------------
136 dthetai.dthetaj dthetai.dthetaj
137
138
139 d2R2() d2R2'()
140 --------------- = ---------------
141 dthetai.dthetaj dthetai.dthetaj
142
143
144 d2NOE() gH 1 / / dR1() dR1() d2R1() \
145 --------------- = -- . ------- . | sigma_noe() . | 2 . ------- . ------- - R1() . --------------- |
146 dthetai.dthetaj gN R1()**3 \ \ dthetai dthetaj dthetai.dthetaj /
147
148 / dsigma_noe() dR1() dR1() dsigma_noe() d2sigma_noe() \ \
149 - R1() . | ------------ . ------- + ------- . ------------ - R1() . --------------- | |
150 \ dthetai dthetaj dthetai dthetaj dthetai.dthetaj / /
151
152
153
154 The chi-sqared equation
155 ~~~~~~~~~~~~~~~~~~~~~~~
156 _n_
157 \ (Ri - Ri()) ** 2
158 Chi2 = > ----------------
159 /__ sigma_i ** 2
160 i=1
161
162 where:
163 Ri are the values of the measured relaxation data set.
164 Ri() are the values of the back calculated relaxation data set.
165 sigma_i are the values of the error set.
166
167
168 The chi-sqared gradient
169 ~~~~~~~~~~~~~~~~~~~~~~~
170 _n_
171 dChi2 \ / Ri - Ri() dRi() \
172 ------- = -2 > | ---------- . ------- |
173 dthetaj /__ \ sigma_i**2 dthetaj /
174 i=1
175
176 where:
177 Ri are the values of the measured relaxation data set.
178 Ri() are the values of the back calculated relaxation data set.
179 sigma_i are the values of the error set.
180
181
182 The chi-sqared Hessian
183 ~~~~~~~~~~~~~~~~~~~~~~
184 _n_
185 d2chi2 \ 1 / dRi() dRi() d2Ri() \
186 --------------- = 2 > ---------- | ------- . ------- - (Ri - Ri()) . --------------- |
187 dthetaj.dthetak /__ sigma_i**2 \ dthetaj dthetak dthetaj.dthetak /
188 i=1
189
190 where:
191 Ri are the values of the measured relaxation data set.
192 Ri() are the values of the back calculated relaxation data set.
193 sigma_i are the values of the error set.
194 """
195
196
197 self.param_set = param_set
198 self.total_num_params = len(init_params)
199 self.scaling_matrix = scaling_matrix
200 self.num_res = num_res
201 self.params = 1.0 * init_params
202
203
204 self.func_test = pi * ones(self.total_num_params, Float64)
205 self.grad_test = pi * ones(self.total_num_params, Float64)
206 self.hess_test = pi * ones(self.total_num_params, Float64)
207
208
209 self.diff_data = Data()
210 self.diff_data.type = diff_type
211 self.diff_data.params = diff_params
212 self.init_diff_data(self.diff_data)
213
214
215 self.total_num_ri = 0
216
217
218 if self.diff_data.type == 'sphere':
219 self.param_index = 1
220 self.diff_end_index = 1
221 elif self.diff_data.type == 'spheroid':
222 self.param_index = 4
223 self.diff_end_index = 4
224 elif self.diff_data.type == 'ellipsoid':
225 self.param_index = 6
226 self.diff_end_index = 6
227 if self.param_set != 'all':
228 self.param_index = 0
229
230
231 self.data = []
232 for i in xrange(self.num_res):
233
234 self.total_num_ri = self.total_num_ri + num_ri[i]
235
236
237 self.data.append(Data())
238
239
240 self.data[i].num_indecies = self.diff_data.num_indecies
241
242
243 self.data[i].frq_list = zeros((num_frq[i], 5), Float64)
244 self.data[i].frq_list_ext = zeros((num_frq[i], 5, self.diff_data.num_indecies), Float64)
245 self.data[i].frq_sqrd_list_ext = zeros((num_frq[i], 5, self.diff_data.num_indecies), Float64)
246 for j in xrange(num_frq[i]):
247 frqH = 2.0 * pi * frq[i][j]
248 frqX = frqH / g_ratio
249 self.data[i].frq_list[j, 1] = frqX
250 self.data[i].frq_list[j, 2] = frqH - frqX
251 self.data[i].frq_list[j, 3] = frqH
252 self.data[i].frq_list[j, 4] = frqH + frqX
253 self.data[i].frq_sqrd_list = self.data[i].frq_list ** 2
254 for j in xrange(self.diff_data.num_indecies):
255 self.data[i].frq_list_ext[:, :, j] = self.data[i].frq_list
256 self.data[i].frq_sqrd_list_ext[:, :, j] = self.data[i].frq_sqrd_list
257
258
259 self.data[i].gh = gh
260 self.data[i].gx = gx
261 self.data[i].g_ratio = g_ratio
262 self.data[i].h_bar = h_bar
263 self.data[i].mu0 = mu0
264 self.data[i].equations = equations[i]
265 self.data[i].param_types = param_types[i]
266 self.data[i].relax_data = relax_data[i]
267 self.data[i].errors = errors[i]
268 self.data[i].bond_length = bond_length[i]
269 self.data[i].csa = csa[i]
270 self.data[i].num_ri = num_ri[i]
271 self.data[i].num_frq = num_frq[i]
272 self.data[i].frq = frq[i]
273 self.data[i].remap_table = remap_table[i]
274 self.data[i].noe_r1_table = noe_r1_table[i]
275 self.data[i].ri_labels = ri_labels[i]
276 self.data[i].num_params = num_params[i]
277 self.data[i].xh_unit_vector = vectors[i]
278
279
280 if self.param_set == 'diff':
281 self.data[i].param_values = param_values[i]
282
283
284 if i == 0:
285 self.data[i].start_index = self.diff_data.num_params
286 else:
287 self.data[i].start_index = self.data[i-1].end_index
288 self.data[i].end_index = self.data[i].start_index + self.data[i].num_params
289
290
291 if self.param_set == 'mf' or self.param_set == 'local_tm':
292 self.data[i].total_num_params = self.data[i].num_params
293 elif self.param_set == 'diff':
294 self.data[i].total_num_params = self.diff_data.num_params
295 else:
296 self.data[i].total_num_params = self.data[i].num_params + self.diff_data.num_params
297
298
299 self.init_res_data(self.data[i], self.diff_data)
300
301
302 if not self.setup_equations(self.data[i]):
303 raise RelaxError, "The model-free equations could not be setup."
304
305
306 if self.param_set == 'local_tm':
307 self.diff_data.params = self.params[0:1]
308 elif self.param_set == 'diff' or self.param_set == 'all':
309 self.diff_data.params = self.params[0:self.diff_end_index]
310
311
312 self.diff_data.calc_ti(self.data[i], self.diff_data)
313
314
315 self.data[i].w_ti_sqrd = self.data[i].frq_sqrd_list_ext * self.data[i].ti ** 2
316 self.data[i].fact_ti = 1.0 / (1.0 + self.data[i].w_ti_sqrd)
317
318
319 missing_r1 = 0
320 for j in xrange(self.data[i].num_ri):
321 if self.data[i].ri_labels[j] == 'NOE' and self.data[i].noe_r1_table[j] == None:
322 missing_r1 = 1
323 if missing_r1:
324 self.init_res_r1_data(self.data[i])
325
326
327 if self.scaling_matrix:
328 self.scaling_flag = 1
329 else:
330 self.scaling_flag = 0
331
332
333 self.total_chi2 = 0.0
334 self.total_dchi2 = zeros((self.total_num_params), Float64)
335 self.total_d2chi2 = zeros((self.total_num_params, self.total_num_params), Float64)
336
337
338 self.total_dri = zeros((self.total_num_params, self.total_num_ri), Float64)
339
340
341
342
343
344 if self.param_set == 'mf':
345 self.func = self.func_mf
346 self.dfunc = self.dfunc_mf
347 self.d2func = self.d2func_mf
348
349
350 elif self.param_set == 'local_tm':
351 self.func = self.func_local_tm
352 self.dfunc = self.dfunc_local_tm
353 self.d2func = self.d2func_local_tm
354
355
356 elif self.param_set == 'diff':
357 self.func = self.func_diff
358 self.dfunc = self.dfunc_diff
359 self.d2func = self.d2func_diff
360
361
362 elif self.param_set == 'all':
363 self.func = self.func_all
364 self.dfunc = self.dfunc_all
365 self.d2func = self.d2func_all
366
367
369 """Function for calculating the chi-squared value.
370
371 Used in the minimisation of model-free parameters for a single residue.
372 """
373
374
375 self.func_test = params * 1.0
376
377
378 data = self.data[0]
379
380
381 if self.scaling_flag:
382 params = matrixmultiply(params, self.scaling_matrix)
383
384
385 if self.diff_data.calc_di:
386 self.diff_data.calc_di(data, self.diff_data)
387
388
389 self.diff_data.calc_ci(data, self.diff_data)
390
391
392 self.diff_data.calc_ti(data, self.diff_data)
393
394
395 if data.calc_jw_comps:
396 data.calc_jw_comps(data, params)
397
398
399 data.jw = data.calc_jw(data, params)
400
401
402 data.create_ri_comps(data, params)
403
404
405 data.ri_prime = data.create_ri_prime(data)
406
407
408 data.ri = data.ri_prime * 1.0
409 for m in xrange(data.num_ri):
410 if data.create_ri[m]:
411 data.create_ri[m](data, m, data.remap_table[m], data.get_r1, params)
412
413
414 data.chi2 = chi2(data.relax_data, data.ri, data.errors)
415
416 return data.chi2
417
418
420 """Function for calculating the chi-squared value.
421
422 Used in the minimisation of model-free parameters for a single residue with a local tm.
423 """
424
425
426 self.func_test = params * 1.0
427
428
429 data = self.data[0]
430
431
432 if self.scaling_flag:
433 params = matrixmultiply(params, self.scaling_matrix)
434
435
436 self.diff_data.params = params[0:1]
437
438
439 self.diff_data.calc_ci(data, self.diff_data)
440
441
442 self.diff_data.calc_ti(data, self.diff_data)
443
444
445 data.w_ti_sqrd = data.frq_sqrd_list_ext * data.ti ** 2
446 data.fact_ti = 1.0 / (1.0 + data.w_ti_sqrd)
447
448
449 if data.calc_jw_comps:
450 data.calc_jw_comps(data, params)
451
452
453 data.jw = data.calc_jw(data, params)
454
455
456 data.create_ri_comps(data, params)
457
458
459 data.ri_prime = data.create_ri_prime(data)
460
461
462 data.ri = data.ri_prime * 1.0
463 for m in xrange(data.num_ri):
464 if data.create_ri[m]:
465 data.create_ri[m](data, m, data.remap_table[m], data.get_r1, params)
466
467
468 data.chi2 = chi2(data.relax_data, data.ri, data.errors)
469
470 return data.chi2
471
472
474 """Function for calculating the chi-squared value.
475
476 Used in the minimisation of diffusion tensor parameters with all model-free parameters
477 fixed.
478 """
479
480
481 self.func_test = params * 1.0
482
483
484 if self.scaling_flag:
485 params = matrixmultiply(params, self.scaling_matrix)
486
487
488 self.diff_data.params = params[0:self.diff_end_index]
489
490
491 self.total_chi2 = 0.0
492
493
494 for i in xrange(self.num_res):
495
496 data = self.data[i]
497
498
499 if self.diff_data.calc_di:
500 self.diff_data.calc_di(data, self.diff_data)
501
502
503 self.diff_data.calc_ci(data, self.diff_data)
504
505
506 self.diff_data.calc_ti(data, self.diff_data)
507
508
509 data.w_ti_sqrd = data.frq_sqrd_list_ext * data.ti ** 2
510 data.fact_ti = 1.0 / (1.0 + data.w_ti_sqrd)
511
512
513 if data.calc_jw_comps:
514 data.calc_jw_comps(data, data.param_values)
515
516
517 data.jw = data.calc_jw(data, data.param_values)
518
519
520 data.create_ri_comps(data, data.param_values)
521
522
523 data.ri_prime = data.create_ri_prime(data)
524
525
526 data.ri = data.ri_prime * 1.0
527 for m in xrange(data.num_ri):
528 if data.create_ri[m]:
529 data.create_ri[m](data, m, data.remap_table[m], data.get_r1, data.param_values)
530
531
532 data.chi2 = chi2(data.relax_data, data.ri, data.errors)
533
534
535 self.total_chi2 = self.total_chi2 + data.chi2
536
537 return self.total_chi2
538
539
541 """Function for calculating the chi-squared value.
542
543 Used in the minimisation of diffusion tensor parameters together with all model-free
544 parameters.
545 """
546
547
548 self.func_test = params * 1.0
549
550
551 if self.scaling_flag:
552 params = matrixmultiply(params, self.scaling_matrix)
553
554
555 self.diff_data.params = params[0:self.diff_end_index]
556
557
558 self.total_chi2 = 0.0
559
560
561 for i in xrange(self.num_res):
562
563 data = self.data[i]
564
565
566 if self.diff_data.calc_di:
567 self.diff_data.calc_di(data, self.diff_data)
568
569
570 self.diff_data.calc_ci(data, self.diff_data)
571
572
573 self.diff_data.calc_ti(data, self.diff_data)
574
575
576 data.w_ti_sqrd = data.frq_sqrd_list_ext * data.ti ** 2
577 data.fact_ti = 1.0 / (1.0 + data.w_ti_sqrd)
578
579
580 if data.calc_jw_comps:
581 data.calc_jw_comps(data, params)
582
583
584 data.jw = data.calc_jw(data, params)
585
586
587 data.create_ri_comps(data, params)
588
589
590 data.ri_prime = data.create_ri_prime(data)
591
592
593 data.ri = data.ri_prime * 1.0
594 for m in xrange(data.num_ri):
595 if data.create_ri[m]:
596 data.create_ri[m](data, m, data.remap_table[m], data.get_r1, params)
597
598
599 data.chi2 = chi2(data.relax_data, data.ri, data.errors)
600
601
602 self.total_chi2 = self.total_chi2 + data.chi2
603
604 return self.total_chi2
605
606
608 """Function for calculating the chi-squared gradient.
609
610 Used in the minimisation of model-free parameters for a single residue.
611 """
612
613
614 if sum(params == self.func_test) != self.total_num_params:
615 self.func(params)
616
617
618 self.grad_test = params * 1.0
619
620
621 data = self.data[0]
622
623
624 if self.scaling_flag:
625 params = matrixmultiply(params, self.scaling_matrix)
626
627
628 if data.calc_djw_comps:
629 data.calc_djw_comps(data, params)
630
631
632 for j in xrange(data.total_num_params):
633
634 if data.calc_djw[j]:
635 data.djw = data.calc_djw[j](data, params, j)
636 else:
637 data.djw = data.djw * 0.0
638
639
640 data.create_dri_comps(data, params)
641
642
643 data.dri_prime[j] = data.create_dri_prime[j](data)
644
645
646 data.dri[j] = data.dri_prime[j]
647 for m in xrange(data.num_ri):
648 if data.create_dri[m]:
649 data.create_dri[m](data, m, data.remap_table[m], data.get_dr1, params, j)
650
651
652 data.dchi2[j] = dchi2(data.relax_data, data.ri, data.dri[j], data.errors)
653
654
655 if self.scaling_flag:
656 data.dchi2 = matrixmultiply(data.dchi2, self.scaling_matrix)
657
658
659 return data.dchi2 * 1.0
660
661
663 """Function for calculating the chi-squared gradient.
664
665 Used in the minimisation of model-free parameters for a single residue with a local tm.
666 """
667
668
669 if sum(params == self.func_test) != self.total_num_params:
670 self.func(params)
671
672
673 self.grad_test = params * 1.0
674
675
676 data = self.data[0]
677
678
679 if self.scaling_flag:
680 params = matrixmultiply(params, self.scaling_matrix)
681
682
683 self.diff_data.params = params[0:1]
684
685
686 if data.calc_djw_comps:
687 data.calc_djw_comps(data, params)
688
689
690 self.diff_data.calc_dti(data, self.diff_data)
691
692
693 for j in xrange(data.total_num_params):
694
695 if data.calc_djw[j]:
696 data.djw = data.calc_djw[j](data, params, j)
697 else:
698 data.djw = data.djw * 0.0
699
700
701 data.create_dri_comps(data, params)
702
703
704 data.dri_prime[j] = data.create_dri_prime[j](data)
705
706
707 data.dri[j] = data.dri_prime[j]
708 for m in xrange(data.num_ri):
709 if data.create_dri[m]:
710 data.create_dri[m](data, m, data.remap_table[m], data.get_dr1, params, j)
711
712
713 data.dchi2[j] = dchi2(data.relax_data, data.ri, data.dri[j], data.errors)
714
715
716 if self.scaling_flag:
717 data.dchi2 = matrixmultiply(data.dchi2, self.scaling_matrix)
718
719
720 return data.dchi2 * 1.0
721
722
724 """Function for calculating the chi-squared gradient.
725
726 Used in the minimisation of diffusion tensor parameters with all model-free parameters
727 fixed.
728 """
729
730
731 if sum(params == self.func_test) != self.total_num_params:
732 self.func(params)
733
734
735 self.grad_test = params * 1.0
736
737
738 if self.scaling_flag:
739 params = matrixmultiply(params, self.scaling_matrix)
740
741
742 self.diff_data.params = params[0:self.diff_end_index]
743
744
745 self.total_dchi2 = self.total_dchi2 * 0.0
746
747
748 for i in xrange(self.num_res):
749
750
751 data = self.data[i]
752
753
754 if self.diff_data.calc_ddi:
755 self.diff_data.calc_ddi(data, self.diff_data)
756
757
758 if self.diff_data.calc_dci:
759 self.diff_data.calc_dci(data, self.diff_data)
760
761
762 self.diff_data.calc_dti(data, self.diff_data)
763
764
765 if data.calc_djw_comps:
766 data.calc_djw_comps(data, data.param_values)
767
768
769 for j in xrange(data.total_num_params):
770
771 if data.calc_djw[j]:
772 data.djw = data.calc_djw[j](data, data.param_values, j)
773 else:
774 data.djw = data.djw * 0.0
775
776
777 data.create_dri_comps(data, data.param_values)
778
779
780 data.dri_prime[j] = data.create_dri_prime[j](data)
781
782
783 data.dri[j] = data.dri_prime[j]
784 for m in xrange(data.num_ri):
785 if data.create_dri[m]:
786 data.create_dri[m](data, m, data.remap_table[m], data.get_dr1, params, j)
787
788
789 data.dchi2[j] = dchi2(data.relax_data, data.ri, data.dri[j], data.errors)
790
791
792 index = self.diff_data.num_params
793
794
795 self.total_dchi2[0:index] = self.total_dchi2[0:index] + data.dchi2[0:index]
796
797
798 if self.scaling_flag:
799 self.total_dchi2 = matrixmultiply(self.total_dchi2, self.scaling_matrix)
800
801
802 return self.total_dchi2 * 1.0
803
804
806 """Function for calculating the chi-squared gradient.
807
808 Used in the minimisation of diffusion tensor parameters together with all model-free
809 parameters.
810 """
811
812
813 if sum(params == self.func_test) != self.total_num_params:
814 self.func(params)
815
816
817 self.grad_test = params * 1.0
818
819
820 if self.scaling_flag:
821 params = matrixmultiply(params, self.scaling_matrix)
822
823
824 self.diff_data.params = params[0:self.diff_end_index]
825
826
827 self.total_dchi2 = self.total_dchi2 * 0.0
828
829
830 for i in xrange(self.num_res):
831
832 data = self.data[i]
833
834
835 if self.diff_data.calc_ddi:
836 self.diff_data.calc_ddi(data, self.diff_data)
837
838
839 if self.diff_data.calc_dci:
840 self.diff_data.calc_dci(data, self.diff_data)
841
842
843 self.diff_data.calc_dti(data, self.diff_data)
844
845
846 if data.calc_djw_comps:
847 data.calc_djw_comps(data, params)
848
849
850 for j in xrange(data.total_num_params):
851
852 if data.calc_djw[j]:
853 data.djw = data.calc_djw[j](data, params, j)
854 else:
855 data.djw = data.djw * 0.0
856
857
858 data.create_dri_comps(data, params)
859
860
861 data.dri_prime[j] = data.create_dri_prime[j](data)
862
863
864 data.dri[j] = data.dri_prime[j]
865 for m in xrange(data.num_ri):
866 if data.create_dri[m]:
867 data.create_dri[m](data, m, data.remap_table[m], data.get_dr1, params, j)
868
869
870 data.dchi2[j] = dchi2(data.relax_data, data.ri, data.dri[j], data.errors)
871
872
873 index = self.diff_data.num_params
874
875
876 self.total_dchi2[0:index] = self.total_dchi2[0:index] + data.dchi2[0:index]
877
878
879 self.total_dchi2[data.start_index:data.end_index] = self.total_dchi2[data.start_index:data.end_index] + data.dchi2[index:]
880
881
882 if self.scaling_flag:
883 self.total_dchi2 = matrixmultiply(self.total_dchi2, self.scaling_matrix)
884
885
886 return self.total_dchi2 * 1.0
887
888
890 """Function for calculating the chi-squared Hessian.
891
892 Used in the minimisation of model-free parameters for a single residue.
893 """
894
895
896 if sum(params == self.grad_test) != self.total_num_params:
897 self.dfunc(params)
898
899
900 data = self.data[0]
901
902
903 if self.scaling_flag:
904 params = matrixmultiply(params, self.scaling_matrix)
905
906
907 for j in xrange(data.total_num_params):
908 for k in xrange(j + 1):
909
910 if data.calc_d2jw[j][k]:
911 data.d2jw = data.calc_d2jw[j][k](data, params, j, k)
912 else:
913 data.d2jw = data.d2jw * 0.0
914
915
916 data.create_d2ri_comps(data, params)
917
918
919 if data.create_d2ri_prime[j][k]:
920 data.d2ri_prime[j, k] = data.create_d2ri_prime[j][k](data)
921
922
923 data.d2ri[j, k] = data.d2ri_prime[j, k]
924 for m in xrange(data.num_ri):
925 if data.create_d2ri[m]:
926 data.create_d2ri[m](data, m, data.remap_table[m], data.get_d2r1, params, j, k)
927
928
929 data.d2chi2[j, k] = data.d2chi2[k, j] = d2chi2(data.relax_data, data.ri, data.dri[j], data.dri[k], data.d2ri[j, k], data.errors)
930
931
932 if self.scaling_flag:
933 data.d2chi2 = matrixmultiply(self.scaling_matrix, matrixmultiply(data.d2chi2, self.scaling_matrix))
934
935
936 return data.d2chi2 * 1.0
937
938
940 """Function for calculating the chi-squared Hessian.
941
942 Used in the minimisation of model-free parameters for a single residue with a local tm.
943 """
944
945
946 if sum(params == self.grad_test) != self.total_num_params:
947 self.dfunc(params)
948
949
950 data = self.data[0]
951
952
953 if self.scaling_flag:
954 params = matrixmultiply(params, self.scaling_matrix)
955
956
957 self.diff_data.params = params[0:1]
958
959
960 for j in xrange(data.total_num_params):
961 for k in xrange(j + 1):
962
963 if data.calc_d2jw[j][k]:
964 data.d2jw = data.calc_d2jw[j][k](data, params, j, k)
965 else:
966 data.d2jw = data.d2jw * 0.0
967
968
969 data.create_d2ri_comps(data, params)
970
971
972 if data.create_d2ri_prime[j][k]:
973 data.d2ri_prime[j, k] = data.create_d2ri_prime[j][k](data)
974
975
976 data.d2ri[j, k] = data.d2ri_prime[j, k]
977 for m in xrange(data.num_ri):
978 if data.create_d2ri[m]:
979 data.create_d2ri[m](data, m, data.remap_table[m], data.get_d2r1, params, j, k)
980
981
982 data.d2chi2[j, k] = data.d2chi2[k, j] = d2chi2(data.relax_data, data.ri, data.dri[j], data.dri[k], data.d2ri[j, k], data.errors)
983
984
985 if self.scaling_flag:
986 data.d2chi2 = matrixmultiply(self.scaling_matrix, matrixmultiply(data.d2chi2, self.scaling_matrix))
987
988
989 return data.d2chi2 * 1.0
990
991
993 """Function for calculating the chi-squared Hessian.
994
995 Used in the minimisation of diffusion tensor parameters with all model-free parameters
996 fixed.
997 """
998
999
1000 if sum(params == self.grad_test) != self.total_num_params:
1001 self.dfunc(params)
1002
1003
1004 if self.scaling_flag:
1005 params = matrixmultiply(params, self.scaling_matrix)
1006
1007
1008 self.diff_data.params = params[0:self.diff_end_index]
1009
1010
1011 self.total_d2chi2 = self.total_d2chi2 * 0.0
1012
1013
1014 for i in xrange(self.num_res):
1015
1016 data = self.data[i]
1017
1018
1019 if self.diff_data.calc_d2di:
1020 self.diff_data.calc_d2di(data, self.diff_data)
1021
1022
1023 if self.diff_data.calc_d2ci:
1024 self.diff_data.calc_d2ci(data, self.diff_data)
1025
1026
1027 if self.diff_data.calc_d2ti:
1028 self.diff_data.calc_d2ti(data, self.diff_data)
1029
1030
1031 for j in xrange(data.total_num_params):
1032 for k in xrange(j + 1):
1033
1034 if data.calc_d2jw[j][k]:
1035 data.d2jw = data.calc_d2jw[j][k](data, data.param_values, j, k)
1036 else:
1037 data.d2jw = data.d2jw * 0.0
1038
1039
1040 data.create_d2ri_comps(data, data.param_values)
1041
1042
1043 if data.create_d2ri_prime[j][k]:
1044 data.d2ri_prime[j, k] = data.create_d2ri_prime[j][k](data)
1045
1046
1047 data.d2ri[j, k] = data.d2ri_prime[j, k]
1048 for m in xrange(data.num_ri):
1049 if data.create_d2ri[m]:
1050 data.create_d2ri[m](data, m, data.remap_table[m], data.get_d2r1, params, j, k)
1051
1052
1053 data.d2chi2[j, k] = data.d2chi2[k, j] = d2chi2(data.relax_data, data.ri, data.dri[j], data.dri[k], data.d2ri[j, k], data.errors)
1054
1055
1056 self.total_d2chi2 = self.total_d2chi2 + data.d2chi2
1057
1058
1059 if self.scaling_flag:
1060 self.total_d2chi2 = matrixmultiply(self.scaling_matrix, matrixmultiply(self.total_d2chi2, self.scaling_matrix))
1061
1062
1063 return self.total_d2chi2 * 1.0
1064
1065
1067 """Function for calculating the chi-squared Hessian.
1068
1069 Used in the minimisation of diffusion tensor parameters together with all model-free
1070 parameters.
1071 """
1072
1073
1074 if sum(params == self.grad_test) != self.total_num_params:
1075 self.dfunc(params)
1076
1077
1078 if self.scaling_flag:
1079 params = matrixmultiply(params, self.scaling_matrix)
1080
1081
1082 self.diff_data.params = params[0:self.diff_end_index]
1083
1084
1085 self.total_d2chi2 = self.total_d2chi2 * 0.0
1086
1087
1088 for i in xrange(self.num_res):
1089
1090 data = self.data[i]
1091
1092
1093 if self.diff_data.calc_d2di:
1094 self.diff_data.calc_d2di(data, self.diff_data)
1095
1096
1097 if self.diff_data.calc_d2ci:
1098 self.diff_data.calc_d2ci(data, self.diff_data)
1099
1100
1101 if self.diff_data.calc_d2ti:
1102 self.diff_data.calc_d2ti(data, self.diff_data)
1103
1104
1105 for j in xrange(data.total_num_params):
1106 for k in xrange(j + 1):
1107
1108 if data.calc_d2jw[j][k]:
1109 data.d2jw = data.calc_d2jw[j][k](data, params, j, k)
1110 else:
1111 data.d2jw = data.d2jw * 0.0
1112
1113
1114 data.create_d2ri_comps(data, params)
1115
1116
1117 if data.create_d2ri_prime[j][k]:
1118 data.d2ri_prime[j, k] = data.create_d2ri_prime[j][k](data)
1119
1120
1121 data.d2ri[j, k] = data.d2ri_prime[j, k]
1122 for m in xrange(data.num_ri):
1123 if data.create_d2ri[m]:
1124 data.create_d2ri[m](data, m, data.remap_table[m], data.get_d2r1, params, j, k)
1125
1126
1127 data.d2chi2[j, k] = data.d2chi2[k, j] = d2chi2(data.relax_data, data.ri, data.dri[j], data.dri[k], data.d2ri[j, k], data.errors)
1128
1129
1130 index = self.diff_data.num_params
1131
1132
1133 self.total_d2chi2[0:index, 0:index] = self.total_d2chi2[0:index, 0:index] + data.d2chi2[0:index, 0:index]
1134
1135
1136 self.total_d2chi2[data.start_index:data.end_index, data.start_index:data.end_index] = self.total_d2chi2[data.start_index:data.end_index, data.start_index:data.end_index] + data.d2chi2[index:, index:]
1137
1138
1139 self.total_d2chi2[0:index, data.start_index:data.end_index] = self.total_d2chi2[0:index, data.start_index:data.end_index] + data.d2chi2[0:index, index:]
1140 self.total_d2chi2[data.start_index:data.end_index, 0:index] = self.total_d2chi2[data.start_index:data.end_index, 0:index] + data.d2chi2[index:, 0:index]
1141
1142
1143 if self.scaling_flag:
1144 self.total_d2chi2 = matrixmultiply(self.scaling_matrix, matrixmultiply(self.total_d2chi2, self.scaling_matrix))
1145
1146
1147 return self.total_d2chi2 * 1.0
1148
1149
1151 """Function for calculating relaxation values."""
1152
1153
1154 chi2 = self.func_mf(self.params)
1155
1156
1157 return self.data[0].ri[0]
1158
1159
1161 """Function for the initialisation of diffusion tensor specific data."""
1162
1163
1164 if diff_data.type == 'sphere':
1165
1166 diff_data.num_params = 1
1167
1168
1169 diff_data.num_indecies = 1
1170
1171
1172 diff_data.calc_di = None
1173 diff_data.calc_ddi = None
1174 diff_data.calc_d2di = None
1175
1176
1177 diff_data.calc_ci = calc_sphere_ci
1178 diff_data.calc_dci = None
1179 diff_data.calc_d2ci = None
1180
1181
1182 diff_data.calc_ti = calc_sphere_ti
1183 diff_data.calc_dti = calc_sphere_dti
1184 diff_data.calc_d2ti = None
1185
1186
1187
1188 elif diff_data.type == 'spheroid':
1189
1190 diff_data.num_params = 4
1191
1192
1193 diff_data.num_indecies = 3
1194
1195
1196 diff_data.calc_di = calc_spheroid_di
1197 diff_data.calc_ddi = calc_spheroid_ddi
1198 diff_data.calc_d2di = calc_spheroid_d2di
1199
1200
1201 diff_data.calc_ci = calc_spheroid_ci
1202 diff_data.calc_dci = calc_spheroid_dci
1203 diff_data.calc_d2ci = calc_spheroid_d2ci
1204
1205
1206 diff_data.calc_ti = calc_spheroid_ti
1207 diff_data.calc_dti = calc_spheroid_dti
1208 diff_data.calc_d2ti = calc_spheroid_d2ti
1209
1210
1211 diff_data.dpar = zeros(3, Float64)
1212
1213
1214 diff_data.dpar_dtheta = zeros(3, Float64)
1215 diff_data.dpar_dphi = zeros(3, Float64)
1216
1217
1218 diff_data.dpar_dtheta2 = zeros(3, Float64)
1219 diff_data.dpar_dthetadphi = zeros(3, Float64)
1220 diff_data.dpar_dphi2 = zeros(3, Float64)
1221
1222
1223 elif diff_data.type == 'ellipsoid':
1224
1225 diff_data.num_params = 6
1226
1227
1228 diff_data.num_indecies = 5
1229
1230
1231 diff_data.calc_di = calc_ellipsoid_di
1232 diff_data.calc_ddi = calc_ellipsoid_ddi
1233 diff_data.calc_d2di = calc_ellipsoid_d2di
1234
1235
1236 diff_data.calc_ci = calc_ellipsoid_ci
1237 diff_data.calc_dci = calc_ellipsoid_dci
1238 diff_data.calc_d2ci = calc_ellipsoid_d2ci
1239
1240
1241 diff_data.calc_ti = calc_ellipsoid_ti
1242 diff_data.calc_dti = calc_ellipsoid_dti
1243 diff_data.calc_d2ti = calc_ellipsoid_d2ti
1244
1245
1246 diff_data.dx = zeros(3, Float64)
1247 diff_data.dy = zeros(3, Float64)
1248 diff_data.dz = zeros(3, Float64)
1249
1250
1251 diff_data.ddx_dalpha = zeros(3, Float64)
1252 diff_data.ddx_dbeta = zeros(3, Float64)
1253 diff_data.ddx_dgamma = zeros(3, Float64)
1254
1255 diff_data.ddy_dalpha = zeros(3, Float64)
1256 diff_data.ddy_dbeta = zeros(3, Float64)
1257 diff_data.ddy_dgamma = zeros(3, Float64)
1258
1259 diff_data.ddz_dalpha = zeros(3, Float64)
1260 diff_data.ddz_dbeta = zeros(3, Float64)
1261 diff_data.ddz_dgamma = zeros(3, Float64)
1262
1263
1264 diff_data.d2dx_dalpha2 = zeros(3, Float64)
1265 diff_data.d2dx_dalpha_dbeta = zeros(3, Float64)
1266 diff_data.d2dx_dalpha_dgamma = zeros(3, Float64)
1267 diff_data.d2dx_dbeta2 = zeros(3, Float64)
1268 diff_data.d2dx_dbeta_dgamma = zeros(3, Float64)
1269 diff_data.d2dx_dgamma2 = zeros(3, Float64)
1270
1271 diff_data.d2dy_dalpha2 = zeros(3, Float64)
1272 diff_data.d2dy_dalpha_dbeta = zeros(3, Float64)
1273 diff_data.d2dy_dalpha_dgamma = zeros(3, Float64)
1274 diff_data.d2dy_dbeta2 = zeros(3, Float64)
1275 diff_data.d2dy_dbeta_dgamma = zeros(3, Float64)
1276 diff_data.d2dy_dgamma2 = zeros(3, Float64)
1277
1278 diff_data.d2dz_dalpha2 = zeros(3, Float64)
1279 diff_data.d2dz_dalpha_dbeta = zeros(3, Float64)
1280 diff_data.d2dz_dalpha_dgamma = zeros(3, Float64)
1281 diff_data.d2dz_dbeta2 = zeros(3, Float64)
1282 diff_data.d2dz_dbeta_dgamma = zeros(3, Float64)
1283 diff_data.d2dz_dgamma2 = zeros(3, Float64)
1284
1285
1287 """Function for the initialisation of the residue specific data."""
1288
1289
1290 data.ci = zeros(diff_data.num_indecies, Float64)
1291 data.ci_comps = zeros(diff_data.num_indecies, Float64)
1292
1293
1294 data.ti = zeros(diff_data.num_indecies, Float64)
1295 data.tau_comps = zeros(diff_data.num_indecies, Float64)
1296 data.tau_comps_sqrd = zeros(diff_data.num_indecies, Float64)
1297 data.tau_comps_cubed = zeros(diff_data.num_indecies, Float64)
1298 data.tau_scale = zeros(diff_data.num_indecies, Float64)
1299
1300
1301 if self.diff_data.type == 'sphere':
1302
1303 data.dti = zeros((1, diff_data.num_indecies), Float64)
1304 data.d2ti = zeros((1, 1, diff_data.num_indecies), Float64)
1305
1306
1307 elif self.diff_data.type == 'spheroid':
1308
1309 data.dci = zeros((4, diff_data.num_indecies), Float64)
1310 data.d2ci = zeros((4, 4, diff_data.num_indecies), Float64)
1311
1312
1313 data.dti = zeros((2, diff_data.num_indecies), Float64)
1314 data.d2ti = zeros((2, 2, diff_data.num_indecies), Float64)
1315
1316
1317 data.dz = 0
1318
1319
1320 data.ddz_dO = zeros(2, Float64)
1321
1322
1323 data.d2dz_dO2 = zeros((2, 2), Float64)
1324
1325
1326 elif self.diff_data.type == 'ellipsoid':
1327
1328 data.dci = zeros((6, diff_data.num_indecies), Float64)
1329 data.d2ci = zeros((6, 6, diff_data.num_indecies), Float64)
1330
1331
1332 data.dti = zeros((3, diff_data.num_indecies), Float64)
1333 data.d2ti = zeros((3, 3, diff_data.num_indecies), Float64)
1334
1335
1336 data.dx = 0.0
1337 data.dy = 0.0
1338 data.dz = 0.0
1339
1340
1341 data.ddx_dO = zeros(3, Float64)
1342 data.ddy_dO = zeros(3, Float64)
1343 data.ddz_dO = zeros(3, Float64)
1344
1345
1346 data.d2dx_dO2 = zeros((3, 3), Float64)
1347 data.d2dy_dO2 = zeros((3, 3), Float64)
1348 data.d2dz_dO2 = zeros((3, 3), Float64)
1349
1350
1351 data.w_ti_sqrd = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1352 data.fact_ti = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1353 data.w_te_ti_sqrd = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1354 data.w_tf_ti_sqrd = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1355 data.w_ts_ti_sqrd = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1356 data.inv_te_denom = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1357 data.inv_tf_denom = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1358 data.inv_ts_denom = zeros((data.num_frq, 5, diff_data.num_indecies), Float64)
1359
1360
1361 data.jw = zeros((data.num_frq, 5), Float64)
1362 data.djw = zeros((data.num_frq, 5), Float64)
1363 data.d2jw = zeros((data.num_frq, 5), Float64)
1364
1365
1366 data.csa_const_fixed = zeros(data.num_frq, Float64)
1367 data.dip_const_fixed = None
1368 calc_fixed_csa(data)
1369 calc_fixed_dip(data)
1370
1371
1372 data.dip_const_func = 0.0
1373 data.dip_const_grad = 0.0
1374 data.dip_const_hess = 0.0
1375 data.csa_const_func = zeros(data.num_frq, Float64)
1376 data.csa_const_grad = zeros(data.num_frq, Float64)
1377 data.csa_const_hess = zeros(data.num_frq, Float64)
1378
1379
1380 data.dip_comps_func = zeros(data.num_ri, Float64)
1381 data.csa_comps_func = zeros(data.num_ri, Float64)
1382 data.rex_comps_func = zeros(data.num_ri, Float64)
1383 data.dip_jw_comps_func = zeros(data.num_ri, Float64)
1384 data.csa_jw_comps_func = zeros(data.num_ri, Float64)
1385
1386
1387 data.dip_comps_grad = zeros(data.num_ri, Float64)
1388 data.csa_comps_grad = zeros(data.num_ri, Float64)
1389 data.rex_comps_grad = zeros(data.num_ri, Float64)
1390 data.dip_jw_comps_grad = zeros(data.num_ri, Float64)
1391 data.csa_jw_comps_grad = zeros(data.num_ri, Float64)
1392
1393
1394 data.dip_comps_hess = zeros(data.num_ri, Float64)
1395 data.csa_comps_hess = zeros(data.num_ri, Float64)
1396 data.rex_comps_hess = zeros(data.num_ri, Float64)
1397 data.dip_jw_comps_hess = zeros(data.num_ri, Float64)
1398 data.csa_jw_comps_hess = zeros(data.num_ri, Float64)
1399
1400
1401 data.ri_prime = zeros((data.num_ri), Float64)
1402 data.dri_prime = zeros((data.total_num_params, data.num_ri), Float64)
1403 data.d2ri_prime = zeros((data.total_num_params, data.total_num_params, data.num_ri), Float64)
1404
1405
1406 data.ri = zeros(data.num_ri, Float64)
1407 data.dri = zeros((data.total_num_params, data.num_ri), Float64)
1408 data.d2ri = zeros((data.total_num_params, data.total_num_params, data.num_ri), Float64)
1409
1410
1411 data.r1 = zeros(data.num_ri, Float64)
1412 data.dr1 = zeros((data.total_num_params, data.num_ri), Float64)
1413 data.d2r1 = zeros((data.total_num_params, data.total_num_params, data.num_ri), Float64)
1414
1415
1416 data.chi2 = 0.0
1417 data.dchi2 = zeros((data.total_num_params), Float64)
1418 data.d2chi2 = zeros((data.total_num_params, data.total_num_params), Float64)
1419
1420
1422 """Function for initialisation of the R1 data class.
1423
1424 This data class is only used if an NOE data set is collected but no R1 data set
1425 corresponding to the same frequency exists.
1426 """
1427
1428
1429 r1_data = Data()
1430
1431
1432 r1_data.num_frq = data.num_frq
1433 r1_data.dip_const_fixed = data.dip_const_fixed
1434 r1_data.csa_const_fixed = data.csa_const_fixed
1435
1436
1437 r1_data.dip_comps_func = zeros(data.num_ri, Float64)
1438 r1_data.csa_comps_func = zeros(data.num_ri, Float64)
1439 r1_data.dip_jw_comps_func = zeros(data.num_ri, Float64)
1440 r1_data.csa_jw_comps_func = zeros(data.num_ri, Float64)
1441
1442
1443 r1_data.dip_comps_grad = zeros(data.num_ri, Float64)
1444 r1_data.csa_comps_grad = zeros(data.num_ri, Float64)
1445 r1_data.rex_comps_grad = zeros(data.num_ri, Float64)
1446 r1_data.dip_jw_comps_grad = zeros(data.num_ri, Float64)
1447 r1_data.csa_jw_comps_grad = zeros(data.num_ri, Float64)
1448
1449
1450 r1_data.dip_comps_hess = zeros(data.num_ri, Float64)
1451 r1_data.csa_comps_hess = zeros(data.num_ri, Float64)
1452 r1_data.rex_comps_hess = zeros(data.num_ri, Float64)
1453 r1_data.dip_jw_comps_hess = zeros(data.num_ri, Float64)
1454 r1_data.csa_jw_comps_hess = zeros(data.num_ri, Float64)
1455
1456
1457 r1_data.ri_prime = zeros(data.num_ri, Float64)
1458 r1_data.dri_prime = zeros((data.num_ri, data.total_num_params), Float64)
1459 r1_data.d2ri_prime = zeros((data.num_ri, data.total_num_params, data.total_num_params), Float64)
1460
1461
1462 r1_data.create_dri_prime = data.create_dri_prime
1463 r1_data.create_d2ri_prime = data.create_d2ri_prime
1464
1465
1466 r1_data.csa_i = data.csa_i
1467 r1_data.r_i = data.r_i
1468 r1_data.rex_i = data.rex_i
1469
1470
1471 data.r1_data = r1_data
1472
1473
1475 """Return the function used for Levenberg-Marquardt minimisation."""
1476
1477
1478 if self.param_set == 'mf' or self.param_set == 'local_tm':
1479 dri = self.data[0].dri
1480 elif self.param_set == 'diff':
1481
1482 self.total_dri = self.total_dri * 0.0
1483
1484
1485 ri_start_index = 0
1486 ri_end_index = 0
1487
1488
1489 for i in xrange(self.num_res):
1490
1491 data = self.data[i]
1492
1493
1494 ri_end_index = ri_end_index + data.num_ri
1495
1496
1497 self.total_dri[0:self.diff_data.num_params, ri_start_index:ri_end_index] = self.total_dri[0:self.diff_data.num_params, ri_start_index:ri_end_index] + data.dri[0:self.diff_data.num_params]
1498
1499
1500 ri_start_index = ri_start_index + data.num_ri
1501
1502
1503 dri = self.total_dri
1504
1505 elif self.param_set == 'all':
1506
1507 self.total_dri = self.total_dri * 0.0
1508
1509
1510 ri_start_index = 0
1511 ri_end_index = 0
1512
1513
1514 for i in xrange(self.num_res):
1515
1516 data = self.data[i]
1517
1518
1519 ri_end_index = ri_end_index + data.num_ri
1520
1521
1522 self.total_dri[0:self.diff_data.num_params, ri_start_index:ri_end_index] = self.total_dri[0:self.diff_data.num_params, ri_start_index:ri_end_index] + data.dri[0:self.diff_data.num_params]
1523
1524
1525 self.total_dri[data.start_index:data.end_index, ri_start_index:ri_end_index] = self.total_dri[data.start_index:data.end_index, ri_start_index:ri_end_index] + data.dri[self.diff_data.num_params:]
1526
1527
1528 ri_start_index = ri_start_index + data.num_ri
1529
1530
1531 dri = self.total_dri
1532
1533
1534 dri = transpose(dri)
1535
1536
1537 if self.scaling_flag:
1538 dri = matrixmultiply(dri, self.scaling_matrix)
1539
1540
1541 return dri
1542
1543
1545 """Setup all the residue specific equations."""
1546
1547
1548
1549
1550
1551 if self.param_set != 'all':
1552 num_diff_params = 0
1553 elif self.diff_data.type == 'sphere':
1554 num_diff_params = 1
1555 elif self.diff_data.type == 'spheroid':
1556 num_diff_params = 4
1557 elif self.diff_data.type == 'ellipsoid':
1558 num_diff_params = 6
1559
1560
1561 data.tm_i, data.tm_li = None, None
1562 data.s2_i, data.s2_li = None, None
1563 data.s2f_i, data.s2f_li = None, None
1564 data.s2s_i, data.s2s_li = None, None
1565 data.te_i, data.te_li = None, None
1566 data.tf_i, data.tf_li = None, None
1567 data.ts_i, data.ts_li = None, None
1568 data.rex_i, data.rex_li = None, None
1569 data.r_i, data.r_li = None, None
1570 data.csa_i, data.csa_li = None, None
1571
1572
1573
1574
1575
1576 data.calc_djw = []
1577 data.calc_d2jw = []
1578 for i in xrange(data.total_num_params):
1579 data.calc_djw.append(None)
1580 data.calc_d2jw.append([])
1581 for j in xrange(data.total_num_params):
1582 data.calc_d2jw[i].append(None)
1583
1584
1585
1586
1587
1588 if data.equations == 'mf_orig':
1589
1590 for i in xrange(data.num_params):
1591 if data.param_types[i] == 'S2':
1592 data.s2_li = num_diff_params + i
1593 data.s2_i = self.param_index + i
1594 elif data.param_types[i] == 'te':
1595 data.te_li = num_diff_params + i
1596 data.te_i = self.param_index + i
1597 elif data.param_types[i] == 'Rex':
1598 data.rex_li = num_diff_params + i
1599 data.rex_i = self.param_index + i
1600 elif data.param_types[i] == 'r':
1601 data.r_li = num_diff_params + i
1602 data.r_i = self.param_index + i
1603 elif data.param_types[i] == 'CSA':
1604 data.csa_li = num_diff_params + i
1605 data.csa_i = self.param_index + i
1606 elif data.param_types[i] == 'local_tm':
1607 pass
1608 else:
1609 print "Unknown parameter."
1610 return 0
1611
1612
1613 self.param_index = self.param_index + data.num_params
1614
1615
1616 if self.param_set == 'mf':
1617
1618 if data.s2_i == None and data.te_i == None:
1619
1620 data.calc_jw_comps = None
1621 data.calc_jw = calc_jw
1622
1623
1624 data.calc_djw_comps = None
1625
1626
1627 elif data.s2_i != None and data.te_i == None:
1628
1629 data.calc_jw_comps = None
1630 data.calc_jw = calc_S2_jw
1631
1632
1633 data.calc_djw_comps = None
1634 data.calc_djw[data.s2_li] = calc_S2_djw_dS2
1635
1636
1637 elif data.s2_i != None and data.te_i != None:
1638
1639 data.calc_jw_comps = calc_S2_te_jw_comps
1640 data.calc_jw = calc_S2_te_jw
1641
1642
1643 data.calc_djw_comps = calc_S2_te_djw_comps
1644 data.calc_djw[data.s2_li] = calc_S2_te_djw_dS2
1645 data.calc_djw[data.te_li] = calc_S2_te_djw_dte
1646
1647
1648 data.calc_d2jw[data.s2_li][data.te_li] = data.calc_d2jw[data.te_li][data.s2_li] = calc_S2_te_d2jw_dS2dte
1649 data.calc_d2jw[data.te_li][data.te_li] = calc_S2_te_d2jw_dte2
1650
1651
1652 else:
1653 print "Invalid combination of parameters for the extended model-free equation."
1654 return 0
1655
1656
1657 else:
1658
1659 if data.s2_i == None and data.te_i == None:
1660
1661 data.calc_jw_comps = None
1662 data.calc_jw = calc_jw
1663
1664
1665 data.calc_djw_comps = calc_diff_djw_comps
1666
1667
1668 if self.diff_data.type == 'sphere':
1669
1670 data.calc_djw[0] = calc_diff_djw_dGj
1671
1672
1673 data.calc_d2jw[0][0] = calc_diff_d2jw_dGjdGk
1674
1675
1676 elif self.diff_data.type == 'spheroid':
1677
1678 data.calc_djw[0] = data.calc_djw[1] = calc_diff_djw_dGj
1679 data.calc_djw[2] = data.calc_djw[3] = calc_diff_djw_dOj
1680
1681
1682 data.calc_d2jw[0][0] = calc_diff_d2jw_dGjdGk
1683 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_d2jw_dGjdGk
1684 data.calc_d2jw[1][1] = calc_diff_d2jw_dGjdGk
1685
1686 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_d2jw_dGjdOj
1687 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_d2jw_dGjdOj
1688 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_d2jw_dGjdOj
1689 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_d2jw_dGjdOj
1690
1691 data.calc_d2jw[2][2] = calc_diff_d2jw_dOjdOk
1692 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_d2jw_dOjdOk
1693 data.calc_d2jw[3][3] = calc_diff_d2jw_dOjdOk
1694
1695
1696 elif self.diff_data.type == 'ellipsoid':
1697
1698 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_djw_dGj
1699 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_djw_dOj
1700
1701
1702 data.calc_d2jw[0][0] = calc_ellipsoid_d2jw_dGjdGk
1703 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_d2jw_dGjdGk
1704 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_d2jw_dGjdGk
1705 data.calc_d2jw[1][1] = calc_ellipsoid_d2jw_dGjdGk
1706 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_d2jw_dGjdGk
1707 data.calc_d2jw[2][2] = calc_ellipsoid_d2jw_dGjdGk
1708
1709 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_d2jw_dGjdOj
1710 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_d2jw_dGjdOj
1711 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_d2jw_dGjdOj
1712 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_d2jw_dGjdOj
1713 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_d2jw_dGjdOj
1714 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_d2jw_dGjdOj
1715 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_d2jw_dGjdOj
1716 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_d2jw_dGjdOj
1717 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_d2jw_dGjdOj
1718
1719 data.calc_d2jw[3][3] = calc_diff_d2jw_dOjdOk
1720 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_d2jw_dOjdOk
1721 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_d2jw_dOjdOk
1722 data.calc_d2jw[4][4] = calc_diff_d2jw_dOjdOk
1723 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_d2jw_dOjdOk
1724 data.calc_d2jw[5][5] = calc_diff_d2jw_dOjdOk
1725
1726
1727 elif data.s2_i != None and data.te_i == None:
1728
1729 data.calc_jw_comps = None
1730 data.calc_jw = calc_S2_jw
1731
1732
1733 data.calc_djw_comps = calc_diff_djw_comps
1734
1735 if self.param_set != 'diff':
1736
1737 data.calc_djw[data.s2_li] = calc_S2_djw_dS2
1738
1739
1740 if self.diff_data.type == 'sphere':
1741
1742 data.calc_djw[0] = calc_diff_S2_djw_dGj
1743
1744
1745 data.calc_d2jw[0][0] = calc_diff_S2_d2jw_dGjdGk
1746 if self.param_set != 'diff':
1747 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2_d2jw_dGjdS2
1748
1749
1750 elif self.diff_data.type == 'spheroid':
1751
1752 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2_djw_dGj
1753 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2_djw_dOj
1754
1755
1756 data.calc_d2jw[0][0] = calc_diff_S2_d2jw_dGjdGk
1757 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2_d2jw_dGjdGk
1758 data.calc_d2jw[1][1] = calc_diff_S2_d2jw_dGjdGk
1759
1760 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2_d2jw_dGjdOj
1761 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2_d2jw_dGjdOj
1762 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2_d2jw_dGjdOj
1763 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2_d2jw_dGjdOj
1764
1765 data.calc_d2jw[2][2] = calc_diff_S2_d2jw_dOjdOk
1766 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2_d2jw_dOjdOk
1767 data.calc_d2jw[3][3] = calc_diff_S2_d2jw_dOjdOk
1768
1769 if self.param_set != 'diff':
1770 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2_d2jw_dGjdS2
1771 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_diff_S2_d2jw_dGjdS2
1772 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_diff_S2_d2jw_dOjdS2
1773 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2_d2jw_dOjdS2
1774
1775
1776 elif self.diff_data.type == 'ellipsoid':
1777
1778 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2_djw_dGj
1779 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2_djw_dOj
1780
1781
1782 data.calc_d2jw[0][0] = calc_ellipsoid_S2_d2jw_dGjdGk
1783 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2_d2jw_dGjdGk
1784 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2_d2jw_dGjdGk
1785 data.calc_d2jw[1][1] = calc_ellipsoid_S2_d2jw_dGjdGk
1786 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2_d2jw_dGjdGk
1787 data.calc_d2jw[2][2] = calc_ellipsoid_S2_d2jw_dGjdGk
1788
1789 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2_d2jw_dGjdOj
1790 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2_d2jw_dGjdOj
1791 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2_d2jw_dGjdOj
1792 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2_d2jw_dGjdOj
1793 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2_d2jw_dGjdOj
1794 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2_d2jw_dGjdOj
1795 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2_d2jw_dGjdOj
1796 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2_d2jw_dGjdOj
1797 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2_d2jw_dGjdOj
1798
1799 data.calc_d2jw[3][3] = calc_diff_S2_d2jw_dOjdOk
1800 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2_d2jw_dOjdOk
1801 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2_d2jw_dOjdOk
1802 data.calc_d2jw[4][4] = calc_diff_S2_d2jw_dOjdOk
1803 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2_d2jw_dOjdOk
1804 data.calc_d2jw[5][5] = calc_diff_S2_d2jw_dOjdOk
1805
1806 if self.param_set != 'diff':
1807 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_ellipsoid_S2_d2jw_dGjdS2
1808 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_ellipsoid_S2_d2jw_dGjdS2
1809 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_ellipsoid_S2_d2jw_dGjdS2
1810 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2_d2jw_dOjdS2
1811 data.calc_d2jw[4][data.s2_li] = data.calc_d2jw[data.s2_li][4] = calc_diff_S2_d2jw_dOjdS2
1812 data.calc_d2jw[5][data.s2_li] = data.calc_d2jw[data.s2_li][5] = calc_diff_S2_d2jw_dOjdS2
1813
1814
1815
1816 elif data.s2_i != None and data.te_i != None:
1817
1818 data.calc_jw_comps = calc_S2_te_jw_comps
1819 data.calc_jw = calc_S2_te_jw
1820
1821
1822 data.calc_djw_comps = calc_diff_S2_te_djw_comps
1823
1824 if self.param_set != 'diff':
1825
1826 data.calc_djw[data.s2_li] = calc_S2_te_djw_dS2
1827 data.calc_djw[data.te_li] = calc_S2_te_djw_dte
1828
1829
1830 data.calc_d2jw[data.s2_li][data.te_li] = data.calc_d2jw[data.te_li][data.s2_li] = calc_S2_te_d2jw_dS2dte
1831 data.calc_d2jw[data.te_li][data.te_li] = calc_S2_te_d2jw_dte2
1832
1833
1834 if self.diff_data.type == 'sphere':
1835
1836 data.calc_djw[0] = calc_diff_S2_te_djw_dGj
1837
1838
1839 data.calc_d2jw[0][0] = calc_diff_S2_te_d2jw_dGjdGk
1840 if self.param_set != 'diff':
1841 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2_te_d2jw_dGjdS2
1842 data.calc_d2jw[0][data.te_li] = data.calc_d2jw[data.te_li][0] = calc_diff_S2_te_d2jw_dGjdte
1843
1844
1845 elif self.diff_data.type == 'spheroid':
1846
1847 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2_te_djw_dGj
1848 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2_te_djw_dOj
1849
1850
1851 data.calc_d2jw[0][0] = calc_diff_S2_te_d2jw_dGjdGk
1852 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2_te_d2jw_dGjdGk
1853 data.calc_d2jw[1][1] = calc_diff_S2_te_d2jw_dGjdGk
1854
1855 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2_te_d2jw_dGjdOj
1856 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2_te_d2jw_dGjdOj
1857 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2_te_d2jw_dGjdOj
1858 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2_te_d2jw_dGjdOj
1859
1860 data.calc_d2jw[2][2] = calc_diff_S2_te_d2jw_dOjdOk
1861 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2_te_d2jw_dOjdOk
1862 data.calc_d2jw[3][3] = calc_diff_S2_te_d2jw_dOjdOk
1863
1864 if self.param_set != 'diff':
1865 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2_te_d2jw_dGjdS2
1866 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_diff_S2_te_d2jw_dGjdS2
1867 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_diff_S2_te_d2jw_dOjdS2
1868 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2_te_d2jw_dOjdS2
1869
1870 data.calc_d2jw[0][data.te_li] = data.calc_d2jw[data.te_li][0] = calc_diff_S2_te_d2jw_dGjdte
1871 data.calc_d2jw[1][data.te_li] = data.calc_d2jw[data.te_li][1] = calc_diff_S2_te_d2jw_dGjdte
1872 data.calc_d2jw[2][data.te_li] = data.calc_d2jw[data.te_li][2] = calc_diff_S2_te_d2jw_dOjdte
1873 data.calc_d2jw[3][data.te_li] = data.calc_d2jw[data.te_li][3] = calc_diff_S2_te_d2jw_dOjdte
1874
1875
1876 elif self.diff_data.type == 'ellipsoid':
1877
1878 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2_te_djw_dGj
1879 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2_te_djw_dOj
1880
1881
1882 data.calc_d2jw[0][0] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1883 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1884 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1885 data.calc_d2jw[1][1] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1886 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1887 data.calc_d2jw[2][2] = calc_ellipsoid_S2_te_d2jw_dGjdGk
1888
1889 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1890 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1891 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1892 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1893 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1894 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1895 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1896 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1897 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2_te_d2jw_dGjdOj
1898
1899 data.calc_d2jw[3][3] = calc_diff_S2_te_d2jw_dOjdOk
1900 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2_te_d2jw_dOjdOk
1901 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2_te_d2jw_dOjdOk
1902 data.calc_d2jw[4][4] = calc_diff_S2_te_d2jw_dOjdOk
1903 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2_te_d2jw_dOjdOk
1904 data.calc_d2jw[5][5] = calc_diff_S2_te_d2jw_dOjdOk
1905
1906 if self.param_set != 'diff':
1907 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_ellipsoid_S2_te_d2jw_dGjdS2
1908 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_ellipsoid_S2_te_d2jw_dGjdS2
1909 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_ellipsoid_S2_te_d2jw_dGjdS2
1910 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2_te_d2jw_dOjdS2
1911 data.calc_d2jw[4][data.s2_li] = data.calc_d2jw[data.s2_li][4] = calc_diff_S2_te_d2jw_dOjdS2
1912 data.calc_d2jw[5][data.s2_li] = data.calc_d2jw[data.s2_li][5] = calc_diff_S2_te_d2jw_dOjdS2
1913
1914 data.calc_d2jw[0][data.te_li] = data.calc_d2jw[data.te_li][0] = calc_ellipsoid_S2_te_d2jw_dGjdte
1915 data.calc_d2jw[1][data.te_li] = data.calc_d2jw[data.te_li][1] = calc_ellipsoid_S2_te_d2jw_dGjdte
1916 data.calc_d2jw[2][data.te_li] = data.calc_d2jw[data.te_li][2] = calc_ellipsoid_S2_te_d2jw_dGjdte
1917 data.calc_d2jw[3][data.te_li] = data.calc_d2jw[data.te_li][3] = calc_diff_S2_te_d2jw_dOjdte
1918 data.calc_d2jw[4][data.te_li] = data.calc_d2jw[data.te_li][4] = calc_diff_S2_te_d2jw_dOjdte
1919 data.calc_d2jw[5][data.te_li] = data.calc_d2jw[data.te_li][5] = calc_diff_S2_te_d2jw_dOjdte
1920
1921
1922 else:
1923 print "Invalid combination of parameters for the extended model-free equation."
1924 return 0
1925
1926
1927
1928
1929
1930
1931 elif data.equations == 'mf_ext':
1932
1933 for i in xrange(data.num_params):
1934 if data.param_types[i] == 'S2f':
1935 data.s2f_li = num_diff_params + i
1936 data.s2f_i = self.param_index + i
1937 elif data.param_types[i] == 'tf':
1938 data.tf_li = num_diff_params + i
1939 data.tf_i = self.param_index + i
1940 elif data.param_types[i] == 'S2':
1941 data.s2_li = num_diff_params + i
1942 data.s2_i = self.param_index + i
1943 elif data.param_types[i] == 'ts':
1944 data.ts_li = num_diff_params + i
1945 data.ts_i = self.param_index + i
1946 elif data.param_types[i] == 'Rex':
1947 data.rex_li = num_diff_params + i
1948 data.rex_i = self.param_index + i
1949 elif data.param_types[i] == 'r':
1950 data.r_li = num_diff_params + i
1951 data.r_i = self.param_index + i
1952 elif data.param_types[i] == 'CSA':
1953 data.csa_li = num_diff_params + i
1954 data.csa_i = self.param_index + i
1955 elif data.param_types[i] == 'local_tm':
1956 pass
1957 else:
1958 print "Unknown parameter."
1959 return 0
1960
1961
1962 self.param_index = self.param_index + data.num_params
1963
1964
1965 if self.param_set == 'mf':
1966
1967 if data.s2f_i != None and data.tf_i == None and data.s2_i != None and data.ts_i != None:
1968
1969 data.calc_jw_comps = calc_S2f_S2_ts_jw_comps
1970 data.calc_jw = calc_S2f_S2_ts_jw
1971
1972
1973 data.calc_djw_comps = calc_S2f_S2_ts_djw_comps
1974 data.calc_djw[data.s2f_li] = calc_S2f_S2_ts_djw_dS2f
1975 data.calc_djw[data.s2_li] = calc_S2f_S2_ts_djw_dS2
1976 data.calc_djw[data.ts_li] = calc_S2f_S2_ts_djw_dts
1977
1978
1979 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_S2_ts_d2jw_dS2fdts
1980 data.calc_d2jw[data.s2_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2_li] = calc_S2f_S2_ts_d2jw_dS2dts
1981 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_S2_ts_d2jw_dts2
1982
1983
1984 elif data.s2f_i != None and data.tf_i != None and data.s2_i != None and data.ts_i != None:
1985
1986 data.calc_jw_comps = calc_S2f_tf_S2_ts_jw_comps
1987 data.calc_jw = calc_S2f_tf_S2_ts_jw
1988
1989
1990 data.calc_djw_comps = calc_S2f_tf_S2_ts_djw_comps
1991 data.calc_djw[data.s2f_li] = calc_S2f_tf_S2_ts_djw_dS2f
1992 data.calc_djw[data.tf_li] = calc_S2f_tf_S2_ts_djw_dtf
1993 data.calc_djw[data.s2_li] = calc_S2f_S2_ts_djw_dS2
1994 data.calc_djw[data.ts_li] = calc_S2f_S2_ts_djw_dts
1995
1996
1997 data.calc_d2jw[data.s2f_li][data.tf_li] = data.calc_d2jw[data.tf_li][data.s2f_li] = calc_S2f_tf_S2_ts_d2jw_dS2fdtf
1998 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_S2_ts_d2jw_dS2fdts
1999 data.calc_d2jw[data.s2_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2_li] = calc_S2f_S2_ts_d2jw_dS2dts
2000 data.calc_d2jw[data.tf_li][data.tf_li] = calc_S2f_tf_S2_ts_d2jw_dtf2
2001 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_S2_ts_d2jw_dts2
2002
2003
2004 else:
2005 print "Invalid combination of parameters for the extended model-free equation."
2006 return 0
2007
2008
2009 else:
2010
2011 if data.s2f_i != None and data.tf_i == None and data.s2_i != None and data.ts_i != None:
2012
2013 data.calc_jw_comps = calc_S2f_S2_ts_jw_comps
2014 data.calc_jw = calc_S2f_S2_ts_jw
2015
2016
2017 data.calc_djw_comps = calc_diff_S2f_S2_ts_djw_comps
2018
2019 if self.param_set != 'diff':
2020
2021 data.calc_djw[data.s2f_li] = calc_S2f_S2_ts_djw_dS2f
2022 data.calc_djw[data.s2_li] = calc_S2f_S2_ts_djw_dS2
2023 data.calc_djw[data.ts_li] = calc_S2f_S2_ts_djw_dts
2024
2025
2026 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_S2_ts_d2jw_dS2fdts
2027 data.calc_d2jw[data.s2_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2_li] = calc_S2f_S2_ts_d2jw_dS2dts
2028 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_S2_ts_d2jw_dts2
2029
2030
2031 if self.diff_data.type == 'sphere':
2032
2033 data.calc_djw[0] = calc_diff_S2f_S2_ts_djw_dGj
2034
2035
2036 data.calc_d2jw[0][0] = calc_diff_S2f_S2_ts_d2jw_dGjdGk
2037 if self.param_set != 'diff':
2038 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2f
2039 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2040 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2041
2042
2043 elif self.diff_data.type == 'spheroid':
2044
2045 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2f_S2_ts_djw_dGj
2046 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2f_S2_ts_djw_dOj
2047
2048
2049 data.calc_d2jw[0][0] = calc_diff_S2f_S2_ts_d2jw_dGjdGk
2050 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2f_S2_ts_d2jw_dGjdGk
2051 data.calc_d2jw[1][1] = calc_diff_S2f_S2_ts_d2jw_dGjdGk
2052
2053 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2f_S2_ts_d2jw_dGjdOj
2054 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2f_S2_ts_d2jw_dGjdOj
2055 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2f_S2_ts_d2jw_dGjdOj
2056 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2f_S2_ts_d2jw_dGjdOj
2057
2058 data.calc_d2jw[2][2] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2059 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2060 data.calc_d2jw[3][3] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2061
2062 if self.param_set != 'diff':
2063 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2f
2064 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_diff_S2f_S2_ts_d2jw_dGjdS2f
2065 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_diff_S2f_S2_ts_d2jw_dOjdS2f
2066 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2f
2067
2068 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2069 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2070 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2071 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2072
2073 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2074 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2075 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2076 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2077
2078
2079 elif self.diff_data.type == 'ellipsoid':
2080
2081 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2f_S2_ts_djw_dGj
2082 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2f_S2_ts_djw_dOj
2083
2084
2085 data.calc_d2jw[0][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2086 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2087 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2088 data.calc_d2jw[1][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2089 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2090 data.calc_d2jw[2][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdGk
2091
2092 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2093 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2094 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2095 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2096 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2097 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2098 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2099 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2100 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdOj
2101
2102 data.calc_d2jw[3][3] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2103 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2104 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2105 data.calc_d2jw[4][4] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2106 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2107 data.calc_d2jw[5][5] = calc_diff_S2f_S2_ts_d2jw_dOjdOk
2108
2109 if self.param_set != 'diff':
2110 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2f
2111 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2f
2112 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2f
2113 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2f
2114 data.calc_d2jw[4][data.s2f_li] = data.calc_d2jw[data.s2f_li][4] = calc_diff_S2f_S2_ts_d2jw_dOjdS2f
2115 data.calc_d2jw[5][data.s2f_li] = data.calc_d2jw[data.s2f_li][5] = calc_diff_S2f_S2_ts_d2jw_dOjdS2f
2116
2117 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2118 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2119 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2120 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2121 data.calc_d2jw[4][data.s2_li] = data.calc_d2jw[data.s2_li][4] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2122 data.calc_d2jw[5][data.s2_li] = data.calc_d2jw[data.s2_li][5] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2123
2124 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2125 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2126 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2127 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2128 data.calc_d2jw[4][data.ts_li] = data.calc_d2jw[data.ts_li][4] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2129 data.calc_d2jw[5][data.ts_li] = data.calc_d2jw[data.ts_li][5] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2130
2131
2132
2133 elif data.s2f_i != None and data.tf_i != None and data.s2_i != None and data.ts_i != None:
2134
2135 data.calc_jw_comps = calc_S2f_tf_S2_ts_jw_comps
2136 data.calc_jw = calc_S2f_tf_S2_ts_jw
2137
2138
2139 data.calc_djw_comps = calc_diff_S2f_tf_S2_ts_djw_comps
2140
2141 if self.param_set != 'diff':
2142
2143 data.calc_djw[data.s2f_li] = calc_S2f_tf_S2_ts_djw_dS2f
2144 data.calc_djw[data.tf_li] = calc_S2f_tf_S2_ts_djw_dtf
2145 data.calc_djw[data.s2_li] = calc_S2f_S2_ts_djw_dS2
2146 data.calc_djw[data.ts_li] = calc_S2f_S2_ts_djw_dts
2147
2148
2149 data.calc_d2jw[data.s2f_li][data.tf_li] = data.calc_d2jw[data.tf_li][data.s2f_li] = calc_S2f_tf_S2_ts_d2jw_dS2fdtf
2150 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_S2_ts_d2jw_dS2fdts
2151 data.calc_d2jw[data.s2_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2_li] = calc_S2f_S2_ts_d2jw_dS2dts
2152 data.calc_d2jw[data.tf_li][data.tf_li] = calc_S2f_tf_S2_ts_d2jw_dtf2
2153 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_S2_ts_d2jw_dts2
2154
2155
2156 if self.diff_data.type == 'sphere':
2157
2158 data.calc_djw[0] = calc_diff_S2f_tf_S2_ts_djw_dGj
2159
2160
2161 data.calc_d2jw[0][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdGk
2162 if self.param_set != 'diff':
2163 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdS2f
2164 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdtf
2165 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2166 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2167
2168
2169 elif self.diff_data.type == 'spheroid':
2170
2171 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2f_tf_S2_ts_djw_dGj
2172 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2f_tf_S2_ts_djw_dOj
2173
2174
2175 data.calc_d2jw[0][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdGk
2176 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdGk
2177 data.calc_d2jw[1][1] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdGk
2178
2179 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdOj
2180 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdOj
2181 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdOj
2182 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdOj
2183
2184 data.calc_d2jw[2][2] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2185 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2186 data.calc_d2jw[3][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2187
2188 if self.param_set != 'diff':
2189 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdS2f
2190 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdS2f
2191 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdS2f
2192 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdS2f
2193
2194 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdtf
2195 data.calc_d2jw[1][data.tf_li] = data.calc_d2jw[data.tf_li][1] = calc_diff_S2f_tf_S2_ts_d2jw_dGjdtf
2196 data.calc_d2jw[2][data.tf_li] = data.calc_d2jw[data.tf_li][2] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdtf
2197 data.calc_d2jw[3][data.tf_li] = data.calc_d2jw[data.tf_li][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdtf
2198
2199 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2200 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_diff_S2f_S2_ts_d2jw_dGjdS2
2201 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2202 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2203
2204 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2205 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_diff_S2f_S2_ts_d2jw_dGjdts
2206 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2207 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2208
2209
2210 elif self.diff_data.type == 'ellipsoid':
2211
2212 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2f_tf_S2_ts_djw_dGj
2213 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2f_tf_S2_ts_djw_dOj
2214
2215
2216 data.calc_d2jw[0][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2217 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2218 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2219 data.calc_d2jw[1][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2220 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2221 data.calc_d2jw[2][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdGk
2222
2223 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2224 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2225 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2226 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2227 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2228 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2229 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2230 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2231 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdOj
2232
2233 data.calc_d2jw[3][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2234 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2235 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2236 data.calc_d2jw[4][4] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2237 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2238 data.calc_d2jw[5][5] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdOk
2239
2240 if self.param_set != 'diff':
2241 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdS2f
2242 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdS2f
2243 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdS2f
2244 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdS2f
2245 data.calc_d2jw[4][data.s2f_li] = data.calc_d2jw[data.s2f_li][4] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdS2f
2246 data.calc_d2jw[5][data.s2f_li] = data.calc_d2jw[data.s2f_li][5] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdS2f
2247
2248 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdtf
2249 data.calc_d2jw[1][data.tf_li] = data.calc_d2jw[data.tf_li][1] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdtf
2250 data.calc_d2jw[2][data.tf_li] = data.calc_d2jw[data.tf_li][2] = calc_ellipsoid_S2f_tf_S2_ts_d2jw_dGjdtf
2251 data.calc_d2jw[3][data.tf_li] = data.calc_d2jw[data.tf_li][3] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdtf
2252 data.calc_d2jw[4][data.tf_li] = data.calc_d2jw[data.tf_li][4] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdtf
2253 data.calc_d2jw[5][data.tf_li] = data.calc_d2jw[data.tf_li][5] = calc_diff_S2f_tf_S2_ts_d2jw_dOjdtf
2254
2255 data.calc_d2jw[0][data.s2_li] = data.calc_d2jw[data.s2_li][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2256 data.calc_d2jw[1][data.s2_li] = data.calc_d2jw[data.s2_li][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2257 data.calc_d2jw[2][data.s2_li] = data.calc_d2jw[data.s2_li][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdS2
2258 data.calc_d2jw[3][data.s2_li] = data.calc_d2jw[data.s2_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2259 data.calc_d2jw[4][data.s2_li] = data.calc_d2jw[data.s2_li][4] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2260 data.calc_d2jw[5][data.s2_li] = data.calc_d2jw[data.s2_li][5] = calc_diff_S2f_S2_ts_d2jw_dOjdS2
2261
2262 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2263 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2264 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_ellipsoid_S2f_S2_ts_d2jw_dGjdts
2265 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2266 data.calc_d2jw[4][data.ts_li] = data.calc_d2jw[data.ts_li][4] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2267 data.calc_d2jw[5][data.ts_li] = data.calc_d2jw[data.ts_li][5] = calc_diff_S2f_S2_ts_d2jw_dOjdts
2268
2269
2270 else:
2271 print "Invalid combination of parameters for the extended model-free equation."
2272 return 0
2273
2274
2275
2276
2277
2278 elif data.equations == 'mf_ext2':
2279
2280 for i in xrange(data.num_params):
2281 if data.param_types[i] == 'S2f':
2282 data.s2f_li = num_diff_params + i
2283 data.s2f_i = self.param_index + i
2284 elif data.param_types[i] == 'tf':
2285 data.tf_li = num_diff_params + i
2286 data.tf_i = self.param_index + i
2287 elif data.param_types[i] == 'S2s':
2288 data.s2s_li = num_diff_params + i
2289 data.s2s_i = self.param_index + i
2290 elif data.param_types[i] == 'ts':
2291 data.ts_li = num_diff_params + i
2292 data.ts_i = self.param_index + i
2293 elif data.param_types[i] == 'Rex':
2294 data.rex_li = num_diff_params + i
2295 data.rex_i = self.param_index + i
2296 elif data.param_types[i] == 'r':
2297 data.r_li = num_diff_params + i
2298 data.r_i = self.param_index + i
2299 elif data.param_types[i] == 'CSA':
2300 data.csa_li = num_diff_params + i
2301 data.csa_i = self.param_index + i
2302 elif data.param_types[i] == 'local_tm':
2303 pass
2304 else:
2305 print "Unknown parameter."
2306 return 0
2307
2308
2309 self.param_index = self.param_index + data.num_params
2310
2311
2312 if self.param_set == 'mf':
2313
2314 if data.s2f_i != None and data.tf_i == None and data.s2s_i != None and data.ts_i != None:
2315
2316 data.calc_jw_comps = calc_S2f_S2s_ts_jw_comps
2317 data.calc_jw = calc_S2f_S2s_ts_jw
2318
2319
2320 data.calc_djw_comps = calc_S2f_S2s_ts_djw_comps
2321 data.calc_djw[data.s2f_li] = calc_S2f_S2s_ts_djw_dS2f
2322 data.calc_djw[data.s2s_li] = calc_S2f_tf_S2s_ts_djw_dS2s
2323 data.calc_djw[data.ts_li] = calc_S2f_S2s_ts_djw_dts
2324
2325
2326 data.calc_d2jw[data.s2f_li][data.s2s_li] = data.calc_d2jw[data.s2s_li][data.s2f_li] = calc_S2f_S2s_ts_d2jw_dS2fdS2s
2327 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_S2s_ts_d2jw_dS2fdts
2328 data.calc_d2jw[data.s2s_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2s_li] = calc_S2f_S2s_ts_d2jw_dS2sdts
2329 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_S2s_ts_d2jw_dts2
2330
2331
2332 elif data.s2f_i != None and data.tf_i != None and data.s2s_i != None and data.ts_i != None:
2333
2334 data.calc_jw_comps = calc_S2f_tf_S2s_ts_jw_comps
2335 data.calc_jw = calc_S2f_tf_S2s_ts_jw
2336
2337
2338 data.calc_djw_comps = calc_S2f_tf_S2s_ts_djw_comps
2339 data.calc_djw[data.s2f_li] = calc_S2f_tf_S2s_ts_djw_dS2f
2340 data.calc_djw[data.tf_li] = calc_S2f_tf_S2s_ts_djw_dtf
2341 data.calc_djw[data.s2s_li] = calc_S2f_tf_S2s_ts_djw_dS2s
2342 data.calc_djw[data.ts_li] = calc_S2f_tf_S2s_ts_djw_dts
2343
2344
2345 data.calc_d2jw[data.s2f_li][data.s2s_li] = data.calc_d2jw[data.s2s_li][data.s2f_li] = calc_S2f_S2s_ts_d2jw_dS2fdS2s
2346 data.calc_d2jw[data.s2f_li][data.tf_li] = data.calc_d2jw[data.tf_li][data.s2f_li] = calc_S2f_tf_S2s_ts_d2jw_dS2fdtf
2347 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_S2f_tf_S2s_ts_d2jw_dS2fdts
2348 data.calc_d2jw[data.s2s_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2s_li] = calc_S2f_tf_S2s_ts_d2jw_dS2sdts
2349 data.calc_d2jw[data.tf_li][data.tf_li] = calc_S2f_tf_S2s_ts_d2jw_dtf2
2350 data.calc_d2jw[data.ts_li][data.ts_li] = calc_S2f_tf_S2s_ts_d2jw_dts2
2351
2352
2353 else:
2354 print "Invalid combination of parameters for the extended model-free equation."
2355 return 0
2356
2357
2358 else:
2359
2360 if data.s2f_i != None and data.tf_i == None and data.s2s_i != None and data.ts_i != None:
2361
2362 data.calc_jw_comps = calc_S2f_S2s_ts_jw_comps
2363 data.calc_jw = calc_S2f_S2s_ts_jw
2364
2365
2366 data.calc_djw_comps = calc_diff_S2f_S2s_ts_djw_comps
2367
2368 if self.param_set != 'diff':
2369
2370 data.calc_djw[data.s2f_li] = calc_diff_S2f_S2s_ts_djw_dS2f
2371 data.calc_djw[data.s2s_li] = calc_diff_S2f_S2s_ts_djw_dS2s
2372 data.calc_djw[data.ts_li] = calc_diff_S2f_S2s_ts_djw_dts
2373
2374
2375 data.calc_d2jw[data.s2f_li][data.s2s_li] = data.calc_d2jw[data.s2s_li][data.s2f_li] = calc_S2f_S2s_ts_d2jw_dS2fdS2s
2376 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_diff_S2f_S2s_ts_d2jw_dS2fdts
2377 data.calc_d2jw[data.s2s_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2s_li] = calc_diff_S2f_S2s_ts_d2jw_dS2sdts
2378 data.calc_d2jw[data.ts_li][data.ts_li] = calc_diff_S2f_S2s_ts_d2jw_dts2
2379
2380
2381 if self.diff_data.type == 'sphere':
2382
2383 data.calc_djw[0] = calc_diff_S2f_S2s_ts_djw_dGj
2384
2385
2386 data.calc_d2jw[0][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdGk
2387 if self.param_set != 'diff':
2388 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2f
2389 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2s
2390 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdts
2391
2392
2393 elif self.diff_data.type == 'spheroid':
2394
2395 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2f_S2s_ts_djw_dGj
2396 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2f_S2s_ts_djw_dOj
2397
2398
2399 data.calc_d2jw[0][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdGk
2400 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdGk
2401 data.calc_d2jw[1][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdGk
2402
2403 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdOj
2404 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdOj
2405 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdOj
2406 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdOj
2407
2408 data.calc_d2jw[2][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2409 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2410 data.calc_d2jw[3][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2411
2412 if self.param_set != 'diff':
2413 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2f
2414 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2f
2415 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2f
2416 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2f
2417
2418 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2s
2419 data.calc_d2jw[1][data.s2s_li] = data.calc_d2jw[data.s2s_li][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2s
2420 data.calc_d2jw[2][data.s2s_li] = data.calc_d2jw[data.s2s_li][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2421 data.calc_d2jw[3][data.s2s_li] = data.calc_d2jw[data.s2s_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2422
2423 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdts
2424 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdts
2425 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2426 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2427
2428
2429 elif self.diff_data.type == 'ellipsoid':
2430
2431 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2f_S2s_ts_djw_dGj
2432 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2f_S2s_ts_djw_dOj
2433
2434
2435 data.calc_d2jw[0][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2436 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2437 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2438 data.calc_d2jw[1][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2439 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2440 data.calc_d2jw[2][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdGk
2441
2442 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2443 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2444 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2445 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2446 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2447 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2448 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2449 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2450 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdOj
2451
2452 data.calc_d2jw[3][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2453 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2454 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2455 data.calc_d2jw[4][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2456 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2457 data.calc_d2jw[5][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdOk
2458
2459 if self.param_set != 'diff':
2460 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2f
2461 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2f
2462 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2f
2463 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2f
2464 data.calc_d2jw[4][data.s2f_li] = data.calc_d2jw[data.s2f_li][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2f
2465 data.calc_d2jw[5][data.s2f_li] = data.calc_d2jw[data.s2f_li][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2f
2466
2467 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2468 data.calc_d2jw[1][data.s2s_li] = data.calc_d2jw[data.s2s_li][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2469 data.calc_d2jw[2][data.s2s_li] = data.calc_d2jw[data.s2s_li][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2470 data.calc_d2jw[3][data.s2s_li] = data.calc_d2jw[data.s2s_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2471 data.calc_d2jw[4][data.s2s_li] = data.calc_d2jw[data.s2s_li][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2472 data.calc_d2jw[5][data.s2s_li] = data.calc_d2jw[data.s2s_li][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2473
2474 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2475 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2476 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2477 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2478 data.calc_d2jw[4][data.ts_li] = data.calc_d2jw[data.ts_li][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2479 data.calc_d2jw[5][data.ts_li] = data.calc_d2jw[data.ts_li][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2480
2481
2482 elif data.s2f_i != None and data.tf_i != None and data.s2s_i != None and data.ts_i != None:
2483
2484 data.calc_jw_comps = calc_S2f_tf_S2s_ts_jw_comps
2485 data.calc_jw = calc_S2f_tf_S2s_ts_jw
2486
2487
2488 data.calc_djw_comps = calc_diff_S2f_tf_S2s_ts_djw_comps
2489
2490 if self.param_set != 'diff':
2491
2492 data.calc_djw[data.s2f_li] = calc_diff_S2f_tf_S2s_ts_djw_dS2f
2493 data.calc_djw[data.tf_li] = calc_diff_S2f_tf_S2s_ts_djw_dtf
2494 data.calc_djw[data.s2s_li] = calc_diff_S2f_tf_S2s_ts_djw_dS2s
2495 data.calc_djw[data.ts_li] = calc_diff_S2f_tf_S2s_ts_djw_dts
2496
2497
2498 data.calc_d2jw[data.s2f_li][data.s2s_li] = data.calc_d2jw[data.s2s_li][data.s2f_li] = calc_S2f_S2s_ts_d2jw_dS2fdS2s
2499 data.calc_d2jw[data.s2f_li][data.tf_li] = data.calc_d2jw[data.tf_li][data.s2f_li] = calc_diff_S2f_tf_S2s_ts_d2jw_dS2fdtf
2500 data.calc_d2jw[data.s2f_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2f_li] = calc_diff_S2f_tf_S2s_ts_d2jw_dS2fdts
2501 data.calc_d2jw[data.tf_li][data.tf_li] = calc_diff_S2f_tf_S2s_ts_d2jw_dtf2
2502 data.calc_d2jw[data.s2s_li][data.ts_li] = data.calc_d2jw[data.ts_li][data.s2s_li] = calc_diff_S2f_tf_S2s_ts_d2jw_dS2sdts
2503 data.calc_d2jw[data.ts_li][data.ts_li] = calc_diff_S2f_tf_S2s_ts_d2jw_dts2
2504
2505
2506 if self.diff_data.type == 'sphere':
2507
2508 data.calc_djw[0] = calc_diff_S2f_tf_S2s_ts_djw_dGj
2509
2510
2511 data.calc_d2jw[0][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdGk
2512 if self.param_set != 'diff':
2513 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdS2f
2514 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdtf
2515 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdS2s
2516 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdts
2517
2518
2519 elif self.diff_data.type == 'spheroid':
2520
2521 data.calc_djw[0] = data.calc_djw[1] = calc_diff_S2f_tf_S2s_ts_djw_dGj
2522 data.calc_djw[2] = data.calc_djw[3] = calc_diff_S2f_tf_S2s_ts_djw_dOj
2523
2524
2525 data.calc_d2jw[0][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdGk
2526 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdGk
2527 data.calc_d2jw[1][1] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdGk
2528
2529 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdOj
2530 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdOj
2531 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdOj
2532 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdOj
2533
2534 data.calc_d2jw[2][2] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2535 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2536 data.calc_d2jw[3][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2537
2538 if self.param_set != 'diff':
2539 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdS2f
2540 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdS2f
2541 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdS2f
2542 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdS2f
2543
2544 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdtf
2545 data.calc_d2jw[1][data.tf_li] = data.calc_d2jw[data.tf_li][1] = calc_diff_S2f_tf_S2s_ts_d2jw_dGjdtf
2546 data.calc_d2jw[2][data.tf_li] = data.calc_d2jw[data.tf_li][2] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdtf
2547 data.calc_d2jw[3][data.tf_li] = data.calc_d2jw[data.tf_li][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdtf
2548
2549 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2s
2550 data.calc_d2jw[1][data.s2s_li] = data.calc_d2jw[data.s2s_li][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdS2s
2551 data.calc_d2jw[2][data.s2s_li] = data.calc_d2jw[data.s2s_li][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2552 data.calc_d2jw[3][data.s2s_li] = data.calc_d2jw[data.s2s_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2553
2554 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_diff_S2f_S2s_ts_d2jw_dGjdts
2555 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_diff_S2f_S2s_ts_d2jw_dGjdts
2556 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2557 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2558
2559
2560 elif self.diff_data.type == 'ellipsoid':
2561
2562 data.calc_djw[0] = data.calc_djw[1] = data.calc_djw[2] = calc_ellipsoid_S2f_tf_S2s_ts_djw_dGj
2563 data.calc_djw[3] = data.calc_djw[4] = data.calc_djw[5] = calc_diff_S2f_tf_S2s_ts_djw_dOj
2564
2565
2566 data.calc_d2jw[0][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2567 data.calc_d2jw[0][1] = data.calc_d2jw[1][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2568 data.calc_d2jw[0][2] = data.calc_d2jw[2][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2569 data.calc_d2jw[1][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2570 data.calc_d2jw[1][2] = data.calc_d2jw[2][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2571 data.calc_d2jw[2][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdGk
2572
2573 data.calc_d2jw[0][3] = data.calc_d2jw[3][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2574 data.calc_d2jw[0][4] = data.calc_d2jw[4][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2575 data.calc_d2jw[0][5] = data.calc_d2jw[5][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2576 data.calc_d2jw[1][3] = data.calc_d2jw[3][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2577 data.calc_d2jw[1][4] = data.calc_d2jw[4][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2578 data.calc_d2jw[1][5] = data.calc_d2jw[5][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2579 data.calc_d2jw[2][3] = data.calc_d2jw[3][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2580 data.calc_d2jw[2][4] = data.calc_d2jw[4][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2581 data.calc_d2jw[2][5] = data.calc_d2jw[5][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdOj
2582
2583 data.calc_d2jw[3][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2584 data.calc_d2jw[3][4] = data.calc_d2jw[4][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2585 data.calc_d2jw[3][5] = data.calc_d2jw[5][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2586 data.calc_d2jw[4][4] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2587 data.calc_d2jw[4][5] = data.calc_d2jw[5][4] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2588 data.calc_d2jw[5][5] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdOk
2589
2590 if self.param_set != 'diff':
2591 data.calc_d2jw[0][data.s2f_li] = data.calc_d2jw[data.s2f_li][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdS2f
2592 data.calc_d2jw[1][data.s2f_li] = data.calc_d2jw[data.s2f_li][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdS2f
2593 data.calc_d2jw[2][data.s2f_li] = data.calc_d2jw[data.s2f_li][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdS2f
2594 data.calc_d2jw[3][data.s2f_li] = data.calc_d2jw[data.s2f_li][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdS2f
2595 data.calc_d2jw[4][data.s2f_li] = data.calc_d2jw[data.s2f_li][4] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdS2f
2596 data.calc_d2jw[5][data.s2f_li] = data.calc_d2jw[data.s2f_li][5] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdS2f
2597
2598 data.calc_d2jw[0][data.tf_li] = data.calc_d2jw[data.tf_li][0] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdtf
2599 data.calc_d2jw[1][data.tf_li] = data.calc_d2jw[data.tf_li][1] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdtf
2600 data.calc_d2jw[2][data.tf_li] = data.calc_d2jw[data.tf_li][2] = calc_ellipsoid_S2f_tf_S2s_ts_d2jw_dGjdtf
2601 data.calc_d2jw[3][data.tf_li] = data.calc_d2jw[data.tf_li][3] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdtf
2602 data.calc_d2jw[4][data.tf_li] = data.calc_d2jw[data.tf_li][4] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdtf
2603 data.calc_d2jw[5][data.tf_li] = data.calc_d2jw[data.tf_li][5] = calc_diff_S2f_tf_S2s_ts_d2jw_dOjdtf
2604
2605 data.calc_d2jw[0][data.s2s_li] = data.calc_d2jw[data.s2s_li][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2606 data.calc_d2jw[1][data.s2s_li] = data.calc_d2jw[data.s2s_li][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2607 data.calc_d2jw[2][data.s2s_li] = data.calc_d2jw[data.s2s_li][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdS2s
2608 data.calc_d2jw[3][data.s2s_li] = data.calc_d2jw[data.s2s_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2609 data.calc_d2jw[4][data.s2s_li] = data.calc_d2jw[data.s2s_li][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2610 data.calc_d2jw[5][data.s2s_li] = data.calc_d2jw[data.s2s_li][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdS2s
2611
2612 data.calc_d2jw[0][data.ts_li] = data.calc_d2jw[data.ts_li][0] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2613 data.calc_d2jw[1][data.ts_li] = data.calc_d2jw[data.ts_li][1] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2614 data.calc_d2jw[2][data.ts_li] = data.calc_d2jw[data.ts_li][2] = calc_ellipsoid_S2f_S2s_ts_d2jw_dGjdts
2615 data.calc_d2jw[3][data.ts_li] = data.calc_d2jw[data.ts_li][3] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2616 data.calc_d2jw[4][data.ts_li] = data.calc_d2jw[data.ts_li][4] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2617 data.calc_d2jw[5][data.ts_li] = data.calc_d2jw[data.ts_li][5] = calc_diff_S2f_S2s_ts_d2jw_dOjdts
2618
2619
2620 else:
2621 print "Invalid combination of parameters for the extended model-free equation."
2622 return 0
2623
2624
2625 else:
2626 print "Unknown model-free equation."
2627 return 0
2628
2629
2630
2631
2632
2633
2634 data.create_dip_func, data.create_dip_grad, data.create_dip_hess = [], [], []
2635 data.create_csa_func, data.create_csa_grad, data.create_csa_hess = [], [], []
2636 data.create_rex_func, data.create_rex_grad = [], []
2637
2638 data.create_dip_jw_func, data.create_dip_jw_grad, data.create_dip_jw_hess = [], [], []
2639 data.create_csa_jw_func, data.create_csa_jw_grad, data.create_csa_jw_hess = [], [], []
2640
2641
2642 data.create_ri_prime = None
2643 data.create_dri_prime = []
2644 data.create_d2ri_prime = []
2645
2646
2647 data.create_ri, data.create_dri, data.create_d2ri = [], [], []
2648 data.get_r1, data.get_dr1, data.get_d2r1 = [], [], []
2649
2650
2651 for i in xrange(data.num_ri):
2652 data.create_dip_func.append(None)
2653 data.create_dip_grad.append(None)
2654 data.create_dip_hess.append(None)
2655 data.create_csa_func.append(None)
2656 data.create_csa_grad.append(None)
2657 data.create_csa_hess.append(None)
2658 data.create_rex_func.append(None)
2659 data.create_rex_grad.append(None)
2660 data.create_dip_jw_func.append(None)
2661 data.create_dip_jw_grad.append(None)
2662 data.create_dip_jw_hess.append(None)
2663 data.create_csa_jw_func.append(None)
2664 data.create_csa_jw_grad.append(None)
2665 data.create_csa_jw_hess.append(None)
2666 data.create_ri.append(None)
2667 data.create_dri.append(None)
2668 data.create_d2ri.append(None)
2669 data.get_r1.append(None)
2670 data.get_dr1.append(None)
2671 data.get_d2r1.append(None)
2672
2673
2674
2675
2676
2677 for i in xrange(data.num_ri):
2678
2679 if data.ri_labels[i] == 'R1':
2680 data.create_csa_func[i] = comp_r1_csa_const
2681 data.create_csa_grad[i] = comp_r1_csa_const
2682 data.create_csa_hess[i] = comp_r1_csa_const
2683 data.create_dip_jw_func[i] = comp_r1_dip_jw
2684 data.create_dip_jw_grad[i] = comp_r1_dip_jw
2685 data.create_dip_jw_hess[i] = comp_r1_dip_jw
2686 data.create_csa_jw_func[i] = comp_r1_csa_jw
2687 data.create_csa_jw_grad[i] = comp_r1_csa_jw
2688 data.create_csa_jw_hess[i] = comp_r1_csa_jw
2689
2690
2691 elif data.ri_labels[i] == 'R2':
2692 data.create_dip_func[i] = comp_r2_dip_const
2693 data.create_dip_grad[i] = comp_r2_dip_const
2694 data.create_dip_hess[i] = comp_r2_dip_const
2695 data.create_csa_func[i] = comp_r2_csa_const
2696 data.create_csa_grad[i] = comp_r2_csa_const
2697 data.create_csa_hess[i] = comp_r2_csa_const
2698 data.create_rex_func[i] = comp_rex_const_func
2699 data.create_rex_grad[i] = comp_rex_const_grad
2700 data.create_dip_jw_func[i] = comp_r2_dip_jw
2701 data.create_dip_jw_grad[i] = comp_r2_dip_jw
2702 data.create_dip_jw_hess[i] = comp_r2_dip_jw
2703 data.create_csa_jw_func[i] = comp_r2_csa_jw
2704 data.create_csa_jw_grad[i] = comp_r2_csa_jw
2705 data.create_csa_jw_hess[i] = comp_r2_csa_jw
2706
2707
2708 elif data.ri_labels[i] == 'NOE':
2709 data.create_dip_jw_func[i] = comp_sigma_noe_dip_jw
2710 data.create_dip_jw_grad[i] = comp_sigma_noe_dip_jw
2711 data.create_dip_jw_hess[i] = comp_sigma_noe_dip_jw
2712 data.create_ri[i] = calc_noe
2713 data.create_dri[i] = calc_dnoe
2714 data.create_d2ri[i] = calc_d2noe
2715 if data.noe_r1_table[i] == None:
2716 data.get_r1[i] = calc_r1
2717 data.get_dr1[i] = calc_dr1
2718 data.get_d2r1[i] = calc_d2r1
2719 else:
2720 data.get_r1[i] = extract_r1
2721 data.get_dr1[i] = extract_dr1
2722 data.get_d2r1[i] = extract_d2r1
2723
2724
2725
2726
2727
2728
2729 if data.rex_i == None:
2730 data.create_ri_prime = func_ri_prime
2731 else:
2732 data.create_ri_prime = func_ri_prime_rex
2733
2734
2735 for i in xrange(data.total_num_params):
2736
2737 if self.param_set == 'diff':
2738
2739 data.create_dri_prime.append(func_dri_djw_prime)
2740
2741
2742 data.create_d2ri_prime.append([])
2743 for j in xrange(data.total_num_params):
2744 data.create_d2ri_prime[i].append(func_d2ri_djwidjwj_prime)
2745
2746
2747 continue
2748
2749
2750 index = i - num_diff_params
2751 if index < 0:
2752 index = None
2753
2754
2755 if index != None and data.param_types[index] == 'Rex':
2756
2757 data.create_dri_prime.append(func_dri_drex_prime)
2758
2759
2760 data.create_d2ri_prime.append([])
2761 for j in xrange(data.total_num_params):
2762
2763 index2 = j - num_diff_params
2764 if index2 < 0:
2765 index2 = None
2766
2767
2768 if index2 != None and data.param_types[index2] == 'Rex':
2769 data.create_d2ri_prime[i].append(None)
2770
2771
2772 elif index2 != None and data.param_types[index2] == 'r':
2773 data.create_d2ri_prime[i].append(None)
2774
2775
2776 elif index2 != None and data.param_types[index2] == 'CSA':
2777 data.create_d2ri_prime[i].append(None)
2778
2779
2780 else:
2781 data.create_d2ri_prime[i].append(None)
2782
2783
2784 elif index != None and data.param_types[index] == 'r':
2785
2786 data.create_dri_prime.append(func_dri_dr_prime)
2787
2788
2789 data.create_d2ri_prime.append([])
2790 for j in xrange(data.total_num_params):
2791
2792 index2 = j - num_diff_params
2793 if index2 < 0:
2794 index2 = None
2795
2796
2797 if index2 != None and data.param_types[index2] == 'Rex':
2798 data.create_d2ri_prime[i].append(None)
2799
2800
2801 elif index2 != None and data.param_types[index2] == 'r':
2802 data.create_d2ri_prime[i].append(func_d2ri_dr2_prime)
2803
2804
2805 elif index2 != None and data.param_types[index2] == 'CSA':
2806 data.create_d2ri_prime[i].append(None)
2807
2808
2809 else:
2810 data.create_d2ri_prime[i].append(func_d2ri_djwdr_prime)
2811
2812
2813 elif index != None and data.param_types[index] == 'CSA':
2814
2815 data.create_dri_prime.append(func_dri_dcsa_prime)
2816
2817
2818 data.create_d2ri_prime.append([])
2819 for j in xrange(data.total_num_params):
2820
2821 index2 = j - num_diff_params
2822 if index2 < 0:
2823 index2 = None
2824
2825
2826 if index2 != None and data.param_types[index2] == 'Rex':
2827 data.create_d2ri_prime[i].append(None)
2828
2829
2830 elif index2 != None and data.param_types[index2] == 'r':
2831 data.create_d2ri_prime[i].append(None)
2832
2833
2834 elif index2 != None and data.param_types[index2] == 'CSA':
2835 data.create_d2ri_prime[i].append(func_d2ri_dcsa2_prime)
2836
2837
2838 else:
2839 data.create_d2ri_prime[i].append(func_d2ri_djwdcsa_prime)
2840
2841
2842 else:
2843
2844 data.create_dri_prime.append(func_dri_djw_prime)
2845
2846
2847 data.create_d2ri_prime.append([])
2848 for j in xrange(data.total_num_params):
2849
2850 index2 = j - num_diff_params
2851 if index2 < 0:
2852 index2 = None
2853
2854
2855 if index2 != None and data.param_types[index2] == 'Rex':
2856 data.create_d2ri_prime[i].append(None)
2857
2858
2859 elif index2 != None and data.param_types[index2] == 'r':
2860 data.create_d2ri_prime[i].append(func_d2ri_djwdr_prime)
2861
2862
2863 elif index2 != None and data.param_types[index2] == 'CSA':
2864 data.create_d2ri_prime[i].append(func_d2ri_djwdcsa_prime)
2865
2866
2867 else:
2868 data.create_d2ri_prime[i].append(func_d2ri_djwidjwj_prime)
2869
2870
2871
2872
2873
2874 if data.r_i == None and data.csa_i == None:
2875
2876 if data.rex_i == None:
2877 data.create_ri_comps = ri_comps
2878 data.create_dri_comps = dri_comps
2879 data.create_d2ri_comps = d2ri_comps
2880 else:
2881 data.create_ri_comps = ri_comps_rex
2882 data.create_dri_comps = dri_comps_rex
2883 data.create_d2ri_comps = d2ri_comps
2884
2885
2886 comp_dip_const_func(data, data.bond_length)
2887 comp_csa_const_func(data, data.csa)
2888 for i in xrange(data.num_ri):
2889 data.dip_comps_func[i] = data.dip_const_func
2890 if data.create_dip_func[i]:
2891 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func)
2892 if data.create_csa_func[i]:
2893 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]])
2894
2895
2896
2897
2898
2899 elif data.r_i != None and data.csa_i == None:
2900
2901 if data.rex_i == None:
2902 data.create_ri_comps = ri_comps_r
2903 data.create_dri_comps = dri_comps_r
2904 data.create_d2ri_comps = d2ri_comps_r
2905 else:
2906 data.create_ri_comps = ri_comps_r_rex
2907 data.create_dri_comps = dri_comps_r_rex
2908 data.create_d2ri_comps = d2ri_comps_r
2909
2910
2911 comp_csa_const_func(data, data.csa)
2912 for i in xrange(data.num_ri):
2913 if data.create_csa_func[i]:
2914 data.csa_comps_func[i] = data.create_csa_func[i](data.csa_const_func[data.remap_table[i]])
2915
2916
2917
2918
2919
2920 elif data.r_i == None and data.csa_i != None:
2921
2922 if data.rex_i == None:
2923 data.create_ri_comps = ri_comps_csa
2924 data.create_dri_comps = dri_comps_csa
2925 data.create_d2ri_comps = d2ri_comps_csa
2926 else:
2927 data.create_ri_comps = ri_comps_csa_rex
2928 data.create_dri_comps = dri_comps_csa_rex
2929 data.create_d2ri_comps = d2ri_comps_csa
2930
2931
2932 comp_dip_const_func(data, data.bond_length)
2933 for i in xrange(data.num_ri):
2934 data.dip_comps_func[i] = data.dip_const_func
2935 if data.create_dip_func[i]:
2936 data.dip_comps_func[i] = data.create_dip_func[i](data.dip_const_func)
2937
2938
2939
2940
2941
2942 elif data.r_i != None and data.csa_i != None:
2943
2944 if data.rex_i == None:
2945 data.create_ri_comps = ri_comps_r_csa
2946 data.create_dri_comps = dri_comps_r_csa
2947 data.create_d2ri_comps = d2ri_comps_r_csa
2948 else:
2949 data.create_ri_comps = ri_comps_r_csa_rex
2950 data.create_dri_comps = dri_comps_r_csa_rex
2951 data.create_d2ri_comps = d2ri_comps_r_csa
2952
2953
2954
2955
2956
2957 else:
2958 print "Invalid combination of parameters for the model-free equations."
2959 return 0
2960
2961 return 1
2962
2963
2966 """Empty container for storing data."""
2967