|
70 | 70 | #include <gsl/gsl_multifit.h> |
71 | 71 | #endif /* NUMCOSMO_GIR_SCAN */ |
72 | 72 |
|
| 73 | +struct _NcDataXcor |
| 74 | +{ |
| 75 | + /*< private >*/ |
| 76 | + NcmDataGaussCov parent_instance; |
| 77 | + |
| 78 | + guint nobs; |
| 79 | + |
| 80 | + NcXcorAB *xcab[NC_DATA_XCOR_MAX][NC_DATA_XCOR_MAX]; |
| 81 | + |
| 82 | + NcmObjArray *xcab_oa; |
| 83 | + /* guint xcab_oa_idx[NC_DATA_XCOR_MAX * NC_DATA_XCOR_MAX][2]; */ |
| 84 | + /* guint xcab_oa_ctr; */ |
| 85 | + |
| 86 | + gint xcidx[NC_DATA_XCOR_MAX][NC_DATA_XCOR_MAX]; |
| 87 | + guint xcidx_ctr; |
| 88 | + |
| 89 | + /* gboolean X_init; */ |
| 90 | + NcmMatrix *X1; /*[NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS]; */ |
| 91 | + NcmMatrix *X2; /*[NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS][NC_DATA_XCOR_MAX_NOBS]; / * X matrices (=mask dependent, cosmology independent part of the covariances <C_l^{a,b}C_l'^{c,d}>) * / */ |
| 92 | + |
| 93 | + NcmVector *pcl; |
| 94 | + NcmMatrix *pcov; |
| 95 | + |
| 96 | + NcXcor *xc; |
| 97 | + |
| 98 | + NcmModelCtrl *cosmo_ctrl; |
| 99 | + GPtrArray *xclk_ctrl; |
| 100 | +}; |
| 101 | + |
73 | 102 | enum |
74 | 103 | { |
75 | 104 | PROP_0, |
@@ -282,8 +311,7 @@ static void |
282 | 311 | nc_data_xcor_finalize (GObject *object) |
283 | 312 | { |
284 | 313 | /* Chain up : end */ |
285 | | - G_OBJECT_CLASS (nc_data_xcor_parent_class) |
286 | | - ->finalize (object); |
| 314 | + G_OBJECT_CLASS (nc_data_xcor_parent_class)->finalize (object); |
287 | 315 | } |
288 | 316 |
|
289 | 317 | static void _nc_data_xcor_prepare (NcmData *data, NcmMSet *mset); |
@@ -355,57 +383,64 @@ _nc_data_xcor_fast_update (NcDataXcor *dxc, NcXcorLimberKernel *xcl, guint a, Nc |
355 | 383 | { |
356 | 384 | NcXcorLimberKernelGal *xclkg = NC_XCOR_LIMBER_KERNEL_GAL (xcl); |
357 | 385 |
|
358 | | - if (xclkg->fast_update) |
| 386 | + if (nc_xcor_limber_kernel_gal_get_fast_update (xclkg)) |
359 | 387 | { |
360 | | - const gdouble biasratio = *(xclkg->bias) / xclkg->bias_old; |
| 388 | + gdouble bias, bias_old, noise_bias_old; |
361 | 389 |
|
362 | | - NcmVector *cl_th_0_aa = ncm_matrix_get_col (dxc->xcab[a][a]->cl_th, 0); |
363 | | - NcmVector *cl_th_1_aa = ncm_matrix_get_col (dxc->xcab[a][a]->cl_th, 1); |
| 390 | + nc_xcor_limber_kernel_gal_get_bias (xclkg, &bias, &bias_old, &noise_bias_old); |
| 391 | + { |
| 392 | + const gdouble biasratio = bias / bias_old; |
364 | 393 |
|
365 | | - ncm_vector_add_constant (cl_th_0_aa, -1.0 * xclkg->noise_bias_old); |
366 | | - ncm_vector_scale (cl_th_0_aa, gsl_pow_2 (biasratio)); |
367 | | - nc_xcor_limber_kernel_add_noise (xcl, cl_th_0_aa, cl_th_1_aa, 0); |
| 394 | + NcmVector *cl_th_0_aa = ncm_matrix_get_col (dxc->xcab[a][a]->cl_th, 0); |
| 395 | + NcmVector *cl_th_1_aa = ncm_matrix_get_col (dxc->xcab[a][a]->cl_th, 1); |
368 | 396 |
|
369 | | - ncm_vector_free (cl_th_0_aa); |
370 | | - ncm_vector_free (cl_th_1_aa); |
| 397 | + ncm_vector_add_constant (cl_th_0_aa, -1.0 * noise_bias_old); |
| 398 | + ncm_vector_scale (cl_th_0_aa, gsl_pow_2 (biasratio)); |
| 399 | + nc_xcor_limber_kernel_add_noise (xcl, cl_th_0_aa, cl_th_1_aa, 0); |
371 | 400 |
|
372 | | - const guint nobs = dxc->nobs; |
373 | | - guint b; |
| 401 | + ncm_vector_free (cl_th_0_aa); |
| 402 | + ncm_vector_free (cl_th_1_aa); |
374 | 403 |
|
375 | | - if (nobs > 1) |
376 | | - { |
377 | | - for (b = 0; b < nobs; b++) |
| 404 | + const guint nobs = dxc->nobs; |
| 405 | + guint b; |
| 406 | + |
| 407 | + if (nobs > 1) |
378 | 408 | { |
379 | | - if (a < b) |
| 409 | + for (b = 0; b < nobs; b++) |
380 | 410 | { |
381 | | - NcmVector *cl_th_0_ab = ncm_matrix_get_col (dxc->xcab[a][b]->cl_th, 0); |
382 | | - NcmVector *cl_th_1_ab = ncm_matrix_get_col (dxc->xcab[a][b]->cl_th, 1); |
| 411 | + if (a < b) |
| 412 | + { |
| 413 | + NcmVector *cl_th_0_ab = ncm_matrix_get_col (dxc->xcab[a][b]->cl_th, 0); |
| 414 | + NcmVector *cl_th_1_ab = ncm_matrix_get_col (dxc->xcab[a][b]->cl_th, 1); |
383 | 415 |
|
384 | | - ncm_vector_scale (cl_th_0_ab, biasratio); |
385 | | - ncm_vector_memcpy (cl_th_1_ab, cl_th_0_ab); |
| 416 | + ncm_vector_scale (cl_th_0_ab, biasratio); |
| 417 | + ncm_vector_memcpy (cl_th_1_ab, cl_th_0_ab); |
386 | 418 |
|
387 | | - ncm_vector_free (cl_th_0_ab); |
388 | | - ncm_vector_free (cl_th_1_ab); |
389 | | - } |
390 | | - else if (b < a) |
391 | | - { |
392 | | - NcmVector *cl_th_0_ba = ncm_matrix_get_col (dxc->xcab[b][a]->cl_th, 0); |
393 | | - NcmVector *cl_th_1_ba = ncm_matrix_get_col (dxc->xcab[b][a]->cl_th, 1); |
| 419 | + ncm_vector_free (cl_th_0_ab); |
| 420 | + ncm_vector_free (cl_th_1_ab); |
| 421 | + } |
| 422 | + else if (b < a) |
| 423 | + { |
| 424 | + NcmVector *cl_th_0_ba = ncm_matrix_get_col (dxc->xcab[b][a]->cl_th, 0); |
| 425 | + NcmVector *cl_th_1_ba = ncm_matrix_get_col (dxc->xcab[b][a]->cl_th, 1); |
394 | 426 |
|
395 | | - ncm_vector_scale (cl_th_0_ba, biasratio); |
396 | | - ncm_vector_memcpy (cl_th_1_ba, cl_th_0_ba); |
| 427 | + ncm_vector_scale (cl_th_0_ba, biasratio); |
| 428 | + ncm_vector_memcpy (cl_th_1_ba, cl_th_0_ba); |
397 | 429 |
|
398 | | - ncm_vector_free (cl_th_0_ba); |
399 | | - ncm_vector_free (cl_th_1_ba); |
| 430 | + ncm_vector_free (cl_th_0_ba); |
| 431 | + ncm_vector_free (cl_th_1_ba); |
| 432 | + } |
400 | 433 | } |
401 | 434 | } |
402 | 435 | } |
403 | 436 |
|
404 | 437 | { |
405 | 438 | NcmVector *orig_vec = ncm_model_orig_params_peek_vector (NCM_MODEL (xclkg)); |
406 | 439 |
|
407 | | - xclkg->bias_old = *(xclkg->bias); |
408 | | - xclkg->noise_bias_old = ncm_vector_get (orig_vec, NC_XCOR_LIMBER_KERNEL_GAL_NOISE_BIAS); |
| 440 | + nc_xcor_limber_kernel_gal_set_bias_old (xclkg, |
| 441 | + bias, |
| 442 | + ncm_vector_get (orig_vec, NC_XCOR_LIMBER_KERNEL_GAL_NOISE_BIAS) |
| 443 | + ); |
409 | 444 | } |
410 | 445 |
|
411 | 446 | return TRUE; |
|
0 commit comments