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