From ecdba9ef4c3014c80b9d3dbde760d1554a6cbf56 Mon Sep 17 00:00:00 2001 From: Thibaut Louis Date: Thu, 4 Aug 2022 22:01:17 +0200 Subject: [PATCH] new version of pspipe --- .../paramfiles/global_dr6_v3_4pass.dict | 34 +- .../python/data_analysis_utils.py | 458 ------------------ .../python/fast_cov_get_covariance.py | 180 +++---- .../python/fast_cov_get_sq_windows_alms.py | 23 +- project/data_analysis/python/get_alms.py | 94 ++-- .../python/get_beam_covariance.py | 52 +- project/data_analysis/python/get_best_fit.py | 79 --- .../python/get_best_fit_mflike.py | 95 ++-- .../python/get_covariance_old.py | 150 ------ .../python/get_mcm_and_bbl_mpi.py | 37 +- .../data_analysis/python/get_noise_model.py | 28 +- .../python/get_spectra_from_alms.py | 254 +++++----- .../data_analysis/python/get_window_dr6.py | 57 +-- .../python/montecarlo/mc_analysis.py | 22 +- .../python/montecarlo/mc_cov_analysis.py | 23 +- .../montecarlo/mc_get_kspace_tf_spectra.py | 95 ++-- .../python/montecarlo/mc_get_spectra.py | 257 ++++------ .../python/montecarlo/mc_mnms_get_spectra.py | 435 ++++++----------- .../python/montecarlo/mc_plot_covariances.py | 33 +- .../python/montecarlo/mc_plot_spectra.py | 68 ++- .../python/montecarlo/mc_tf_analysis.py | 187 ++++--- .../python/plots/plot_mean_spectra.py | 89 ++-- .../python/test/ref_data/trial_data.pkl | Bin 334859 -> 334859 bytes .../data_analysis/python/test/test_pipe.py | 167 +++---- 24 files changed, 914 insertions(+), 2003 deletions(-) delete mode 100644 project/data_analysis/python/data_analysis_utils.py delete mode 100644 project/data_analysis/python/get_best_fit.py delete mode 100644 project/data_analysis/python/get_covariance_old.py mode change 100755 => 100644 project/data_analysis/python/montecarlo/mc_mnms_get_spectra.py diff --git a/project/data_analysis/paramfiles/global_dr6_v3_4pass.dict b/project/data_analysis/paramfiles/global_dr6_v3_4pass.dict index f57f9a05..26fbffb7 100644 --- a/project/data_analysis/paramfiles/global_dr6_v3_4pass.dict +++ b/project/data_analysis/paramfiles/global_dr6_v3_4pass.dict @@ -2,16 +2,17 @@ surveys = ["dr6"] arrays_dr6 = ["pa4_f150", "pa4_f220", "pa5_f090", "pa5_f150", "pa6_f090", "pa6_f150"] + data_dir = '/project/projectdirs/act/data/tlouis/s17s18s19/' map_dir = '/project/projectdirs/act/data/tlouis/s17s18s19/maps_dr6_v3/4pass/' npass_dr6 = 4 deconvolve_pixwin = True -binning_file = data_dir + "binning/binning_dr6_small_bin.dat" +binning_file = data_dir + "binning/BIN_ACTPOL_50_4_SC_large_bin_at_low_ell" niter = 0 remove_mean = False -binned_mcm = True -lmax = 7000 +binned_mcm = False +lmax = 5400 type = 'Dl' write_splits_spectra = True multistep_path = data_dir @@ -41,8 +42,9 @@ cross_link_threshold = 0.97 n_med_ivar = 3 # kspace filter parameters - -k_filter_dr6 = {"apply":True, "type":"binary_cross","vk_mask":[-90, 90], "hk_mask":[-50, 50], "weighted":False, "tf": "analytic"} +apply_kspace_filter = True +kspace_tf_path = "/project/projectdirs/act/data/tlouis/s17s18s19/transfer_fcns/transfer_functions_choi_binning" +k_filter_dr6 = {"type":"binary_cross","vk_mask":[-90, 90], "hk_mask":[-50, 50], "weighted":False} deconvolve_map_maker_tf_dr6 = False @@ -80,6 +82,7 @@ pol_eff_dr6_pa5_f150 = 1.024 pol_eff_dr6_pa6_f090 = 1.0 pol_eff_dr6_pa6_f150 = 1.0 + nu_eff_dr6_pa4_f150 = 150 nu_eff_dr6_pa4_f220 = 220 nu_eff_dr6_pa5_f090 = 90 @@ -87,12 +90,12 @@ nu_eff_dr6_pa5_f150 = 150 nu_eff_dr6_pa6_f090 = 90 nu_eff_dr6_pa6_f150 = 150 -beam_dr6_pa4_f150 = data_dir + 'beams/coadd_pa4_f150_night_beam_tform_jitter_cmb.txt' -beam_dr6_pa4_f220 = data_dir + 'beams/coadd_pa4_f220_night_beam_tform_jitter_cmb.txt' -beam_dr6_pa5_f090 = data_dir + 'beams/coadd_pa5_f090_night_beam_tform_jitter_cmb.txt' -beam_dr6_pa5_f150 = data_dir + 'beams/coadd_pa5_f150_night_beam_tform_jitter_cmb.txt' -beam_dr6_pa6_f090 = data_dir + 'beams/coadd_pa6_f090_night_beam_tform_jitter_cmb.txt' -beam_dr6_pa6_f150 = data_dir + 'beams/coadd_pa6_f150_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa4_f150 = data_dir + 'beams/20220517_beams/coadd_pa4_f150_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa4_f220 = data_dir + 'beams/20220517_beams/coadd_pa4_f220_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa5_f090 = data_dir + 'beams/20220517_beams/coadd_pa5_f090_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa5_f150 = data_dir + 'beams/20220517_beams/coadd_pa5_f150_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa6_f090 = data_dir + 'beams/20220517_beams/coadd_pa6_f090_night_beam_tform_jitter_cmb.txt' +beam_dr6_pa6_f150 = data_dir + 'beams/20220517_beams/coadd_pa6_f150_night_beam_tform_jitter_cmb.txt' window_T_dr6_pa4_f150 = "windows/window_dr6_pa4_f150.fits" window_pol_dr6_pa4_f150 = "windows/window_dr6_pa4_f150.fits" @@ -116,13 +119,16 @@ window_pol_dr6_pa6_f150 = "windows/window_dr6_pa6_f150.fits" # best fit params (only used for sim generation and covariances computation) cosmo_params = {"cosmomc_theta":0.0104085, "logA": 3.044, "ombh2": 0.02237, "omch2": 0.1200, "ns": 0.9649, "Alens": 1.0, "tau": 0.0544} fg_norm = {"nu_0": 150.0, "ell_0": 3000, "T_CMB": 2.725} -fg_components = {"tt": ["tSZ_and_CIB", "cibp", "kSZ", "radio", "dust"], "te": ["radio", "dust"], "ee": ["radio", "dust"]} -fg_params = {"a_tSZ": 3.30, "a_kSZ": 1.60, "a_p": 6.90, "beta_p": 2.08, "a_c": 4.90, "beta_c": 2.20, "a_s": 3.10, "a_gtt": 8.7, "a_gte": 0.355, "a_gee": 0.13, "a_psee": 0.05, "a_pste": 0, "xi": 0.1, "T_d": 9.60} +fg_components = {'tt': ['tSZ_and_CIB', 'cibp', 'kSZ', 'radio', 'dust'], 'te': ['radio', 'dust'], 'ee': ['radio', 'dust'], 'bb': ['radio', 'dust'], 'tb': ['radio', 'dust'], 'eb': []} +fg_params = {"a_tSZ": 3.30, "a_kSZ": 1.60, "a_p": 6.90, "beta_p": 2.08, "a_c": 4.90, "beta_c": 2.20, "a_s": 3.10, "a_gtt": 8.7, "xi": 0.1, "T_d": 9.60, "a_gte": 0, "a_gtb": 0, "a_gee": 0, "a_gbb": 0, "a_pste": 0, "a_pstb": 0, "a_psee": 0, "a_psbb": 0} #sim iStart = 0 -iStop = 79 +iStop = 39 sim_alm_dtype = "complex64" +read_noise_alms_from_disk = False +noise_sim_type = "fdw" +noise_model_parameters = {"downgrade": 4, "mask_est_name": "dr6v3_20220316_baseline_union_mask", "mask_obs_name": "dr6v3_xlink_union_mask_0.001", "union_sources": "regular_20220316", "notes": "20220619"} #plot diff --git a/project/data_analysis/python/data_analysis_utils.py b/project/data_analysis/python/data_analysis_utils.py deleted file mode 100644 index 67ca03dd..00000000 --- a/project/data_analysis/python/data_analysis_utils.py +++ /dev/null @@ -1,458 +0,0 @@ -""" -Some utility functions for the data analysis project. -""" -import numpy as np -import healpy as hp -import pylab as plt -import os -from pixell import curvedsky -from pspy import pspy_utils, so_cov, so_spectra, so_mcm, so_map_preprocessing -from pspy.cov_fortran.cov_fortran import cov_compute as cov_fortran -from pspy.mcm_fortran.mcm_fortran import mcm_compute as mcm_fortran -from pixell import enmap -import gc - -def get_filtered_map(orig_map, binary, filter, inv_pixwin_lxly=None, weighted_filter=False, tol=1e-4, ref=0.9): - - """Filter the map in Fourier space using a predefined filter. Note that we mutliply the maps by a binary mask before - doing this operation in order to remove pathological pixels - We also include an option for removing the pixel window function - - Parameters - --------- - orig_map: ``so_map`` - the map to be filtered - binary: ``so_map`` - a binary mask removing pathological pixels - filter: 2d array - a filter applied in fourier space - inv_pixwin_lxly: 2d array - the inverse of the pixel window function in fourier space - weighted_filter: boolean - wether to use weighted filter a la sigurd - tol, ref: floats - only in use in the case of the weighted filter, these arg - remove crazy pixels value in the weight applied - - """ - - if weighted_filter == False: - if inv_pixwin_lxly is not None: - orig_map = fourier_mult(orig_map, binary, filter * inv_pixwin_lxly) - else: - orig_map = fourier_mult(orig_map, binary, filter) - - else: - orig_map.data *= binary.data - one_mf = (1 - filter) - rhs = enmap.ifft(one_mf * enmap.fft(orig_map.data, normalize=True), normalize=True).real - gc.collect() - div = enmap.ifft(one_mf * enmap.fft(binary.data, normalize=True), normalize=True).real - del one_mf - gc.collect() - div = np.maximum(div, np.percentile(binary.data[::10, ::10], ref * 100) * tol) - orig_map.data -= rhs / div - del rhs - del div - gc.collect() - - if inv_pixwin_lxly is not None: - ft = enmap.fft(orig_map.data, normalize=True) - ft *= inv_pixwin_lxly - orig_map.data = enmap.ifft(ft, normalize=True).real - - gc.collect() - return orig_map - -def fourier_mult(orig_map, binary, fourier_array): - - """do a fourier multiplication of the FFT of the orig_map with a fourier array, binary help to remove pathological pixels - - Parameters - --------- - orig_map: ``so_map`` - the map to be filtered - binary: ``so_map`` - a binary mask removing pathological pixels - fourier_array: 2d array - the fourier array we want to multiply the FFT of the map with - """ - orig_map.data *= binary.data - ft = enmap.fft(orig_map.data, normalize=True) - ft *= fourier_array - orig_map.data = enmap.ifft(ft, normalize=True).real - - return orig_map - - -def get_coadded_map(orig_map, coadd_map, coadd_mask): - """Co-add a map with another map given its associated mask. - - Parameters - --------- - orig_map: ``so_map`` - the original map without point sources - coadd_map: ``so_map`` - the map to be co-added - coadd_mask: ``so_map`` - the mask associated to the coadd_map - """ - if coadd_map.ncomp == 1: - coadd_map.data *= coadd_mask.data - else: - coadd_map.data[:] *= coadd_mask.data - orig_map.data += coadd_map.data - - return orig_map - - -def fill_sym_mat(mat): - """Make a upper diagonal or lower diagonal matrix symmetric - - Parameters - ---------- - mat : 2d array - the matrix we want symmetric - """ - return mat + mat.T - np.diag(mat.diagonal()) - -def get_nspec(dict): - - surveys = dict["surveys"] - nspec = {} - - for kind in ["cross", "noise", "auto"]: - nspec[kind] = 0 - for id_sv1, sv1 in enumerate(surveys): - arrays_1 = dict["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = dict["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - if (sv1 != sv2) & (kind == "noise"): continue - if (sv1 != sv2) & (kind == "auto"): continue - nspec[kind] += 1 - - return nspec - -def get_noise_matrix_spin0and2(noise_dir, survey, arrays, lmax, nsplits): - - """This function uses the measured noise power spectra - and generate a three dimensional array of noise power spectra [n_arrays, n_arrays, lmax] for temperature - and polarisation. - The different entries ([i,j,:]) of the arrays contain the noise power spectra - for the different array pairs. - for example nl_array_t[0,0,:] => nl^{TT}_{ar_{0},ar_{0}), nl_array_t[0,1,:] => nl^{TT}_{ar_{0},ar_{1}) - this allows to consider correlated noise between different arrays. - - Parameters - ---------- - noise_data_dir : string - the folder containing the noise power spectra - survey : string - the survey to consider - arrays: 1d array of string - the arrays we consider - lmax: integer - the maximum multipole for the noise power spectra - n_splits: integer - the number of data splits we want to simulate - nl_per_split= nl * n_{splits} - """ - - spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] - - n_arrays = len(arrays) - nl_array_t = np.zeros((n_arrays, n_arrays, lmax)) - nl_array_pol = np.zeros((n_arrays, n_arrays, lmax)) - - for c1, ar1 in enumerate(arrays): - for c2, ar2 in enumerate(arrays): - if c1>c2 : continue - - l, nl = so_spectra.read_ps("%s/mean_%sx%s_%s_noise.dat" % (noise_dir, ar1, ar2, survey), spectra=spectra) - nl_t = nl["TT"][:lmax] - nl_pol = (nl["EE"][:lmax] + nl["BB"][:lmax])/2 - l = l[:lmax] - - - nl_array_t[c1, c2, :] = nl_t * nsplits * 2 * np.pi / (l * (l + 1)) - nl_array_pol[c1, c2, :] = nl_pol * nsplits * 2 * np.pi / (l * (l + 1)) - - for i in range(lmax): - nl_array_t[:,:,i] = fill_sym_mat(nl_array_t[:,:,i]) - nl_array_pol[:,:,i] = fill_sym_mat(nl_array_pol[:,:,i]) - - return l, nl_array_t, nl_array_pol - - - -def get_foreground_matrix(fg_dir, all_freqs, lmax): - - """This function uses the best fit foreground power spectra - and generate a three dimensional array of foregroung power spectra [nfreqs, nfreqs, lmax]. - The different entries ([i,j,:]) of the array contains the fg power spectra for the different - frequency channel pairs. - for example fl_array_T[0,0,:] => fl_{f_{0},f_{0}), fl_array_T[0,1,:] => fl_{f_{0},f_{1}) - this allows to have correlated fg between different frequency channels. - (Not that for now, no fg are including in pol) - - Parameters - ---------- - fg_dir : string - the folder containing the foreground power spectra - all_freqs: 1d array of string - the frequencies we consider - lmax: integer - the maximum multipole for the noise power spectra - """ - - nfreqs = len(all_freqs) - fl_array = np.zeros((nfreqs, nfreqs, lmax)) - - for c1, freq1 in enumerate(all_freqs): - for c2, freq2 in enumerate(all_freqs): - if c1 > c2 : continue - - l, fl_all = np.loadtxt("%s/fg_%sx%s_TT.dat"%(fg_dir, freq1, freq2), unpack=True) - fl_all *= 2 * np.pi / (l * (l + 1)) - - fl_array[c1, c2, 2:lmax] = fl_all[:lmax-2] - - for i in range(lmax): - fl_array[:,:,i] = fill_sym_mat(fl_array[:,:,i]) - - return l, fl_array - -def multiply_alms(alms, bl, ncomp): - - """This routine mutliply the alms by a function bl - - Parameters - ---------- - alms : 1d array - the alms to be multiplied - bl : 1d array - the function to multiply the alms - ncomp: interger - the number of components - ncomp = 3 if T,Q,U - ncomp = 1 if T only - """ - - alms_mult = alms.copy() - if ncomp == 1: - alms_mult = hp.sphtfunc.almxfl(alms_mult, bl) - else: - for i in range(ncomp): - alms_mult[i] = hp.sphtfunc.almxfl(alms_mult[i], bl) - return alms_mult - - -def generate_noise_alms(nl_array_t, lmax, n_splits, ncomp, nl_array_pol=None, dtype=np.complex128): - - """This function generates the alms corresponding to the noise power spectra matrices - nl_array_t, nl_array_pol. The function returns a dictionnary nlms["T", i]. - The entry of the dictionnary are for example nlms["T", i] where i is the index of the split. - note that nlms["T", i] is a (narrays, size(alm)) array, it is the harmonic transform of - the noise realisation for the different frequencies. - - Parameters - ---------- - nl_array_t : 3d array [narrays, narrays, lmax] - noise power spectra matrix for temperature data - - lmax : integer - the maximum multipole for the noise power spectra - n_splits: integer - the number of data splits we want to simulate - ncomp: interger - the number of components - ncomp = 3 if T,Q,U - ncomp = 1 if T only - nl_array_pol : 3d array [narrays, narrays, lmax] - noise power spectra matrix for polarisation data - (in use if ncomp==3) - """ - - nlms = {} - if ncomp == 1: - for k in range(n_splits): - nlms[k] = curvedsky.rand_alm(nl_array_t,lmax=lmax, dtype=dtype) - else: - for k in range(n_splits): - nlms["T", k] = curvedsky.rand_alm(nl_array_t, lmax=lmax, dtype=dtype) - nlms["E", k] = curvedsky.rand_alm(nl_array_pol, lmax=lmax, dtype=dtype) - nlms["B", k] = curvedsky.rand_alm(nl_array_pol, lmax=lmax, dtype=dtype) - - return nlms - -def remove_mean(so_map, window, ncomp): - - """This function removes the mean value of the map after having applied the - window function - Parameters - ---------- - so_map : so_map - the map we want to subtract the mean from - window : so_map or so_map tuple - the window function, if ncomp=3 expect - (win_t,win_pol) - ncomp : integer - the number of components - ncomp = 3 if T,Q,U - ncomp = 1 if T only - - """ - - if ncomp == 1: - so_map.data -= np.mean(so_map.data * window.data) - else: - so_map.data[0] -= np.mean(so_map.data[0] * window[0].data) - so_map.data[1] -= np.mean(so_map.data[1] * window[1].data) - so_map.data[2] -= np.mean(so_map.data[2] * window[1].data) - - return so_map - -def deconvolve_tf(lb, ps, tf1, tf2, ncomp, lmax=None): - - """This function deconvolves the transfer function - Parameters - ---------- - ps : dict or 1d array - the power spectra with tf applied - tf1 : 1d array - transfer function of map1 - tf2 : 1d array - transfer function of map2 - ncomp : integer - the number of components - ncomp = 3 if T,Q,U - ncomp = 1 if T only - - """ - tf = tf1 * tf2 - - if lmax is not None: - id = np.where(lb < lmax) - tf = tf[id] - - if ncomp == 1: - ps /= tf - else: - spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] - for spec in spectra: - ps[spec] /= tf - - return ps - - -def is_symmetric(mat, tol=1e-8): - return np.all(np.abs(mat-mat.T) < tol) - -def is_pos_def(mat): - return np.all(np.linalg.eigvals(mat) > 0) - -def interactive_covariance_comparison(analytic_cov, mc_cov, spec_list, binning_file, lmax, cov_plot_dir, multistep_path, corr_range=0.3, log=False): - - """ - This routine compare analytic covariance matrices with the ones from montecarlo simulation - For a typical covariance matrix of ACT dr6, it compare more than 3000 nbinsxnbins covariance matrix blocs. - This produces the plots and write a html page: covariance.html with an interactive java script interface: multistep2.js - you can go from one plot to the other by pressing c/v on your keyboard - - Parameters - --------- - analytic_cov: 2d array - the analytic covariance matrix - mc_cov: 2d array - the covariance matrix estimated with montecarlo sim - spec_list: list of str - the list of the different spectra to consider - binning_file: str - the binning file used - lmax: int - the maximum multipole to consider - cov_plot_dir: str - the directory where we write the plot to disk - multistep_path: str - the path to the javascript multistep2.js that render the html interactive - corr_range: float - should be between -1, 1 the max of the colorscale for the correlation matrix plot - log: boolean - wether to plot the diag of the cov with a log scale - """ - - pspy_utils.create_directory(cov_plot_dir) - - bin_lo, bin_hi, lb, bin_size = pspy_utils.read_binning_file(binning_file, lmax) - nbins = len(bin_hi) - - analytic_corr = so_cov.cov2corr(analytic_cov) - mc_corr = so_cov.cov2corr(mc_cov) - - os.system("cp %s/multistep2.js %s/multistep2.js" % (multistep_path, cov_plot_dir)) - file = "%s/covariance.html" % (cov_plot_dir) - g = open(file, mode="w") - g.write('\n') - g.write('\n') - g.write(' covariance comparison \n') - g.write('\n') - g.write(' \n') - g.write(' \n') - g.write(' \n') - g.write(' \n') - g.write('
\n') - - n_spec = int(analytic_cov.shape[0] / nbins) - count = 0 - for ispec in range(n_spec): - for jspec in range(ispec): - sub_analytic_cov = analytic_cov[ispec * nbins: (ispec + 1) * nbins, jspec * nbins: (jspec + 1) * nbins] - sub_mc_cov = mc_cov[ispec * nbins: (ispec + 1) * nbins, jspec * nbins: (jspec + 1) * nbins] - - sub_analytic_corr = analytic_corr[ispec * nbins: (ispec + 1) * nbins, jspec * nbins: (jspec + 1) * nbins] - sub_mc_corr = mc_corr[ispec * nbins: (ispec + 1) * nbins, jspec * nbins: (jspec + 1) * nbins] - - str = "cov_%03d.png" % (count) - - fig = plt.figure(figsize=(16, 10), constrained_layout=True) - spec = fig.add_gridspec(2, 2) - ax0 = fig.add_subplot(spec[0, :]) - plt.title("cov(%s , %s)" % (spec_list[ispec], spec_list[jspec]), fontsize=22) - if log == True: - plt.semilogy() - plt.plot(sub_analytic_cov.diagonal(), label = "analytic") - plt.plot(sub_mc_cov.diagonal(), '.', label = "montecarlo") - plt.legend() - ax10 = fig.add_subplot(spec[1, 0]) - plt.imshow(sub_analytic_corr, vmin=-corr_range, vmax=corr_range, cmap='bwr') - plt.xticks(np.arange(nbins)[::15],lb[::15].astype(int)) - plt.yticks(np.arange(nbins)[::10],lb[::10].astype(int)) - plt.colorbar() - ax11 = fig.add_subplot(spec[1, 1]) - plt.imshow(sub_mc_corr, vmin=-corr_range, vmax=corr_range, cmap='bwr') - plt.xticks(np.arange(nbins)[::15],lb[::15].astype(int)) - plt.yticks(np.arange(nbins)[::10],lb[::10].astype(int)) - plt.colorbar() - plt.savefig("%s/%s" % (cov_plot_dir, str)) - plt.clf() - plt.close() - - g.write('
\n') - g.write(' \n') - g.write('
\n') - - count += 1 - - g.write(' \n') - g.write(' \n') - g.close() - - diff --git a/project/data_analysis/python/fast_cov_get_covariance.py b/project/data_analysis/python/fast_cov_get_covariance.py index e33b5284..547ff18f 100644 --- a/project/data_analysis/python/fast_cov_get_covariance.py +++ b/project/data_analysis/python/fast_cov_get_covariance.py @@ -3,8 +3,9 @@ """ import sys -import data_analysis_utils -import numpy as np +import numpy as np, pylab as plt +from pspipe_utils import pspipe_list, best_fits + from pspy import pspy_utils, so_cov, so_dict, so_map, so_mcm, so_mpi, so_spectra d = so_dict.so_dict() @@ -13,7 +14,7 @@ windows_dir = "windows" mcms_dir = "mcms" spectra_dir = "spectra" -ps_model_dir = "noise_model" +noise_dir = "noise_model" cov_dir = "covariances" bestfit_dir = "best_fits" sq_win_alms_dir = "sq_win_alms" @@ -24,88 +25,47 @@ lmax = d["lmax"] niter = d["niter"] binned_mcm = d["binned_mcm"] - -fast_coupling = True -if fast_coupling: - # This option is designed to be fast but is not for general usage - # In particular we assume that the same window function is used in T and Pol - # This loop check that this is what was specified in the dictfile - for sv in surveys: - arrays = d["arrays_%s" % sv] - for ar in arrays: - assert d["window_T_%s_%s" % (sv, ar)] == d["window_pol_%s_%s" % (sv, ar)], "T and pol windows have to be the same" - +apply_kspace_filter = d["apply_kspace_filter"] spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] +# fast_coupling is designed to be fast but is not for general usage +# In particular we assume that the same window function is used in T and Pol +fast_coupling = True -ps_all = {} -nl_all = {} -spec_name = [] -ns = {} - -_, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) - - -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - - for id_ar1, ar1 in enumerate(arrays_1): - _, bl1 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv1, ar1)]) - bl1 = bl1[2:lmax] - freq1 = d["nu_eff_%s_%s" % (sv1, ar1)] - - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - - for id_ar2, ar2 in enumerate(arrays_2): - _, bl2 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv2, ar2)]) - bl2 = bl2[2:lmax] - freq2 = d["nu_eff_%s_%s" % (sv2, ar2)] - - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - - if (sv1 == sv2): - spec_name_noise = "mean_%sx%s_%s_noise" % (ar1, ar2, sv1) - _, Nl = so_spectra.read_ps(ps_model_dir + "/%s.dat" % spec_name_noise, spectra=spectra) - - for spec in ["TT", "TE", "ET", "EE"]: - - name = "%sx%s_%s" % (freq1, freq2, spec) - _, ps_th = np.loadtxt("%s/best_fit_%s.dat"%(bestfit_dir, name), unpack=True) - - - ps_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = bl1 * bl2 * ps_th[:lmax - 2] - - if (sv1 == sv2): - ns[sv1] = len(d["maps_%s_%s" % (sv1, ar1)]) - - nl_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = Nl[spec][:lmax - 2] * ns[sv1] - else: - nl_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = np.zeros(lmax - 2) - - ps_all["%s&%s" % (sv2, ar2), "%s&%s"%(sv1, ar1), spec] = ps_all["%s&%s"%(sv1, ar1), "%s&%s"%(sv2, ar2), spec] - nl_all["%s&%s" % (sv2, ar2), "%s&%s"%(sv1, ar1), spec] = nl_all["%s&%s"%(sv1, ar1), "%s&%s"%(sv2, ar2), spec] - - spec_name += ["%s&%sx%s&%s" % (sv1, ar1, sv2, ar2)] - -na_list, nb_list, nc_list, nd_list = [], [], [], [] -ncovs = 0 - -for sid1, spec1 in enumerate(spec_name): - for sid2, spec2 in enumerate(spec_name): - if sid1 > sid2: continue - na, nb = spec1.split("x") - nc, nd = spec2.split("x") - na_list += [na] - nb_list += [nb] - nc_list += [nc] - nd_list += [nd] - ncovs += 1 - +arrays, n_splits, bl_dict, nu_eff = {}, {}, {}, {} +for sv in surveys: + arrays[sv] = d[f"arrays_{sv}"] + for ar in arrays[sv]: + l_beam, bl_dict[sv, ar] = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar}"]) + id_beam = np.where((l_beam >= 2) & (l_beam < lmax)) + bl_dict[sv, ar] = bl_dict[sv, ar][id_beam] + nu_eff[sv, ar] = d[f"nu_eff_{sv}_{ar}"] + n_splits[sv] = len(d[f"maps_{sv}_{ar}"]) + if fast_coupling: + # This loop check that this is what was specified in the dictfile + assert d[f"window_T_{sv}_{ar}"] == d[f"window_pol_{sv}_{ar}"], "T and pol windows have to be the same" + +l_cmb, cmb_dict = best_fits.cmb_dict_from_file(bestfit_dir + "/cmb.dat", lmax, spectra) + +freq_list = pspipe_list.get_freq_list(d) +l_fg, fg_dict = best_fits.fg_dict_from_files(bestfit_dir + "/fg_{}x{}.dat", freq_list, lmax, spectra) + +f_name_noise = noise_dir + "/mean_{}x{}_{}_noise.dat" +l_noise, nl_dict = best_fits.noise_dict_from_files(f_name_noise, surveys, arrays, lmax, spectra, n_splits=n_splits) + +spec_name_list = pspipe_list.get_spec_name_list(d) +l, ps_all, nl_all = best_fits.get_all_best_fit(spec_name_list, + l_cmb, + cmb_dict, + fg_dict, + nu_eff, + spectra, + nl_dict=nl_dict, + bl_dict=bl_dict) + +ncovs, na_list, nb_list, nc_list, nd_list = pspipe_list.get_covariances_list(d) if d["use_toeplitz_cov"] == True: print("we will use the toeplitz approximation") @@ -113,7 +73,7 @@ else: l_exact, l_band, l_toep = None, None, None -print("number of covariance matrices to compute : %s" % ncovs) +print(f"number of covariance matrices to compute : {ncovs}") so_mpi.init(True) subtasks = so_mpi.taskrange(imin=0, imax=ncovs - 1) print(subtasks) @@ -121,7 +81,7 @@ task = int(task) na, nb, nc, nd = na_list[task], nb_list[task], nc_list[task], nd_list[task] na_r, nb_r, nc_r, nd_r = na.replace("&", "_"), nb.replace("&", "_"), nc.replace("&", "_"), nd.replace("&", "_") - print("cov element (%s x %s, %s x %s)" % (na_r, nb_r, nc_r, nd_r)) + print(f"cov element ({na_r} x {nb_r}, {nc_r} x {nd_r})") if fast_coupling: @@ -135,14 +95,14 @@ else: win = {} - win["Ta"] = so_map.read_map(d["window_T_%s" % na_r]) - win["Tb"] = so_map.read_map(d["window_T_%s" % nb_r]) - win["Tc"] = so_map.read_map(d["window_T_%s" % nc_r]) - win["Td"] = so_map.read_map(d["window_T_%s" % nd_r]) - win["Pa"] = so_map.read_map(d["window_pol_%s" % na_r]) - win["Pb"] = so_map.read_map(d["window_pol_%s" % nb_r]) - win["Pc"] = so_map.read_map(d["window_pol_%s" % nc_r]) - win["Pd"] = so_map.read_map(d["window_pol_%s" % nd_r]) + win["Ta"] = so_map.read_map(d[f"window_T_{na_r}"]) + win["Tb"] = so_map.read_map(d[f"window_T_{nb_r}"]) + win["Tc"] = so_map.read_map(d[f"window_T_{nc_r}"]) + win["Td"] = so_map.read_map(d[f"window_T_{nd_r}"]) + win["Pa"] = so_map.read_map(d[f"window_pol_{na_r}"]) + win["Pb"] = so_map.read_map(d[f"window_pol_{nb_r}"]) + win["Pc"] = so_map.read_map(d[f"window_pol_{nc_r}"]) + win["Pd"] = so_map.read_map(d[f"window_pol_{nd_r}"]) coupling = so_cov.cov_coupling_spin0and2_simple(win, lmax, @@ -153,16 +113,16 @@ - try: mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, na_r, nb_r), spin_pairs=spin_pairs) - except: mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nb_r, na_r), spin_pairs=spin_pairs) + try: mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix=f"{mcms_dir}/{na_r}x{nb_r}", spin_pairs=spin_pairs) + except: mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix=f"{mcms_dir}/{nb_r}x{na_r}", spin_pairs=spin_pairs) - try: mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nc_r, nd_r), spin_pairs=spin_pairs) - except: mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nd_r, nc_r), spin_pairs=spin_pairs) + try: mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix=f"{mcms_dir}/{nc_r}x{nd_r}", spin_pairs=spin_pairs) + except: mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix=f"{mcms_dir}/{nd_r}x{nc_r}", spin_pairs=spin_pairs) analytic_cov = so_cov.generalized_cov_spin0and2(coupling, [na, nb, nc, nd], - ns, + n_splits, ps_all, nl_all, lmax, @@ -171,25 +131,15 @@ mbb_inv_cd, binned_mcm=binned_mcm) - # Some heuristic correction for the number of modes lost due to the transfer function - # This should be tested against simulation and revisited - - sv_a, pa_a = na.split("&") - sv_b, pa_b = nb.split("&") - sv_c, pa_c = nc.split("&") - sv_d, pa_d = nd.split("&") - - tf = np.ones(len(lb)) - - for sv, pa in zip([sv_a, sv_b, sv_c, sv_d], [pa_a, pa_b, pa_c, pa_d]): - # so the TF here include the 1d pixwin but not the 2d pixwin - # we should decide weither or not to include the pixwin - # and do things consistently - _, sv_tf = np.loadtxt(spectra_dir + "/tf_%s_%s.dat" % (sv, pa), unpack=True) - tf *= sv_tf ** (1. / 4.) - + if apply_kspace_filter == True: + # Some heuristic correction for the number of modes lost due to the transfer function + # This should be tested against simulation and revisited - cov_tf = np.tile(tf, 4) - analytic_cov /= np.outer(np.sqrt(cov_tf), np.sqrt(cov_tf)) + one_d_tf_ab = np.loadtxt(f"{spectra_dir}/one_dimension_kspace_tf_{na_r}x{nb_r}.dat") + one_d_tf_cd = np.loadtxt(f"{spectra_dir}/one_dimension_kspace_tf_{nc_r}x{nd_r}.dat") + one_d_tf = np.minimum(one_d_tf_ab, one_d_tf_cd) + # sqrt(tf) is an approx for the number of modes masked in a given map so (2l+1)*fsky*sqrt(tf) + # is our proxy for the number of modes + analytic_cov /= np.outer(one_d_tf ** (1./4.), one_d_tf ** (1./4.)) - np.save("%s/analytic_cov_%sx%s_%sx%s.npy" % (cov_dir, na_r, nb_r, nc_r, nd_r), analytic_cov) + np.save(f"{cov_dir}/analytic_cov_{na_r}x{nb_r}_{nc_r}x{nd_r}.npy", analytic_cov) diff --git a/project/data_analysis/python/fast_cov_get_sq_windows_alms.py b/project/data_analysis/python/fast_cov_get_sq_windows_alms.py index aaba538c..9d49ec6e 100644 --- a/project/data_analysis/python/fast_cov_get_sq_windows_alms.py +++ b/project/data_analysis/python/fast_cov_get_sq_windows_alms.py @@ -2,6 +2,7 @@ This script compute all alms squared windows, it's a necessary step of covariance computation. """ from pspy import so_dict, so_map, sph_tools, so_spectra, pspy_utils, so_mpi +from pspipe_utils import pspipe_list import numpy as np import sys @@ -38,26 +39,12 @@ def mult(map_a, map_b): pspy_utils.create_directory(sq_win_alms_dir) -sv1_list, ar1_list, sv2_list, ar2_list = [], [], [], [] -n_alms = 0 -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - # This ensures that we do not repeat redundant computations - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - sv1_list += [sv1] - ar1_list += [ar1] - sv2_list += [sv2] - ar2_list += [ar2] - n_alms += 1 +n_sq_alms, sv1_list, ar1_list, sv2_list, ar2_list = pspipe_list.get_spectra_list(d) -print("number of sq win alms to compute : %s" % n_alms) + +print("number of sq win alms to compute : %s" % n_sq_alms) so_mpi.init(True) -subtasks = so_mpi.taskrange(imin=0, imax=n_alms - 1) +subtasks = so_mpi.taskrange(imin=0, imax=n_sq_alms - 1) print(subtasks) for task in subtasks: task = int(task) diff --git a/project/data_analysis/python/get_alms.py b/project/data_analysis/python/get_alms.py index db9c5491..8a2d8320 100644 --- a/project/data_analysis/python/get_alms.py +++ b/project/data_analysis/python/get_alms.py @@ -5,11 +5,11 @@ """ from pspy import pspy_utils, so_dict, so_map, sph_tools, so_map_preprocessing, so_mpi +from pspipe_utils import pspipe_list, kspace from pixell import enmap import numpy as np import healpy as hp import sys -import data_analysis_utils import time d = so_dict.so_dict() @@ -19,21 +19,17 @@ lmax = d["lmax"] deconvolve_pixwin = d["deconvolve_pixwin"] niter = d["niter"] +apply_kspace_filter = d["apply_kspace_filter"] + window_dir = "windows" alms_dir = "alms" pspy_utils.create_directory(alms_dir) + +n_ar, sv_list, ar_list = pspipe_list.get_arrays_list(d) -sv_list, ar_list = [], [] -n_ar = 0 -for sv in surveys: - for ar in d["arrays_%s" % sv]: - sv_list += [sv] - ar_list += [ar] - n_ar += 1 - -print("number of arrays for the mpi loop : %s" % n_ar) +print(f"number of arrays for the mpi loop : {n_ar}") so_mpi.init(True) subtasks = so_mpi.taskrange(imin=0, imax=n_ar-1) print(subtasks) @@ -42,36 +38,29 @@ task = int(task) sv, ar = sv_list[task], ar_list[task] - win_T = so_map.read_map(d["window_T_%s_%s" % (sv, ar)]) - win_pol = so_map.read_map(d["window_pol_%s_%s" % (sv, ar)]) + win_T = so_map.read_map(d[f"window_T_{sv}_{ar}"]) + win_pol = so_map.read_map(d[f"window_pol_{sv}_{ar}"]) - if win_T.pixel == "CAR": - binary = so_map.read_map("%s/binary_%s_%s.fits" % (window_dir, sv, ar)) - window_tuple = (win_T, win_pol) - ks_f = d["k_filter_%s" % sv] - if win_T.pixel == "CAR" and ks_f["apply"]: - shape, wcs = win_T.data.shape, win_T.data.wcs + + if win_T.pixel == "CAR": + binary = so_map.read_map(f"{window_dir}/binary_{sv}_{ar}.fits") - if ks_f["type"] == "binary_cross": - filter = so_map_preprocessing.build_std_filter(shape, wcs, vk_mask=ks_f["vk_mask"], hk_mask=ks_f["hk_mask"], dtype=np.float32) - elif ks_f["type"] == "gauss": - filter = so_map_preprocessing.build_sigurd_filter(shape, wcs, ks_f["lbounds"], dtype=np.float32) + if apply_kspace_filter: + ks_f = d[f"k_filter_{sv}"] + filter = kspace.get_kspace_filter(win_T, ks_f) + + if (deconvolve_pixwin == True): + # deconvolve the CAR pixel function in fourier space + wy, wx = enmap.calc_window(win_T.data.shape) + inv_pixwin_lxly = (wy[:,None] * wx[None,:]) ** (-1) else: - print("you need to specify a valid filter type") - sys.exit() + inv_pixwin_lxly = None - if (deconvolve_pixwin == True) & (win_T.pixel == "CAR"): - # deconvolve the CAR pixel function in fourier space - wy, wx = enmap.calc_window(win_T.data.shape) - inv_pixwin_lxly = (wy[:,None] * wx[None,:]) ** (-1) - else: - inv_pixwin_lxly = None - maps = d["maps_%s_%s" % (sv, ar)] - cal = d["cal_%s_%s" % (sv, ar)] - pol_eff = d["pol_eff_%s_%s" % (sv, ar)] + maps = d[f"maps_{sv}_{ar}"] + cal, pol_eff = d[f"cal_{sv}_{ar}"], d[f"pol_eff_{sv}_{ar}"] t = time.time() for k, map in enumerate(maps): @@ -79,28 +68,29 @@ if win_T.pixel == "CAR": split = so_map.read_map(map, geometry=win_T.data.geometry) - if d["src_free_maps_%s" % sv] == True: - point_source_map_name = map.replace("srcfree.fits", "model.fits") - if point_source_map_name == map: + if d[f"src_free_maps_{sv}"] == True: + ps_map_name = map.replace("srcfree.fits", "model.fits") + if ps_map_name == map: raise ValueError("No model map is provided! Check map names!") - point_source_map = so_map.read_map(point_source_map_name) - point_source_mask = so_map.read_map(d["ps_mask_%s_%s" % (sv, ar)]) - split = data_analysis_utils.get_coadded_map(split, point_source_map, point_source_mask) - - if ks_f["apply"]: - print("apply kspace filter on %s" %map) - split = data_analysis_utils.get_filtered_map(split, - binary, - filter, - inv_pixwin_lxly=inv_pixwin_lxly, - weighted_filter=ks_f["weighted"]) + ps_map = so_map.read_map(ps_map_name) + ps_mask = so_map.read_map(d[f"ps_mask_{sv}_{ar}"]) + ps_map.data *= ps_mask.data + split.data += ps_map.data + + if apply_kspace_filter: + print(f"apply kspace filter on {map}") + split = kspace.filter_map(split, + filter, + binary, + inv_pixwin=inv_pixwin_lxly, + weighted_filter=ks_f["weighted"]) else: print("WARNING: no kspace filter is applied") if deconvolve_pixwin: - split = data_analysis_utils.fourier_mult(split, - binary, - inv_pixwin_lxly) + split = so_map.fourier_convolution(split, + inv_pixwin_lxly, + binary=binary) elif win_T.pixel == "HEALPIX": split = so_map.read_map(map) @@ -108,11 +98,11 @@ split = split.calibrate(cal=cal, pol_eff=pol_eff) if d["remove_mean"] == True: - split = data_analysis_utils.remove_mean(split, window_tuple, ncomp) + split = split.subtract_mean(window_tuple) master_alms = sph_tools.get_alms(split, window_tuple, niter, lmax) - np.save("%s/alms_%s_%s_%d.npy" % (alms_dir, sv, ar, k), master_alms) + np.save(f"{alms_dir}/alms_{sv}_{ar}_{k}.npy", master_alms) print(time.time()- t) diff --git a/project/data_analysis/python/get_beam_covariance.py b/project/data_analysis/python/get_beam_covariance.py index 4ce39325..89b4af41 100644 --- a/project/data_analysis/python/get_beam_covariance.py +++ b/project/data_analysis/python/get_beam_covariance.py @@ -1,11 +1,12 @@ """ This script compute the analytical beam covariance matrix elements. +(TO BE TESTED AGAINS MONTECARLO) """ import sys -import data_analysis_utils import numpy as np from pspy import pspy_utils, so_dict, so_mpi, so_cov +from pspipe_utils import pspipe_list, best_fits d = so_dict.so_dict() d.read_from_file(sys.argv[1]) @@ -17,58 +18,47 @@ surveys = d["surveys"] binning_file = d["binning_file"] lmax = d["lmax"] +spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -ps_all = {} -norm_beam_cov = {} -spec_name = [] +freq_list = pspipe_list.get_freq_list(d) +lth, cmb_and_fg_dict = best_fits.fg_dict_from_files(bestfit_dir + "/fg_{}x{}.dat", + freq_list, + lmax, + spectra, + f_name_cmb=bestfit_dir + "/cmb.dat") -_, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) + +ps_all, norm_beam_cov = {}, {} for id_sv1, sv1 in enumerate(surveys): - for id_ar1, ar1 in enumerate(d["arrays_%s" % sv1]): + for id_ar1, ar1 in enumerate(d[f"arrays_{sv1}"]): - data = np.loadtxt(d["beam_%s_%s" % (sv1, ar1)]) + data = np.loadtxt(d[f"beam_{sv1}_{ar1}"]) - _, bl, error_modes = data[2: lmax + 2, 0], data[2: lmax + 2, 1], data[2: lmax + 2, 2:] + _, bl, error_modes = data[2: lmax, 0], data[2: lmax, 1], data[2: lmax, 2:] beam_cov = error_modes.dot(error_modes.T) norm_beam_cov[sv1, ar1] = beam_cov / np.outer(bl, bl) - freq1 = d["nu_eff_%s_%s" % (sv1, ar1)] + freq1 = d[f"nu_eff_{sv1}_{ar1}"] for id_sv2, sv2 in enumerate(surveys): - for id_ar2, ar2 in enumerate(d["arrays_%s" % sv2]): + for id_ar2, ar2 in enumerate(d[f"arrays_{sv2}"]): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue - freq2 = d["nu_eff_%s_%s" % (sv2, ar2)] + freq2 = d[f"nu_eff_{sv2}_{ar2}"] - for spec in ["TT", "TE", "ET", "EE"]: - name = "%sx%s_%s" % (freq1, freq2, spec) - _, ps_th = np.loadtxt("%s/best_fit_%s.dat"%(bestfit_dir, name), unpack=True) - - ps_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = ps_th[:lmax] - ps_all["%s&%s" % (sv2, ar2), "%s&%s" % (sv1, ar1), spec] = ps_th[:lmax] + ps_all[f"{sv1}&{ar1}", f"{sv2}&{ar2}", spec] = cmb_and_fg_dict[freq1, freq2][spec] + ps_all[f"{sv2}&{ar2}", f"{sv1}&{ar1}", spec] = ps_all[f"{sv1}&{ar1}", f"{sv2}&{ar2}", spec] - spec_name += ["%s&%sx%s&%s" % (sv1, ar1, sv2, ar2)] # prepare the mpi computation -na_list, nb_list, nc_list, nd_list = [], [], [], [] -ncovs = 0 -for sid1, spec1 in enumerate(spec_name): - for sid2, spec2 in enumerate(spec_name): - if sid1 > sid2: continue - na, nb = spec1.split("x") - nc, nd = spec2.split("x") - na_list += [na] - nb_list += [nb] - nc_list += [nc] - nd_list += [nd] - ncovs += 1 +ncovs, na_list, nb_list, nc_list, nd_list = pspipe_list.get_covariances_list(d) so_mpi.init(True) subtasks = so_mpi.taskrange(imin=0, imax=ncovs - 1) @@ -82,4 +72,4 @@ na_r, nb_r, nc_r, nd_r = na.replace("&", "_"), nb.replace("&", "_"), nc.replace("&", "_"), nd.replace("&", "_") - np.save("%s/analytic_beam_cov_%sx%s_%sx%s.npy" % (cov_dir, na_r, nb_r, nc_r, nd_r), analytic_beam_cov) + np.save(f"{cov_dir}/analytic_beam_cov_{na_r}x{nb_r}_{nc_r}x{nd_r}.npy", analytic_beam_cov) diff --git a/project/data_analysis/python/get_best_fit.py b/project/data_analysis/python/get_best_fit.py deleted file mode 100644 index 79cec3f1..00000000 --- a/project/data_analysis/python/get_best_fit.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -This script compute best fit from theory and fg power spectra. -In our particular case, we use best fit foregrounds from erminia. -""" -import sys - -import numpy as np -import pylab as plt -from pspy import pspy_utils, so_dict - -d = so_dict.so_dict() -d.read_from_file(sys.argv[1]) - -surveys = d["surveys"] -fg_array = np.loadtxt(d["fgfile"]) - -bestfit_dir = "best_fits" -plot_dir = "plots/best_fits/" - -pspy_utils.create_directory(bestfit_dir) -pspy_utils.create_directory(plot_dir) - -spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] - -clth = {} -lth, clth["TT"], clth["EE"], clth["BB"], clth["TE"] = np.loadtxt(d["theoryfile"], unpack=True) - -# fmt: off -combin = ["TT_90x90", "TT_90x150", "TT_150x150", - "TE_90x90", "TE_90x150", "TE_150x150", - "EE_90x90", "EE_90x150", "EE_150x150"] - - -fg_dict = {} -for c1, s1 in enumerate(combin): - fg_dict[s1] = fg_array[:,c1+1] - -fg_dict["TT_150x90"] = fg_dict["TT_90x150"] -fg_dict["TE_150x90"] = fg_dict["TE_90x150"] -fg_dict["EE_150x90"] = fg_dict["EE_90x150"] - -l_size = np.minimum(len(clth["TT"]),len(fg_dict["TT_90x90"])) -lth = lth[:l_size] - - -for spec in ["TT", "EE", "TE"]: - plt.figure(figsize=(12,12)) - for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - nu_eff1 = d["nu_eff_%s_%s" % (sv1, ar1)] - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - nu_eff2 = d["nu_eff_%s_%s" % (sv2, ar2)] - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - - if spec == "TT" or spec == "EE": - plt.semilogy() - - name = "%s_%sx%s_%s_%s" % (sv1, ar1, sv2, ar2, spec) - print(name, nu_eff1, nu_eff2) - - cl_th_and_fg = clth[spec][:l_size] + fg_dict["%s_%sx%s" % (spec, nu_eff1, nu_eff2)][:l_size] - - np.savetxt("%s/fg_%sx%s.dat" % (bestfit_dir, nu_eff1, nu_eff2), - np.transpose([lth, fg_dict["%s_%sx%s" % (spec, nu_eff1, nu_eff2)][:l_size]])) - - np.savetxt("%s/best_fit_%s.dat" % (bestfit_dir, name), - np.transpose([lth, cl_th_and_fg])) - - plt.plot(lth, cl_th_and_fg, label="%s" % name) - - plt.legend() - plt.savefig("%s/best_fit_%s.png" % (plot_dir, spec)) - plt.clf() - plt.close() diff --git a/project/data_analysis/python/get_best_fit_mflike.py b/project/data_analysis/python/get_best_fit_mflike.py index d38705d6..536f266a 100644 --- a/project/data_analysis/python/get_best_fit_mflike.py +++ b/project/data_analysis/python/get_best_fit_mflike.py @@ -8,8 +8,8 @@ import numpy as np import pylab as plt -from pspy import pspy_utils, so_dict - +from pspy import pspy_utils, so_dict, so_spectra +from pspipe_utils import pspipe_list, best_fits from itertools import product d = so_dict.so_dict() @@ -18,16 +18,10 @@ # first let's get a list of all frequency we plan to study surveys = d["surveys"] lmax = d["lmax"] +type = d["type"] +spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -freq_list = [] -for sv in surveys: - arrays = d["arrays_%s" % sv] - for ar in arrays: - freq_list += [d["nu_eff_%s_%s" % (sv, ar)]] - -# remove doublons -freq_list = list(dict.fromkeys(freq_list)) - +freq_list = pspipe_list.get_freq_list(d) # let's create the directories to write best fit to disk and for plotting purpose bestfit_dir = "best_fits" plot_dir = "plots/best_fits/" @@ -35,76 +29,53 @@ pspy_utils.create_directory(bestfit_dir) pspy_utils.create_directory(plot_dir) -# now we use camb to produce best fit power spectrum, we will use CAMB to do so with standard LCDM params -import camb -ell_min, ell_max = 2, lmax + 500 cosmo_params = d["cosmo_params"] -camb_cosmo = {k: v for k, v in cosmo_params.items() if k not in ["logA", "As"]} -camb_cosmo.update({"As": 1e-10*np.exp(cosmo_params["logA"]), "lmax": ell_max, "lens_potential_accuracy": 1}) -pars = camb.set_params(**camb_cosmo) -results = camb.get_results(pars) -powers = results.get_cmb_power_spectra(pars, CMB_unit="muK") -clth = {} -for count, spec in enumerate(["TT", "EE", "BB", "TE" ]): - clth[spec] = powers["total"][ell_min:ell_max][:,count] -clth["ET"] = clth["TE"] -for spec in ["TB", "BT", "EB", "BE" ]: - clth[spec] = clth["TT"] * 0 - -ell = np.arange(ell_min, ell_max) -np.savetxt("%s/lcdm.dat" % bestfit_dir, np.transpose([ell, clth["TT"], clth["EE"], clth["BB"], clth["TE"]])) - -# we will now use mflike (and in particular the fg module) to get the best fit foreground model -from mflike import theoryforge_MFLike as th_mflike -ThFo = th_mflike.TheoryForge_MFLike() -ThFo.bandint_freqs = np.array(freq_list, dtype = "float") -ThFo.freqs = ThFo.bandint_freqs +l_th, ps_dict = pspy_utils.ps_from_params(cosmo_params, type, lmax + 500) -fg_norm = d["fg_norm"] -fg_model = {"normalisation": fg_norm, "components": d["fg_components"]} -fg_params = d["fg_params"] +f_name = f"{bestfit_dir}/cmb.dat" +so_spectra.write_ps(f_name, l_th, ps_dict, type, spectra=spectra) -ThFo.foregrounds = fg_model -ThFo._init_foreground_model() -fg_dict = ThFo._get_foreground_model(ell=ell, freqs_order=freq_list, **fg_params) -spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] +fg_norm = d["fg_norm"] +fg_params = d["fg_params"] +fg_components = d["fg_components"] +fg_dict = best_fits.get_foreground_dict(l_th, freq_list, fg_components, fg_params, fg_norm) +fg= {} +for freq1 in freq_list: + for freq2 in freq_list: + fg[freq1, freq2] = {} + for spec in spectra: + fg[freq1,freq2][spec] = fg_dict[spec.lower(), "all", freq1, freq2] + so_spectra.write_ps(f"{bestfit_dir}/fg_{freq1}x{freq2}.dat", l_th, fg[freq1,freq2], type, spectra=spectra) for spec in spectra: - plt.figure(figsize=(12,12)) + plt.figure(figsize=(12, 12)) for freq1 in freq_list: for freq2 in freq_list: - name = "%sx%s_%s" % (freq1, freq2, spec) - cl_th_and_fg = clth[spec] + name = f"{freq1}x{freq2}_{spec}" + cl_th_and_fg = ps_dict[spec] if spec == "TT": plt.semilogy() if spec.lower() in d["fg_components"].keys(): fg = fg_dict[spec.lower(), "all", freq1, freq2] - elif spec == "ET": - fg = fg_dict["te", "all", freq2, freq1] else: - fg = np.zeros(cl_th_and_fg.shape) + fg = fg_dict[spec.lower()[::-1], "all", freq1, freq2] cl_th_and_fg = cl_th_and_fg + fg - np.savetxt("%s/fg_%s.dat" % (bestfit_dir, name), - np.transpose([ell, fg])) - - np.savetxt("%s/best_fit_%s.dat" % (bestfit_dir, name), - np.transpose([ell, cl_th_and_fg])) - plt.plot(ell, cl_th_and_fg, label= "%s x %s" %(freq1, freq2) ) + plt.plot(l_th, cl_th_and_fg, label= f"{freq1} x {freq2}") plt.legend() - plt.savefig("%s/best_fit_%s.png" % (plot_dir, spec)) + plt.savefig(f"{plot_dir}/best_fit_{spec}.png") plt.clf() plt.close() nfreq = len(freq_list) -fg_model["components"]["tt"].remove("tSZ_and_CIB") +fg_components["tt"].remove("tSZ_and_CIB") for comp in ["tSZ", "cibc", "tSZxCIB"]: - fg_model["components"]["tt"].append(comp) + fg_components["tt"].append(comp) for mode in ["tt", "te", "ee"]: fig, axes = plt.subplots(nfreq, nfreq, sharex = True, sharey = True, figsize = (10, 10)) @@ -118,10 +89,10 @@ fig.delaxes(ax) continue - for comp in fg_model["components"][mode]: - ax.plot(ell, fg_dict[mode, comp, f0, f1]) - ax.plot(ell, fg_dict[mode, "all", f0, f1], color = "k") - ax.plot(ell, clth[mode.upper()], color = "gray") + for comp in fg_components[mode]: + ax.plot(l_th, fg_dict[mode, comp, f0, f1]) + ax.plot(l_th, fg_dict[mode, "all", f0, f1], color = "k") + ax.plot(l_th, ps_dict[mode.upper()], color = "gray") ax.legend([], title="{}x{} GHz".format(*cross)) if mode == "tt": ax.set_yscale("log") @@ -131,7 +102,7 @@ for i in range(nfreq): axes[-1, i].set_xlabel(r"$\ell$") axes[i, 0].set_ylabel(r"$D_\ell$") - fig.legend(fg_model["components"][mode] + ["all"], title=mode.upper(), bbox_to_anchor=(1,1)) + fig.legend(fg_components[mode] + ["all"], title=mode.upper(), bbox_to_anchor=(1,1)) plt.tight_layout() - plt.savefig("%s/foregrounds_all_comps_%s.png"%(plot_dir,mode), dpi = 300) + plt.savefig(f"{plot_dir}/foregrounds_all_comps_{mode}.png", dpi = 300) plt.close() diff --git a/project/data_analysis/python/get_covariance_old.py b/project/data_analysis/python/get_covariance_old.py deleted file mode 100644 index 5dd8e04a..00000000 --- a/project/data_analysis/python/get_covariance_old.py +++ /dev/null @@ -1,150 +0,0 @@ -""" -This script compute the analytical covariance matrix elements. -""" -from pspy import pspy_utils, so_dict, so_map, so_mpi, so_mcm, so_spectra, so_cov -import numpy as np -import data_analysis_utils -import sys - -d = so_dict.so_dict() -d.read_from_file(sys.argv[1]) - -windows_dir = "windows" -mcms_dir = "mcms" -spectra_dir = "spectra" -ps_model_dir = "noise_model" -cov_dir = "covariances" -bestfit_dir = "best_fits" - -pspy_utils.create_directory(cov_dir) - -surveys = d["surveys"] -binning_file = d["binning_file"] -lmax = d["lmax"] -niter = d["niter"] - -spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] - -ps_all = {} -nl_all = {} -spec_name = [] -ns = {} - -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - - for id_ar1, ar1 in enumerate(arrays_1): - _, bl1 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv1, ar1)]) - bl1 = bl1[2:lmax + 2] - - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - - for id_ar2, ar2 in enumerate(arrays_2): - _, bl2 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv2, ar2)]) - bl2 = bl2[2:lmax + 2] - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - - if (sv1 == sv2) & (ar1 == ar2): - spec_name_noise = "mean_%sx%s_%s_noise" % (ar1, ar2, sv1) - _, Nl = so_spectra.read_ps(ps_model_dir + "/%s.dat" % spec_name_noise, spectra=spectra) - - for spec in ["TT", "TE", "ET", "EE"]: - name = "%s_%sx%s_%s" % (sv1, ar1, sv2, ar2) - - if spec == "ET": - _, ps_th = np.loadtxt("%s/best_fit_%s_%s.dat"%(bestfit_dir, name, "TE"), unpack=True) - else: - _, ps_th = np.loadtxt("%s/best_fit_%s_%s.dat"%(bestfit_dir, name, spec), unpack=True) - - - ps_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = bl1 * bl2 * ps_th[:lmax] - - if (sv1 == sv2) & (ar1 == ar2): - ns[sv1] = len(d["maps_%s_%s" % (sv1, ar1)]) - - nl_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = Nl[spec][:lmax] * ns[sv1] - else: - # Note that here we also set to zero the noise correlation between array - # We should check that this is a good approximation - nl_all["%s&%s" % (sv1, ar1), "%s&%s" % (sv2, ar2), spec] = np.zeros(lmax) - - ps_all["%s&%s" % (sv2, ar2), "%s&%s"%(sv1, ar1), spec] = ps_all["%s&%s"%(sv1, ar1), "%s&%s"%(sv2, ar2), spec] - nl_all["%s&%s" % (sv2, ar2), "%s&%s"%(sv1, ar1), spec] = nl_all["%s&%s"%(sv1, ar1), "%s&%s"%(sv2, ar2), spec] - - spec_name += ["%s&%sx%s&%s" % (sv1, ar1, sv2, ar2)] - -na_list, nb_list, nc_list, nd_list = [], [], [], [] -ncovs = 0 - -for sid1, spec1 in enumerate(spec_name): - for sid2, spec2 in enumerate(spec_name): - if sid1 > sid2: continue - na, nb = spec1.split("x") - nc, nd = spec2.split("x") - na_list += [na] - nb_list += [nb] - nc_list += [nc] - nd_list += [nd] - ncovs += 1 - - -if d["use_toeplitz_cov"] == True: - print("we will use the toeplitz approximation") - l_exact, l_band, l_toep = 800, 2000, 2750 -else: - l_exact, l_band, l_toep = None, None, None - -print("number of covariance matrices to compute : %s" % ncovs) -so_mpi.init(True) -subtasks = so_mpi.taskrange(imin=0, imax=ncovs - 1) -print(subtasks) -for task in subtasks: - task = int(task) - - na, nb, nc, nd = na_list[task], nb_list[task], nc_list[task], nd_list[task] - na_r, nb_r, nc_r, nd_r = na.replace("&", "_"), nb.replace("&", "_"), nc.replace("&", "_"), nd.replace("&", "_") - print("cov element (%s x %s, %s x %s)" % (na_r, nb_r, nc_r, nd_r)) - - - win = {} - - win["Ta"] = so_map.read_map(d["window_T_%s" % na_r]) - win["Tb"] = so_map.read_map(d["window_T_%s" % nb_r]) - win["Tc"] = so_map.read_map(d["window_T_%s" % nc_r]) - win["Td"] = so_map.read_map(d["window_T_%s" % nd_r]) - win["Pa"] = so_map.read_map(d["window_pol_%s" % na_r]) - win["Pb"] = so_map.read_map(d["window_pol_%s" % nb_r]) - win["Pc"] = so_map.read_map(d["window_pol_%s" % nc_r]) - win["Pd"] = so_map.read_map(d["window_pol_%s" % nd_r]) - - - coupling = so_cov.cov_coupling_spin0and2_simple(win, lmax, niter=niter, l_exact=l_exact, l_band=l_band, l_toep=l_toep) - - - try: - mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, na_r, nb_r), spin_pairs=spin_pairs) - except: - mbb_inv_ab, Bbl_ab = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nb_r, na_r), spin_pairs=spin_pairs) - - try: - mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nc_r, nd_r), spin_pairs=spin_pairs) - except: - mbb_inv_cd, Bbl_cd = so_mcm.read_coupling(prefix="%s/%sx%s" % (mcms_dir, nd_r, nc_r), spin_pairs=spin_pairs) - - - analytic_cov = data_analysis_utils.covariance_element(coupling, - [na, nb, nc, nd], - ns, - ps_all, - nl_all, - binning_file, - mbb_inv_ab, - mbb_inv_cd) - - np.save("%s/analytic_cov_%sx%s_%sx%s.npy" % (cov_dir, na_r, nb_r, nc_r, nd_r), analytic_cov) - - diff --git a/project/data_analysis/python/get_mcm_and_bbl_mpi.py b/project/data_analysis/python/get_mcm_and_bbl_mpi.py index 2c32737c..d4a21f1e 100644 --- a/project/data_analysis/python/get_mcm_and_bbl_mpi.py +++ b/project/data_analysis/python/get_mcm_and_bbl_mpi.py @@ -5,6 +5,7 @@ from pspy import so_map, so_mcm, pspy_utils, so_dict, so_mpi import sys +from pspipe_utils import pspipe_list d = so_dict.so_dict() d.read_from_file(sys.argv[1]) @@ -23,25 +24,9 @@ else: l_exact, l_band, l_toep = None, None, None - -sv1_list, ar1_list, sv2_list, ar2_list = [], [], [], [] -n_mcms = 0 -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - # This ensures that we do not repeat redundant computations - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - sv1_list += [sv1] - ar1_list += [ar1] - sv2_list += [sv2] - ar2_list += [ar2] - n_mcms += 1 +n_mcms, sv1_list, ar1_list, sv2_list, ar2_list = pspipe_list.get_spectra_list(d) -print("number of mcm matrices to compute : %s" % n_mcms) +print(f"number of mcm matrices to compute : {n_mcms}") so_mpi.init(True) subtasks = so_mpi.taskrange(imin=0, imax=n_mcms - 1) print(subtasks) @@ -49,15 +34,15 @@ task = int(task) sv1, ar1, sv2, ar2 = sv1_list[task], ar1_list[task], sv2_list[task], ar2_list[task] - print("%s_%s x %s_%s" % (sv1, ar1, sv2, ar2)) + print(f"{sv1}_{ar1} x {sv2}_{ar2}") - l, bl1 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv1, ar1)]) - win1_T = so_map.read_map(d["window_T_%s_%s" % (sv1, ar1)]) - win1_pol = so_map.read_map(d["window_pol_%s_%s" % (sv1, ar1)]) + l, bl1 = pspy_utils.read_beam_file(d[f"beam_{sv1}_{ar1}"]) + win1_T = so_map.read_map(d[f"window_T_{sv1}_{ar1}"]) + win1_pol = so_map.read_map(d[f"window_pol_{sv1}_{ar1}"]) - l, bl2 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv2, ar2)]) - win2_T = so_map.read_map(d["window_T_%s_%s" % (sv2, ar2)]) - win2_pol = so_map.read_map(d["window_pol_%s_%s" % (sv2, ar2)]) + l, bl2 = pspy_utils.read_beam_file(d[f"beam_{sv2}_{ar2}"]) + win2_T = so_map.read_map(d[f"window_T_{sv2}_{ar2}"]) + win2_pol = so_map.read_map(d[f"window_pol_{sv2}_{ar2}"]) mbb_inv, Bbl = so_mcm.mcm_and_bbl_spin0and2(win1=(win1_T, win1_pol), win2=(win2_T, win2_pol), @@ -71,7 +56,7 @@ l_band=l_band, l_toep=l_toep, binned_mcm=binned_mcm, - save_file="%s/%s_%sx%s_%s"%(mcm_dir, sv1, ar1, sv2, ar2)) + save_file=f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}") diff --git a/project/data_analysis/python/get_noise_model.py b/project/data_analysis/python/get_noise_model.py index aec5a079..a254bd3d 100644 --- a/project/data_analysis/python/get_noise_model.py +++ b/project/data_analysis/python/get_noise_model.py @@ -8,7 +8,6 @@ import sys import scipy.interpolate - def interpolate_dict(lb, cb, lth, spectra, force_positive=True, l_inf_lmin_equal_lmin=True, discard_cross=True): cl_dict = {} for spec in spectra: @@ -43,18 +42,18 @@ def interpolate_dict(lb, cb, lth, spectra, force_positive=True, l_inf_lmin_equal lth = np.arange(2, lmax+2) for sv in surveys: - arrays = d["arrays_%s" % sv] + arrays = d[f"arrays_{sv}"] for id_ar1, ar1 in enumerate(arrays): for id_ar2, ar2 in enumerate(arrays): if id_ar1 > id_ar2: continue - l, bl_ar1 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv, ar1)]) - l, bl_ar2 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv, ar2)]) + l, bl_ar1 = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar1}"]) + l, bl_ar2 = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar2}"]) - lb, nbs_ar1xar1 = so_spectra.read_ps("%s/%s_%s_%sx%s_%s_noise.dat" % (spectra_dir, type, sv, ar1, sv, ar1), spectra=spectra) - lb, nbs_ar1xar2 = so_spectra.read_ps("%s/%s_%s_%sx%s_%s_noise.dat" % (spectra_dir, type, sv, ar1, sv, ar2), spectra=spectra) - lb, nbs_ar2xar2 = so_spectra.read_ps("%s/%s_%s_%sx%s_%s_noise.dat" % (spectra_dir, type, sv, ar2, sv, ar2), spectra=spectra) + lb, nbs_ar1xar1 = so_spectra.read_ps(f"{spectra_dir}/{type}_{sv}_{ar1}x{sv}_{ar1}_noise.dat", spectra=spectra) + lb, nbs_ar1xar2 = so_spectra.read_ps(f"{spectra_dir}/{type}_{sv}_{ar1}x{sv}_{ar2}_noise.dat", spectra=spectra) + lb, nbs_ar2xar2 = so_spectra.read_ps(f"{spectra_dir}/{type}_{sv}_{ar2}x{sv}_{ar2}_noise.dat", spectra=spectra) lb, bb_ar1 = pspy_utils.naive_binning(l, bl_ar1, binning_file, lmax) lb, bb_ar2 = pspy_utils.naive_binning(l, bl_ar2, binning_file, lmax) @@ -91,15 +90,18 @@ def interpolate_dict(lb, cb, lth, spectra, force_positive=True, l_inf_lmin_equal plt.plot(lb, nbs, ".", - label = "%s %sx%s" % (sv, ar1, ar2), + label = f"{sv} {ar1}x{ar2}", color="red") plt.legend(fontsize=20) - plt.savefig("%s/noise_interpolate_%sx%s_%s_%s.png" % (plot_dir, ar1, ar2, sv, spec), bbox_inches="tight") + plt.savefig(f"{plot_dir}/noise_interpolate_{ar1}x{ar2}_{sv}_{spec}.png", bbox_inches="tight") plt.clf() plt.close() - spec_name_noise_mean = "mean_%sx%s_%s_noise" % (ar1, ar2, sv) - so_spectra.write_ps(ps_model_dir + "/%s.dat" % spec_name_noise_mean, lth, nlth, type, spectra=spectra) - - + spec_name_noise_mean = f"mean_{ar1}x{ar2}_{sv}_noise" + so_spectra.write_ps(ps_model_dir + f"/{spec_name_noise_mean}.dat", lth, nlth, type, spectra=spectra) + if ar2 != ar1: + spec_name_noise_mean = f"mean_{ar2}x{ar1}_{sv}_noise" + TE, ET, TB, BT, EB, BE = nlth["ET"], nlth["TE"], nlth["BT"], nlth["TB"], nlth["BE"], nlth["EB"] + nlth["TE"], nlth["ET"], nlth["TB"], nlth["BT"], nlth["EB"], nlth["BE"] = TE, ET, TB, BT, EB, BE + so_spectra.write_ps(ps_model_dir + f"/{spec_name_noise_mean}.dat", lth, nlth, type, spectra=spectra) diff --git a/project/data_analysis/python/get_spectra_from_alms.py b/project/data_analysis/python/get_spectra_from_alms.py index 5930e6e2..cfcc9972 100644 --- a/project/data_analysis/python/get_spectra_from_alms.py +++ b/project/data_analysis/python/get_spectra_from_alms.py @@ -6,12 +6,12 @@ If write_all_spectra=True, each individual spectrum is also written to disk. """ -from pspy import pspy_utils, so_dict, so_map, sph_tools, so_mcm, so_spectra, so_map_preprocessing +from pspy import pspy_utils, so_dict, so_map, sph_tools, so_mcm, so_spectra, so_map_preprocessing, so_mpi +from pspipe_utils import kspace, pspipe_list, transfer_function from pixell import enmap import numpy as np import healpy as hp import sys -import data_analysis_utils import time @@ -25,6 +25,7 @@ write_all_spectra = d["write_splits_spectra"] deconvolve_pixwin = d["deconvolve_pixwin"] binned_mcm = d["binned_mcm"] +apply_kspace_filter = d["apply_kspace_filter"] mcm_dir = "mcms" spec_dir = "spectra" @@ -32,155 +33,150 @@ pspy_utils.create_directory(spec_dir) -master_alms = {} -nsplit = {} - +master_alms, nsplit, arrays, templates, filter_dicts = {}, {}, {}, {}, {} # read the alms for sv in surveys: - for ar in d["arrays_%s" % sv]: - maps = d["maps_%s_%s" % (sv, ar)] + arrays[sv] = d[f"arrays_{sv}"] + if apply_kspace_filter == True: filter_dicts[sv] = d[f"k_filter_{sv}"] + templates[sv] = so_map.read_map(d[f"window_T_{sv}_{arrays[sv][0]}"]) + + for ar in arrays[sv]: + maps = d[f"maps_{sv}_{ar}"] nsplit[sv] = len(maps) - print("%s split of survey: %s, array %s"%(nsplit[sv], sv, ar)) + print(f"{nsplit[sv]} split of survey: {sv}, array {ar}") for k, map in enumerate(maps): - master_alms[sv, ar, k] = np.load("%s/alms_%s_%s_%d.npy" % (alms_dir, sv, ar, k)) - + master_alms[sv, ar, k] = np.load(f"{alms_dir}/alms_{sv}_{ar}_{k}.npy") + print(f"{alms_dir}/alms_{sv}_{ar}_{k}.npy") + # compute the transfer functions _, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) -tf_array = {} - -for sv in surveys: - - tf_survey = np.ones(len(lb)) - ks_f = d["k_filter_%s" % sv] - template = so_map.read_map(d["window_T_%s_%s" % (sv, d["arrays_%s" % sv][0])]) - - if ks_f["apply"]: - if ks_f["tf"] == "analytic": - print("compute analytic kspace tf %s" % sv) - shape, wcs = template.data.shape, template.data.wcs - if ks_f["type"] == "binary_cross": - filter = so_map_preprocessing.build_std_filter(shape, wcs, vk_mask=ks_f["vk_mask"], hk_mask=ks_f["hk_mask"], dtype=np.float32) - elif ks_f["type"] == "gauss": - filter = so_map_preprocessing.build_sigurd_filter(shape, wcs, ks_f["lbounds"], dtype=np.float32) - else: - print("you need to specify a valid filter type") - sys.exit() - - _, kf_tf = so_map_preprocessing.analytical_tf(template, filter, binning_file, lmax) - else: - print("use kspace tf from file %s" % sv) - _, _, kf_tf, _ = np.loadtxt(ks_f["tf"], unpack=True) - - tf_survey *= np.sqrt(np.abs(kf_tf[:len(lb)])) - - if deconvolve_pixwin: - # extra pixel window function deconvolution for healpix and planck projected on CAR - pixwin_l = np.ones(2 * lmax) - if "planck" in sv.lower(): - print("Deconvolve Planck pixel window function") - pixwin_l = hp.pixwin(2048) - if template.pixel == "HEALPIX": - pixwin_l = hp.pixwin(template.nside) - - # this should be checked with simulations since maybe this should be done at the mcm level - _, pw = pspy_utils.naive_binning(np.arange(len(pixwin_l)), pixwin_l, binning_file, lmax) - tf_survey *= pw - - for id_ar, ar in enumerate(d["arrays_%s" % sv]): - tf_array[sv, ar] = tf_survey.copy() - - if d["deconvolve_map_maker_tf_%s" % sv]: - print("deconvolve map maker tf %s %s" % (sv, ar)) - _, mm_tf = np.loadtxt(d["mm_tf_%s_%s.dat" % (sv, ar)], unpack=True) - tf_array[sv, ar] *= mm_tf[:len(lb)] +n_bins = len(lb) +spec_name_list = pspipe_list.get_spec_name_list(d, char="_") + +if apply_kspace_filter: + kspace_tf_path = d["kspace_tf_path"] + if kspace_tf_path == "analytical": + kspace_transfer_matrix = kspace.build_analytic_kspace_filter_matrices(surveys, + arrays, + templates, + filter_dicts, + binning_file, + lmax) + else: + kspace_transfer_matrix = {} + for spec_name in spec_name_list: + kspace_transfer_matrix[spec_name] = np.load(f"{kspace_tf_path}/kspace_matrix_{spec_name}.npy", allow_pickle=True) - np.savetxt(spec_dir + "/tf_%s_%s.dat" % (sv, ar), - np.transpose([lb, tf_array[sv, ar]])) + + # this will be used in the covariance computation + for spec_name in spec_name_list: + one_d_tf = kspace_transfer_matrix[spec_name].diagonal()[:4 * n_bins] + np.savetxt(f"{spec_dir}/one_dimension_kspace_tf_{spec_name}.dat", one_d_tf) # compute the power spectra spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -ps_dict = {} +n_spec, sv1_list, ar1_list, sv2_list, ar2_list = pspipe_list.get_spectra_list(d) +print(f"number of spectra to compute : {n_spec}") +so_mpi.init(True) +subtasks = so_mpi.taskrange(imin=0, imax=n_spec - 1) -for id_sv1, sv1 in enumerate(surveys): - - for id_ar1, ar1 in enumerate(d["arrays_%s" % sv1]): +for task in subtasks: + task = int(task) + sv1, ar1, sv2, ar2 = sv1_list[task], ar1_list[task], sv2_list[task], ar2_list[task] - for id_sv2, sv2 in enumerate(surveys): - - for id_ar2, ar2 in enumerate(d["arrays_%s" % sv2]): - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - - for spec in spectra: - ps_dict[spec, "auto"] = [] - ps_dict[spec, "cross"] = [] + xtra_pw1, xtra_pw2, mm_tf1, mm_tf2 = None, None, None, None + if deconvolve_pixwin: + # some xtra pixel window in the case of healpix + # or Planck projected into CAR + xtra_pw1 = transfer_function.healpix_pixwin(sv1, templates[sv1], binning_file, lmax) + xtra_pw2 = transfer_function.healpix_pixwin(sv2, templates[sv2], binning_file, lmax) + if d[f"deconvolve_map_maker_tf_{sv1}"]: + mm_tf1 = so_spectra.read_ps(d[f"mm_tf_{sv1}_{ar1}.dat"], spectra=spectra) + if d[f"deconvolve_map_maker_tf_{sv2}"]: + mm_tf2 = so_spectra.read_ps(d[f"mm_tf_{sv2}_{ar2}.dat"], spectra=spectra) + + + ps_dict = {} + for spec in spectra: + ps_dict[spec, "auto"] = [] + ps_dict[spec, "cross"] = [] - nsplits_1 = nsplit[sv1] - nsplits_2 = nsplit[sv2] + nsplits_1 = nsplit[sv1] + nsplits_2 = nsplit[sv2] + + spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] + mbb_inv, Bbl = so_mcm.read_coupling(prefix=f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}", + spin_pairs=spin_pairs) + - for s1 in range(nsplits_1): - for s2 in range(nsplits_2): - if (sv1 == sv2) & (ar1 == ar2) & (s1>s2) : continue + for s1 in range(nsplits_1): + for s2 in range(nsplits_2): + if (sv1 == sv2) & (ar1 == ar2) & (s1>s2) : continue - spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] - mbb_inv, Bbl = so_mcm.read_coupling(prefix="%s/%s_%sx%s_%s" % (mcm_dir, sv1, ar1, sv2, ar2), - spin_pairs=spin_pairs) - l, ps_master = so_spectra.get_spectra_pixell(master_alms[sv1, ar1, s1], - master_alms[sv2, ar2, s2], - spectra=spectra) + l, ps_master = so_spectra.get_spectra_pixell(master_alms[sv1, ar1, s1], + master_alms[sv2, ar2, s2], + spectra=spectra) - spec_name="%s_%s_%sx%s_%s_%d%d" % (type, sv1, ar1, sv2, ar2, s1, s2) + spec_name=f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_{s1}{s2}" - lb, ps = so_spectra.bin_spectra(l, - ps_master, - binning_file, - lmax, - type=type, - mbb_inv=mbb_inv, - spectra=spectra, - binned_mcm=binned_mcm) + lb, ps = so_spectra.bin_spectra(l, + ps_master, + binning_file, + lmax, + type=type, + mbb_inv=mbb_inv, + spectra=spectra, + binned_mcm=binned_mcm) - data_analysis_utils.deconvolve_tf(lb, ps, tf_array[sv1, ar1], tf_array[sv2, ar2], 3, lmax) - - if write_all_spectra: - so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name, lb, ps, type, spectra=spectra) - - for count, spec in enumerate(spectra): - if (s1 == s2) & (sv1 == sv2): - if count == 0: - print("auto %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) - ps_dict[spec, "auto"] += [ps[spec]] - else: - if count == 0: - print("cross %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) - ps_dict[spec, "cross"] += [ps[spec]] - - ps_dict_auto_mean = {} - ps_dict_cross_mean = {} - ps_dict_noise_mean = {} - - for spec in spectra: - ps_dict_cross_mean[spec] = np.mean(ps_dict[spec, "cross"], axis=0) - spec_name_cross = "%s_%s_%sx%s_%s_cross" % (type, sv1, ar1, sv2, ar2) + lb, ps = kspace.deconvolve_kspace_filter_matrix(lb, + ps, + kspace_transfer_matrix[f"{sv1}_{ar1}x{sv2}_{ar2}"], + spectra) + + lb, ps = transfer_function.deconvolve_xtra_tf(lb, + ps, + spectra, + xtra_pw1=xtra_pw1, + xtra_pw2=xtra_pw2, + mm_tf1=mm_tf1, + mm_tf2=mm_tf2) + + if write_all_spectra: + so_spectra.write_ps(spec_dir + f"/{spec_name}.dat", lb, ps, type, spectra=spectra) + + for count, spec in enumerate(spectra): + if (s1 == s2) & (sv1 == sv2): + if count == 0: print(f"auto {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") + ps_dict[spec, "auto"] += [ps[spec]] + else: + if count == 0: print(f"cross {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") + ps_dict[spec, "cross"] += [ps[spec]] + + ps_dict_auto_mean = {} + ps_dict_cross_mean = {} + ps_dict_noise_mean = {} + + for spec in spectra: + ps_dict_cross_mean[spec] = np.mean(ps_dict[spec, "cross"], axis=0) + spec_name_cross = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_cross" - if ar1 == ar2 and sv1 == sv2: - # Average TE / ET so that for same array same season TE = ET - ps_dict_cross_mean[spec] = (np.mean(ps_dict[spec, "cross"], axis=0) + np.mean(ps_dict[spec[::-1], "cross"], axis=0)) / 2. - - if sv1 == sv2: - ps_dict_auto_mean[spec] = np.mean(ps_dict[spec, "auto"], axis=0) - spec_name_auto = "%s_%s_%sx%s_%s_auto" % (type, sv1, ar1, sv2, ar2) - ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / nsplit[sv1] - spec_name_noise = "%s_%s_%sx%s_%s_noise" % (type, sv1, ar1, sv2, ar2) - - so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name_cross, lb, ps_dict_cross_mean, type, spectra=spectra) - if sv1 == sv2: - so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name_auto, lb, ps_dict_auto_mean, type, spectra=spectra) - so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name_noise, lb, ps_dict_noise_mean, type, spectra=spectra) + if ar1 == ar2 and sv1 == sv2: + # Average TE / ET so that for same array same season TE = ET + ps_dict_cross_mean[spec] = (np.mean(ps_dict[spec, "cross"], axis=0) + np.mean(ps_dict[spec[::-1], "cross"], axis=0)) / 2. + + if sv1 == sv2: + ps_dict_auto_mean[spec] = np.mean(ps_dict[spec, "auto"], axis=0) + spec_name_auto = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_auto" + ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / nsplit[sv1] + spec_name_noise = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_noise" + + so_spectra.write_ps(spec_dir + f"/{spec_name_cross}.dat", lb, ps_dict_cross_mean, type, spectra=spectra) + if sv1 == sv2: + so_spectra.write_ps(spec_dir + f"/{spec_name_auto}.dat", lb, ps_dict_auto_mean, type, spectra=spectra) + so_spectra.write_ps(spec_dir + f"/{spec_name_noise}.dat", lb, ps_dict_noise_mean, type, spectra=spectra) diff --git a/project/data_analysis/python/get_window_dr6.py b/project/data_analysis/python/get_window_dr6.py index c402805b..7439dacd 100644 --- a/project/data_analysis/python/get_window_dr6.py +++ b/project/data_analysis/python/get_window_dr6.py @@ -1,14 +1,16 @@ -# This script create the window functions used in the PS computation -# They consist of a point source mask, a galactic mask and a mask based on the amount of cross linking in the data, we also produce a window that include the pixel weighting. -# The different masks are apodized. -# We also produce a binary mask that will later be used for the kspace filtering operation, in order to remove the edges and avoid nasty pixels before -# this not so well defined Fourier operation. +""" +This script create the window functions used in the PS computation +They consist of a point source mask, a galactic mask and a mask based on the amount of cross linking in the data, we also produce a window that include the pixel weighting. +The different masks are apodized. +We also produce a binary mask that will later be used for the kspace filtering operation, in order to remove the edges and avoid nasty pixels before +this not so well defined Fourier operation. +""" import sys import numpy as np from pspy import pspy_utils, so_dict, so_map, so_mpi, so_window - +from pspipe_utils import pspipe_list def create_crosslink_mask(xlink_map, cross_link_threshold): # remove pixels with very little amount of cross linking @@ -46,7 +48,6 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): # this ensure that the window is not totally dominated by few pixels with too much weight n_med_ivar = d["n_med_ivar"] - window_dir = "windows" surveys = d["surveys"] @@ -56,18 +57,10 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): if "patch" in d: patch = so_map.read_map(d["patch"]) - # here we list the different windows that need to be computed, we will then do a MPI loops over this list -sv_list, ar_list = [], [] -n_wins = 0 -for sv in surveys: - arrays = d["arrays_%s" % sv] - for ar in arrays: - sv_list += [sv] - ar_list += [ar] - n_wins += 1 - -print("number of windows to compute : %s" % n_wins) +n_wins, sv_list, ar_list = pspipe_list.get_arrays_list(d) + +print(f"number of windows to compute : {n_wins}") so_mpi.init(True) subtasks = so_mpi.taskrange(imin=0, imax=n_wins - 1) @@ -77,21 +70,19 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): task = int(task) sv, ar = sv_list[task], ar_list[task] - - gal_mask = so_map.read_map(d["gal_mask_%s_%s" % (sv, ar)]) + gal_mask = so_map.read_map(d[f"gal_mask_{sv}_{ar}"]) survey_mask = gal_mask.copy() survey_mask.data[:] = 1 - maps = d["maps_%s_%s" % (sv, ar)] - + maps = d[f"maps_{sv}_{ar}"] ivar_all = gal_mask.copy() ivar_all.data[:] = 0 for k, map in enumerate(maps): - if d["src_free_maps_%s" % sv] == True: + if d[f"src_free_maps_{sv}"] == True: index = map.find("map_srcfree.fits") else: index = map.find("map.fits") @@ -106,7 +97,7 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): for k, map in enumerate(maps): - if d["src_free_maps_%s" % sv] == True: + if d[f"src_free_maps_{sv}"] == True: index = map.find("map_srcfree.fits") else: index = map.find("map.fits") @@ -131,20 +122,18 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): # compared to what we will do with the final window, this should prevent some aliasing from the kspace filter to enter the data binary.data[dist.data < skip_from_edges_degree / 2] = 0 - binary.data = binary.data.astype(np.float32) - binary.write_map("%s/binary_%s_%s.fits" % (window_dir, sv, ar)) + binary.write_map(f"{window_dir}/binary_{sv}_{ar}.fits") # Now we create the final window function that will be used in the analysis survey_mask.data[dist.data < skip_from_edges_degree] = 0 survey_mask = so_window.create_apodization(survey_mask, "C1", apod_survey_degree, use_rmax=True) - ps_mask = so_map.read_map(d["ps_mask_%s_%s" % (sv, ar)]) + ps_mask = so_map.read_map(d[f"ps_mask_{sv}_{ar}"]) ps_mask = so_window.create_apodization(ps_mask, "C1", apod_pts_source_degree, use_rmax=True) survey_mask.data *= ps_mask.data - - + survey_mask.data = survey_mask.data.astype(np.float32) - survey_mask.write_map("%s/window_%s_%s.fits" % (window_dir, sv, ar)) + survey_mask.write_map(f"{window_dir}/window_{sv}_{ar}.fits") # We also create an optional window which also include pixel weighting # Note that with use the threshold n_ivar * med so that pixels with very high @@ -157,14 +146,14 @@ def create_crosslink_mask(xlink_map, cross_link_threshold): survey_mask_weighted.data[:] *= ivar_all.data[:] survey_mask_weighted.data = survey_mask_weighted.data.astype(np.float32) - survey_mask_weighted.write_map("%s/window_w_%s_%s.fits" % (window_dir, sv, ar)) + survey_mask_weighted.write_map(f"{window_dir}/window_w_{sv}_{ar}.fits") # plot binary = binary.downgrade(4) - binary.plot(file_name="%s/binary_%s_%s" % (window_dir, sv, ar)) + binary.plot(file_name=f"{window_dir}/binary_{sv}_{ar}") survey_mask = survey_mask.downgrade(4) - survey_mask.plot(file_name="%s/window_%s_%s" % (window_dir, sv, ar)) + survey_mask.plot(file_name=f"{window_dir}/window_{sv}_{ar}") survey_mask_weighted = survey_mask_weighted.downgrade(4) - survey_mask_weighted.plot(file_name="%s/window_w_%s_%s" % (window_dir, sv, ar)) + survey_mask_weighted.plot(file_name=f"{window_dir}/window_w_{sv}_{ar}") diff --git a/project/data_analysis/python/montecarlo/mc_analysis.py b/project/data_analysis/python/montecarlo/mc_analysis.py index 2c601292..0e2e518d 100644 --- a/project/data_analysis/python/montecarlo/mc_analysis.py +++ b/project/data_analysis/python/montecarlo/mc_analysis.py @@ -51,10 +51,10 @@ for spec in spectra: for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue @@ -62,9 +62,9 @@ if (sv1 != sv2) & (kind == "noise"): continue if (sv1 != sv2) & (kind == "auto"): continue - spec_name = "%s_%s_%sx%s_%s_%s_%05d" % (type, sv1, ar1, sv2, ar2, kind, iii) - - lb, Db = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name, spectra=spectra) + spec_name = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_{kind}_%05d" % iii + + lb, Db = so_spectra.read_ps(spec_dir + f"/{spec_name}.dat", spectra=spectra) n_bins = len(lb) vec = np.append(vec, Db[spec]) @@ -103,17 +103,17 @@ cov_restricted = cov_restricted / (iStop-iStart) - np.outer(mean_vec_restricted, mean_vec_restricted) cov_EB = cov_EB / (iStop-iStart) - np.outer(mean_vec_EB, mean_vec_EB) - np.save("%s/cov_all_%s.npy" % (mc_dir, kind), cov) - np.save("%s/cov_restricted_all_%s.npy" % (mc_dir, kind), cov_restricted) - np.save("%s/cov_EB_all_%s.npy" % (mc_dir, kind), cov_EB) + np.save(f"{mc_dir}/cov_all_{kind}.npy", cov) + np.save(f"{mc_dir}/cov_restricted_all_{kind}.npy", cov_restricted) + np.save(f"{mc_dir}/cov_EB_all_{kind}.npy", cov_EB) id_spec = 0 for spec in spectra: for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): @@ -125,7 +125,7 @@ mean = mean_vec[id_spec * n_bins:(id_spec + 1) * n_bins] std = np.sqrt(cov[id_spec * n_bins:(id_spec + 1) * n_bins, id_spec * n_bins:(id_spec + 1) * n_bins].diagonal()) - np.savetxt("%s/spectra_%s_%s_%sx%s_%s_%s.dat" % (mc_dir, spec, sv1, ar1, sv2, ar2, kind), np.array([lb,mean,std]).T) + np.savetxt(f"{mc_dir}/spectra_{spec}_{sv1}_{ar1}x{sv2}_{ar2}_{kind}.dat", np.array([lb, mean, std]).T) id_spec += 1 diff --git a/project/data_analysis/python/montecarlo/mc_cov_analysis.py b/project/data_analysis/python/montecarlo/mc_cov_analysis.py index 1528afe8..c152b2b0 100644 --- a/project/data_analysis/python/montecarlo/mc_cov_analysis.py +++ b/project/data_analysis/python/montecarlo/mc_cov_analysis.py @@ -5,6 +5,7 @@ from pspy import pspy_utils, so_dict, so_spectra +from pspipe_utils import pspipe_list import numpy as np import sys @@ -23,18 +24,8 @@ spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] +spec_list = pspipe_list.get_spec_name_list(d, char="_") -spec_list = [] -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - spec_list += ["%s_%sx%s_%s" % (sv1, ar1, sv2, ar2)] - for sid1, spec1 in enumerate(spec_list): for sid2, spec2 in enumerate(spec_list): if sid1 > sid2 : continue @@ -44,11 +35,11 @@ ps_list_ab = [] ps_list_cd = [] for iii in range(iStart, iStop): - spec_name_cross_ab = "%s_%sx%s_cross_%05d" % (type, na, nb, iii) - spec_name_cross_cd = "%s_%sx%s_cross_%05d" % (type, nc, nd, iii) + spec_name_cross_ab = f"{type}_{na}x{nb}_cross_%05d" % iii + spec_name_cross_cd = f"{type}_{nc}x{nd}_cross_%05d" % iii - lb, ps_ab = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_cross_ab, spectra=spectra) - lb, ps_cd = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_cross_cd, spectra=spectra) + lb, ps_ab = so_spectra.read_ps(spec_dir + f"/{spec_name_cross_ab}.dat", spectra=spectra) + lb, ps_cd = so_spectra.read_ps(spec_dir + f"/{spec_name_cross_cd}.dat", spectra=spectra) vec_ab = [] vec_cd = [] @@ -65,6 +56,6 @@ cov_mc = cov_mc / (iStop-iStart) - np.outer(np.mean(ps_list_ab, axis=0), np.mean(ps_list_cd, axis=0)) - np.save("%s/mc_cov_%sx%s_%sx%s.npy"%(cov_dir, na, nb, nc, nd), cov_mc) + np.save(f"{cov_dir}/mc_cov_{na}x{nb}_{nc}x{nd}.npy", cov_mc) diff --git a/project/data_analysis/python/montecarlo/mc_get_kspace_tf_spectra.py b/project/data_analysis/python/montecarlo/mc_get_kspace_tf_spectra.py index 50bf4614..972a8441 100644 --- a/project/data_analysis/python/montecarlo/mc_get_kspace_tf_spectra.py +++ b/project/data_analysis/python/montecarlo/mc_get_kspace_tf_spectra.py @@ -5,17 +5,15 @@ """ from pspy import pspy_utils, so_dict, so_map, sph_tools, so_mcm, so_spectra, so_mpi, so_map_preprocessing +from pspipe_utils import pspipe_list, kspace, simulation import numpy as np import sys -import data_analysis_utils import time from pixell import curvedsky, powspec - d = so_dict.so_dict() d.read_from_file(sys.argv[1]) -if len(sys.argv) > 2: - np.random.seed(int(sys.argv[2])) +if len(sys.argv) > 2: np.random.seed(int(sys.argv[2])) surveys = d["surveys"] lmax = d["lmax"] @@ -24,6 +22,7 @@ binning_file = d["binning_file"] sim_alm_dtype = d["sim_alm_dtype"] binned_mcm = d["binned_mcm"] +apply_kspace_filter = d["apply_kspace_filter"] if sim_alm_dtype == "complex64": sim_alm_dtype = np.complex64 @@ -42,82 +41,61 @@ spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] # let's list the different frequencies used in the code -freq_list = [] -for sv in surveys: - arrays = d["arrays_%s" % sv] - for ar in arrays: - freq_list += [d["nu_eff_%s_%s" % (sv, ar)]] -freq_list = list(dict.fromkeys(freq_list)) # this bit removes doublons - -id_freq = {} -# create a list assigning an integer index to each freq (used later in the code to generate fg simulations) -for count, freq in enumerate(freq_list): - id_freq[freq] = count +freq_list = pspipe_list.get_freq_list(d) # we read cmb and fg best fit power spectrum # we put the best fit power spectrum in a matrix [nfreqs, nfreqs, lmax] # taking into account the correlation of the fg between different frequencies -ncomp = 3 -ps_cmb = powspec.read_spectrum("%s/lcdm.dat" % bestfit_dir)[:ncomp, :ncomp] -l, ps_fg = data_analysis_utils.get_foreground_matrix(bestfit_dir, freq_list, lmax) +f_name_cmb = bestfit_dir + "/cmb.dat" +f_name_fg = bestfit_dir + "/fg_{}x{}.dat" + +ps_mat = simulation.cmb_matrix_from_file(f_name_cmb, lmax, spectra) +l, fg_mat = simulation.foreground_matrix_from_files(f_name_fg, freq_list, lmax, spectra) + +assert (apply_kspace_filter == True), "this has to be set to True" # prepare the filters template = {} filter = {} for sv in surveys: - arrays = d["arrays_%s" % sv] - template_name = d["maps_%s_%s" % (sv, arrays[0])][0] + arrays = d[f"arrays_{sv}"] + template_name = d[f"maps_{sv}_{arrays[0]}"][0] template[sv] = so_map.read_map(template_name) - ks_f = d["k_filter_%s" % sv] - assert (template[sv].pixel == "CAR"), "we only compute kspace tf in CAR pixellisation" - assert (ks_f["apply"] == True), "the filter keyword apply has to be set to True" - - shape, wcs = template[sv].data.shape, template[sv].data.wcs - if ks_f["type"] == "binary_cross": - filter[sv] = so_map_preprocessing.build_std_filter(shape, wcs, vk_mask=ks_f["vk_mask"], hk_mask=ks_f["hk_mask"], dtype=np.float64) - elif ks_f["type"] == "gauss": - filter[sv] = so_map_preprocessing.build_sigurd_filter(shape, wcs, ks_f["lbounds"], dtype=np.float64) - else: - print("you need to specify a valid filter type") - - + ks_f = d[f"k_filter_{sv}"] + filter[sv] = kspace.get_kspace_filter(template[sv], ks_f) # the filter also introduce E->B leakage, in order to measure it we run the scenario where there # is no E or B modes scenarios = ["standard", "noE", "noB"] - # we will use mpi over the number of simulations so_mpi.init(True) subtasks = so_mpi.taskrange(imin=d["iStart"], imax=d["iStop"]) for iii in subtasks: t0 = time.time() - + + alms = curvedsky.rand_alm(ps_mat, lmax=lmax, dtype="complex64") + fglms = simulation.generate_fg_alms(fg_mat, freq_list, lmax) + for scenario in scenarios: - # generate cmb alms and foreground alms - # cmb alms will be of shape (3, lm) 3 standing for T,E,B - # fglms will be of shape (nfreq, lm) and is T only - - alms = curvedsky.rand_alm(ps_cmb, lmax=lmax, dtype=sim_alm_dtype) - fglms = curvedsky.rand_alm(ps_fg, lmax=lmax, dtype=sim_alm_dtype) - master_alms = {} for sv in surveys: - arrays = d["arrays_%s" % sv] - ks_f = d["k_filter_%s" % sv] + arrays = d[f"arrays_{sv}"] + ks_f = d[f"k_filter_{sv}"] - for ar_id, ar in enumerate(arrays): + + nu_eff = d[f"nu_eff_{sv}_{ar}"] - win_T = so_map.read_map(d["window_T_%s_%s" % (sv, ar)]) - win_pol = so_map.read_map(d["window_pol_%s_%s" % (sv, ar)]) + win_T = so_map.read_map(d[f"window_T_{sv}_{ar}"]) + win_pol = so_map.read_map(d[f"window_pol_{sv}_{ar}"]) window_tuple = (win_T, win_pol) @@ -125,16 +103,15 @@ # we add fg alms to cmb alms in temperature alms_beamed = alms.copy() - alms_beamed[0] += fglms[id_freq[d["nu_eff_%s_%s" % (sv, ar)]]] + alms_beamed += fglms[nu_eff] # we convolve signal + foreground with the beam of the array - l, bl = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv, ar)]) + l, bl = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar}"]) alms_beamed = curvedsky.almxfl(alms_beamed, bl) if scenario == "noE": alms_beamed[1] *= 0 if scenario == "noB": alms_beamed[2] *= 0 - # generate our signal only sim split = sph_tools.alm2map(alms_beamed, template[sv]) @@ -144,9 +121,12 @@ # apply the k-space filter - binary = so_map.read_map("%s/binary_%s_%s.fits" % (window_dir, sv, ar)) + binary = so_map.read_map(f"{window_dir}/binary_{sv}_{ar}.fits") - split = data_analysis_utils.get_filtered_map(split, binary, filter[sv], weighted_filter=ks_f["weighted"]) + split = kspace.filter_map(split, + filter[sv], + binary, + weighted_filter=ks_f["weighted"]) # compute the alms of the filtered sim @@ -158,19 +138,18 @@ _, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue - spec_name="%s_%s_%sx%s_%s" % (type, sv1, ar1, sv2, ar2) + spec_name = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}" - - mbb_inv, Bbl = so_mcm.read_coupling(prefix="%s/%s_%sx%s_%s" % (mcm_dir, sv1, ar1, sv2, ar2), + mbb_inv, Bbl = so_mcm.read_coupling(prefix=f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}", spin_pairs=spin_pairs) # we compute the power spectra of the sim (with and without the k-space filter applied) @@ -191,7 +170,7 @@ binned_mcm=binned_mcm) - so_spectra.write_ps(tf_dir + "/%s_%s_%s_%05d.dat" % (spec_name, filt, scenario, iii), lb, ps, type, spectra=spectra) + so_spectra.write_ps(tf_dir + f"/{spec_name}_{filt}_{scenario}_%05d.dat" % iii, lb, ps, type, spectra=spectra) print("sim number %05d done in %.02f s" % (iii, time.time()-t0)) diff --git a/project/data_analysis/python/montecarlo/mc_get_spectra.py b/project/data_analysis/python/montecarlo/mc_get_spectra.py index 45848f1f..c543e5fe 100644 --- a/project/data_analysis/python/montecarlo/mc_get_spectra.py +++ b/project/data_analysis/python/montecarlo/mc_get_spectra.py @@ -7,9 +7,10 @@ from pspy import pspy_utils, so_dict, so_map, sph_tools, so_mcm, so_spectra, so_mpi, so_map_preprocessing import numpy as np import sys -import data_analysis_utils import time from pixell import curvedsky, powspec +from pspipe_utils import simulation, pspipe_list, best_fits, kspace + d = so_dict.so_dict() @@ -23,78 +24,68 @@ write_all_spectra = d["write_splits_spectra"] sim_alm_dtype = d["sim_alm_dtype"] binned_mcm = d["binned_mcm"] +apply_kspace_filter = d["apply_kspace_filter"] -if sim_alm_dtype == "complex64": - sim_alm_dtype = np.complex64 -elif sim_alm_dtype == "complex128": - sim_alm_dtype = np.complex128 +if sim_alm_dtype == "complex64": sim_alm_dtype = np.complex64 +elif sim_alm_dtype == "complex128": sim_alm_dtype = np.complex128 window_dir = "windows" mcm_dir = "mcms" spec_dir = "sim_spectra" bestfit_dir = "best_fits" -ps_model_dir = "noise_model" +noise_model_dir = "noise_model" pspy_utils.create_directory(spec_dir) spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] -# let's list the different frequencies used in the code -freq_list = [] -for sv in surveys: - arrays = d["arrays_%s" % sv] - for ar in arrays: - freq_list += [d["nu_eff_%s_%s" % (sv, ar)]] -freq_list = list(dict.fromkeys(freq_list)) # this bit removes doublons - -id_freq = {} -# create a list assigning an integer index to each freq (used later in the code to generate fg simulations) -for count, freq in enumerate(freq_list): - id_freq[freq] = count - -# we read cmb and fg best fit power spectrum -# we put the best fit power spectrum in a matrix [nfreqs, nfreqs, lmax] -# taking into account the correlation of the fg between different frequencies - -ncomp = 3 -ps_cmb = powspec.read_spectrum("%s/lcdm.dat" % bestfit_dir)[:ncomp, :ncomp] -l, ps_fg = data_analysis_utils.get_foreground_matrix(bestfit_dir, freq_list, lmax) +freq_list = pspipe_list.get_freq_list(d) -# prepare the filter and the transfer function -template = {} -filter = {} -tf_survey = {} -_, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) +# prepare the tempalte and the filter +arrays, templates, filters, n_splits, filter_dicts = {}, {}, {}, {}, {} +spec_name_list = pspipe_list.get_spec_name_list(d, char="_") for sv in surveys: - - template_name = d["maps_%s_%s" % (sv, arrays[0])][0] - template[sv] = so_map.read_map(template_name) - ks_f = d["k_filter_%s" % sv] - - tf_survey[sv] = np.ones(len(lb)) - - if template[sv].pixel == "CAR": + arrays[sv] = d[f"arrays_{sv}"] + template_name = d[f"maps_{sv}_{arrays[sv][0]}"][0] + n_splits[sv] = len(d[f"maps_{sv}_{arrays[sv][0]}"]) + print(sv, "nsplits", n_splits[sv]) + templates[sv] = so_map.read_map(template_name) - if ks_f["apply"]: - shape, wcs = template[sv].data.shape, template[sv].data.wcs - if ks_f["type"] == "binary_cross": - filter[sv] = so_map_preprocessing.build_std_filter(shape, wcs, vk_mask=ks_f["vk_mask"], hk_mask=ks_f["hk_mask"], dtype=np.float64) - elif ks_f["type"] == "gauss": - filter[sv] = so_map_preprocessing.build_sigurd_filter(shape, wcs, ks_f["lbounds"], dtype=np.float64) - else: - print("you need to specify a valid filter type") - - if ks_f["tf"] == "analytic": - print("compute analytic kspace tf %s" % sv) - _, kf_tf = so_map_preprocessing.analytical_tf(template[sv], filter[sv], binning_file, lmax) - else: - print("use kspace tf from file %s" % sv) - _, _, kf_tf, _ = np.loadtxt(ks_f["tf"], unpack=True) + if apply_kspace_filter: + filter_dicts[sv] = d[f"k_filter_{sv}"] + filters[sv] = kspace.get_kspace_filter(templates[sv], filter_dicts[sv]) + +if apply_kspace_filter: + kspace_tf_path = d["kspace_tf_path"] + if kspace_tf_path == "analytical": + kspace_transfer_matrix = kspace.build_analytic_kspace_filter_matrices(surveys, + arrays, + templates, + filter_dicts, + binning_file, + lmax) + else: + kspace_transfer_matrix = {} + for spec_name in spec_name_list: + kspace_transfer_matrix[spec_name] = np.load(f"{kspace_tf_path}/kspace_matrix_{spec_name}.npy", allow_pickle=True) - tf_survey[sv] *= np.sqrt(np.abs(kf_tf[:len(lb)])) + +f_name_cmb = bestfit_dir + "/cmb.dat" +f_name_noise = noise_model_dir + "/mean_{}x{}_{}_noise.dat" +f_name_fg = bestfit_dir + "/fg_{}x{}.dat" +ps_mat = simulation.cmb_matrix_from_file(f_name_cmb, lmax, spectra) +l, fg_mat = simulation.foreground_matrix_from_files(f_name_fg, freq_list, lmax, spectra) +noise_mat = {} +for sv in surveys: + l, noise_mat[sv] = simulation.noise_matrix_from_files(f_name_noise, + sv, + arrays[sv], + lmax, + n_splits[sv], + spectra) # we will use mpi over the number of simulations @@ -108,104 +99,67 @@ # cmb alms will be of shape (3, lm) 3 standing for T,E,B # fglms will be of shape (nfreq, lm) and is T only - alms = curvedsky.rand_alm(ps_cmb, lmax=lmax, seed=(iii, 101), dtype=sim_alm_dtype) - fglms = curvedsky.rand_alm(ps_fg, lmax=lmax, seed=(iii, 102), dtype=sim_alm_dtype) - + alms_cmb = curvedsky.rand_alm(ps_mat, lmax=lmax, dtype="complex64") + fglms = simulation.generate_fg_alms(fg_mat, freq_list, lmax) + master_alms = {} - nsplits = {} for sv in surveys: - ks_f = d["k_filter_%s" % sv] - arrays = d["arrays_%s" % sv] - nsplits[sv] = len(d["maps_%s_%s" % (sv, arrays[0])]) - - # for each survey, we read the mesasured noise power spectrum from the data - # since we want to allow for array x array noise correlation this is an - # (narrays, narrays, lmax) matrix - # the pol noise is taken as the arithmetic mean of E and B noise - - l, nl_array_t, nl_array_pol = data_analysis_utils.get_noise_matrix_spin0and2(ps_model_dir, - sv, - arrays, - lmax, - nsplits[sv]) - - # we generate noise alms from the matrix, resulting in a dict with entry ["T,E,B", "0,...nsplit-1"] - # each element of the dict is a [narrays,lm] array - - nlms = data_analysis_utils.generate_noise_alms(nl_array_t, - lmax, - nsplits[sv], - ncomp, - nl_array_pol=nl_array_pol, - dtype=sim_alm_dtype) - print(nl_array_t.shape) - del nl_array_t, nl_array_pol - - for ar_id, ar in enumerate(arrays): - - win_T = so_map.read_map(d["window_T_%s_%s" % (sv, ar)]) - win_pol = so_map.read_map(d["window_pol_%s_%s" % (sv, ar)]) - - window_tuple = (win_T, win_pol) - - del win_T, win_pol - - # we add fg alms to cmb alms in temperature - alms_beamed = alms.copy() - alms_beamed[0] += fglms[id_freq[d["nu_eff_%s_%s" % (sv, ar)]]] + t1 = time.time() + + signal_alms = {} + for ar in arrays[sv]: + nu_eff = d[f"nu_eff_{sv}_{ar}"] + signal_alms[ar] = alms_cmb + fglms[nu_eff] + l, bl = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar}"]) + signal_alms[ar] = curvedsky.almxfl(signal_alms[ar], bl) - # we convolve signal + foreground with the beam of the array - l, bl = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv, ar)]) - alms_beamed = curvedsky.almxfl(alms_beamed, bl) + print("generate signal sim in %.02f s" % (time.time()-t1)) + for k in range(n_splits[sv]): + noise_alms = simulation.generate_noise_alms(noise_mat[sv], arrays[sv], lmax) + for ar in arrays[sv]: - print("%s split of survey: %s, array %s" % (nsplits[sv], sv, ar)) + t1 = time.time() - t1 = time.time() + win_T = so_map.read_map(d[f"window_T_{sv}_{ar}"]) + win_pol = so_map.read_map(d[f"window_pol_{sv}_{ar}"]) + window_tuple = (win_T, win_pol) + del win_T, win_pol - for k in range(nsplits[sv]): - - # finally we add the noise alms for each split - noisy_alms = alms_beamed.copy() - noisy_alms[0] += nlms["T", k][ar_id] - noisy_alms[1] += nlms["E", k][ar_id] - noisy_alms[2] += nlms["B", k][ar_id] + print("reading window in %.02f s" % (time.time()-t1)) - split = sph_tools.alm2map(noisy_alms, template[sv]) - - # from now on the simulation pipeline is done - # and we are back to the get_spectra algorithm - - if window_tuple[0].pixel == "CAR": - if ks_f["apply"]: - binary = so_map.read_map("%s/binary_%s_%s.fits" % (window_dir, sv, ar)) - split = data_analysis_utils.get_filtered_map(split, binary, filter[sv], weighted_filter=ks_f["weighted"]) + t1 = time.time() + split = sph_tools.alm2map(signal_alms[ar] + noise_alms[ar], templates[sv]) + print("alm2map in %.02f s" % (time.time()-t1)) + + t1 = time.time() + if (window_tuple[0].pixel == "CAR") & (apply_kspace_filter): + binary = so_map.read_map(f"{window_dir}/binary_{sv}_{ar}.fits") + split = kspace.filter_map(split, + filters[sv], + binary, + weighted_filter=filter_dicts[sv]["weighted"]) del binary - + print("filtering in %.02f s" % (time.time()-t1)) + + if d["remove_mean"] == True: - split = data_analysis_utils.remove_mean(split, window_tuple, ncomp) - - master_alms[sv, ar, k] = sph_tools.get_alms(split, window_tuple, niter, lmax, dtype=sim_alm_dtype) - print("m_alms_dtype", master_alms[sv, ar, k].dtype) + split = split.subtract_mean(window_tuple) - print(time.time()-t1) + t1 = time.time() + master_alms[sv, ar, k] = sph_tools.get_alms(split, window_tuple, niter, lmax, dtype=sim_alm_dtype) + print("map2alm in %.02f s" % (time.time()-t1)) ps_dict = {} - _, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) + + t1 = time.time() for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - nsplits_1 = nsplits[sv1] - - for id_ar1, ar1 in enumerate(arrays_1): - + for id_ar1, ar1 in enumerate(arrays[sv1]): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - nsplits_2 = nsplits[sv2] - - for id_ar2, ar2 in enumerate(arrays_2): + for id_ar2, ar2 in enumerate(arrays[sv2]): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue @@ -214,19 +168,20 @@ ps_dict[spec, "auto"] = [] ps_dict[spec, "cross"] = [] - for s1 in range(nsplits_1): - for s2 in range(nsplits_2): + mbb_inv, Bbl = so_mcm.read_coupling(prefix=f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}", + spin_pairs=spin_pairs) + + for s1 in range(n_splits[sv1]): + for s2 in range(n_splits[sv2]): if (sv1 == sv2) & (ar1 == ar2) & (s1>s2) : continue - mbb_inv, Bbl = so_mcm.read_coupling(prefix="%s/%s_%sx%s_%s" % (mcm_dir, sv1, ar1, sv2, ar2), - spin_pairs=spin_pairs) l, ps_master = so_spectra.get_spectra_pixell(master_alms[sv1, ar1, s1], master_alms[sv2, ar2, s2], spectra=spectra) - spec_name="%s_%s_%sx%s_%s_%d%d" % (type, sv1, ar1, sv2, ar2, s1, s2) - + spec_name=f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_{s1}{s2}" + lb, ps = so_spectra.bin_spectra(l, ps_master, binning_file, @@ -236,19 +191,20 @@ spectra=spectra, binned_mcm=binned_mcm) - data_analysis_utils.deconvolve_tf(lb, ps, tf_survey[sv1], tf_survey[sv2], ncomp, lmax) + lb, ps = kspace.deconvolve_kspace_filter_matrix(lb, + ps, + kspace_transfer_matrix[f"{sv1}_{ar1}x{sv2}_{ar2}"], + spectra) if write_all_spectra: so_spectra.write_ps(spec_dir + "/%s_%05d.dat" % (spec_name,iii), lb, ps, type, spectra=spectra) for count, spec in enumerate(spectra): if (s1 == s2) & (sv1 == sv2): - if count == 0: - print("auto %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) + if count == 0: print(f"auto {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") ps_dict[spec, "auto"] += [ps[spec]] else: - if count == 0: - print("cross %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) + if count == 0: print(f"cross {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") ps_dict[spec, "cross"] += [ps[spec]] ps_dict_auto_mean = {} @@ -257,7 +213,7 @@ for spec in spectra: ps_dict_cross_mean[spec] = np.mean(ps_dict[spec, "cross"], axis=0) - spec_name_cross = "%s_%s_%sx%s_%s_cross_%05d" % (type, sv1, ar1, sv2, ar2, iii) + spec_name_cross = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_cross_%05d" % iii if ar1 == ar2 and sv1 == sv2: # Average TE / ET so that for same array same season TE = ET @@ -265,9 +221,9 @@ if sv1 == sv2: ps_dict_auto_mean[spec] = np.mean(ps_dict[spec, "auto"], axis=0) - spec_name_auto = "%s_%s_%sx%s_%s_auto_%05d" % (type, sv1, ar1, sv2, ar2, iii) - ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / nsplits[sv1] - spec_name_noise = "%s_%s_%sx%s_%s_noise_%05d" % (type, sv1, ar1, sv2, ar2, iii) + spec_name_auto = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_auto_%05d" % iii + ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / n_splits[sv1] + spec_name_noise = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_noise_%05d" % iii so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name_cross, lb, ps_dict_cross_mean, type, spectra=spectra) @@ -275,4 +231,5 @@ so_spectra.write_ps(spec_dir+"/%s.dat" % spec_name_auto, lb, ps_dict_auto_mean, type, spectra=spectra) so_spectra.write_ps(spec_dir+"/%s.dat" % spec_name_noise, lb, ps_dict_noise_mean, type, spectra=spectra) + print("spectra computation in %.02f s" % (time.time()-t1)) print("sim number %05d done in %.02f s" % (iii, time.time()-t0)) diff --git a/project/data_analysis/python/montecarlo/mc_mnms_get_spectra.py b/project/data_analysis/python/montecarlo/mc_mnms_get_spectra.py old mode 100755 new mode 100644 index 79e39835..dd8e746a --- a/project/data_analysis/python/montecarlo/mc_mnms_get_spectra.py +++ b/project/data_analysis/python/montecarlo/mc_mnms_get_spectra.py @@ -1,84 +1,16 @@ """ This script generate simplistic simulations of the actpol data -it generates gaussian simulations of cmb, fg and noise -the fg is based on fgspectra, and the noise is based on the 1d noise power spectra measured on the data +it generates gaussian simulations of cmb, fg and add noise based on the mnms simulations +the fg is based on fgspectra, note that the noise sim include the pixwin so we have to deal with it """ from pspy import pspy_utils, so_dict, so_map, sph_tools, so_mcm, so_spectra, so_mpi, so_map_preprocessing +from mnms import noise_models as nm import numpy as np import sys -import data_analysis_utils import time from pixell import curvedsky, powspec -from mnms import noise_models as nm -import gc -import healpy as hp -from pixell import enmap - - -# draw a Gaussian realization of the noise a_lm -def get_simulated_gaussian_alms(ps_model_dir, sv, arrays, lmax, nsplits, sim_alm_dtype, verbose=True): - - # for each survey, we read the mesasured noise power spectrum from the data - # since we want to allow for array x array noise correlation this is an - # (narrays, narrays, lmax) matrix - # the pol noise is taken as the arithmetic mean of E and B noise - l, nl_array_t, nl_array_pol = data_analysis_utils.get_noise_matrix_spin0and2(ps_model_dir, - sv, - arrays, - lmax, - nsplits[sv]) - - # we generate noise alms from the matrix, resulting in a dict with entry ["T,E,B", "0,...nsplit-1"] - # each element of the dict is a [narrays,lm] array - nlms = data_analysis_utils.generate_noise_alms(nl_array_t, - lmax, - nsplits[sv], - ncomp, - nl_array_pol=nl_array_pol, - dtype=sim_alm_dtype) - - if verbose: - print(nl_array_t.shape) - - return nlms - - -# draw a tiled or wavelet realization of the noise a_lm -def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, soapack_arrays, nsplits, sim_alm_dtype, lmax, verbose=True): - nlms = {} - n_splits = nsplits[sv] - n_alms = hp.sphtfunc.Alm.getsize(lmax) - n_arrays = len(soapack_arrays) - # nlms_arr = np.memmap(f'/global/cscratch1/sd/xzackli/nlm{sim_num}.mymemmap', - # dtype=sim_alm_dtype, mode='w+', shape=(n_splits, 3, n_arrays, n_alms)) - nlms_arr = np.empty(shape=(n_splits, 3, n_arrays, n_alms), dtype=sim_alm_dtype) - - for split_num in range(n_splits): - # first, generate all relevant wafer simulations - array_sims = {} - for wafer_name in wafer_models: - # mnms get_sim returns (n_arrays, 1, 3, alm_size) in current implementation - # n_arrays will always be 2 for DR6, due to dichroics - sim_arrays = wafer_models[wafer_name].get_sim(split_num, sim_num, keep_model=False, verbose=verbose) - for i, arr in enumerate(sim_arrays): - array_sims[wafer_name, i] = arr - - for arr_i, arr in enumerate(soapack_arrays): - for ci in range(3): - nlms_arr[split_num, ci, arr_i, :] = array_sims[array_to_wafer_and_index[arr]][0,ci,:] - del array_sims - gc.collect() - - nlms["T", split_num] = nlms_arr[split_num, 0, :, :] - nlms["E", split_num] = nlms_arr[split_num, 1, :, :] - nlms["B", split_num] = nlms_arr[split_num, 2, :, :] - # # now assemble result. we want to assign each (channel, split) an array of shape (n_arrays, n_alms) - # nlms["T", split_num] = np.vstack([array_sims[array_to_wafer_and_index[arr]][0,0,:] for arr in soapack_arrays]) - # nlms["E", split_num] = np.vstack([array_sims[array_to_wafer_and_index[arr]][0,1,:] for arr in soapack_arrays]) - # nlms["B", split_num] = np.vstack([array_sims[array_to_wafer_and_index[arr]][0,2,:] for arr in soapack_arrays]) - return nlms - +from pspipe_utils import simulation, pspipe_list, best_fits, kspace d = so_dict.so_dict() d.read_from_file(sys.argv[1]) @@ -89,145 +21,94 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, type = d["type"] binning_file = d["binning_file"] write_all_spectra = d["write_splits_spectra"] -deconvolve_pixwin = d["deconvolve_pixwin"] sim_alm_dtype = d["sim_alm_dtype"] -noise_sim_type = d["noise_sim_type"] # can be "gaussian", "tiled", "wavelet" -noise_model_parameters = d["noise_model_parameters"] +binned_mcm = d["binned_mcm"] +apply_kspace_filter = d["apply_kspace_filter"] +if sim_alm_dtype in ["complex64", "complex128"]: sim_alm_dtype = getattr(np, sim_alm_dtype) + +#################################### +###### parameter for mnms ######### +#################################### -if len(sys.argv) >= 4 and sys.argv[2].isdigit(): - iStart, iStop = int(sys.argv[2]), int(sys.argv[3]) -elif len(sys.argv) == 3 and sys.argv[2].isdigit(): - iIndex = int(sys.argv[2]) - iMultiple = d["iMultiple"] - iStart = (iIndex * iMultiple) - iStop = iStart + iMultiple -else: - iStart, iStop = d["iStart"], d["iStop"] - -# look for noise sim type in arguments -for (i, arg) in enumerate(sys.argv): - if arg == "--noisetype" and ((i+1) < len(sys.argv)): - noise_sim_type = sys.argv[i+1] - print(f"Changing noise sim type to \"{noise_sim_type}\"") - -if sim_alm_dtype == "complex64": - sim_alm_dtype = np.complex64 -elif sim_alm_dtype == "complex128": - sim_alm_dtype = np.complex128 +noise_model_parameters = d["noise_model_parameters"] +noise_sim_type = d["noise_sim_type"] +soapack_arrays = { + "pa4": {"pa4a": "pa4_f150", "pa4b": "pa4_f220"}, + "pa5": {"pa5a": "pa5_f090", "pa5b": "pa5_f150"}, + "pa6": {"pa6a": "pa6_f090", "pa6b": "pa6_f150"}, +} +models = {"tiled": nm.TiledNoiseModel, "wavelet": nm.WaveletNoiseModel, "fdw": nm.FDWNoiseModel} +noise_models = { + wafer_name: models[noise_sim_type](*soapack_arrays[wafer_name].keys(), **noise_model_parameters) + for sv in surveys + for wafer_name in sorted({ar.split("_")[0] for ar in d[f"arrays_{sv}"]}) + } +#################################### window_dir = "windows" mcm_dir = "mcms" spec_dir = "sim_spectra" bestfit_dir = "best_fits" -ps_model_dir = "noise_model" +noise_model_dir = "noise_model" pspy_utils.create_directory(spec_dir) spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] +freq_list = pspipe_list.get_freq_list(d) -# let's list the different frequencies used in the code -array_to_soapack_array = dict() -freq_list = [] -noise_model_pair_list = [] -for sv in surveys: - arrays = d["arrays_%s" % sv] - array_to_soapack_array.update(dict(zip(arrays, d["soapack_arrays_%s" % sv]))) - for ar in arrays: - freq_list += [d["nu_eff_%s_%s" % (sv, ar)]] -freq_list = list(dict.fromkeys(freq_list)) # this bit removes doublons - - -# now we put together some mappings that contain some notion of wafers, as -# well as the pairs of arrays that live on them -wafers = {} -for sv in surveys: - wafers.update(d["wafers_%s" % sv]) - -array_to_wafer_and_index = dict() -wafer_models = dict() -if (noise_sim_type == "tiled") or (noise_sim_type == "wavelet"): - for wafer_name in wafers: - if (noise_sim_type == "tiled"): - noise_model = nm.TiledNoiseModel(*wafers[wafer_name], **noise_model_parameters) - elif (noise_sim_type == "wavelet"): - noise_model = nm.WaveletNoiseModel(*wafers[wafer_name], **noise_model_parameters) - - for i, arr in enumerate(wafers[wafer_name]): - array_to_wafer_and_index[arr] = (wafer_name, i) - - wafer_models[wafer_name] = noise_model - -print(noise_sim_type, array_to_wafer_and_index) - -id_freq = {} -# create a list assigning an integer index to each freq (used later in the code to generate fg simulations) -for count, freq in enumerate(freq_list): - id_freq[freq] = count - -# we read cmb and fg best fit power spectrum -# we put the best fit power spectrum in a matrix [nfreqs, nfreqs, lmax] -# taking into account the correlation of the fg between different frequencies - -ncomp = 3 -ps_cmb = powspec.read_spectrum("%s/lcdm.dat" % bestfit_dir)[:ncomp, :ncomp] -l, ps_fg = data_analysis_utils.get_foreground_matrix(bestfit_dir, freq_list, lmax) - -# prepare the filter and the transfer function -template = {} -filter = {} -tf_survey = {} -pixwin_lxly = {} -inv_pixwin_lxly = {} -_, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) +# prepare the tempalte and the filter +arrays, templates, filters, n_splits, filter_dicts, pixwin, inv_pixwin = {}, {}, {}, {}, {}, {}, {} +spec_name_list = pspipe_list.get_spec_name_list(d, char="_") for sv in surveys: - - template_name = d["maps_%s_%s" % (sv, arrays[0])][0] - template[sv] = so_map.read_map(template_name) - ks_f = d["k_filter_%s" % sv] + arrays[sv] = d[f"arrays_{sv}"] + n_splits[sv] = len(d[f"maps_{sv}_{arrays[sv][0]}"]) + print(sv, "nsplits", n_splits[sv]) + template_name = d[f"maps_{sv}_{arrays[sv][0]}"][0] + templates[sv] = so_map.read_map(template_name) + pixwin[sv] = templates[sv].get_pixwin() + inv_pixwin[sv] = pixwin[sv] ** -1 - tf_survey[sv] = np.ones(len(lb)) - - if template[sv].pixel == "CAR": - if ks_f["apply"]: - shape, wcs = template[sv].data.shape, template[sv].data.wcs - if ks_f["type"] == "binary_cross": - filter[sv] = so_map_preprocessing.build_std_filter(shape, wcs, vk_mask=ks_f["vk_mask"], hk_mask=ks_f["hk_mask"], dtype=np.float64) - elif ks_f["type"] == "gauss": - filter[sv] = so_map_preprocessing.build_sigurd_filter(shape, wcs, ks_f["lbounds"], dtype=np.float64) - else: - print("you need to specify a valid filter type") - - if ks_f["tf"] == "analytic": - print("compute analytic kspace tf %s" % sv) - _, kf_tf = so_map_preprocessing.analytical_tf(template[sv], filter[sv], binning_file, lmax) - else: - print("use kspace tf from file %s" % sv) - _, _, kf_tf, _ = np.loadtxt(ks_f["tf"], unpack=True) - - tf_survey[sv] *= np.sqrt(np.abs(kf_tf[:len(lb)])) - - if deconvolve_pixwin: - wy, wx = enmap.calc_window(template[sv].data.shape) - pixwin_lxly[sv] = (wy[:,None] * wx[None,:]) - inv_pixwin_lxly[sv] = pixwin_lxly[sv] ** (-1) - else: - inv_pixwin_lxly[sv] = None + if apply_kspace_filter: + filter_dicts[sv] = d[f"k_filter_{sv}"] + filters[sv] = kspace.get_kspace_filter(templates[sv], filter_dicts[sv]) + +if apply_kspace_filter: + kspace_tf_path = d["kspace_tf_path"] + if kspace_tf_path == "analytical": + kspace_transfer_matrix = kspace.build_analytic_kspace_filter_matrices(surveys, + arrays, + templates, + filter_dicts, + binning_file, + lmax) else: - if deconvolve_pixwin: - print("healpix noise sim with pixwin deconv is not supported") - sys.exit() + kspace_transfer_matrix = {} + for spec_name in spec_name_list: + kspace_transfer_matrix[spec_name] = np.load(f"{kspace_tf_path}/kspace_matrix_{spec_name}.npy") + + +f_name_cmb = bestfit_dir + "/cmb.dat" +f_name_noise = noise_model_dir + "/mean_{}x{}_{}_noise.dat" +f_name_fg = bestfit_dir + "/fg_{}x{}.dat" +ps_mat = simulation.cmb_matrix_from_file(f_name_cmb, lmax, spectra) +l, fg_mat = simulation.foreground_matrix_from_files(f_name_fg, freq_list, lmax, spectra) +noise_mat = {} +for sv in surveys: + l, noise_mat[sv] = simulation.noise_matrix_from_files(f_name_noise, + sv, + arrays[sv], + lmax, + n_splits[sv], + spectra) # we will use mpi over the number of simulations so_mpi.init(True) -subtasks = so_mpi.taskrange(imin=iStart, imax=iStop) -subtasks = [int(iii) for iii in subtasks] # prevent bug in pspy that makes the subtasks floats -print(subtasks) - +subtasks = so_mpi.taskrange(imin=d["iStart"], imax=d["iStop"]) for iii in subtasks: t0 = time.time() @@ -236,105 +117,81 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, # cmb alms will be of shape (3, lm) 3 standing for T,E,B # fglms will be of shape (nfreq, lm) and is T only - alms = curvedsky.rand_alm(ps_cmb, lmax=lmax, seed=(iii, 101), dtype=sim_alm_dtype) - fglms = curvedsky.rand_alm(ps_fg, lmax=lmax, seed=(iii, 102), dtype=sim_alm_dtype) - + alms_cmb = curvedsky.rand_alm(ps_mat, lmax=lmax, dtype="complex64") + fglms = simulation.generate_fg_alms(fg_mat, freq_list, lmax) + master_alms = {} - nsplits = {} for sv in surveys: - ks_f = d["k_filter_%s" % sv] - arrays = d["arrays_%s" % sv] - soapack_arrays = d["soapack_arrays_%s" % sv] - nsplits[sv] = len(d["maps_%s_%s" % (sv, arrays[0])]) - - if noise_sim_type == "gaussian": - np.random.seed(iii) - nlms = get_simulated_gaussian_alms(ps_model_dir, sv, arrays, lmax, nsplits, sim_alm_dtype, verbose=True) - elif (template[sv].pixel == "CAR") and (noise_sim_type == "tiled" or noise_sim_type == "wavelet"): - # use MPI task index iii as simulation number ~ random seed, since it ranges from iStart to iStop - nlms = get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, iii, sv, soapack_arrays, nsplits, sim_alm_dtype, lmax, verbose=True) - else: - print("noise_sim_type is not one of \"gaussian\" (hp or car), \"tiled\" (car), or \"wavelet\" (car)") - sys.exit() - - for ar_id, ar in enumerate(arrays): - - gc.collect() - win_T = so_map.read_map(d["window_T_%s_%s" % (sv, ar)]) - win_pol = so_map.read_map(d["window_pol_%s_%s" % (sv, ar)]) - binary = so_map.read_map("%s/binary_%s_%s.fits" % (window_dir, sv, ar)) - - window_tuple = (win_T, win_pol) + t1 = time.time() + + signal_alms = {} + for ar in arrays[sv]: + nu_eff = d[f"nu_eff_{sv}_{ar}"] + signal_alms[ar] = alms_cmb + fglms[nu_eff] + l, bl = pspy_utils.read_beam_file(d[f"beam_{sv}_{ar}"]) + signal_alms[ar] = curvedsky.almxfl(signal_alms[ar], bl) + # since the mnms noise sim include a pixwin, we convolve the signal ones + signal = sph_tools.alm2map(signal_alms[ar], templates[sv]) + binary = so_map.read_map(f"{window_dir}/binary_{sv}_{ar}.fits") + signal = signal.convolve_with_pixwin(niter=niter, pixwin=pixwin[sv], binary=binary) + signal_alms[ar] = sph_tools.map2alm(signal, niter, lmax) - del win_T, win_pol + print("generate signal sim in %.02f s" % (time.time()-t1)) - # we add fg alms to cmb alms in temperature - alms_beamed = alms.copy() - alms_beamed[0] += fglms[id_freq[d["nu_eff_%s_%s" % (sv, ar)]]] - - # we convolve signal + foreground with the beam of the array - l, bl = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv, ar)]) - alms_beamed = curvedsky.almxfl(alms_beamed, bl) + wafers = sorted({ar.split("_")[0] for ar in arrays[sv]}) + + for k in range(n_splits[sv]): + noise_alms = {} + for wafer_name in wafers: + sim_arrays = noise_models[wafer_name].get_sim(k, iii, keep_model=False, verbose=True) + for i, (qid, ar) in enumerate(soapack_arrays[wafer_name].items()): + noise_alms[ar] = sim_arrays[i, 0, :] - beamed_signal = sph_tools.alm2map(alms_beamed, template[sv].copy()) - if deconvolve_pixwin: - if template[sv].pixel == "CAR": - data_analysis_utils.fourier_mult(beamed_signal, binary, pixwin_lxly[sv]) - print("%s split of survey: %s, array %s" % (nsplits[sv], sv, ar)) + for ar in arrays[sv]: + + t1 = time.time() + + win_T = so_map.read_map(d[f"window_T_{sv}_{ar}"]) + win_pol = so_map.read_map(d[f"window_pol_{sv}_{ar}"]) + window_tuple = (win_T, win_pol) + del win_T, win_pol + + print("reading window in %.02f s" % (time.time()-t1)) + + t1 = time.time() + split = sph_tools.alm2map(signal_alms[ar] + noise_alms[ar], templates[sv]) + print("alm2map in %.02f s" % (time.time()-t1)) + + t1 = time.time() + if (window_tuple[0].pixel == "CAR") & (apply_kspace_filter): + binary = so_map.read_map(f"{window_dir}/binary_{sv}_{ar}.fits") + split = kspace.filter_map(split, + filters[sv], + binary, + inv_pixwin = inv_pixwin[sv], + weighted_filter=filter_dicts[sv]["weighted"]) + + del binary + print("filtering in %.02f s" % (time.time()-t1)) - t1 = time.time() - noisy_alms = alms.copy() - for k in range(nsplits[sv]): - - # finally we add the noise alms for each split - np.copyto(noisy_alms[0], nlms["T", k][ar_id]) - np.copyto(noisy_alms[1], nlms["E", k][ar_id]) - np.copyto(noisy_alms[2], nlms["B", k][ar_id]) - split = sph_tools.alm2map(noisy_alms, template[sv]) - - # tiled and wavelet sims have no window. they don't need to be modified. - # gaussian sim was generated from unpixwin'd spectra, so must be repixwin'd - if deconvolve_pixwin and noise_sim_type == "gaussian": - if template[sv].pixel == "CAR": - data_analysis_utils.fourier_mult(split, binary, pixwin_lxly[sv]) - split.data += beamed_signal.data - - # from now on the simulation pipeline is done - # and we are back to the get_spectra algorithm - - if window_tuple[0].pixel == "CAR": - if ks_f["apply"]: - split = data_analysis_utils.get_filtered_map(split, - binary, - filter[sv], - inv_pixwin_lxly[sv], - weighted_filter=ks_f["weighted"]) - if d["remove_mean"] == True: - split = data_analysis_utils.remove_mean(split, window_tuple, ncomp) - - master_alms[sv, ar, k] = sph_tools.get_alms(split, window_tuple, niter, lmax, dtype=sim_alm_dtype) - print("m_alms_dtype", master_alms[sv, ar, k].dtype) + split = split.subtract_mean(window_tuple) - print(time.time()-t1) + t1 = time.time() + master_alms[sv, ar, k] = sph_tools.get_alms(split, window_tuple, niter, lmax, dtype=sim_alm_dtype) + print("map2alm in %.02f s" % (time.time()-t1)) ps_dict = {} - _, _, lb, _ = pspy_utils.read_binning_file(binning_file, lmax) + + t1 = time.time() for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - nsplits_1 = nsplits[sv1] - - for id_ar1, ar1 in enumerate(arrays_1): - + for id_ar1, ar1 in enumerate(arrays[sv1]): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - nsplits_2 = nsplits[sv2] - - for id_ar2, ar2 in enumerate(arrays_2): + for id_ar2, ar2 in enumerate(arrays[sv2]): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue @@ -343,40 +200,43 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, ps_dict[spec, "auto"] = [] ps_dict[spec, "cross"] = [] - for s1 in range(nsplits_1): - for s2 in range(nsplits_2): + mbb_inv, Bbl = so_mcm.read_coupling(prefix=f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}", + spin_pairs=spin_pairs) + + for s1 in range(n_splits[sv1]): + for s2 in range(n_splits[sv2]): if (sv1 == sv2) & (ar1 == ar2) & (s1>s2) : continue - mbb_inv, Bbl = so_mcm.read_coupling(prefix="%s/%s_%sx%s_%s" % (mcm_dir, sv1, ar1, sv2, ar2), - spin_pairs=spin_pairs) l, ps_master = so_spectra.get_spectra_pixell(master_alms[sv1, ar1, s1], master_alms[sv2, ar2, s2], spectra=spectra) - spec_name="%s_%s_%s_%sx%s_%s_%d%d" % (noise_sim_type, type, sv1, ar1, sv2, ar2, s1, s2) - + spec_name=f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_{s1}{s2}" + lb, ps = so_spectra.bin_spectra(l, ps_master, binning_file, lmax, type=type, mbb_inv=mbb_inv, - spectra=spectra) + spectra=spectra, + binned_mcm=binned_mcm) - data_analysis_utils.deconvolve_tf(lb, ps, tf_survey[sv1], tf_survey[sv2], ncomp, lmax) + lb, ps = kspace.deconvolve_kspace_filter_matrix(lb, + ps, + kspace_transfer_matrix[f"{sv1}_{ar1}x{sv2}_{ar2}"], + spectra) if write_all_spectra: so_spectra.write_ps(spec_dir + "/%s_%05d.dat" % (spec_name,iii), lb, ps, type, spectra=spectra) for count, spec in enumerate(spectra): if (s1 == s2) & (sv1 == sv2): - if count == 0: - print("auto %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) + if count == 0: print(f"auto {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") ps_dict[spec, "auto"] += [ps[spec]] else: - if count == 0: - print("cross %s_%s X %s_%s %d%d" % (sv1, ar1, sv2, ar2, s1, s2)) + if count == 0: print(f"cross {sv1}_{ar1} X {sv2}_{ar2} {s1}{s2}") ps_dict[spec, "cross"] += [ps[spec]] ps_dict_auto_mean = {} @@ -385,7 +245,7 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, for spec in spectra: ps_dict_cross_mean[spec] = np.mean(ps_dict[spec, "cross"], axis=0) - spec_name_cross = "%s_%s_%s_%sx%s_%s_cross_%05d" % (noise_sim_type, type, sv1, ar1, sv2, ar2, iii) + spec_name_cross = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_cross_%05d" % iii if ar1 == ar2 and sv1 == sv2: # Average TE / ET so that for same array same season TE = ET @@ -393,9 +253,9 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, if sv1 == sv2: ps_dict_auto_mean[spec] = np.mean(ps_dict[spec, "auto"], axis=0) - spec_name_auto = "%s_%s_%s_%sx%s_%s_auto_%05d" % (noise_sim_type, type, sv1, ar1, sv2, ar2, iii) - ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / nsplits[sv1] - spec_name_noise = "%s_%s_%s_%sx%s_%s_noise_%05d" % (noise_sim_type, type, sv1, ar1, sv2, ar2, iii) + spec_name_auto = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_auto_%05d" % iii + ps_dict_noise_mean[spec] = (ps_dict_auto_mean[spec] - ps_dict_cross_mean[spec]) / n_splits[sv1] + spec_name_noise = f"{type}_{sv1}_{ar1}x{sv2}_{ar2}_noise_%05d" % iii so_spectra.write_ps(spec_dir + "/%s.dat" % spec_name_cross, lb, ps_dict_cross_mean, type, spectra=spectra) @@ -403,4 +263,5 @@ def get_simulated_mnms_alms(wafer_models, array_to_wafer_and_index, sim_num, sv, so_spectra.write_ps(spec_dir+"/%s.dat" % spec_name_auto, lb, ps_dict_auto_mean, type, spectra=spectra) so_spectra.write_ps(spec_dir+"/%s.dat" % spec_name_noise, lb, ps_dict_noise_mean, type, spectra=spectra) + print("spectra computation in %.02f s" % (time.time()-t1)) print("sim number %05d done in %.02f s" % (iii, time.time()-t0)) diff --git a/project/data_analysis/python/montecarlo/mc_plot_covariances.py b/project/data_analysis/python/montecarlo/mc_plot_covariances.py index 34fb557d..8a86c5cb 100644 --- a/project/data_analysis/python/montecarlo/mc_plot_covariances.py +++ b/project/data_analysis/python/montecarlo/mc_plot_covariances.py @@ -10,7 +10,7 @@ import numpy as np import pylab as plt import os, sys - +from pspipe_utils import pspipe_list def write_html(filename, spec_list, multistep_path, cov_plot_dir): @@ -59,20 +59,7 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): pspy_utils.create_directory(cov_plot_dir) -spec_list = [] - -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - - spec_list += ["%s_%sx%s_%s" % (sv1, ar1, sv2, ar2)] - +spec_list = pspipe_list.get_spec_name_list(d, char="_") for sid1, spec1 in enumerate(spec_list): @@ -82,14 +69,14 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): n1, n2 = spec1.split("x") n3, n4 = spec2.split("x") - analytic_cov = np.load("%s/analytic_cov_%sx%s_%sx%s.npy" % (cov_dir, n1, n2, n3, n4) ) - mc_cov = np.load("%s/mc_cov_%sx%s_%sx%s.npy" % (cov_dir, n1, n2, n3, n4)) + analytic_cov = np.load(f"{cov_dir}/analytic_cov_{n1}x{n2}_{n3}x{n4}.npy") + mc_cov = np.load(f"{cov_dir}/mc_cov_{n1}x{n2}_{n3}x{n4}.npy") bin_lo, bin_hi, lb, bin_size = pspy_utils.read_binning_file(binning_file, lmax) n_bins = len(bin_hi) plt.figure(figsize=(15, 15)) - plt.suptitle("%s %s (press c/v to switch between covariance matrix elements)" % (spec1, spec2), fontsize=30) + plt.suptitle(f"{spec1} {spec2} (press c/v to switch between covariance matrix elements)", fontsize=30) count = 1 for bl in ["TTTT", "TETE", "ETET", "EEEE", "TTTE", "TTEE", "TTET", "TEET", @@ -114,12 +101,12 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): plt.xlabel(r"$\ell$", fontsize=22) plt.legend() count += 1 - plt.savefig("%s/covariance_pseudo_diagonal_%s_%s.png"% (cov_plot_dir, spec1, spec2), bbox_inches="tight") + plt.savefig(f"{cov_plot_dir}/covariance_pseudo_diagonal_{spec1}_{spec2}.png", bbox_inches="tight") plt.clf() plt.close() plt.figure(figsize=(15, 15)) - plt.suptitle("%s %s (press c/v to switch between covariance matrix elements)" % (spec1, spec2), fontsize=30) + plt.suptitle(f"{spec1} {spec2} (press c/v to switch between covariance matrix elements)", fontsize=30) count = 1 for bl in ["TTTT", "TETE", "ETET", "EEEE"]: @@ -137,7 +124,7 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): plt.xlabel(r"$\ell$", fontsize=22) plt.legend() count += 1 - plt.savefig("%s/covariance_pseudo_diagonal_ratio_%s_%s.png"% (cov_plot_dir, spec1, spec2), bbox_inches="tight") + plt.savefig(f"{cov_plot_dir}/covariance_pseudo_diagonal_ratio_{spec1}_{spec2}.png", bbox_inches="tight") plt.clf() plt.close() @@ -146,7 +133,7 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): mc_corr=so_cov.cov2corr(mc_cov) plt.figure(figsize=(15, 15)) - plt.suptitle("%s %s (press c/v to switch between covariance matrix elements)" % (spec1, spec2), fontsize=30) + plt.suptitle(f"{spec1} {spec2} (press c/v to switch between covariance matrix elements)", fontsize=30) count = 1 for bl in ["TTTT", "TETE", "ETET", "EEEE", "TTTE", "TTEE", "TTET", "TEET", @@ -169,7 +156,7 @@ def write_html(filename, spec_list, multistep_path, cov_plot_dir): plt.xlabel(r"$\ell$", fontsize=22) plt.legend() count += 1 - plt.savefig("%s/covariance_off_diagonal_%s_%s.png"% (cov_plot_dir, spec1, spec2), bbox_inches="tight") + plt.savefig(f"{cov_plot_dir}/covariance_off_diagonal_{spec1}_{spec2}.png", bbox_inches="tight") plt.clf() plt.close() diff --git a/project/data_analysis/python/montecarlo/mc_plot_spectra.py b/project/data_analysis/python/montecarlo/mc_plot_spectra.py index 64396780..ddccf092 100644 --- a/project/data_analysis/python/montecarlo/mc_plot_spectra.py +++ b/project/data_analysis/python/montecarlo/mc_plot_spectra.py @@ -11,6 +11,7 @@ import numpy as np import pylab as plt import os, sys +from pspipe_utils import pspipe_list, best_fits d = so_dict.so_dict() d.read_from_file(sys.argv[1]) @@ -22,14 +23,20 @@ lmax = d["lmax"] multistep_path = d["multistep_path"] -noise_dir = "noise_model" +noise_model_dir = "noise_model" mcm_dir = "mcms" plot_dir = "plots/mc_spectra/" mc_dir = "montecarlo" bestfit_dir = "best_fits" +spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -clfile = "%s/lcdm.dat" % bestfit_dir +freq_list = pspipe_list.get_freq_list(d) +lth, cmb_and_fg_dict = best_fits.fg_dict_from_files(bestfit_dir + "/fg_{}x{}.dat", + freq_list, + lmax + 2, + spectra, + f_name_cmb=bestfit_dir + "/cmb.dat") pspy_utils.create_directory(plot_dir) @@ -38,27 +45,27 @@ spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] nsims = iStop - iStart - -lth, Dlth = pspy_utils.ps_lensed_theory_to_dict(clfile, output_type=type, lmax=lmax, start_at_zero=False) - theory = {} bin_theory = {} for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue - l, bl1 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv1, ar1)], lmax=lmax) - l, bl2 = pspy_utils.read_beam_file(d["beam_%s_%s" % (sv2, ar2)], lmax=lmax) + l, bl1 = pspy_utils.read_beam_file(d[f"beam_{sv1}_{ar1}"], lmax=lmax) + l, bl2 = pspy_utils.read_beam_file(d[f"beam_{sv2}_{ar2}"], lmax=lmax) + + nu_eff_1 = d[f"nu_eff_{sv1}_{ar1}"] + nu_eff_2 = d[f"nu_eff_{sv2}_{ar2}"] if sv1 == sv2: - lb, nlth = so_spectra.read_ps("%s/mean_%sx%s_%s_noise.dat" % (noise_dir, ar1, ar2, sv1), spectra=spectra) + lb, nlth = so_spectra.read_ps(f"{noise_model_dir}/mean_{ar1}x{ar2}_{sv1}_noise.dat", spectra=spectra) for spec in spectra: nlth[spec] /= (bl1 * bl2) else: @@ -66,7 +73,7 @@ for spec in spectra: nlth[spec] = np.zeros(lmax) - prefix= "%s/%s_%sx%s_%s" % (mcm_dir, sv1, ar1, sv2, ar2) + prefix= f"{mcm_dir}/{sv1}_{ar1}x{sv2}_{ar2}" mbb_inv, Bbl = so_mcm.read_coupling(prefix=prefix,spin_pairs=spin_pairs) @@ -77,31 +84,21 @@ ps_th = {} for spec in spectra: - ps=Dlth[spec].copy() - if spec == "TT": - - nu_eff_1 = d["nu_eff_%s_%s" % (sv1, ar1)] - nu_eff_2 = d["nu_eff_%s_%s" % (sv2, ar2)] - - _, flth = np.loadtxt("%s/fg_%sx%s_TT.dat" %(bestfit_dir, nu_eff_1, nu_eff_2), unpack=True) - - ps = Dlth[spec] + flth[:lmax] if kind == "cross": - ps_th[spec] = ps + ps_th[spec] = cmb_and_fg_dict[nu_eff_1, nu_eff_2][spec] elif kind == "noise": ps_th[spec] = nlth[spec] elif kind == "auto": - ns = len( d["maps_%s_%s" % (sv1, ar1)]) - - ps_th[spec] = ps + nlth[spec] * ns + n_splits = len(d[f"maps_{sv1}_{ar1}"]) + ps_th[spec] = cmb_and_fg_dict[nu_eff_1, nu_eff_2][spec] + nlth[spec] * n_splits theory[sv1, ar1, sv2, ar2, kind] = ps_th bin_theory[sv1, ar1, sv2, ar2, kind] = so_mcm.apply_Bbl(Bbl, ps_th, spectra=spectra) -os.system("cp %s/multistep2.js %s/multistep2.js" % (multistep_path, plot_dir)) -filename = "%s/SO_spectra.html" % plot_dir +os.system(f"cp {multistep_path}/multistep2.js {plot_dir}/multistep2.js") +filename = f"{plot_dir}/SO_spectra.html" g = open(filename, mode='w') g.write('\n') g.write('\n') @@ -124,10 +121,10 @@ for spec in spectra: n_spec[kind] = 0 for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue @@ -135,9 +132,10 @@ if (sv1 != sv2) & (kind == "noise"): continue if (sv1 != sv2) & (kind == "auto"): continue - spec_name = "spectra_%s_%s_%sx%s_%s_%s" % (spec, sv1, ar1, sv2, ar2, kind) + + spec_name = f"spectra_{spec}_{sv1}_{ar1}x{sv2}_{ar2}_{kind}" - lb, mean, std = np.loadtxt("%s/%s.dat" % (mc_dir, spec_name), unpack=True) + lb, mean, std = np.loadtxt(f"{mc_dir}/{spec_name}.dat", unpack=True) mean_dict[kind, spec, sv1, ar1, sv2, ar2] = mean std_dict[kind, spec, sv1, ar1, sv2, ar2] = std @@ -203,10 +201,10 @@ exp_name = "" for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] + arrays_1 = d[f"arrays_{sv1}"] for id_ar1, ar1 in enumerate(arrays_1): for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] + arrays_2 = d[f"arrays_{sv2}"] for id_ar2, ar2 in enumerate(arrays_2): if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue @@ -218,10 +216,10 @@ ps_th = theory[sv1, ar1, sv2, ar2, "cross"][spec] if (fig == "linear") and (spec == "TT"): - plt.errorbar(lb, mean * lb**2, std * lb**2, fmt='.', color=c, label="%s%s x %s%s" % (sv1, ar1, sv2, ar2), alpha=0.6) + plt.errorbar(lb, mean * lb**2, std * lb**2, fmt='.', color=c, label=f"{sv1}{ar1} x {sv2}{ar2}", alpha=0.6) plt.errorbar(lth, ps_th * lth**2, color=c, alpha=0.4) else: - plt.errorbar(lb, mean, std, fmt='.', color=c, label="%s%s x %s%s" % (sv1, ar1, sv2, ar2), alpha=0.6) + plt.errorbar(lb, mean, std, fmt='.', color=c, label=f"{sv1}{ar1} x {sv2}{ar2}", alpha=0.6) plt.errorbar(lth, ps_th, color=c, alpha=0.4) exp_name += "%s_" % sv1 @@ -243,7 +241,7 @@ else: plt.ylabel(r"$D^{%s}_\ell$" % spec, fontsize=20) - plt.savefig("%s/all_%s_spectra_%s_all_%scross.png" % (plot_dir, fig, spec, exp_name), bbox_inches="tight") + plt.savefig(f"{plot_dir}/all_{fig}_spectra_{spec}_all_{exp_name}cross.png", bbox_inches="tight") plt.clf() plt.close() diff --git a/project/data_analysis/python/montecarlo/mc_tf_analysis.py b/project/data_analysis/python/montecarlo/mc_tf_analysis.py index 6f7bbdcb..ab94c6a6 100644 --- a/project/data_analysis/python/montecarlo/mc_tf_analysis.py +++ b/project/data_analysis/python/montecarlo/mc_tf_analysis.py @@ -5,6 +5,7 @@ from pspy import pspy_utils, so_dict, so_spectra, so_mcm +from pspipe_utils import pspipe_list, best_fits, kspace import numpy as np import pylab as plt import sys @@ -27,142 +28,116 @@ pspy_utils.create_directory(tf_dir) pspy_utils.create_directory(plot_dir) -clfile = "%s/lcdm.dat" % bestfit_dir +clfile = f"{bestfit_dir}/cmb.dat" spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] spin_pairs = ["spin0xspin0", "spin0xspin2", "spin2xspin0", "spin2xspin2"] -nsims = iStop - iStart +n_sims = iStop - iStart +scenarios = ["standard", "noE", "noB"] +spec_list = pspipe_list.get_spec_name_list(d, char="_") +freq_list = pspipe_list.get_freq_list(d) +lth, cmb_and_fg_dict = best_fits.fg_dict_from_files(bestfit_dir + "/fg_{}x{}.dat", + freq_list, + lmax + 2, + spectra, + f_name_cmb=bestfit_dir + "/cmb.dat") -spec_list = [] -for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - spec_list += ["%s_%sx%s_%s" % (sv1, ar1, sv2, ar2)] +ps_list = {} +for sid, spec in enumerate(spec_list): + ps_list[spec] = {} + for scenario in scenarios: + for iii in range(iStart, iStop): + + if iii == 0: + ps_list[spec]["nofilter", scenario] = [] + ps_list[spec]["filter", scenario] = [] + lb, ps_nofilt = so_spectra.read_ps(spec_dir + f"/{type}_{spec}_nofilter_{scenario}_%05d.dat" % iii, spectra=spectra) + lb, ps_filt = so_spectra.read_ps(spec_dir + f"/{type}_{spec}_filter_{scenario}_%05d.dat" % iii, spectra=spectra) + ps_list[spec]["nofilter", scenario] += [ps_nofilt] + ps_list[spec]["filter", scenario] += [ps_filt] -for sid, spec in enumerate(spec_list): - prefix= "%s/%s" % (mcm_dir, spec) +elements = ["TT_to_TT", "EE_to_EE", "BB_to_BB", "EE_to_BB", "BB_to_EE"] +kspace_matrix = {} + +plt.figure(figsize=(12,8)) +for spec in spec_list: + kspace_dict, std, kspace_matrix[spec] = kspace.build_kspace_filter_matrix(lb, + ps_list[spec], + n_sims, + spectra, + return_dict=True) + + np.save(f"{tf_dir}/kspace_matrix_{spec}.npy", kspace_matrix[spec]) + for count, el in enumerate(elements): + plt.subplot(3, 2, count+1) + plt.ylabel(el) + plt.xlabel(r"$\ell$") + plt.errorbar(lb, kspace_dict[el], std[el] / np.sqrt(n_sims), label = spec) +plt.legend() +plt.savefig(f"{plot_dir}/kspace_mat.png", bbox_inches="tight") +plt.clf() +plt.close() + +# lets also make sure that the spectrum without filter is unbiased + + +for spec in spec_list: + + prefix= f"{mcm_dir}/{spec}" mbb_inv, Bbl = so_mcm.read_coupling(prefix=prefix,spin_pairs=spin_pairs) - # we will compare simulation power spectrum to theory - # we need to add foreground in TT - - lth, Dlth = pspy_utils.ps_lensed_theory_to_dict(clfile, output_type=type, lmax=lmax, start_at_zero=False) n1, n2 = spec.split("x") - nu_eff_1 = d["nu_eff_%s" % (n1)] - nu_eff_2 = d["nu_eff_%s" % (n2)] - _, flth = np.loadtxt("%s/fg_%sx%s_TT.dat" %(bestfit_dir, nu_eff_1, nu_eff_2), unpack=True) - Dlth["TT"] = Dlth["TT"] + flth[:lmax] + nu_eff_1 = d[f"nu_eff_{n1}"] + nu_eff_2 = d[f"nu_eff_{n2}"] + bin_theory = so_mcm.apply_Bbl(Bbl, cmb_and_fg_dict[nu_eff_1, nu_eff_2], spectra=spectra) + - bin_theory = so_mcm.apply_Bbl(Bbl, Dlth, spectra=spectra) - mean, std = {}, {} - - for spectrum in ["TT", "EE", "BB"]: + for iii in range(iStart, iStop): + lb, ps_list[spec]["filter", "standard"][iii] = kspace.deconvolve_kspace_filter_matrix(lb, + ps_list[spec]["filter", "standard"][iii], + kspace_matrix[spec], + spectra) + + + for spectrum in spectra: + mean, std = {}, {} + for filt in ["filter", "nofilter"]: - nofilt_list = [] - filt_list = [] - tf_list = [] - - for iii in range(iStart, iStop): - - spec_name_no_filter = "%s_%s_nofilter_standard_%05d" % (type, spec, iii) - spec_name_filter = "%s_%s_filter_standard_%05d" % (type, spec, iii) - - lb, ps_nofilt = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_no_filter, spectra=spectra) - lb, ps_filt = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_filter, spectra=spectra) - - nofilt_list += [ps_nofilt[spectrum]] - filt_list += [ps_filt[spectrum]] - tf_list += [ps_filt[spectrum]/ps_nofilt[spectrum]] + my_list = [] + for iii in range(iStart, iStop): + my_list += [ps_list[spec][filt, "standard"][iii][spectrum]] - mean[spectrum, "nofilt"] = np.mean(nofilt_list, axis = 0) - mean[spectrum, "filt"] = np.mean(filt_list, axis = 0) - mean[spectrum, "tf"] = np.mean(tf_list, axis = 0) - - std[spectrum, "nofilt"] = np.std(nofilt_list, axis = 0) - std[spectrum, "filt"] = np.std(filt_list, axis = 0) - std[spectrum, "tf"] = np.std(tf_list, axis = 0) + mean[filt] = np.mean(my_list, axis=0) + std[filt] = np.std(my_list, axis=0) - # First let make sure that the spectrum without filter is unbiased if spectrum == "TT": plt.semilogy() - plt.plot(lth, Dlth[spectrum], color="grey", alpha=0.4) + plt.plot(lth, cmb_and_fg_dict[nu_eff_1, nu_eff_2][spectrum], color="grey", alpha=0.4) plt.plot(lb, bin_theory[spectrum]) - plt.errorbar(lb, mean[spectrum, "nofilt"], std[spectrum, "nofilt"] , fmt=".", color="red") - plt.errorbar(lb, mean[spectrum, "filt"], std[spectrum, "nofilt"] , fmt=".") + plt.errorbar(lb, mean["nofilter"], std["nofilter"], fmt=".", color="red", label = "no filter") + plt.errorbar(lb, mean["filter"], std["filter"], fmt=".", color="blue", label = "filter corrected") + plt.title(r"$D_{\ell}$", fontsize=20) plt.xlabel(r"$\ell$", fontsize=20) - plt.savefig("%s/%s_%s.png" % (plot_dir, spec, spectrum), bbox_inches="tight") + plt.legend() + plt.savefig(f"{plot_dir}/{spec}_{spectrum}.png", bbox_inches="tight") plt.clf() plt.close() - plt.errorbar(lb, (mean[spectrum, "nofilt"] - bin_theory[spectrum])/ (std[spectrum, "nofilt"] / np.sqrt(nsims)), fmt=".", color="red") + plt.errorbar(lb-10, mean["nofilter"] - bin_theory[spectrum], std["nofilter"] / np.sqrt(n_sims), fmt=".", color="red", label = "no filter") + plt.errorbar(lb+10, mean["filter"] - bin_theory[spectrum], std["filter"] / np.sqrt(n_sims), fmt=".", color="blue", label = "filter corrected") plt.title(r"$\Delta D_{\ell}$" , fontsize=20) plt.xlabel(r"$\ell$", fontsize=20) - plt.savefig("%s/frac_%s_%s.png" % (plot_dir, spec, spectrum), bbox_inches="tight") - plt.clf() - plt.close() - - # Then lets plot the transfer function - - plt.errorbar(lb, mean[spectrum, "tf"], std[spectrum, "tf"]/np.sqrt(nsims), fmt=".", color="red") - plt.title(r"$t_{\ell}$" , fontsize=20) - plt.xlabel(r"$\ell$", fontsize=20) - plt.savefig("%s/tf_%s_%s.png" % (plot_dir, spec, spectrum), bbox_inches="tight") + plt.legend() + plt.savefig(f"{plot_dir}/diff_{spec}_{spectrum}.png", bbox_inches="tight") plt.clf() plt.close() - - - np.savetxt("%s/tf_%s.dat" % (tf_dir, spec), np.transpose([lb, mean["TT", "tf"], std["TT", "tf"], mean["EE", "tf"], std["EE", "tf"], mean["BB", "tf"], std["BB", "tf"]])) - - -for sid, spec in enumerate(spec_list): - - tf = {} - component = ["EE->EE", "EE->BB", "BB->BB", "BB->EE"] - for comp in component: - tf[comp] = [] - - for iii in range(iStart, iStop): - - spec_name_no_filter_noB = "%s_%s_nofilter_noB_%05d" % (type, spec, iii) - spec_name_filter_noB = "%s_%s_filter_noB_%05d" % (type, spec, iii) - - spec_name_no_filter_noE = "%s_%s_nofilter_noE_%05d" % (type, spec, iii) - spec_name_filter_noE = "%s_%s_filter_noE_%05d" % (type, spec, iii) - - lb, ps_nofilt_noB = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_no_filter_noB, spectra=spectra) - lb, ps_filt_noB = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_filter_noB, spectra=spectra) - lb, ps_nofilt_noE = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_no_filter_noE, spectra=spectra) - lb, ps_filt_noE = so_spectra.read_ps(spec_dir + "/%s.dat" % spec_name_filter_noE, spectra=spectra) - - tf["EE->EE"] += [ps_filt_noB["EE"]/ps_nofilt_noB["EE"]] - tf["EE->BB"] += [ps_filt_noB["BB"]/ps_nofilt_noB["EE"]] - - tf["BB->BB"] += [ps_filt_noE["BB"]/ps_nofilt_noE["BB"]] - tf["BB->EE"] += [ps_filt_noE["EE"]/ps_nofilt_noE["BB"]] - - - for comp in component: - mean = np.mean(tf[comp], axis = 0) - std = np.std(tf[comp], axis = 0) - - plt.errorbar(lb, mean, std/np.sqrt(nsims), fmt=".", color="red") - plt.title(r"$t^{%s}_{\ell}$" % comp , fontsize=20) - plt.xlabel(r"$\ell$", fontsize=20) - plt.savefig("%s/tf_%s_%s.png" % (plot_dir, spec, comp), bbox_inches="tight") - plt.clf() - plt.close() diff --git a/project/data_analysis/python/plots/plot_mean_spectra.py b/project/data_analysis/python/plots/plot_mean_spectra.py index cb585bd7..c088af09 100644 --- a/project/data_analysis/python/plots/plot_mean_spectra.py +++ b/project/data_analysis/python/plots/plot_mean_spectra.py @@ -2,10 +2,10 @@ matplotlib.use("Agg") from matplotlib.pyplot import cm from pspy import pspy_utils, so_dict, so_spectra, so_cov +from pspipe_utils import pspipe_list, external_data import numpy as np import pylab as plt import sys -import data_analysis_utils d = so_dict.so_dict() d.read_from_file(sys.argv[1]) @@ -16,20 +16,22 @@ bestfit_dir = "best_fits" cov_dir = "covariances" -specDir = "spectra" +spec_dir = "spectra" mcm_dir = "mcms" plot_dir = "plots/spectra/" pspy_utils.create_directory(plot_dir) spectra = ["TT", "TE", "TB", "ET", "BT", "EE", "EB", "BE", "BB"] -n_spectra = data_analysis_utils.get_nspec(d) for scale in ["log", "linear"]: for kind in ["cross", "noise", "auto"]: for spec in ["TT", "TE", "ET", "EE"]: - color = iter(cm.rainbow(np.linspace(0,1,n_spectra[kind]+1))) + + spec_list = pspipe_list.get_spec_name_list(d, char="_", kind=kind) + nspec = len(spec_list) + color = iter(cm.rainbow(np.linspace(0, 1, nspec + 1))) if (scale == "log"): if (spec == "TE") or (spec == "ET"): continue @@ -40,61 +42,42 @@ plt.figure(figsize=(12,12)) count = 0 - for id_sv1, sv1 in enumerate(surveys): - arrays_1 = d["arrays_%s" % sv1] - for id_ar1, ar1 in enumerate(arrays_1): - freq1 = d["nu_eff_%s_%s" % (sv1, ar1)] - - for id_sv2, sv2 in enumerate(surveys): - arrays_2 = d["arrays_%s" % sv2] - for id_ar2, ar2 in enumerate(arrays_2): - freq2 = d["nu_eff_%s_%s" % (sv2, ar2)] - - if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue - if (id_sv1 > id_sv2) : continue - if (sv1 != sv2) & (kind == "noise"): continue - if (sv1 != sv2) & (kind == "auto"): continue - - print (scale, spec) - - combin = "%s_%sx%s_%s" % (sv1, ar1, sv2, ar2) - spec_name = "%s_%s_%s" % (type, combin, kind) - - lb, Db = so_spectra.read_ps("%s/%s.dat" % (specDir, spec_name), spectra=spectra) - - cov = np.load("%s/analytic_cov_%s_%s.npy"%(cov_dir, combin, combin)) - cov = so_cov.selectblock(cov, - ["TT", "TE", "ET", "EE"], - n_bins = len(lb), - block=spec+spec) + + if kind == "cross": + + temp = "/Users/thibautlouis/Desktop/projects/so_ps_codes/pspipe_utils/data" + fp_choi, l_choi, cl_choi, err_choi = external_data.get_choi_data(temp, spec) + for fp in fp_choi: + print(fp) + plt.errorbar(l_choi, cl_choi[fp], err_choi[fp], fmt = ".", label=f"choi {fp}") + + + for my_spec in spec_list: + spec_name = f"{type}_{my_spec}_{kind}" + lb, Db = so_spectra.read_ps(f"{spec_dir}/{spec_name}.dat", spectra=spectra) + + cov = np.load(f"{cov_dir}/analytic_cov_{my_spec}_{my_spec}.npy") + cov = so_cov.selectblock(cov, + ["TT", "TE", "ET", "EE"], + n_bins = len(lb), + block=spec+spec) - std = np.sqrt(cov.diagonal()) + std = np.sqrt(cov.diagonal()) + + c=next(color) - lth, bfth = np.loadtxt("%s/best_fit_%sx%s_%s.dat"%(bestfit_dir, freq1, freq2, spec), unpack=True) - - c=next(color) - - if scale == "log": - plt.semilogy() - if kind == "cross": - plt.errorbar(lb + count*10, Db[spec], std, fmt=".", label="%s_%s" % (spec, combin), color=c) - else: - plt.errorbar(lb + count*10, Db[spec], fmt=".", label="%s_%s" % (spec, combin), color=c) + if scale == "log": + plt.semilogy() + if kind == "cross": + plt.errorbar(lb + count*10, Db[spec], std, fmt=".", label=f"{spec}_{spec_name}", color=c) + else: + plt.errorbar(lb + count*10, Db[spec], fmt=".", label=f"{spec}_{spec_name}", color=c) - #plt.plot(lth[:lmax], bfth[:lmax], color=c) - - - count +=1 + count +=1 plt.legend() - if kind == "cross": - range = d["range_%s"%spec] - if (kind == "log") & (range[0]<0): - range[0] = 10*-3 - plt.ylim(range[0],range[1]) - - plt.savefig("%s/%s_%s_%s.png" % (plot_dir, scale, spec, spec_name), bbox_inches="tight") + plt.savefig(f"{plot_dir}/{scale}_{spec}_{kind}.png", bbox_inches="tight") plt.clf() plt.close() diff --git a/project/data_analysis/python/test/ref_data/trial_data.pkl b/project/data_analysis/python/test/ref_data/trial_data.pkl index c321ba0918a1dec87a86ac1f855820e29109da19..fd584517bb742bdbb525055a4e498933108c832a 100644 GIT binary patch literal 334859 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

M^Pa3*luEFr*xWl{#W!( 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 r?-EP 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 z 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 z zAEW*p#~^SS-mW(#X#u_R)IeRIMr5p|5?$(1i{_1U)cbW_!`$y{qryTm*wyCy9>TrT zV8?#afQ|ksbT>WW8=x+R<{}F;BAyDtYNRh%BfS6DF(Npt2b`q?&btFn2*Gi?N@T`q z;EjxjUl{FDxS^)?LGHv2ci36-XE0a!jdmp$e@3s|192M{srjR>pcJ@0yl!O+*u7(8 zN+t%7_{_JDNl6@>yV6xv;_4u&&-8R=$3t}ajEFoB4GxU%ExBh0)8IDR>O-z`7~p)k z%0n66{6s{D9bUCY4xc2C?rrIpV-HH6FneP(kA+u zff@oWv}3!bK;Gvxdtx6SwjlVg``hQk&`R#_Oi7Uh7@rB6c8wJ9T(+m3XNrXX9DaiH zkl@r49JvF|Q-XsfIPL@|L63~i)ms%jHH@k>tuDdI@;^;wVg}&-q}3{rJrm+0Oo?@R zzrlyQWJk;I#-Kstxot{(Z?Nm<;>)M*{K#}?s(@8e9%+TFCHOpbfx01Xy?bvOP<~NM zb$nj~T-ZLm^iebs))jg=6WIrm#?3aZ;`1E176X6jDUnSy&s^0R9)^R)3%~Vr=kB5m zAxk^vL&oSVzw|HS86m{>oy{t+*Aku8*dWR8i9w+PfyXiUjG3D@PPHuUEY?11F6z;{ ze)wl=bkaM84SLFJGNL_h!ha4s!C@yjtOVxQRi2T4X4wUrA z{``yCwf}W`sq8ou8tZgVcQ7L1moG}*HAkSAha+>GAKpc+mHJI#my(c}75DD`t`)d$ zo)lAUo@?vqZZrCL&l5h>y?ZK1`UDwaN&2cQo8UE;<&oT#29S$+uy)lu74}Uhx}+5T zAY$#-0A^!R+;n7{nKC|$MbV`y+csQ)L}GuqoL2EfN9ERs0wnd2LwjA!jn|Z@r>??< z{R%f4rwQzOo1KK>{zPkxo*ICs8(GKQhJ>;G{P&IjxsE_$>4jllnnL)`IYMwe2~Ie{ z`Al%)2~N!cCxPHppK_QyCwT^6x9YLfCfaN3`>hu~7I_v(tzxua)yl)Z_)OWm+wu@F zr?qXspNiH}+{4ZYjN-E`eID{Du87yK`O@;*6(mzX@+E=||3GWbaq5rXa?vQ+@n1GU z^-wn=b&3){EB8*%!!3Fbe|}thMR$lVAGk^NwauAU5xq~3IMt*n&T>D<>FTRp^z#H` zl+H0*6wlnYygjIaB2%@>bp!Ol=)&k7=a1e{y6PQwCXjv2uTKj6#}9Oatc%Pz8_Fyj~6D`?6NZcl0w zewzw{#+HM+qNxh_@a>%!IjRWq40K6DGdeI$r1U9S)D!t!c-*e~cN0#18GWF@oR4DH z1{&+Uo9u@V(Fz{x9Zu^CbP^JvM>A)Uv{{j*aDwrnXBSS`Q!t=#2)(S zf)f;mRFJTfNFk~Hv_EgeBN3_iw6{dq2)JIST|4c_jQ!79CpZZNXNur-6P!GPBTaBf z2#yQEd0QH_%Wa3l1SPNRyH1WgZDK5{)7uVgPwDfd%p8^kgO!T{i#n6D*FxF>c&Ii;j8mL zVFuSBm&Cw`$;b@_WM!T$Z}3IvpO4e3x(58n(C%yJoo{0lp0HVAISbtkUmjgNApy+N z!O!DwrD6VaatO}D1CBhwStK}g2b_OW|Ks#o5_1O^#v&RX3CY#m3$St+d+g|aB6#}g zRfXfM4l-u@<+hV|4wc#W5L3nUVmNqr&F-ahqeQM^Y`NYk)Eekio}-MzcxHFJW)@9@ zq-NVb$1+Onq1f#s!&?0?6jKm?L?;o_)ff9-^<}_)G4dmg6+B^ejrexm6246d<97pff~G;LNZy1mgg9pf3kCV2A-3iCWABv#@ts)m zO5;NK>WS4#)Lz@6`t0Pdzj@%;<-516*ETT!Ia35j=YaEp;K&mkxdRRb?F;aOsfYiin9Gk{CXL3AC3+KPv0Cdeb&B?L!u$I66jj{}9>s z0ON6_^|{`zWqlfx^3?P8a0Naq(H~j+LPL)KJ=p6G6jctj_oKWMCKv=e(w zqTB{)FWmtjXffp}QI>Uwe_0=^<(>54p@0royPN`kN5o3g>rqjVi>NHOY&h}1PAb9C zBse7p9HQ+1aqn4OU>4?)i4q;0ev=$cMxO#h zDBbSeLGn-XNWEImVpSNsUN=e)0+3qU+(|107f+pR?tv^A(p0`B_$&fwZd?|R&Ts{z z2YXpeP5~%nP~etAp%2od)t&!+&l|cmA8&rF+C-kD&bzY59>O*G4?zsZKCos%rYg7T z1Ua^+g(?2v_djn54u$TE{jU>9a7+$3jt88T15ORW;SSze5eU;mh4&vR{U*~zYzB&3 zlPSJ%##isz+gBqfwE>Zjbos;K^tL6kP7P2K(iC)}69A{bJXr!Kd4R@wnK?X%76#pH zkKazSglO?HD%mGiz~J`%F6FC zL{?F!x9BK1z(62at@$G#JPph9cD+^EA>bZJ4!#TGz{FlWchQRvVK#g;sJ0`};J+UnPbvJ6z|oX3RY*s#+P@`|*}1}oK+kvo!GCT4 zISK@)pWv7h90h_iL~!^IIKK$akGDIiZ{vSqgwq8ceLQ&xwcH#P=hL7;YZ-0$O@AV2 zqG*{yS2G&^hRMX_Id&q;VNTC|-UL_{dn}Z>uZmc85_Yx>Szy+2u=VMHE;wu!zqyrR z0_GZF?HL@_P~Kcg6}#gAT<;`O-HY|nal_FE8u*+M#dt1D`O^hd^P2d@oJl#bhD#ew zY*@nPjOXq^4jbGTJo^N8@UzsX-;P#(5dvS+`m-;%uppNsS`|&C45Mj9i9$44X!ZC; zkajWt>5zyn|9!GpL?ZBhl4I#A`p>yXaGoA;E)bm0|A#|NaK62BeBx(#4$Ur2{Emn| zi)<&!8<<&mkVpGZHRX3wD3d3&pUX!JHBD|h1Tl0pDFk@ z1oQdXDZtK|43)1}$sr;1`tQ(*%P7rO>d29X7m!I;nzFw59r;<6Dl)4+#ze-wwiEoY zk4gMvvT4>s4_W7jxxJ0f!?;KEalr8*vR83!Jcs^b90XsoRgTEO)QkHc?0Fuc>p}ZX zoVSYMKPQ~vBpq^dk)0oS~iUQfrE0|yZI8WdEzJjUacJ>o( zpaupL%6;2I)L^fZQ_w|Ch2~b0_;w1E(Uh8|ev*F%{E)f(^uni+gPFyj|1X)v+aFWo zm)K{p9hYXOx4rUlE29z$S^8nP`rY{Y#%_O{VVRWw>Yn8Z|UoD4SLFQlQ2mjPaD0}I&U9WKk@;cAW)BnTZdMAl(+09##&V}ra zFT&eMWTd!%kK+sep>onSZ&9y9hP?>2#qWVOb=HEoD| zm?B2+#t&4dj~Vg3mVo#(9|NE1Ji=Keb++Fvox{@3$u5^$q~Kbf-BK^_w7{*Xi`!oO zp^sb0MD``zmvHZi`lQ7tFgSCMktZV4VmK>Y%3fnE7jAn6zY+WJ3EVhos-DKBAY4jT zn?@b!BpR_}bf}S?M%P|ye7`bZk0PE$W|oNme~jJtH`o6kKYpVWvS(yxWMyTP+@D#Q z$tGK5WUq*Z9c4#G$%@D-o47qvDP(UVBO{??WHi3d^Zh)3_3fpz~wl{^Z9Up z+;6wr_4Wes?;O{gyHkvq(qqq5@uegC`GQq;?i92&G2a=A&jBHyiuVZ`3&H}LxXm-z z=TTLMr~G}1Ih2*+!Wkn`iyl(&Ff4y-pWny7cPC(c{$4Ia^mDlDYKeCY6z*Z^)=n;Q z4mwyh$79C25EYE7;p8n1etGP}&F>PzBI4Lh{hljPsXW+BmhY*(3Qo7>P0bI^!om|-hN?gemrHtCEfjCP0u&Rg@O6-k3hl`fW5Nvg~B(_Anf@YwK zbDXV)JGT#{zi_GqUkzc={PJAj{k!3a z{WVEf%I^vLx6K-g6q8^T(f5llr+W;0g-H_L9_`6K%;D)PXc_4U0F2T7y9O*p| zF}_^vfiCKrwkgR6qeQBy2rQEmSC=pU>X&0LNEVTs&|WkF=cVZeRzVkVxh5vW``Hj? zMn`xTDe!reYue+3cf7FD>gI?bD>F=Lb&WbZ3OOw<0l!*bFXqMb8!QHpqoatokgz0=?ABeuWaZ1jH6!*o` z7Euj60>ki^L+-_FaOl_hIYS3S)SG+VuK0*NbfqmYKDu!Qa}Z*dWO2BFX*@q4_Pt62 zGhI&qK;=q-F$ilrv&8FTA84zxe)E;$4$w7A-cvEcZXP|`<ez+_mL9CfYy1+IG{y z@K!5ir|dqygx~4xJ-L!?9xwwj^PNun-GlJJO2zn3+5~z&NVnW@lp8DQh!&Go+Cn4K zE?TyOFQ6$@qbP921xdu5K0*?VA$R8Ui?U&JDCbtl_z`?frnz^WYO{Y35(3$7P8WVe z@7~rPpt0k@_IBPM+OWX@Lv6bi0R16W?2Q$)Wm9)`B0{;tJn0 zxrIWgznOeH3Ww8|Ctt?;lmgu0JteaGXWh?Id}Z`Wp<`@C6TJKd(g)QG3VZ_{IpM;&T?`!>(57Xb*$^!lKUW)*cA2q}^_H zt3_+sbnJJFwo&J)&~q!*C$TZ+JMtea)=(afc#QRjBl4@VnEdEaiyDOcwZ*E&(0$&T zqj#8x;Tby#2)yV4jz+;R!lt$8mwe!}+tb^KgwIXn?}{i zd=9-h-RTJa7ryNp%3g)=nDA3>y8)ontS^~#e(V@1IRH`?IgDp7B4Z7M=fg)2K2>mg3xd&=neDpGN4nm+1bfk{qiW`9e= z=XNS<_nQBFf*5|&=X5IeqFbCwQ5KK8!I<$~o`Odkw2Ik$jBZXv{vs^u6XXrR{+6-Q z$YvFdb3RTV3$(y~8|yh;tJp$RN*xTFNFPkp(`;s@EusJLI*&enH?(fddivv!UNFq- z$hXj}gRHj}@A4-3A*YsiXQVt!;lO}NOB)9(PS&*F;-O$O1boZ7D$J&iowl3_a*LI~ z1oFqP$5x17U$!XI^$kfdJ?Z3WeUlX!7aA~~H{XXO`re;>OmES%)5+9TL+V(E#RZPU z$;Y^bs~&v8Q@Ow(U_;NI_y$?`301VFzXqYoRAa-CMtuJ3mlIEP3Q?@1XLWL70MaM9 zAKUOV3YmOZ&=VKiMpx**efJUP#m?IDZT)f1L6kq5W1J@Nd7WQ#@kvy#q1bWeEpljt z_g#a5Za#&G=fgAM0J>|ar&>IaXFU>GeVP!`QQt<#N=;4MyLhqI`az*Jhl?;-BJ-B{ zoC(+mak1&Wa{#kPr@vtPSHUm3E@1be0o-S!qLqDm0=l18?o1i*LrHx0`q&YG;*Bo{ zf^!#;ld7QAi54ZCiw{$_bq@u`Wx)6G3*#`1VyF*MOZX zcz*;Ee*fu>l&V6sWrs|5x(bk2nwOtKUkJLhIH&r}+XbbW9`bZGzKo1~8NFOmERpjm z@xp|D96mq9*WjaB5gO1j&8z@7P!;AnUTklTRD1;)Oq!igem-;f>OoC7%yunJtd0q0 z1oc~GSUG?qB)vsU0iQENKCIvu@V#YTmDBe&$9ISxJ;0r-8HDkq4i7|zkmG)TGOYM} z>K8ga=;bdOvWS=lrDRNhPNBJ7i}TLG14#3MnP%1ATU7azkE%Sg0kNtbIWqlm20vfB zq#@(SkLz*|xR#dLDQd0k@nr9gP4= zdC+85DJKOl>nUQue*~h<8#ag@is2Oah;#OCLDCX|G_1w_tI zR2d<;sZ-pN1$q(Vz3=~HxSC)_};H2kp zpQ5uS@wo$8xbm@^aF%Va`71sT-bW@tw1v+ZQho{aqos=PorR@7FuGB}N>KQ>NM+XTb#pEw)2EmJ7H&+e<>F99KR5n`ol!fH=+pZ9BBRrk*h9Mq1-=j6aAHnOk0oOnF}uha z4MEo)7&`E)pz-v32>P1Hyf25rDJkK?w>!^aGQUFWFL4$APU&r+C4D8zms|;wJl6p( zahf@cXXSB`*It?&te64!KbIbAz6e7XeinYzpmjjXU($~8CrU^A8XUygU`Wt^Ht`fp(Kd< zPxiP!$doQ-M;!Blzz@e{@;|$vo-#X;pJh&{FesVxmt7E0(p(Vfs@g^=A0~^nRnlQ; zN!#xzJ|6);W3*7Qs0OD46yA9ysRD=SE?3A)G2r@yDO4L*fvf6}z076{xzf+w>KJMeXdm8_17nntH5EMfu|LSJ(fR)axVs-1AR;m@n)kjD~G8c zH6bW|M@8C$E&{E-^JqG5nusp(^ZYE@#pgt4HQc)NS_n7Y=XiCW1fQeRH5#9ja38%j zbjm9E?1iHLXjyVkUINZ32R((*5Jb9=|DoIN9CE90%HN#31AFI%^{N(@;d{gD2mbe@ zaRag!gjEjA!Y{2t?bBM4bj#42w=qyVS9(uoQXTb3H>H+MhD=#eF^pX8A4e zztLGhLtUagcT)z8-~^~XUH$?=9IOW_<-*alw*yCb`!T3nZ>VtFmxl7JwddEV1W>{2 zq9B*3TTqks;b53TBYHR(mAgFq4yqIaj{SPw3iMg=Do%nUi1WCWw-5eYr+YNNB}jY= zDU8*0f!tK@I9acYpz7yS1gfPnNtDh0WYNYSeNWqxCF3~ z-r_ts6AsCaH@GgSr9yY%{AQ`sECe{3&64Ix;R>Zry57{p*WL$Ozm75Zz@F;-!NIK% z2qBBeQPt{gQI^ydj}oFpajI-)nIEj8Q%c!bHnBfK3iKo2Z0%6DLZwlgvN~#a z?{mCUE{VQe<&~GlE}>clvk^rs6>(AT%o%;?hSX;TIXs8NahA(3mWgKvfy;19;`nw1 zVmzw)qU)Y3VjFCa8#<|qBBaG6_{4nR^~$G8LzD<-X2cfv8pC0IPG(5Ga29?<@6d$# zD&S7Hyq0^`u?YT`L>J#(xd(TLg=L!U8A1C1U)QzFwHE4o)QO_kMBrMMKT~C&E@)$~ zyPTrfkgrSO_nIeZh{-qT9$m&XXkOmr&U1=ItJKO~+mED?irP!L&fpk`K4s?QGMS4u zsqn4U7iz&$arnWmY6GOW%O5bq=e_WXpICcSRtr<+uXQ5xR?#h%-AyHZ3(R5~_w37` zEyNi;`-*eP2=R(K9TE6(0__Si+_p3}gVWmjspm&LA>9Al4B1g%wC8s6NY;2V8fWT` zW+52@OR1(s8j_PZv6=40H`T+CTe&}8<$D>e*IX{_Vp2pcS(_d*G>(8R|Jlo>y$!)} zxldo+2!X%cytS(nw_yxxN$fXWf}Ot~I_QrhoODqLWk&fjFt5c*@Q_J>XjXtr!3kb4 zp*Am->yd`4*tA}4KOOKTeHA?EeG1IUEFKv zeg@?z_TK)xIhbDlpiwWCjoyYwux9X;Lb>E(gNFSxh*HufI$D^422VX|UB}m8H`7lU z`yaTCPJY$?V;HrC@<`(kObGB|UjqiWul@#;A08l+x4z~GJZhE zvLHZr%n|;W{3(0bZ-WfVcTH7k!x8=zl(Zi)0-mirOp#9PIElWXx#F){h(UeFqC8(1 z*ryiOtQ#-G$a%Z-uIL*4sTaA@`qU5dQW*p#vLe9tv{owr#WbKW5-Z5L^%a5=nq)4# zJcHAv8jWR$z*=%bS;;1}SC#CW7rtIEp@)^B%^9S93d)Vgoy8iY(1)AP6wiHmr_?Pz zQW)H%j8?w~{mmlHM-X#hoIN-n>MsNhH@Ycd*J&8iOd|04x5G9i)QhCJC*0fDvSpUh z>*unT4;t!__OpX6SbQVuEVT)oWv)cgQ9Jp*_a33ApXg&g_@$s5N{M{69Vc;_-Zzfh zM)!cXkFY?O>{HZyqWtWEfL!D%5mj*`+8Y&3S(YNu`hr4=!4ykLZSLE!eP3o`KYAbaB$N=MVV{^k_Qr_xp1ZX!q*AE&mTA ze4g;zgAY^f5l^~vW2TJ>`lKp+fQ*g{)lB|L{&h4PZQdFQW1g~ykL7|1ZLMaAK`usE zg8K^c>RR3YRH*{TZy&+WK^_L$Tg_e0iZ2#5krHOeK=6p= zT&5yuJYOE{FvS1;S}!hNr{+U2+;vy*mjnzG6~)u))`0%`gng4cT)1$73$F@}jsV@J zkOP@*IkJm+9Ci3pILe_JyW1C`fvTFsjxPVwMAsLuv|S^SN9=t5MnN}^gV)sWS5&mt zz%=YhZ9VrA?y?^tGe$lzOQd#Zl)@2p#2McBlB57t7O(oUy%>-f`P!PG?{_6#QjN~x z8vOY_(V{{{;k%M*%C#c6yoZd5o*gb(nngviv6?a-fw)OJSE@#LT5O&#yRBn*8G4MI zH_mxX0N?j#vW`u?5L^DT|MxNc`LORS?`}yw%y^LM8X6R#SEJ|CHHpSS!?mop_NORr zR0_We!>$`vmR^)#=bhl9{t1N&DsRwyF3#BRWD3MPe%V~QhVX(Xqayx*0i4(%r9QG& zjksn-{;WIV^BUdP>Y@ZhaXFVv>P7?Kfpx2_htR*>fCkr!@eMIQkJ`Pb`)iF-PP<{@dM2-$L=Sp8$kY? zq@*L$abP^@eD}Q!A86cvaPq67An?9hV&Ie_gO?79Y*Kdke3KSKoQ&xLO5D}5Oo^w! znv)F@uSL1xTsZW9V?KSv+Y%1W!N-U`Qa#SQ5U>=hAP^P~4o!z1 z9pLuG?@Z0+y!^r)1oPXAcpp_EZW@i|4x&n=)?PuVR z`9tQnabZYdiO!`q!4XxbXsahXUIvS06aT*<`1~{76u!J-CnQu9QbtDRi2r<${F#;Y z1wqnAzh=1&w3Ft#H6ot|Ne%6uB%X5c$*BHHV&*yUJH<7SpofERy}k3~PlZ6&6XOlm z#J_J!4EHz~15#JNbYx^{0wOqy<(4WLunFN;J?#62n9u#^>&McjPzC8NHLauy)O?yT ze2_5~B{tm|`FJ%O1(yi%VKrVzXYc)CMhYWz|EwV{;;TPU8<4zkx1WO-hocYoVM4gc zTQ4Z`riVbqD^h^#iZf7`H~hH7;sn-FUlh+PT*2r4ESd5vMWOthh;E(eNThD-)ivXl zh%5)SJF}n7fU9-vEK9HuZh(_FLVRxkEEI_yiQDfZNqtIkUK?*zE^p3};c*FCR7=HU zoRwkrc+c~je-ZGIoiK_jFarNT(O(WXA3!SWlHFX?ENBFZ>0$h#s4D4$Q24Y6WGQpl z@;S-Cw`7#Y#LbNu95j_2XnX-T+Lf4J*oZ#|h&38^zJuRUZ`d-ITESz!v?b;ADEc{* za={gUUuWTY!$2c^3mxH3QOC=nbZKQB*oQC8yZ5ib zq@U{R*3uN9c`3eAI|AiO_aM5 zmk>|NH%*JvDhQ*UkPPbALoLiHRI*BeNOY-RUd?L|G~!#5`2;y}jCSt3{qf!K01Fc< z7EMBXZ*GU}|FT5dKD*aSl?RmiO3r62WssmpP4yJ7wD_Qnz2Wy1K9A@0^s(6Ylc8we z8O@Ft-bZ%ZHAIo`-H%^90IqPyVmf%8+N9-hcqOxt!HF!6Ij=fK>v_3+o~_JD5Ec} zKWB}U*QK1VGo3}(KE@L1%h-dAu|a^ZZ!CPFjwBiR;t%D4Wh`fZ^g%|dh%&jSIPRV* znQ&pr2&n!hZoexZ0S-fVp8XwgM%QK6i^&ccp!@W%PmWuiM~~Vjqs}#1qt|BMw2BmI zX!6Rn?;-ee=3W0=Of@FrxX78}33;|5XryL)rJxpxh^!qvo;uLNs2+9s${BnjKi%IY zrf@zuN~^}HMW+E$9ycv3${9hK-^Y$PA_4WptQ_2^9fhACakn$Nz0ni8;|XWSkE5#+ zV@mcvqhQ1Jn`bu4L!Jp9y(I#*pr@PpfJwapB-u`!3>mQk6RMmOv#Yhx(Z?pv%)f@l zXh=dQQ!TIuCju^)DQ}~jmm9~oEew%0!^oGNVgVG>9%nXbXAbuwi70>11Vj9Nq9b85 zUZ8#1{lffpH5gKfe$jqt6zEPUFb14IiJPOZm1ub~3gQ#h#-lhJB)AvHU;PoGs2PLV zS8j%|ak2bYb)pAY%9~UhwD_V5-{pcFp%f%q8*^9w^bifqNd?5WZ&3)$;Y7xfp6L9))_#;Cjt zB5AQaef|12?CbCyWf0CnOQyAIQgbR`Wgy)h@g^Jb=emCmUVH`?V)g@NM$Z60<|CCb znSnm@i&wwo^hS$6YURq`+(hPcx|KKEw-Cl|JmWmXi8o;0+B@C@cEnm(0{#4%Du@8UR>G{PpI^U=Wa*qlGqbq$}jwkMbQ|Ly68vxRkP!^ z@v&dLhfkn~g}hNZk`i#Sy3P71G6$a3;`27sz98$ME6UsE0M+Mgt)O%^^Y-A=1}m8nGzMIWPlqjDu-^o9J; zxS0r&+|S9HH(FI9rJ-AC$(BVeKOaju7d=Emba|V{e_nyyIrL;SeHFdBa90Pv;T?|i zrzO8!jzeK}wJhA{BTzMKMWOZ|Zl%hX584a+eW`SU#xK(8ToV>ZC+WsH=Rc0&=Pn^{H*;|YDh3wS(wrlfZFRE$vbt0EmE%oSI-?v#pf2YYX`Wg zKzO%In07oB+>t+j|DqEPxjeY@@#7mVbSRp?uY75vr7vAxt|ylcePq;%@zvW`DyH&( z%m49Z%U-4U9eIr$Sb!`aiBT$?44Jm!DdukYaaJ_x*qS%$^uN%mGkgsO^&Vtbc6x!) zjrS_8-yC35&?4n|t|6R1smXD(S{t5~&D6YK^?w_J%h@bIxZ9URWw)9Ud4r1XrQ>gZc)d#Jd5 z>y5$m8@ToIgZYQlAUJX3>1J=LBO+etc+AU;gCDmqQafHI#@F>Ji}!vkw;bu=qP(fd z1|NDrg6+z*(p8xreVR+EAad!K?|b7wls?Agd^S)W-&uh){%aCnVc!{aV6ry%)djjzKl zRGiINim^ehd!3)AzeRxRV_v~%^I-7ss2^i6@rEsHcupL88B#eEY)?7kvxvH$|E2z7 zhHUa?oV*WsLz3Kgk$vhhRM+jo*Lm9ypFcG#cY9wSn5!0stwN8%A7cAVjdL6j7x45! zj>K^orZ-3rP9=gRw(GpXa<-^3^M|NLPY~ofF+BQnbsAmkNib?zyABwg+MVkOCeX64 zYM7lM2-jckq&wf|1Bn+_O&?#2;?o;awsSs{!JU(47d4n^fjVn={P9P1X!-VCuEw-anVNA2?>8#Pf>m73nt&Z-&p8v;HRd|-~ZlB zgE9(p#evs~kTA=9;1iKDJncPQyugQpsR{-Wz91pE=Dc7fK`RS#6SzH~vAdpyjv z13}Q*sMf~ua2vl@iM9FBP&#mre#t@C)nU6>;&=B&Rfx6y^VLgQ3>3?S zwI5lYL#VbdojgSq$;u?0lRe-Ii;sylhYN?$iDsgz^Ta-2+LOJITFwk{i^==}iL6M- z`OpAAw%8&S@Kn(E%^@&N9c=sDW(UM%&i?Q4IkjSbf+AFY-Vku)eM~VvXOU)BxZDh1 zhZU!h-Z!Ah0kKy>Re@55P)|(ZYO|t=L?%ek!(*Dj;1FTYzo7vo4$C*W1M9nr6H<^weC!)*oe(m+s%FJb!HdG}ty)O16X+_5u54DU3{nyK<(K!w8|vIyy`Px& z;`buF{B}C^77()$eZE$77FC6N*by;Npg@)_vc^p^*!W0FX>4r^G76k(4NQl+4{90#CV-!0&~j;dmLydS-TO0a{4069 zMXW8*gz}UzwB41GWWZ+#{l0BZ9Z2s87pzD&4BEY*$L+~qb_yJjE3d7*eVh)?Z-7J( zUxy`n^0ohGMJf1yh~UDsQ)$c81Vn+Ui1hJ z$2S}YxkNElfw2UX{CzOf`Op|h#Hvb)-1SCN5rKNg6@?Mc%&f?$3>W0GA8;CGB1IoP z_uL=8lLYfA>GMKA7^4iOYf$cd4zC?rRUR!S5G6Mv?NxD zsC^#2UU(BV2~p5a)>PuTH}uLz6JN<0gR+k<>V|c7c@~9Nl4@U%THwdBAx;;LuOy87-W43xC zZKRN~y0W~VDt>9uxI^#&b_1UId$u(>eQ#NDOH!G2AV$AZ4sqYh`loC6a-L72#4vBZ{&Ie(6NUoQ&SzRg@fd8x)8DB@sK3SBXXv&CE zpQH3d(q4yB((_rBC_OqjC1}Sykw6D;6xMTO*%n*qN3@K;-IInnwK9I1(FAB2^FP^s zr|bXiSxlW_#YTnW}RO~-s-I|N%=mW+hJ z{-*=u_$EYmf|L4>bDiL55uCIC!x2xOXvT*Vq0?L4*BUg6z`5)1K|A$O^fdV`&8~VN zLXO9Eh6e(G0n}I8-`Yc+n=9w9a}nPF9UC!SrUp&}?QiBNa^H{{MD_2~HHjc|ver5u67EN9-SG*59?l-o6N5 zG}Z`c{Cxy>O|i0HKcEXH>>NtF?7Wablj`8~-fd_``)-2CUXYpCa;K97U&N41lSuW` zfb}+|Y$ihukWEc}`)xi1v-}|t4Le8340K?(Z*fUbtDp9~&HN6v9Mb6niB6kuTjz%i{TL(Gr?THJYGb00W ziZ)P9oJEUiZ!7c+~K1l1=UBS&w z;v1^>8q&Cla35b-hEmBGuNtvqHOh_yb3V z^(u>Tju*xlF>lnhV}#wZeReO*R0E5jB|EY7)CGH_mGp%C{}BwWb-h#|%$`RC(U z!!e9VahWZZiVh>=dB9&%y$f%Hb)SoQ4nxOj;;&&-Ur^>9zYe(zU*XZlH#dKBMl9rt z4CQ#r(GYYeFxcPnH1Nz8x@z6VlS|l}bc{`NkDQf)>Czs&dAUMSI|Hp|S zIG+iQ48f`0&-p~>8w3{?YZg_X1;Wh!?xbjY7@X7~D}AWi2Mmj9JM^*}(jy)aJ?R-jTlG@n2ZXpVyI!IQXR$3*o)a^E@qGhi zlO%g;{E9%&{=6@!1$kVUwZ2g~Y zBo)f|;z7+xjM^?|;ML((^xeO5>u*suTKEsgk>D`?heJhh)(DQ5CL5pEJ6C8qp%;JV zn+qJL-^$k%^oMcX2S&}>A>bI6lt8Ac4aV|ji4MmypfC5wJcaTK(jl3!2V5!Sgb`z& z9fmM*?t#B0mm&7?ENz*mkUTcJ_*CM}K`HEr755E~!XI#cq2o@@uczpFZM;MIxkX?X zrMmri`vTT~^9Y4k!ebm=NxY;Aekr+krOKJt&uXCgA^$hZtRB?b%9m31z8hvIgf0b@ zzlEP7DZ*+lVMwt;=685k0X&o5pv~l5N9&!j$JaR9WBEfL8^ghCgb3f;1gF+`K5vmyVVU;*X#J> zwI>g@^&ieRf?U0uYcNf>74ar{06Y?zPZWOZg^{U3PT4D+kTHLkXcfPt zEcmgU4OM_Ljy3fwDJA0^ByiXtrnam_7hEPsj+vICC%k6AQoh}QkJ-tj=9}KI?avnY zRm2f}doQ)6Q)hsJ$E7x{VznTM;4uH=82{sp{o{Q9$2lQ>z>K@%70N#9m5}iv4EhcF zgq5UJAs|gWrEc98ZDuv@O*xo>i{yi^C;KHK{8wh}PaA2NjO);;xpfK(w!SZDBr?Lq z^@~P8)YqL(OdGL1pmJ_dV!N7X#A9? z@X!Go#CBYDOwEl5EE;B8cYhr~y;nCHg=dLy9>O_yn+{F_OQe$p5k5$pzlS_k{WL4q z7_OCEHGKdRl9|pLKDP~h+sZ`;8)hJ>lHo+@r4MjbG)2q(Vk;Eg_)+7!Qit44amub* zrZey{18xs>2T#4d32WQ*n?JVjOFq!X zi!w7KDEtrS@P9aA|2Sy`$Nv717N7ZLBzWc<$z26+_u9uJrVSuUS`Y zUDqx{Ro$J_lnNS<)h^|GN=qKniq6EkE{eeevn~obep}A$gpq*+cmX?$59{$EQH#SPt+1_;R&h z$-^(tmaA{N6AK;9mZZH+9&q^|CyC&&5F9Upvrcf@3C?+f^Pb?ynZ7t8e9#*ijm$Tn z2y;O@UD*^NHolO1p2u@Qe*?`S^Uo1qGazYo6T; zvp^#&^fWG42uGGS8pu&K43TN|y^U^hFmmqO*g{1t=(UzRS#bx0(Lc^tf>TOx=m-wg zKh6xnF(f#mMVp`gp49^3ci!igr0~Hy1JjC6YYjnV%c9R!A`LE2o@%b|o&|2w>V?eM z2z1Q)*vHp{dZ?C@| zeo42DpB9DRwOuL6QAQ)@NZ#^r*rJ8<8`;zvL$IA{Z6l$A57fD$@a8OSA6&HKi(>3> zfQ%}8>CL<_I7D!s5}as)GfZ$6|8blN4k9?I1g9}CJk6@Rx#h7~V931q0c7@$KDQ>2 z8Fb4e+q2$^foQu+v{Kt`R1b#c-!GnIyN6$5_1jN&bQ?tp2ySmsp2Y4k zZPSNpuApp_8kLVud8jkw=!U`2h@Xo?r~Dy zMu>dbpCqFXWXfV+eP0p7*}eJN_DT%D?B!Z=}_8o4~R3k8IHWffo0Z2J-eY8===#}!lfpn3%w~qbL*q{ zjB&=OiyA)2Q#-iNdR_R5%qtSeHF9a=5+->g8k^JKM=5rjQk56Y(JeE^r5-H>Bv0L_ zJu_tpr2!1z>IXa^rW$|6&W{q3IdYYYf%vSHAE>i$UIGg!;Kr4#0JnP;i=xgFoYMksAT(5TT7lTh}WB^`>J` z)BW=h^VoHjdEFf8A`eTM)#JE>2V(F-2^58Ma=7$ElF;40>4bsH@)8eksc}fCPF)Vp*|C-idrk)$igpUYauaJ7vaN< z4oAq$i;-aIKdH*!yOZN6$bUc59{-N?Gg^Zxr~^UD&6C5{`2h;A5)VC;m4Ud3KI*vX z#h}nhi<;d7k>~-p2j8a{37o!UNwa`d7Z7bmyJ;S+MXOU~)^>8wQFql<#k=D6$nH}= zr&G2ul-Kk4$VFd9X6vSpzG)hxT#>IehYaw)H^I^S$65c!vHBm5){Z*QKKV;zeZTf( zBmVhenf#l|>K6wnM!4y@F*%@>XwLk0e6RrG%ad1A7lm15?I^*IUq<9cytB411#8Y@ z3W9R9;Po-3PAO;sBpN(K{C$G3C#96EefI1)wb>}g%zAp9DSoBV=qxdAGkdZAq}>_{ zKD}@8^}-lZ5X*lc*U*dlkpCn{;yd)czmjPqv=fs2j~x6B4}3Vy|0?B_KU}@#yijeZj`UR0>&9x%BeyEa*~xSjSpCOoCOCioak>bO zJHfg5kJD;9@>cAn2dD^{h4DXX22PK#J$F9J-!G4& zm--eY&r3;=Wag8j_Oge;=Fj|@)3Se+#+7mFDURmfp!TnSTJQRZC!dv$X~7?s60R!86ePp(AdC_yg2_2wdT1XoZqqQTutnI()$7 zutm_^2y9i|@8)O_#YG=;*-m2k0Bkiv%RjqPfn)l*MNIYs5Gtx`2Df0K>AuLH*RKN? z8|&FgiVX0@*#F}g{NvmtI7bN%*MB$$1jmVW#?xBG9_hpzl3(@qh1O7y(q5-gbOSA@ zWRUp5v5CgIaL&sR^Ujn`qDLL-gf+-ph~*${xB0EiH&N)d{Y^sRN)2YEpC7VV%%kA% z370jm&Z1@R2h%L$;8{F9T9zQYsmdmAUS=fG8*YUZVC zFUasE%KoLUh5blv#d`l5q@b-(5{(aVw+cH+wlCTa8~5&HOMaHafl0TX(&QYp$eMl7 z;4TOLKUwfYC=dAact{^g!~(^McgmMsJYeS^=L*5uCOEGMP7T2k{Kq*=a8%W&hm4oJ z(1DOY2ihcE@JriKQNbBs;M+=Ka~9b^6|6ZijO7^sX+d6H{?1U4S>Y7eWe53wTdoyv z^r6M z`aHYOXlCIZQF<)<6(QVTwfD|>(Ziry{AydR_a5*u3Adgxj0LV4j^!US*FonWC*vQd zo!}f)|Gym(g2P8}8f4cED$O*ZDEWwPHHA8`PAFuuuowa^ZP{+%S1J@b9(8!DGz;B4 zg<(F!;i$oB9hW|N0WqrIPtSaN97zvIzmkoRMNJnJ=2oObfFw$MIB2g1^~;kz{LRt~ zcjrZ}t^F(qAB8r07XNi=+(2u=;bu{g`j zCwzqo_>JtBKX+}ns9p~Go&Opie0iAq+>fg`=4#0u$4FSFBRLj}rMU=&tJ7qFbpi$|{^y&?s(H zlvgt6gl6w$V-b%eDVCUw_S{)I+P36eSVOw2>pUv zC9D_E1M|1>lD+|NMA2d0X0@>e8l?Ba2hFpQRzQ2A_zNSLtmjRmqI`tp8=sdRo+<&V zm<7*ajS^_^6(&v(NI@UG#RG3j_@VIH%v{z$AtW)Lt;&6O0~ywI3W_iDU_Jvl|98yC zkjivv%S^5Wbh@`RM{b${C*`H-6Zqx8`M*Ml#$_ELeUC$u{?Bm;etm|oC<;y{T~iJS(>E-c}|Pla^oQ5>(5GK;cGk|qK858 zzSv!hISJ^P{n_fi!;d0`gtWJdww1Cg4|ywHwhtJ+{KI=|qEQbd?8gaVv z;>cx4_%zg|!etEfRa367<^U~UjTv{>^99FxOdAkX%p zI<{b^MQrJ^6g3$w6e_<9{@l(BXAZr)I_t3o74 z`J3b0kTviI-NlS|bU^=TyI`FdAG){9uGklP0KOR72X&4z!ab*}{1@0qlm>(NiCNWm zTP!by`~IQdZNX8m@Q(hzAKMdIjbediF>TdVprz zA?~}p?&!Q~5%1{MX%H&NTHBlBMij4lb;<=-Tj(WD#j*%6gC5QEc<#V8CCPsrV}heY za5M@T-Fy)KeoR{``2o0{^_-!k3VhMZ-Yq$fu% zA)_Oy)xOnUaCrQXe=EZn3M{iZ!)4?P3r&N2Vg;A+_xIMsv>Y0MUqsAKV*CHF_omTU zzVE+3O308*4H}Ipi83qaWh^N}DioPRR5B}>r_5u9%=0W!WIArj7!6dELZT!U(x|lk zKiBEI_O^fZ`K`V7gZ^vnCp|px?!z&>j`#b#uS*=X$|7C0jQL^Llbw||;?$6e&pEQ_ zoOAe`*Z*>kI6mh@b1Umw9})Q6&MZ&2Q4!7@yC>>=H~}qN-J9M1@id69r#kv1TmlW9 zS-n*-exPB4W_0zY!qtf0N}*x>`A_nP=Ix3%V^s|go^gqO-5!l>*IG;5EDu0Vg^DH@ zy)Ge>M8{W$3^owAY$hLxzw3r&!tvt!rqdyweQ?${A{O9U!Ps-v3!orY!)kfla{fn< zdNHzV&!Xr{wTxSWP9ypqO>P_B+0Q@V)rEa@&qpME;2rAdNrDfeM@(yNY{5~4&)iYP z3>vQ2z8CP*hQ88Wol?m{un(UTgU?~Z=j7mXWbiq!@HtM4&gsSHn4~dtn{_E6-Y&i4 zAMUE6OCyO?(_waS)%nKIx4>?+M)4hE7rPzI+9*E?qEQ72kD&8|>09ApXzwbQ!<)dX z)F*lD7&8>i)W5f@w15@7wKQs7bdEVb#~Gi) zi_g(tbWR;U#~Po*5UP1OGGq<1ITmu1Q)UMezI%^xxrhW3NP`DWUDl9!{fC}_V>_}s ze{YWKu^Y&Bmy9O95kgPIqdNQiHp6g~Rzu{W^)R8@o>R5m9J&OH8eU7A!qkAybXKGh z9NE0rS8a_r99wfum*4sdG!|~XCrCU;G|%GBW*$!f%}ClGo8_I6x|aGnjh?+AxYAk4 zI8zM1DcUncU0;Ws%7d3NvhaXa+x(4T{mpPE+ji;CkDjQ#L5xcHXe^RZn2pxY4n>hB zyqjj`41nOf)W2feuLl0#oO2SN)3xXvX?#uuK1T|lQ(b-D>Rcojgf>LkNW7bnxBem{ z{D9}Pe9)Q}#y8L+zvjleF?|PDs6AiR`?I1PahzJFdtLh?#Bi5v@joVp(ozrh#p|(v zxPB2KnK477yn1i_0~fhUBl;S<8waYbME4EihgsB zH9jXFpL42+ZeON8J<2#Iob8~^j)<3r4jWEwMBY?>`QCN>sQUQv-7_y`5MfqxwYRL8evMLJ2vFIBq*78 z((ib+3cP#qrMy_=qY;NpOTuw%Y7C=3^EaM521ruJ{XFNqdIRPmjg zB3s8|W#{9cq?G7y7Lsn6Soj`E^L zO^t61U%tpAF6Q|+c7AW5S@&y0nM4w5PT6!ttN#=X{^pz?_?*x9oVtHGNB+nCZ2SG6 z8W^7nGS{=-kke53i>bbg&1)h(bY+m`D0gkzIRDDwKlXvVtH<$~nkVRZT z&c$`U5CN~-yQgpbb9vE<`qY#8yNXsz0%NV{td^@&`Nvu@1;!qV-J(vd&Y;c^5NpM8 zNim3qib`>1g!MiPIfCx&oAazn!%&uV&2MM4C*pFfT)`Kw1!67bPYgr0!ID!ikD6a$ zgSGuF&$H3@2E8W??3Z+g8$O>BPz)AnZxE6U>3PXdLlNIK!}ZAl5vy(p^~f9b&hyJs`RTOb{a9{qz>N-wy?Xf;NUK^`PSJX4<%U8dxu$bX`Lz5c($7eGGc<=3igL zd+NG@F}Mo^M{eEbI{#B7-6V!|Lr~`&G#74Gf$&F=XS0Fj(CQBxIRz; ztELY|(s)gS&D8Zm?I1|dnDa~R2(!tk@FYjGTfi(wBpHLa5fyFabN2}yqV0XFg(9c!| zx4U9*^=N$pk;;QyYI-56qKNYUuopKFmqpleRl|;j9=XeTgmj5Dc^(=+rG1g3WrIea1noAR;L< z=cV$sq2uPUorbc*4P(OW8vBGo=YK%0v43CQB>Y-$C&ZzRTdF2Qc`NYOfVgI{E@p2 z^%T(3g

    uR!!aKREfMY66yWKAAhR+Xi{DmeU5B*uhJ`i@f}E+MxFBqkqy38CdsJ zfv$wAf!r~sCwNb0AH5nDew+*A^c%lD|2_la5mb>vk*Wlh>RRO{ff)!+f4|PR z$N}iaS94f=I0_~1b~{t!>_GS6pn=aeFMz`>%?WxDU{Z27@rz74C{r2pr3n>)GchJO zb?yro`dV*o3RNS%rSA5g-TDQ7u`hRjSgr(xBMt1!EzE(vG^W`*&Jltbj*q5i`G9T2 zhO(QvQQ$@6Jf40q69n`n=}H@l!BSSkx~=9rbUpm)G;I67X6@$xm$m;dYyW?jwL)mqR{UtoEex`Kvj6YJ}zs|(siZYYa!-| zi+@!G4NPyF{t~rmydmG^w&GK%?uG{6jZvX&Hyi%>F~wi>Pwapx|L#^!ieskJ-d68y zBo)2nRBii7xH$I>y_k}QPT#qrA2sWsd&h;9rYC9ORi^S$b;t$7V^`S;&x(e_51Z&iPdoil*9y_re(*yNz4 zsX(d954#~w?quYe;H8y$Vs6tmrIV4S!MU{PSOVIC|tm;Eu;oxN`W`hILKwsOr1H%MW)z>$=*lTOsMd8bte4 zE!qVxyC0hhpfQA`;-JYBg-UQi%+}|YjWFm7zOCb%e>jhRb)bP%`yB`kR_uC~Uj#PO z@8+O)5^4qo(r2_32>LiP_Z-g&pm%ikd%4OEvAs@JaQ$@_6z-}e=5@`#V3zg%_QL@( ze_ed?n)bO4m)-%wphBc(uDYSw!pwGw1J=Rxfm1(Y}gM4m8Qfl;RveqB{pP-W>l zS$WhL`1UmVL}l*^@%IYUv=*xy1CcIMInNzU5 zKg*3fR*~pVIwb8J_W>GrZb*1B|AJELC)xBKs!p(avf&OJi~e61pVUypY1?y6(EL^L z=SsCqFg|J>(>Rg|TRB*MuCFbEL)UdWmc&)T>5|oQp+%RWmN@6gkmmyY(^X@=942s~ zVtLW^ef!}_^z)1u_G-9!_`6A_Qv$HR7?RGONQIgy>r9=@EXYD$3h7hRkV9u*vi*QE z;Vx4;Ggv$Ymd$g&E&&4fNJGo4xC?(>e0>EV54|EoILo*gT`1UfCcXtlqY~V+NE>rC2>sXE^LBLA@+46D%7qby)ZNKt-9CcxI9x z7#f(>xQRqS5-+QC%c@j()q2P4yiYFVO7CRjQT_t=$~D6pBGibxk6&!1TJhzti%-lN z!OgZ|nV_NG7Ifa*2acQ%?mP&T>13E-(4ygzIN2IZ)uK#^d@)L&Ns=h z_9a0X<0%BQ=F4XFPt8@;C~9q1q5yS;p-0OTjr>;l8TgQ`Zg{>`%oiN9@rHL@IhU?+ANycOE_>o+?A zZj+np>p+_1I^;oe9qJ;v4q>iCqa@eK zuOhil9&?@i-}d)f;LQ9*oH>p;lMQp`IOfde-*6`8I;25z9ZDg&4mFZohjx=(hcMS6 zK9cLuagys0=DNQwK4zFRw=d#M2F#h}m@{`_&iwQn&U{329V#NZ4m~8f4r!BIhgOnY zhcMTnM3U=}JIQtE7|C_$Z_A$r&J4qxc?xspP0X1~F=sBroVnsRoQb&(?I5`hHIiJ1 zkQ>*8|{bEY5W%-KbpNsl@6F6K-M=1i(ZoQb&(-6FXT z8IfFvgh;MKnCp-Y$#n>G9pWRo4!M$C_t(W|fir6`XRgGYS%*0@6LV%3=FAJ2Gmo|W zubhdw4%Luchb&31LnleDLscZ#AiCnClRbT!%2%{dMut!JKLJ8_rC?oH>Fy zGj9=R-ou=Uxej5jLzwH(agys$GRbx53(0jTjpRCnxej5j`|IMrcPhPkeX z)a%eo%yn3=lRro5b@Fjo&s^ZlKCEXRz?><+NY9+XoSBC?lk%79nZu-BhqN%)rTvEM zPLp~a!g}3*xb7vX*U4YSdS(IU%qNTV%+;7P-(k*dUBsE%f2p2{^}7F!>keVA!+ITx zBK10i^*VGOa~;;}kjZa2b3xCvSfpnzaOVEMT+dwKx^0;2nlRVNVy;7&>t2(39ok3g zb^qbI6Qo{;j$=J@F=y6d&ZJwUXRchtnQecmp1Htvw-<5UHq3RJq+a)1t~-ypZh(CUb*P#MZuS3tU zo>{j@&s^Zl#d_vN%$bK4apvE)e__22AkJlg-Dk{oshI25k$N4nAoV)5pl4cR z&b+=z&%A;;^EKwo{6(Dk;4jrPZ;^W4{Fe2PUWYbguG^2fj)m0g{=;=cq+W*-G1t*! zu3OBR){8jv&>}sP26HBX^~}Bhm-S4{brj5X|C(fFuKVl!(*@34@Xa4# z&Rozl7dSH->zRu=6EJ6Dt^;lC!(y%j3ie_5U>_E9-G6*ogGD~<-_{QobLN6?{tD}v zT$nT8EaJ@N*f(F`%pUB+V!aM}un&v54pv|vHhPf{i@6T4UI%|$e16B7bXdhZA0sFA|*oXbw>g)fMGsQ7ydSKst!H30M2bk*sa~%X=AJ!fFu$b$h zevuFRx5a0HGo^pSnJT~W&4aL>xxksRzwu!)*Zs$b#ass|*oWoDJ}lzS39 zGYznBzMy9=aOQ%Zc^CWU_c3Q;uKSMn(5oi%gOUNQBs5gHLxSU29U;pfteIko+=%BZ8H%uXNJ3ZXYY%++a?&CMO znX|~-=yJdRoY+Hs4t>wKC`}s=6j605P#7%(KDHEV5pn~i_Pl9_2%7;uC9bdP6!QQV zL$9W3^lfuwn6RJ-W&iqIfjbI@6jSR@3i%_vT6OO zE~JoKbOSY|sly z(!!18_fh-(=U9z89#!PzrA&w+1?@2f%Aqn@-dFJlh#Tu|xW=9xBD#%RD-}!*P+E-J zx}WpU|E6{@a=BxGH02pXb=ZN2hLp{R>2l>%7|GAk`u*puyJmS;nf^QadiJZ`m)wUS zqF_3qGQ>=@tiKQ=s`m+1GD=?`V4OuJdbzWs?UTs8?d_(YI>U%|CU0-e@Onxhn@8iu zqsz$8(f$4B%)~CA)Tn%ls4NVG>|)=cwd$5>_vx0k0C`Qa(XQYpYhBh?FCKQG8B3uoosj=fv+nr%nzY8#el)!wm-*d8QqqdragU z_o@aY-N+Vd$=?I(3(RRw+KxhGCgp_wNk14Y7M=@9`vk+;Rc^NhpTG~M%z7P*m+(&> zSp5ET?3QxByk~V0#TG6fy!8DlICZpeLufh_guZbRXl+8n@14V29^D14Vu7rnE7|Cl zD2w{J-UrCxzzdD&^$*Yw`J}IHOZv#)2HF1pbG&}KjJ|49g?0DpzOa7}M@I+O{;Oo*ztJYi|1*S$l-M+pIS9&-ZZ( z<#w<>ZRB8QVdiLWVsz5l*3rV=$idO%jJb)udF+3$ps6A#7OjJN#F`cPD}xVZ5dwP+ zMsD9PC9ZN@eR`@qji?qWU&q*=NHFe|pgw#noshD;L|pukL~Lnk@=Z=pBU;$CDS1s9 z5ACiypae zV7HkjrTDlwMQ_gb`s~;-irt44vuxJKWPtxr&=)kTC)?&9V!(1I@ke2PK9ctTa5`^O zABt-?50Ib#xec9qV2}&(0-EZ0rFSS+!amla=gS}Upniw@kJ9$HqLMoGFWEC?WWxNR zpml7mByT(#hB3d{HW7MB%C3MO)h)g%1R+7U_w$$cLmsWSg9~uXv1_kWhFmV6;t`$lmQ%8u46+I3+RVz{Jc$oLX_}O~upQ z#Ir3TN%S=IGiO!)o3;GD zZ!c}>TP>nE+y6^3TNd%yzbU?>t%P{McIDD`{tO~!^_vVknk3@G)*aWV!!wANPqjC$ zt4Ja|g!n2bs`C#7E?F0FbS(W}YniA?v3m8?3;ooQCe94m%}=yKp&`LY^uF*bdr3(G z9IlZwWS6!;2Pn(ZY{jF&MBYk#sbUa1pGR~ewm_64?<{d{uRocSf2d{CH>;5T5i2Aq zpv^V^Y#{iVr*Qa5Zw|zSG>ywv%wI@7_tO8~omBAN5Ja_Va~t9h9T%hIb--JV<&&a@ z?TANOKK1MT1GoOk$v@OGd+@{D+D2O>LlJ!4mgopNk}2nJ_g+E?0tq_xO6w8dL@QJE z=o)mWqWo#4fImpeZre84V2Vax^PIN1cL~LgjoojkwI;vMA8J|j_+_ybaZV`Ue#VCN z8MndHp*s8R(lStM?+QNm^cqN*pJIU*=r&c8#yO$ z0J0BvFMlhaT~!_YF{Zgem^0NUKjg9eCT$MUC+#of|E-oi$71i^*J+mDq_{?>@6c!Y zpF7%~>1=*4FFs9kwCEQtj__EP^RAzgw=jsS zIe+(6!@mvZvaiph=v!LkvmLEu_tAWo?`p8j~=Afc{n z{BDf-V)>cd$_AAAGaB z-nf5LBs#Nl!~GKBbYzlyQoQGNE()&Sv-TR4A?hu?`~8cqp|6?-0n5)^N3wWD(xcRV=Ps$_V>=H4@xE(+G=q_nwCzzCx6p z(hAAY$sjm*Jzk{MB@wqaw$2Wzrx8OhCW%_df1k@*wX4ih_x3}T#{JN{xK)&Y z{)T_3B;$6aFXBW54F5Z zJpFT9rU!H;<<0-txfZS65)>-cTo21#tfo9ybffqmWwgzu?NF1?c;7dt9L8#lOq34> zAsWN4diz+r&@t9RzLvJf|60rS+;5j{req-9_n*`WMC~wbb(;nFf5|60Eg8TiDXY4*})jnzc&O`G_Nji8+-i;a_W+bL|lqHY0oZk#7G{OvVK*_g`{- zxX~2V-JP2VwTeM!yeTf{I?f_`Q%|lXZmy_tpUj~T+zx2V6!&OSl_0vh)OP%nh9|D& z_5br+K6Cc}47ER&KR^AmAd%SE8Xi_GP)<0$+1t@ER7sTd5EVnUSwu3U=&dZaRKh9E zXj!gy7C~DD%)zp$M622fI?e+b#ONctZwUSS?ws9MVz+sWj5>{4iU=^`7-tvsZprzmCR@{*;@|*^_zru^c#1ODf5Sto_HUz;)DwWg)=6E5H(h&(C$rD5fL~*T#@g(9EP;4?#t!GIpS{oEM&Ie#eWqr^{O zK0N@3_YN2z?9Q2gE=IB`b*BQT%m-($ZC;|60;~%N%=?w;VyA1NLX# zM|Oy_^j5;|`S-f0QP0-3OnM`Rud$aSX0IYvGi$$B8L7}k6SqRR@Dh3x{bPgwrX09u zMD^K<^WRZB+T1}>$y)+7I8U#7wqqr{rECf`^>jyRZW+Np^#hTdGgV?1-!*hG>&DdN z>KOR^eRIe*N*FN9e5|bZxdE<${aGCE1IWM6AI5Xop{W$d!%^^d&&vai^4_Rqjn$*d zgkWTIzPHD$wR>fr!^PYtVFWn+kJ54KmDVy;_jp@Xz1J zDRlLJSBFcDk6Wbb6h)B8TKj(I25OM;N558T@B>#$kSe(1HWli{^BhkdsPXdVNGTaF` zJFM4Z0xKJ-{PwHl!%>U5XHI9L;pcbF_n(4e;I5tH%(_=%aGCFHK+kgzRLR-B>C&Yr zGAsX3&F>@IwJMb^!uyompilbwpx<9EwEKJunxdg@w0T|$(L}sj-}YOud?}qognc{O zx>J#7Qn?YXT3_QizUn&iUb`vLWG9e+#XnSY;U}g$NlT(ppZtyIXI0{1?SqQ0@5BDk zaE`aN^i~RLUdghuWF`iznbMggoorypp0CTg$O(0OrR2>7hNHSA{^mjJwaD-DhidNf zyk)_?|1@fq9QQSNnFZ1NI~lgcH6m4MF4}IU3h;jTvH1Rx#`#zEQN?Hbv?8j_mU_KM zE8xt#!DM0n8l)M_+xliOl>9z_sAfn0Pt9YKys&q}NEo`v1oy8O&3)Ux5?n4mKQ-z0 ztwD>P>Ky8yY_JL}H4A^++dv&}oM93FvVs1i2xG0x{e~_3_G{Hf4v`T2hsF7RaLIPY zpz4Nio&8fv?3MCj^*r>oyk8qmJ{(vU%uWL|3?qiCnSROJ3-YeGtI2^YgB;afc3;-z zsKw1~1?Qpf4Rv#TQZ{lcVd$4o>c(SB!CiW|@qFKlhMqn4r>{w_C;vWwsAlS{S?x0! zhtcah1<~1`y^ss1h53!FIHX}*a+xkN3mvpi{Wc|EhAMEUrl*(%#Cwo`2UKaa&)y{PWbmSM%|1*CF0HCW`NF zDVivGB?@=DcKrmS2C+)BY4CKiHW7JTlc_dCn=;O8?0vtLic&kEa_^MkE=od+j!IDV z2@1oFoY6kobtIntp_&DTqfPJ74WlSw=}^k4zHnYmxL2!wlxzZNci^Min7a-G2 zq%E}~?(Vibkb5#wdpiFPB-wKE7@WC>E;vb>W50;V-;0o{=GOb1D^vcpnq?#yzuBlILr{EJ z%&|l>xb~ryTjN(C9F;ki^ISaw)!ZHDY|gib)bb2}sT>D5wvJ2E(9;tpcJzIwp0b1V zm3$KwF(za+lP?7Q|DLb)kB0rP574L?p=ZDJ&vSEGUIn5`O5J8Bo@~I@fixR*P~`Nkro0PbEs~mMYaIKMUfQ z(#f?WciAW%nvvzYXQ&CoWcGc2r(dEHfz7i0E9zjH=k@u1wn(7AwF$M4dxH=&LprJn zhcZ^>a9jP85X0fxvhy=RvE<0JT~_=S_$F9%%=4*eyCi;IK}>sg z>Lk33M&&`C8o9HkaN8t){GqxDe5-L5xSMtaHVBkyx$8m|5^!X)C zHAYZWZv|Vqg;DN_Z_wT>dyJCaWeMk~4^w`u(~(i}P^Yk5NWChmrbx+hE6ox zu9W-{^r=~;VqC}?{dDen6eC}O3bMOD|9Do6n9 zdvsfNzGostTQ{{9Z|;Ob*E2FlOQVoP-t8|t_v?X=%7EJ5`^NLTL!MuU5_i{VS+#*Vq0lboRx$0AcTtzi|)&W*>D89NjyZfDlZ z>Mh?*QPqq)X8&X-CBV?PYpzF-a&WK4sq}(2bbvX{uo&nGBUQf~F?Tn@dAV-uHa7-} z){gS3xR6fp`@FSkXX|ySI9%!>Np}MdrcJ1|tg8gtCD94x{P`d~Kz*_L#B#znWtGY% z5f(z+Oj>GnxhwJH(|T=LDmqGt>)L`h4tKzE{w2ywmQ_ODuRA*Btk;3|(N^=NQ5BH& zU1|Bi{EJdU-2)Ss_$4An{ntWTvz@T>GV%)V;3l%QlalQdlF*4sW7Sf69pskmQWTn} z3r~A5U9Ax_g3i@8cjVq20@fLAn+H3!!35XQO`I={I4Am7ZK`@-qgC4sCPF(wjf$ zL}U8L#_Mp=L3E25<2*W73-YqwjY6!)tf`M!tVPMOBAy*<{)KEZ&NDB6d>dsZZA#wi{sJtuj(8=!m* z#@i*g#=z)<^j)7|P70mYVTlbvI+PUaWo)A34-k{ylbuSDF%VqJC~ljQ3w_0GaKthK z`E&5~9ge?=xCI`H&3V5@6E4)z8|cTtpLJL1N>NUVuHwVE486mY`o}v4sRbURZXJpH zvcr*(DG*%TQI`X}w?ng+G)E!_Z5K}|-}x8B{`hu3Py z%hEk$TqYD6n6>(i}m&BX!hY(>jsXOHS3MQRvoyAyQ zAhryZ@*T4M;BY}Q=fYeoP}T|y%h5bWoXmb!a%t-*5|*MHE1W+eJr2iYv-t<2XrDEB z@yOB~J#RbJq+3Wq*3s8)WDUPSOqLQdyLLPUmg!=K$2VHR(0%9AN2TfCk3XCaLX1e>WsqlS6x0uKM?z`bHl@ugQ30Mubhz(2;{I|B z*HMZ!nJ>3+Tnc4dT%JBnCWLe>Z+#s+K)GXi?n+`JH6gI<8B6$z=TLNg+lwau$B0X* z%KXCLL1EbcbYhErzCXO0%ye-(lVS#+s_mV zAIvR#%zCb)+VSrNwqdM0H8PRQlG zsj9ZWudkeQFfT7>68Oy##U^Y#bQeQQO?l}<4AG;l=Bq}H-Oa{-Og2>Hft&G{I zam!lnn$phs2YsJ@@JaO!oD-^0o1MG``E6Gotcr~Tjf>%TYqA=lgW1?Kj`9YbZmzQL z++{$ylcU2UaQYL{gv?)8#w%W^XBmaO%7;FYcB+12HIbI2;oUr42MheN3(x65JdYG`->ty?~2?rxP_JSDVbw-iDV#4c`>*Qqa#kal4AvG{Pmy5;f(}Di91{X_VTPj?B+o zi4#k*MUi&jgx2{7fZfDMU-ZgP$e$;ZEmDAoVyx97esLrf^`}1PJdKmc5$Q6_?z3-Yfwt*gu!kX3~PRGReE9nClcV zzX;(uP2hR7(07Y*f4PY3Xawhr2966`?2`CSQA9iydMFuU{tgZ+jOKBLWuPw#QJrR0 zRuGw_kjA>+1e`77dz-jBkNzfF=cC9yu^|RoCwY`_tujC_BwT&ds1Kv-+t;Y3-rkM$O|}^rF$%!`bNcMe zF%A&pCRcrF{X_8F;P<}U@jN_JxZfwpo4r_H8M!#eP152uL*nyxBki7AOCXjV_ORE^Aw2gT6f7d+_lS zjrkYZuJ(yQN5D0gZWW)AHQN2omN}2*0`Ofc;N^St3bAA{H*Ya=2Z($9(~)8VQ%ii? zAKFNQbbsebE)fZ+-(dA*C`cBjme-v(d9fZe@qT22_W)Byl6RRf*O_2`Ie_Q11D;1& zxbH6X7gk(H69kzrR5&g_q7#hvl_(P)!Kc($7)=AW%YiRWeqqq@&0U*TFACfa*QGn1 z@PVSWk0!Fd&p%j4gsdZ3oG<;EWL!9?p81OIlqTF)t}lWeLr^;tq`W^M1NpztJCVi` ziH?+s2$V?gglHZ5UoKI0uzUGquP58=5rd)Y)htgtwEUjEI_2{P$huMSm|{GOXn)zA zZ{bOX9u^1lGc;o0C-7ubzlIv@7v&J;qSFMMx)ZSvD3Wj;?~UrG$^9rtgxmx6V%}Yf zxvmTION1ynrysSG^JpFJyQPg}e_>K2>u5dB7dsr6wTE5`aMkQ49(8zHz^8F=bG{_j zbkY|Rvb2=OoV?-AoxQT%VizD7_ZL-MN3}R#9C2Ju2cCA=>a~TCr11#djJn}qR-~A+ zTpp6$+#-2QE(C?_J(B&PR27;wZ+j}GtO@(lN0}$~sX=|h{GRg87^sJqyyjb;0^Xs0 zX)ik_;bwZrhtVE?w8cy0Sf7&=&_CmS%l$wF!d7(d=13JoBY2-)iucA-ct6tdC-;DG z%)1n>t`*^TFP>uGWx37L_7_XX}RFH^`mV!`=RjpL%|c57#qJ|gPFBcIEidIxST zAC7iw_(2Xwk#3ED1k~Zay8`!@E?h@falY{4xb#=Od_UT-o_Mn6h@biVi^q{0qD!? zZzB~UA;3N-Z@8a51xdWz(-ZAsI{#?vh_rj<^oSbk3?6u&K85$j+2`bbl&nkc0jijH z*JG}GU_$cCigVeCb+*0<2w3<^Q8pG#k19#zqMGAsL$~WnAkl%|8QZ! z)w?X>VF1sg9^7}mUy=RA1J}`hoG!=XtOAC(6_vdIOWl)vy+G~~Ixoifa@SNrpA?MLU+;?XS$^H_uiL9f+ z2r^&Fa9rxa^WsI?9mKjoNB=9Dk07+TKcJ&k6r>_Yc2hR-Kz&+mN!e3Lh&vMHv}ZsA zMh54$JPuF>x8sMQ(#{N`nh(vvn@BV#-JCciM^BMZxYzCWG!HH4Qga@p{_>NC)EO?} zeVV$2+#5gO{ixl5+yjg-?=Em%J?0k|Jf~gpJi3DWZVK)%8MuzbaK7Z?xM*JIywzu* zO6mn9$T@&WIWZZX47IB>$ z&X))r7iXUY{#mVc#0*DKk8EKDjICoeEv7Cib9^|~Wi zmpY5}myK9wu*Lgy4c;5;@P3qy_kf%K!gbtu9@*f&JB0g71LnG;IA6ANl5yFr($h3d z;USKHjJQc`>Ib_sJE#;ZvJjI?P)EedlSop7SsXa|U`V|*#bC1nI@==rGCyh;y3pNv z*{MeW=3YrX*}-KBc1oWES4cGg?-5(K(bo(2?tO?X1Zo_>;N!TK)W4^qcm(Cgf>E;WYrm$g`D*opV)2)s9T z;{9lW>lS!-f$MlN*S*GbIs?z6ILvilaeoQNbu@tUMF+>F=z52B)E7}AG?>PerSAby zfA-j~=D8Os-4yrAWj_N?Kh`FF={Eu=*OfyPYxrBK zmIzi5+)3)*nONT~$2z7N*6V_?F2#fO7Zt2C*yDZL5buqQnCs*)*FC~q$Bwzq1M^EY zp3^>f9>rm=YFdkg)g}>B}InlqZyJor4`ZsU~)2$tGLm*TU2h)Or?VC1$^GtC&G9_p9xy zDDfb!VA7?o&4B_Bpf8*o2w2uq(tI#T74k2qg!K7~0*w{v2P~nGx_1oLcjd8;c@*n) zL0Fe63Ly2D53QumV2StXP~2bk;yS9w`C`9_>m)G099YD4moV2w3_>3oKL zV6`dCpy4VHio`z25cUJsW8GU7>$|a7$6V0sc3@p<57u9Vu+Ff+bu75Q+{blPf%AnQ z$K@I3y62c*He#+T!}Ev<_gx1~vcJq#lXb+GN9Id6jti)+H$NLHNPJ7F{rT(a6IkM) zHMiYWABjg6O`O{347XU@>9)6a%U`~DG0oQGhrH=2+7uDP74Y#`dRZ$`(~wd%e(>jI zFC=>LDAxzGB&5BcBlw|I6#5`kSmAi>1iWoK!tXvoJFmBr{?T>plPvfFomlriiS=Dk ztYa?db>Fcr6|;rZUxqN(J;HrA5ObY3uA_x~xx0w#o?(8;!E-tg&!eZf@6O= zp8BNv1KJXsd5QTK#+P8fu^szr`Pe@Sz&^=d><6sHy7$*;Qr~6DC3VaNy-ou2i|8V* zOTvA3E#|rhxQ-U~fW=%ViTNcK&*`&x9@*o*JB#~^6Rx8GoG+JgT#VmR6qIRp5(1$N zy0<5N+{(ZJb2n_-KkNKZ*3bs~!f z9jmA7e7!ymecu?NEn(>f>DY%2#(rZu_SFQjf8>mPlAYKOpvJnlD%N)ku#P!_^*So7 zOW9%lMF8sz<#?Yyf%nEpydQ<*J%9@H?gG~dz9#v_56|gscplN=zPp=^>@Q5Xjx2G$ z%!H9~sXMl!Glx47tx#v)=I~4v5|l<;-LobeB6rw4c<8bpy&#UP?C0K&sHf@KqW1PT zygEHFn>(}tEeU>nrmL9=ne1t5%u;+Q?|}X31s`@b_8SGUuO^HABO~mSRAWD22iCm{ zu)g~f>zE6A-GVN)73(htvChDT_vw&)a&HvE`%whm0}f)|UEsPl%rE|UPM6?$q>uY< zAnq^exQ@(mzHGp8c^D+4c;c5odT^%fk!!gY#1`}yYdkrCVk>l2Yi{gB+$BvmQNO5A zPxUi-4+d_uqm?z$LY)D1^^cs$q`Z?)#=bo-_NOJW51WkrMjPy_EiEAZqutmislk4L zE7rX?VSU#R>zF)Puj9bFR4vwDUSgf$5#Fb-;k|JU-j7`I9>9%xR|<1obTi2>@pw)P z+mQ1}828<)xW5GAI;zI`vJjW`8~O`4r}L0h<9G9fN@viM5OOrBLMXcTqTFg5UVln)KE3uz$p)NBSgY z*bi{Qx_2GccR8_+nS=GZpM#_>RfhGK5UexA;C-42?~PaRezX$r0X~>_7t_UX=S?aohUJK**no7Cp>y0NK0~5~mg8 zL0x()`n!#n|L6WoAin3Z6yIkM$G*J{_NOPY58H(O#^=~q`;7ggGuS67!+yX!ta~5D z`tBgsF+XFyt`F-{7qR~Gn1$3Cl<+=%8t;v|ct6@DPwoNVFzijpNi;$tFV+eWzdF>ga4+Zy zzW*ZKN8a;L!uJ_`v2QPm{b>R0!^&a5ad49K)e5kGv;q4hyRjc&hjnj0tnV(vI;IoW z>!PtP)$2;?FXdQgNXGm0CcHOV1ttE5`g1r$EkW>NDg#qP-F>*f zOlOjHwDA*}FJd?@7hdTbDRfOD8I7wq#M)xP*MQl;mwKRKH@+|R0pAM(eE;PNzUMKH z?=uKt-`*el(+fUq5B3`ue6=d;XfwB=0`LTxW>+rT!8*r`hp5+JpP9HtsLk6J#BQ;C#`>ap7lL zsuBI{11gMi*l{Z~4O;O%vLpDu6cfG|)Pe86@ZozNLHIs{4EF7BVt;xg_F>mxzws*e z)h4ljWQlzeAM6LzVcmNt)^}B~j=7-Moy5A-39P?ZV4a~D@6(2OZ~Tb&BQ+&*4_M&c z1+Ejr{8EqSv^1VafcvhnKG|RDoyj_?P$cu^GmZ;=)ede8hd2LRTKu2xEWVh(xcIMk z79S2$X`W*qA>KYKS~?!nXXvd1!MSkcgoGmkpwfED9R#Pl!0$YVM4sea!x?_S<536CR)H5_Nbt*RRug45{>n2(<#2aC43)jUK8^4m&~imVkkG< zzVKUgU7%2Dm^}!1XGhs^a`i_~Is=O5%Q#`H`QO_IRrGDUBZnyWIsIO+_()Tjd3FwQ zg|SdPAGD@y-seU!zBaDT7dVX`U!@tfl$k}vPBP{Cwd1H`reA#a{1fzxcR%$D-2#+h z%$R8%dljL&(5&&k8*G%q?Q0iQFC&)IXA|Kq?+I;@%erL}P% zGa(|$;nyG61vIY)ODxB&(4A}i-t0WSVA^3Jd*Z%5#CE5$imfyTYxA>w?HpRLHs&CY$KPa10 z9zV>Se%N(@!pyAhw?0aOGVmc^w_Qk-a;>x`nC}KHF*Ns0cT|p%xVlM^MaagL5V!Gq zZnTe;a_@gI_Sa8QzuzDDj|xZ#1|iZRB?uxZ%3doa-HicAcQ;5#DH0MYAxNWimz;-) zh$2V}s34LGC@l)=XJ@|qe9d>9dC%wb58Qru%&N-sfPjn)PPVhgD645z-u^~2!H4BaI zT@>yr>4gG$s`n{}S@4@x@+1>_)=1b$d6g$V6?O)hrzKkBfi3onK7So9VJ6Ef!U% z!^>gnj9>htR~LPV5nI;ha*Esh0+RBs{dGN4(8d4VA?DyKSS;ZCrkYj^|2aR1PU=6- z9MM@JI^zF_L#3}{ejz9o$qJS4qa%q%j;mXhBd(F?`m9lWt_?e(r$m}^-G2ZY-ulG2 zd8dQRcQETHPk?xxW!|AlFT(Qfl|o;IE3o?@>WFo&8`c~}-rn4zi*dPpZ+k(3$Hpb= z?mNUfU=r$vYOK^nc)Gno%I0(W7!&Uig;66ejJjtxapn^pR+;fzK<)5fh*_3eN;uX7 zG^QCta|ZLsmz1KeH*gMA8`d2TQPX3_{QL5SbM&z&WuMpH8MA1JUW@0p;Q$JF^}T>Y zpap$yIwo2cRfhg^sECdq(NQBhM*lbiL??*oOc5Q~t$VE`@4ett{a!de)dx7=Yo?0a z4S*Ep{l-+x1K>4vI&7Z(03qa@sZQAN5!8Rj&9CkHf`|70@<2lE{yS@UX10e3VCvHN zntW@lO^Zq?7*w$NmG)c)4je{xBuw~H+YvmKeor&$qAqsnL|@jsktg^UlTMVaGRBx} z5&ai|bUy6Qy){!AV8NPCj@n?G)leAp)0{+p8hx%giv6a&;^q*5ebY}i>Vu+5?KTaIc;U_xx z$Ea<^RNNrt*+N=+m?xZ6v1XxO@P&IxmA`ssU4bq`P(lL#5N-~Wu*KPZL@HYQ$oHw< zhpT+aB^ojQs4?ShZP}nAl*RKr8(97P<0|b2cK(XX!CxVa+cTJ| zVnq*^Sd|J2KybvSI60sP?K+N$Psk8@4MR4sQ>j0Pt@yKBSDOsMa^mG(hT&Yo`{s$3 z-pDHASyz3U%5IJw|89!dxOUNh4nNWP^N;hF=r|Ca<$oM{qLX)*sVv*}5|AB{k90g> z43A|`2OBTg0$2Z*)>@Mz$l`suqPgIfl=+_8>^F!HiHL77?uSwdPw(kFvmnKC zw^XLR8}Zd(b;n#UVaznTY_!ffc=6qS=K+Q!XwF!?bLSU^jLJ=gjI1#Tt>HPG{Hy_V zKKNjChPj9%htB3tlplJ?)PGD$!2_n*_C4-;w29(BV>(VJxv~G8CZc2fkE2a=xQWh_ zf1KMyr|G2IW3p}yxL9ELeq}@#I>Vj!DJWZl?(wMAJyLtfugVZIJ)s8q$wt3Ndg!6~ z0HxItO_~F&hd9(MvX0SRVejSHHAF>%KN_e z#Z}V~5`RABXi7a&JQ{awOtc)mzjTLelQ6?_Z=j@?Y26FPrmsX`9rh@@;hRk9MI$t_ zX(IUC$>4v^Wug=MkMoY`WD}it|2RWLXT$Nxqj9?`bT?*E=DngnJf)xU5-rz79Bo%F zX+=4qIRHE$?m!cIx7+$*j- zh&hh#WbXagfzrzo)Vlj;LAPUHjABVY$WhWZ3k$x40qeClGW{*ct#{i|^T-5L8GPpy zS{K1LFvNI&JM|VS%bu&M2j_scIR(RfdNwrn3*>g?hXWbC`JwGM`f%mf$-eX#X3$S` zT!>CJ(RoUA%88C1(P{q2F(*2~^0G=3$F0$5TY$` z-<|ii1+&}QRV$Y2kbd;;;!m0L5N|myL_K~6mR_)Pc(T)jnN>%^y38C>3O_ht^5G*g zb!6(;_)U%N3;2F-%+?v7w&T=>Xii|_TY}+Nqc$KT;^SGC+w%}wtl!A+VGxuVJ&Rh zY?~B9m`h9eE@dM4j=xQ$5B2{&9N#aj5=r{D{usoLy=*IS(|p!1*bj#Q{Am z%{cN=-U}SW4Cyx%H_&zN&8di8`qmbBrM2dA@~?pIU_-%VWE#XDl)E^HZP(D$0NdI zyQ8SJgGZeEatC5P5qVT>moU4JgK&HMb zr=Bl>m$lE0WLh5u_FobLTGlC$Y%OB;qAL+Nk0{USD2Bm*&I_Vb^^ZeJbmWK*Gto&U zI_yNJ%23W@Xh;Q)F5B|fw<$w5f0~Uhw=O8_SVq=zs6SUPxf%6$uc5HZS@?`{W|cP|9wdgD=0Z1VcYw@dB5RWxs6 zHu;fg7GLkhWGnOzpOXASJpz@z3=7Z}83EC9=Hu??*zp4F^$#ON2cQcdYT$Cl1M04I zoh&nqhG3!-@Q*V_be<3$F`^?#blwr2dZMFwz)`F8LnrQ#X}iL?1N)Fhv8$a92`PxI zE_JIO;zqB=#5f;GhojPiRYKYoiHQ4)ELVQs9i)_bnSq(l0y^3qx-w^W+M5qN{%+_( zICobryB$0C1kDDk$oW;(fe&SoDAnz1@HEHOxo1Z~B}10Q?Q`2mKBO%5(PI(pT$)5^ z&-N0k>vmF>AuU4d$1C29YFVH^+O5pCmz5Cd@0#nXK3gAEI_diY&(fLJme29+4KTasoxl^4^ zr}L2xtQvE*zq_xr)0mHX)o-vtoMSj6Z>=;m2X#J|^p*j|yrq%B!$~L{e}_qTZ49o( zcu0f_cp#s*+^6dJ^pVMtSA|k_2{30DI>S_&jVS+Q^HF8hLbB-4(JZ4n;F`#Ji5E&D zoN#R~RAq!gc5s4ptoIt4^U!~CVbcs-{B(Zd^oczbrmBO>yJ3Jne%V&w6hDg!Hm2{_ zwdzCQL}^6SHAkSAevnteV~_5XU)fQg4M5>Wx9IjQjl!|c^s1E}5xfK8*oq<%o z^{^Pbgn`TO#KY!q${61kr)XF66uM0D`!2qO9^ZJJZRG9FK0FKhku!~rqd8HEX2rx8 zC@mrQxNZFl#5t$`YO5bZ8KMhoTY8lU_bKeJm=70T%3t5kwYe6$Wlz0}JJE>3FZ?lc z3av$_gMZE0a{Hlqb;QzmQUa!3b?;Fz+n^iSJ*ja`rpP;4^V;LvC*eOwoanszKb%dX z^XVVQi|EJ*P%rz^WTNk?Erl(!Ho&BCL9KuG3i|!1GdSw68*Bqul;^QnZvI{A@!y2x7lWSER5jdv}4-A-1rX$-(bynETs#j@fvXse!l zT%*Salx{q8`EUR~)%wKMX?7L$91t=q#(zW;yy3!asl!MjXz(?oO&>B%I&f!XuNLNR z9E>-+#DOOy*N*n@dk4=~=+$_uO3@1QTl{4PPdKJxL{r`A165{?thARjP{01Dj`pfL zGP^u{1w38Hs=X1YJuw|R0%piT;cdq zYS*WO9!S#ulr!3s1wE2Gjdh$SQ9|0$yngQg3vysppkQvvKacBdedV_WYaX6Dtmj)m{QXrBS4ZQcxIkd9(S zSNmbBiLrzFX%__cYDQ-_G$G2_@*<1DQTT0qP(}5yFn*zetosLJ4|LcU2o2_Bz!r0u z)MeES$SU~Ry<-{*&6J9w)uY;ge^&pe^_%hk915cIhv=*joi3vDljuD9$H5UD$-C{O zoP}11uFUi6g-c$*X{^P&wek+#bED9*Zu5d^xepW^YBunPme+{pvMK~|$lbl@bPo1; zp4gI7KLZz6+XUm%j{%M1IKFIr4jsI9^2cc2N7UB!_nGQ_D(pnUbH+t6XS}WUCv){d zCQJcE)_b^Yz?wkIF+PWRSW1v{rg}aIjp7!0Zckd^J6~)AYim7{be7d}S*b!fnUxpC zGP|KfJ2Xu7wKSf^?ZLet>obr&y_Q#Wwg#+q=btTpEr6tNPMiD zqEqmX!$fo*{=Ya6)5#w_W${2N>k1uO!}ds{NiT+3$_uKTO22n9Y@o4^7{6r01Ms1- zyT<9~0$oejxGvdS13!J8q#ocP zVf>o_Ke)2TNod31Kj${l5h6M)L}!=iuo4|(qLWT^wup`=DRubn^Gm>6oZrHDSs4_c zdKB`9>cBq3A72mArUR>AyZ?_fpTTGDrep-kO{7=lcKMZ^KI$(w*ZF8Ah+;n(j~8~x zqTicqTG=n$p+4wa%-r1?w0$d7Hj5B~c6-oZs53MO*%u0)s|g%IOhm#m6R-xVa>fWXu8BV67jAoHUC!0mV&aByE_uDMi(uFN0Qc2lo|x3|b> zU&L1f)kbk0X;(D7k_yzn)4z>mFWT^hik`t-+veLM2A9!aiY@!&xMFmn<#x@Oy&X!P zzLOFysEg=UGEvbfP1Nai<5Ad{KH~A-&DnH{LLd2G^CY+o!1!gU7#(R5{MzMZRsn1b zFk>$%wy^^E&q*RWj6|oE=x`C8Nuo3MkMor1#MK`>C$e@7(r4c~i281|uivopELmcK zBJNXcX=KvyVtu3j^($!zO9 zY6|9i^VCvL6_$U>8-&sr)f2fXoZIA9f{O3>;9d4rIKy)ODjuFvu{>PyrI(ng> ztw{<5;mX}*g)0lpkkK4;`77xuXnp(mO<}PD2nYzoe#0R!3gJ;$zpDVp2Q^H8hIk>0 znwlq{ZMK12tJ{pDBL_Vw8ryfVMisPiH^?J3@1dXLdZrGoMX<&~vUx_a7=FGQk4Zn4 zg!-nLDmY!d5U1vPwWD(&47KmM&>L-{1cO;q%~#x5phQs}<*pDqb?>-+&)t*IN7YCb z{?q`z7pwi;GWP)7s@U-tG*W^v{`Ed?TW3VzrZdO^%g8$DE zBs%^7IC4a%`yZ!<=qwSP%156mJ$q|#CccMebYD*5+P}=)SUyAwKgDPBUpAkHvmOx? z5=GqTa`}3x?ft*F)VI>Q$wO>VzT+WMvp*9#Evid>_SHZiZ|LbcIKJls^cI%At-_Que;0 zAzZu}5=BRt{mT>*`F&*34rV0W)U>j$qZ6`!mjtWa5e26k)8=^=$AYxTyK zkn$Y^TY1Cp7KXfV=JP^f{bDNaKj%Ktnf=EhCpw8lNAn*?nCP7FeZ}K!l!CS%_U7CH zRj{qF@=E?K1+0PXuXf`vqCy65Ry>XwWp;$Mhu_=}PwS}m9yn8?*&nATI8MLE0o&`r zBgKpD-&*DNt5s%0VRuq+iZl&g#WW)tlkA7`Kbne3WeL#7=MmTBn+i82Ka#9q;XqQ_sI(0qrY9D{>sOC8-F*{ z9dGM``+fmjO#Hufk8q(m@0utcmi6|W`I3td_nm;E^9`RJ{5Em_IT}QV@BeU|h|bJE zP9D+eyL?_dqVXb-93G&&%jkuKdmgzjuwI015}ohIR8>*?^?*I&z0-(ap+fxg_qVv3 zNA@eu_B2Q$=jIXrm@S;i(-Y>xOU1aazJn5Sl3D0goP=LTK`&VLL~wSIu;2xCvMM6R z9{{KP?IRb2ir~u2SHj<|GC*nf{8u)wD0s*{oqt{56_zS*N1MCagJ?ni4etRf^!e<@ zJAcBxCb{vV8|8~JWcT@mE9HJK7$WyvJS%7m^106(eFfFQ{1I2mf{7GlJLhfq*z?10 z)&Nd=e)9i0pNI}6(Qzd@gG5J}=v?{7*&{k|?c2v0vGw*phb`$GZ(Rgs2GZ@0@q0)< z`)-R1g)4+|XXoilOQRJAvReAH)9r^keAjLzGouBU58Cm-rHg$cD%Yqb9NpfpZ`W=ODEf6KBNs(lWc|E1KQi{ zF>*6EAi?=*=BkM^M2m4@pNlkl+#r+*dG5>F_d!=)y%|ic1HC>v*ifeBc=oR z=CfyXvLp(CDk8v&@m2%~aTVj&<|!mS{Z8zG%!GJQc-#V{pZB} z83l9y|d^}6Cn2!{P- z;pz4YJ$@ILCMF&TE^7%~Zh8W!TP>uB{o6^Ppw|;LPvZi$hi%l&FRp@4dA|VbtOXb) zh(3HMt_K@(`q!scub@v=HckxkS#ZD9CqwYsM>IJRJZt;%J}mqs5eqO4K+}&_-+v#_ zfOj|g!yj`n!gXb#xYpmt5u^HUQE~rq=>1q}5n>^P9MW^grwqbS`Y`|7FpCtV@Jv9G zPW}$U+SJN5hb_R?b58Eh;=cbmRz!!1=)C>Mxkq&5|8cB{&cRC^Ubjg8w7VLsKa|#< z$HgdYJj#B(h2uV#>EUC?h{V%Qym?^i58jdf{Rcl)Bi7IZ8eaxNVCeVXPIOBg<(=Sp zHfVVacrVodN&lz^<)CX+O^s`sMb&h#~^tBb7uC(R9u%w1=DzeA#Q+WVN zH57p=Czp{r*Bj(f{RFP51>Yl^wE|C;V-kP9alzU1#S0eB+c*{`>iZ`iorKvC1_n$^ z3T~cTq%3JY2Xm9nPaYDo-uKYD6jgre5Ub48jx}32tPeil6-_jPofhxi$a@T+@Zj$wse3qxp>JO$Z6Rc7$STdT zUo`+fqj9~t8WZF$J*d!WBZYWx%hNt1><`K7H0ruGa2&suyx07)@fn=-qW5dg5ry5M zfSW4y4B+3h<09uE3Nkk3tYKdiAlz6zq)izIp-9C2fRZfi3s3X8a?OWOXEi*cVZ04q zm$hvVSm{AE_KAjd)BK0+PR&c-@#rQB>>kL`Lx_IMqv&ITU^Y zEQkN5vM=JHHI!r^S4am$;(uqpt2Kclqny*1BE{h?)t89pNsYJ$Yx=et4S5tbPxF8} zzYQF!++T%Xn@9Y)tIUJ6TkVdQPQ*Uu`-$`TOdqL}Mgu!a9Jo{0Mc~5XL>UzyCwkd- zp!$9KU!3aCcnv8pKA4Ft+GQ@uK;qw`yw4fCz<-Vd(eeDpIZt%n5FM?595JHPEmdfL zE_}RQ{Ev0qE3W4_8R727nLm?pvC3?_I=s}NrD4E0;7ktFy2ddt_~vlNG@{&QjAu{~ z^FYrHi%7T}`%`Q3?*DH`!T(>+;+Ov~J&OZBNHb5G&Ecaga1H9gk1+a25;oC^VVF@k zv^{#Z~(&xwg3S1hIZdpC2!b*$a|$K=KxW9&J9ps(ZPIeHCaD8R`3w=91hY)wU5?MdE-yr#RfgCRFy)jrGQ zNM003ILnoWnpwj%&g!|!ge1Oe^Rg_N#8-HEKkSkD*Bw;w#i!!L9AP%3~ znAM=0IsndW9-O(u<_OY3Tw}8m5rFYlu4Mnzgn~c5Sz#L+$n&k0bM?<6nDrp>vY1Uk z=X!H1--bsbmeD%u(OO%`l-`U8<+TDNR$Rm^YzU#OEH0E9=Rhcw&UH3R7NV7(J9qwm zgw?$33V7YUfd8(S#&klfFUh4o+R z&>^Gz2C49B#MNDt{3Naf)#&3|-Sg5BEtA3z3-`Myi>lcwQiB51XZC55zZ-xl`0c5& zpPNKY((W``wJr)7dUEO{`k2Of&4$}S+(4^@kjDvDs+)wi^-Kjy-;Mb(`&=s!cg@4dWo8ghJx z>Q>8&W&pn0W9!*!Ck^K5f_u{M`3~Nb$(|VJehv=jEBSZm8lY5DeUE{r8j8{=ULU-g z2bG^>KXX^@qHA%jGr|H?_#F=C=l(7J_})`~iV54)n5PZ51SjFnsetE2OrmQCoSR-9 znGUFj$0x%#{9CFBJsc9k^IMOgLI32jGksBLqoVHKoeO>N-uUxYK{pHj+C=;vHXmv>o z^doLlJ&6|hMX8a;DOm%r=T@JtaOHyoS6Aj>ud%{w}! z%^5F4&T%*aSz_I*MHdYza2XZA`<(7_hZ%Q7qZKQdB%HHHh4#%xU6QNSfURh z5xuTKiUz<_CC?l^>5hp+vNCW58DbNACAGC~n%L3K7B`Qtj+j6#ZG2Z`5kAc!vz56? z7t?qi{U+hq5F89ot7vPRg?a-UPL|ov;HJud>vrlo)Hi9 zg);+oXuIS5wyQqIoulD%_~0nAksepq;(LfXTloCvm`W}D7o*D^&3#H z;7=gU`hpr3&f?=8m*J&~>}fdx2JBVS$6z5^1I+#shYs$-IC^+a*}yqC7b(oWfA;C4 zBUqL!SrvFDBj`Lk;QTcR1wt* zZ8mUgQ|(DipM;nC5~Xdm`Y3BF@&&~mX&@wc?znB)V8!=dh27s%$7Wj;-g6WyVJ&{) zK8)gf;P>I%Yu0{UtpCK6+Rqr-eOY`t01K67CIpV~=Q+Mm^xMjP1<`?i(Op zxu+_x5ej-<`58^Oav*0`*?QLEBT}zFrZa4K543klnQySTp%*dJ;hp0L!E^3+{z%+q zY{We4GsYy3RcE%999X%4g(frp_!@Nti{4$dG9w#+1S`$zqB#SsdzYr=eLxnTI)>_& zTc;*ATr@3yeq{`)9GK%47yk$r;wBXfCZp)&U9;%hgpC$XCsJ}d7~VisB+ZZ6_f;tQ z#!boB+gnJlPkyS=S_G4oQ%uPf{D$yrqhHF;IiqBS`|tl8uY_w=ZsNmC@6g_fGtHdp z!{Ds;`Fj3z5By;pRa2g-MsE%;j*rc3qsx+IPdV++U_Z&@j}Ih#N2G;oCv|b&=q7Vl ze*)omtwzH_hbPk(60&~Jtt$9{LTXzoIavr~8O*No95aAN9zo?~pYFjkwxn0w+RJEP zMlp2Fl*0_BoTphSf$~j#PfHHzU>#l2fozLX*cGv{ih+k`G0W3AYj>>!eZ_|)RA-t=M8As1gith{n@3lXh6{J0gQ9fIG z@cbKSY&SSw9n=Y&LKok(yon>+jWoS@p56rS|aLiPj1>}ikM^c9!hi>J)3Bz zpJt}gpajl!7AElR^`H+V%sRE@gs}1u$=XiqPEh$GrFfz!0WAmma^E}F1i|i{N50B@ zL+)qql4kXpV?i%ZojDM;g)Scr<^L^Y2owo+&8L1F0;}m+N+Di*IR8zBiek|PNF{5! z&JOFKZztawhX#0|{UbjMucwv4(5ZKFw|Aj~yz3q3Y(<6Bea#LkPdo$h#+2Fv|jBO5BukRN#${$v{lN|B-AVA=?Iv!*r% z3;BrJ$ww!2%@ZxJxnAm2yNNV-7&Vq8w$U8VdiMDZE^Hv0{`%@IfWuhg-ir*eE^ZZZ6e^L!U1sHFEO6PbyO(t>Ph^c4hsUs^E6;s&`;y@tj8_ z&Gn%t)SU3l^KCD~83eJuB3p~w+S_nvMkaph_7CXa>5f~S*aSOSRXu*KFCev}GrD?t z5^@3!dtXNl!bO1q5?_T5sJiC8x5jFQPw)`vOo{yqx~~_FmHsv%XmgB;jmbeZHK`T9 zaW1HE>ipn_h!w)0eyhj$#t1bTOy0@8V~*lUjM9$MN-N9QjiIhp;9S#J*&(^MqLsm0&uCKZ?2G z7Q3ve9BUU^p}P=WTO0v|(pgJsuMzr7nZonB&>GeAgm@Iz7{HC1`$vz_O2WAKxU2kj06)wATe!_`6XE0MZLLd+Qn?2qyI z`AHJ2VoyH4J$(v=s;|*iZZaU>?e(AjxeVaB^1Umoo(!=Xdsc}{{X~u;dt`fV3Me#k zDDrP$0G|C*@%WqXM=`bc%97I-%V73;p7F-s2k3|tzt|Qr0Qb*p*hZ1Q1l3{7R?g~X z5KjXEVXbRRxIX!e?e&OIB(s#OGN*_9K{g*W&sncXI@C=6C zpx|CK_joN87Z!cbR5BqmRsdUEelnuwkZ5cUn>x{PugNBikeNnC?Y?u>iMz*x;BI zbY1EOsreA`+;9vwyF05I2{q=B6w5y}Qx8$nhS(SJgW2fE4E~!G=T}f)etg(b`xB|3vD$HFQpcsKM@21D4R!wl^&}+ z)jxksK_4qBH=L#B9Y-p`8Qd?W3BAZ~7vAP)#-hZ~t(UlpY-GN1GA4MHkgIjZCqH)6 z8glf`Sod2dL1MkRmI)yT&)?P8ibwncKJ$Ibmwx@PV5D2G|AsaK>W-w7TuicCJUVe;8m9>$h(2ALzSL9oisAkFJ6 zm^6*>-&e2-=XGo5RMMhQe2v^*R2CV!Y<5-mvHDq`*fO+lSiL4KAH?2O>VC( zit15WuG1fTKf>>E?ftmXxMmOwJzLQ`GlU8hHd@`qm~VZ8iS+J<$)c?4ub&Djfx$8^D+zdmH2Z!P&EUU zGAE5Kj|SWq7>Xn#?66}5R) za>YR^YUJr@%*=XbK0|p0&t%_2XrxKVToQ66pt8TD;-9$W(qyX52FTMUv<^fgDnSxJU3J2>i);-2E;c&#qB(s@17Se2g@sD$_gZ=?|g%n$5 zeEXCBldR?&P`#{DzRa(WLN3R}(BD0awyeq2=q(N4;f|CNQ=S9(sI1rpCVQjD`QsIS zwRe%(lOsH`2S&j0!+K5Z2NC@JeKRjE6^sIB>8x;Mk~knWb!{>_KB)h@{@Y*c9F)*n zNsArUfm+_L@e~KM8a9>3ZS`EKogab)cF`0j);Dg=7)Z0}_^jwyd@B3zL`zL``r(cQ6h|kvX zLv~m(a(TA;N4vQiq-0*a@VqIFjUUP@(~VyQmn6z72`&5a*BER$!&(>6hRRa8D&rGW zLGkeR8gCskp%yMEj3MMSzIA8x`jdhv+gwdvRNp~0yKOul%g^Ae&*ofAx9kI@zoiCK zx^?JMp)jv2sz$LIn@kE97gPlos2m z4pmo zhs!xC{H3)K`LDHmh+I$2hf8P?*^O>+mlaMSvB|;plZ5y6->C@|n_h>5aU=1gpHo$P>9@!YQ^G62I)t4iK9~VeJNkyXdtjQ9EbQP4+-Mm)H zqK-nW7~^#)&!NSwos&P$@PZYcfIt!dGsw7;74)oy123nO*K$j69E?#+>zA}_w14P? zn$gWG$S5vB*xOAM!b76SLk1A~lGfYHU@3-P48_&9I19tKD~2bq5NGg{zWBiLR4Zf{ zy;(Xj>;=Q5yJ;OC2)nsk>^`Rt$-pP}@bcDTI;6$-bTY90J5Hb>a=7w5Ei8A$+Z_{L z#l=jt?P$6FL388Ek^&{*~>QLv^Sl-MwhP${76F5@vlvdK%xsr`w)7S$)+d;19YA61H{GXiJOY=)eO2s1Sn+<7C%_^~rS zHzO?Xpc_5*Y5Pn5Lz8|;WAPonUDplv^gWvGb{NRow#9ZGtbx&}vUq#R8pPDk zBG?J`tsEk>`-Wq5? zuNYUpGxd!^AvNXLjXFBaqqDz;T-E@)DR)Wj4Amqd5`MG#0c|xJ`P6$`s3RVM&vq#@ zAs38Ga^G|mO%zI?SGsdODheIGR8Zv~kc{GWeT0t;PDAwKACN$MP_wHdR9*EdccQ;eDc zeWx=zH%<%U^;dIFmBfz1a8?P^%$yDAcivvn3$_DZMXAls8@AAoU%!8vOCAQ4wM<+N zBQQC>YUx|92Lgt>?8YDO0eg&c-pc;ZQ0;c3vVbBC$yBseeNhsE?|qEkmlGwxY;b0N zqk;ojoqb`fx$O!2cYPi1W;UY1=EX0!A3TTUz75-*z-A~!e;wlL$I!H>V>@^`p79GS~uQl1Oekffh}sPQcCbrK4i~Z>P;N`rv+IX~?nPr|}FgzCBnQ z9tOQ9v{>Cj1S-GB(SVDvM1@aDcm2zh&=VzL!+?+GV9B++QA-mInw_!(k$>$V(!AsE zM$sUUvW~RQXNckjn$ikRXO6+z#4WZg&nSR+k7T+_~*^xl860I|^&j4Cw zOfzNG{efDdr!+#=5oWv}`k2`hX1aFeZ5I~CK$tq^-Sg9D@C+(f2ER6s!+5t?w|43sGbS*JKnSCfu4$Y~vPU(YA|rw_ z+ra71#xHj#14Vkszf-p$54jxscX6ayqaC{u;OC3w%pQsxQ$Y zy)({;Ngh#%Zv-NdtLm|egIg$qL|xayjT_TYmdszk_z{&(rpnMJA6$vPDR}jlAu#Vf zitJDI0Q={1Njq~E5K|SiUpLtj#kfCyc#b0)4bbhMq}6x_J!h$B=tNlXosVMeC$f1_ z_I}m04eShz%pl3-Xk%D0mC?bDc!2>~-BG$Y7r0tFZa$*y3Ug8qH7>Qr0_|OM^!)w= zRLfbs45VShKj?D`Fx1S$@rs=2@LBzYyC7Kg+UGYJaKz79#(fZl<0=PTBQ*F?LHkho z;Nuxw_?MKdmxGo6X5UUU9Y7xqE7nr^r*bG0n&P(Kj6j^K z1tOPk2clzHHntKd0EEm+-i#@Ff^za8_CC=D3|RakX^71{VKeg|_=Yx+{ zF9zY`j%I#@I&Ato$+NE~dV!a|J*=JH8(k@Deed_x2fn+}=BARkK}O@z*(KfU5d1zi ze#c)Imd1uvmvzOxO>Vl2;t~F`v+bbGufwr^FuFf0vie^20;o z`=$%_r;ni0qb25;esB9YURZ6BhYQ@=tS94{S8!r`QN35Q0-)dgx_r4d2CdJ{Ck=Nz zVOT0QW#j5~6r6jHfA|)m2O}=bl{x0=P5moLZ&3|4kns4b*R@?ZyE zjD}J`nHNZ7KZ@^vLIUKs$^8cS&H#_XL8F)_+Hi2rH*xMlAv%z_f9XbzFW3!vgpZO+ zBI)m^UQOQJ#wmB?NdEf9j+*+X&GNEIkpfpQ{du23+=#T|)2ob8=)$vHiv;?cNI`E< z^4gKx=(^GiqX|MCHYCJXO;>&Z;Xbb@6vvM+#O!m<6#BQKK`Z@>| zj$M;UutkAvemP$bx}at%?h!JNaEPG%QgfSX7u|CReO_Oh36DbZoE|Z0!t1JFwWmik zKwPeX_phreOfuQnJnR+&&xJq_OM&Z1=ZW7m#S6>cC?zNw($ zv-g1JLqQ!w2p$}SZdF>plLuQunmb(`9&kBVHy%w2zyYI8Ja@+hbZzrP)B{pwbUAI; z@qV8#*vnm@sAw5S!2ulq4|{JOl~eove>Wfv8qlDD(oE7oO2fG;l_6?>|CKKMGlUWyfc>T_RD&G4>i)a}mv#p5*aLImZ+EZD&F zQ!N>J_GWN*T*2ntfIUpcR2{b?>jLGCgFi6R9CoV@?Uam07Dzcr={;@N0qy4uJVAp8 z(E-=au9C3*aO$CCY5DL`a4wua*-jw?m*X;BewdiTs2z1w+MP7;K7H!dRKNs8(~oe_ zP@O|U=cv}**ujT7?{;R;D~W+m<)D^Ytr#*|-S}p=ye14aW(3{@# z(6pj)3P^BB^Ku<}3p5LHOo2^-h*{+BWHci`gyhN|p)8RE{;5taJKC*ijgxrvjZMtx z#Y`C|%}x>IlS>sHBPE5*zl=v3fAIjV2I=td+-}rf{xti645di8%{5FSUm*_4ztm9-y*$}KG~=FS&;`Az2}-UYj#85#;{6wCW114Sl>9IAqy9- z%BCG9?fbpiGdFXB^v*_Q(t*21+nhn*S)Xu^9~ zP6M=oV@`WXc;vN03dI(dkH?sxL?q>cOz1a-qCn)}`EDLJ6eRPdxDA9t zk@ohG+1qze_o8B`*+LX_+;5-FUL}bXH^1bn6Pan^D9|+9a``xTntDDv;dvC^ynQgZ zn!*CknkI=P(K^6W&VuZTTy}WcZpedwNFmJ!i?jJib6AT~?tP3jrNG>8r^g%3ih|kR z_08UrgiWQ%-wuCeLEp8r%Ayja;N9YI!-d#f_)y?pSce+B8C(v;Y}ebL_)G|6xKauf+criSiI|I7Q}X2{Jw zuOh{OFW^}5f(hwel*v4AKh9@x*l;RsvBnvxM6|q$9NK|IUhEFb^4^H%udt@4?qWy7 zIXj-nId4Vw#|FcrUT~t4kPU<5j}*~+4aUwNCegs;d8bZe<^xjG<1C$A7YhsJHsNjp z60oU<{m^`vEDRid)*`Pa4;(qGueuxSfTh#(H>akK!TD@92P58NsM_}2x6(dm)Zoj} z>KRxH-}@uahm+>8YHT%G$gdGzKD^A3Xeb9;4E8%dXx|Kbw0nX4g&dHLTUJJ`*M!eQ zm9gipNWqxKfg{5&3?Y%WPMQu&L|sRZlZUiW;c{AS>t=fMQP*Ma*Ye-R!DS-6@k!x& zcw;nv@XUKrp!44S!AeL45?>En$JogLE*s(2WU2#BgWJt3-0hHnUIE$D<8v?_mFD}D zEDbrEN~~qCSybrQ+VefRnhM<@=Lunrr9qGH$BgQ0e{QM{Jjf--NQdI<#g&?yCD9fK ziGs9mF)$-=J#$qBDaY`fmOpKu1kIte77x0Vz{}=tfUGYDs*>^PaSmGWj@~uUag6~) z@HdQVepi58@d4vniZ$?1EA)1Fs~BRq6z9}c*9eU>BQz|eIczyrd6QXiBPyWk7Thy^dXZ_QGGBs^qU z+f^#SnU*HTLxcft8q zyQp@Cj9^pYpi|_tlWDN%*y_g#GEo{`eXPeP)IAR=8sCnMEwp z9CtW6eaLU#2#-$WSfx3101uu?-Ilt`8jJGO2~OF?j8EcEjVLN8u{B|2O>0)aMZGsm zxfuBG0&jQntGyd?p^w{7{T(~$yXuntKo52v7|b14iEcXs0R$(K;7kx48iMnb;P4Qf z7r)?$N_7YbV6;xjfUIzoa= zpV#~vTkz*Snl>C_3=D!Y+#KDcYpds2i`I`ETuAa^Ru|hS_TaGKh6{>`xH$KXG^N{~ zxU&Pxi(x${e707Qc@2*NzK!OK$c1~#_=XL<1Gffba8on;+tO;1_~Rt0!p`r)_$=q@ z$-8NuxWm`PNcPmvh}^W5Cx7e<`W&+=#1eO6l#CXuE}hdo)%5^U zGH#tezc&PZeV-%wG|(U3tQ(b&GIIoxV|*pgEA&CA`4igbfWgz*`Q$gTDsZVr;K++= zAH49QLwNPk7~JzzMCLBNLG0D_HTBnf~S3hDH(Lh6mN>1KKkwWK|Jqs zO*-8J3H;`x^BNtOg>mY)tRB>-2T-fxyR#1WsIW0<6PHtEUf6oU@6<*fF{CiXM2EjF2Tte8h++&5Y46`odcTKG!`C{R6YI`waJs_hgDfg8D)mXmL%*`$Otoz!%pOVmXtc%? zdP8UA*!CKbp2Z7x)xV$xzSo&}n8&?vdbOQ*9d791cRK1Gd@zf`cUtD`j=R`^QEyBW z7hUCm&x^deQtG=Km!h_T`YStet>J;T%cU&%qubx!tB?JFi#L>OI%D30fUU+IjkgPE zxA>{Y_LJ*yk@iALS3L)eiu@hZ4_y}gNb6hH#DZb4pby<)d-f$zYo)CZZ@LRMYWv1} zl=C2Y1xK3TkiOXbFC4WM9GVrJxba)E$BQG;f^ztg-1Hb^NAK=vG7^uzuR6wHlePsL zvp=&%E58ep4LHAgnI=GL!Mu`VO%#L{d2_$ybcJaq+vuGl$KfE&-Zr^MF1WSCnuy1H zwecMaQ7AG>0bgov4#;?Ji?cM1?hu*F$CTAZKiLcF;AO5n`sc5+;|nE1ap!cHaO0gz zaHah_JQ{SNmynzRBafHXt4&5wj?Cy=Z^aQ%+S?|<qegIA2#)m%&OE^pCO8gPQutNW&%xE; zP8XkESJ9JXDIlX3uam&fi!oaw+<@4bP= z;1!Z%x##FdokH4|Q!bV%*asbPY<{^@QV}#APn$H1jC<3n3bhOzeAwF-vm;>P{^-%D-Gz?#lZj)>ekg1ZF?9=j8?8sEH6=;Tf3 z*PuD_;j>C>FB*tAC{rlk4Pqf3j7RNTL3D}p<(9@c)H$|4zh!9-ee4%4p~%^ZGdNyQ z-@kesg-hI__ffY_yF;f9 zStb2PPndo~X>1j-8+{q4m$~#h1^B&Zo+#Omqu1N!zr3)#3VM0>0_rI>p=6>gE&PTS zPP0YM@S)&t{AiCRws1-e-)|f5y-sWz9tTsL=6v`B-Mt!Ly3{s-n#?kbO`VV6M|Iiw z#AC8CJszV*ew_ojPu&IA=^IbLol;;d{LX#!EQ_u-?8^h_Fs`t+HEscMcWT{jr0=E` ze3l&kie(_(a&p8VWdd<;ay(1fX^0zIo?D8^|BAeR!RaJ87{Mw21Bbt{J^g;E2~_&3 zWC{ptLbq`Q!{K3TC`v9f4H-EFZ>ZKCAqSo ztqwyxJr1;SYQ}N9RPegf8qCZ)gz;5sr$RXu`EX$Y@lD1NpJDN40rl?tPeCK-TO-xp z5s>!|>tK96isZONwccf@;nJp8{ASN&V_sRRRK5&%Vf&qJor--plAw~p_mAMP_E~n@ zUgKI=!{G4wP+krarhe^BzIxc(C09aSn P$oTBG* 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 z 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 id_ar2: continue - l, nl = pspy_utils.get_nlth_dict(rms_uKarcmin[sv, "%sx%s" % (ar1, ar2)], "Dl", lmax, spectra=spectra) - spec_name_noise_mean = "mean_%sx%s_%s_noise" % (ar1, ar2, sv) - so_spectra.write_ps("%s/%s.dat" % (noise_model_dir, spec_name_noise_mean), l, nl, "Dl", spectra=spectra) + l, nl = pspy_utils.get_nlth_dict(rms_uKarcmin[sv, f"{ar1}x{ar2}"], "Dl", lmax, spectra=spectra) + spec_name_noise_mean = f"mean_{ar1}x{ar2}_{sv}_noise" + so_spectra.write_ps(f"{noise_model_dir}/{spec_name_noise_mean}.dat", l, nl, "Dl", spectra=spectra) ############ let's generate the best fits ############ + os.system("python get_best_fit_mflike.py global_test.dict") ############ let's generate some simulations ############ -ps_cmb = powspec.read_spectrum("%s/lcdm.dat" % bestfit_dir)[:ncomp, :ncomp] -l, ps_fg = data_analysis_utils.get_foreground_matrix(bestfit_dir, nu_eff, lmax) -alms = curvedsky.rand_alm(ps_cmb, lmax=lmax, dtype=sim_alm_dtype) -fglms = curvedsky.rand_alm(ps_fg, lmax=lmax, dtype=sim_alm_dtype) + +f_name_cmb = bestfit_dir + "/cmb.dat" +f_name_noise = noise_model_dir + "/mean_{}x{}_{}_noise.dat" +f_name_fg = bestfit_dir + "/fg_{}x{}.dat" + +ps_mat = simulation.cmb_matrix_from_file(f_name_cmb, lmax, spectra) + +freq_list = [] +for sv in surveys: + for ar in arrays[sv]: + freq_list += [nu_eff[sv, ar]] +# remove doublons +freq_list = list(dict.fromkeys(freq_list)) + + +l, fg_mat = simulation.foreground_matrix_from_files(f_name_fg, freq_list, lmax, spectra) +noise_mat = {} +for sv in surveys: + l, noise_mat[sv] = simulation.noise_matrix_from_files(f_name_noise, + sv, + arrays[sv], + lmax, + n_splits[sv], + spectra) + +alms_cmb = curvedsky.rand_alm(ps_mat, lmax=lmax, dtype="complex64") +fglms = simulation.generate_fg_alms(fg_mat, freq_list, lmax) binary = so_map.car_template(ncomp, ra0, ra1, dec0, dec1, res) -count = 0 for sv in surveys: - array_list = arrays[sv] - - l, nl_array_t, nl_array_pol = data_analysis_utils.get_noise_matrix_spin0and2(noise_model_dir, - sv, - array_list, - lmax, - nsplits=nsplits) - - nlms = data_analysis_utils.generate_noise_alms(nl_array_t, - lmax, - n_splits=nsplits, - ncomp=ncomp, - nl_array_pol=nl_array_pol, - dtype=sim_alm_dtype) - - for ar_id, ar in enumerate(array_list): - alms_beamed = alms.copy() - alms_beamed[0] += fglms[count] - l, bl = pspy_utils.read_beam_file("test_data/beam_test_%s_%s.dat" % (sv, ar)) - alms_beamed = curvedsky.almxfl(alms_beamed, bl) - - for k in range(nsplits): - noisy_alms = alms_beamed.copy() - noisy_alms[0] += nlms["T", k][ar_id] - noisy_alms[1] += nlms["E", k][ar_id] - noisy_alms[2] += nlms["B", k][ar_id] - - split = sph_tools.alm2map(noisy_alms, binary) - split.write_map("%s/maps_test_%s_%s_%d.fits" % (test_dir, sv, ar, k)) + signal_alms = {} + for ar in arrays[sv]: + signal_alms[ar] = alms_cmb + fglms[nu_eff[sv, ar]] + l, bl = pspy_utils.read_beam_file(f"test_data/beam_test_{sv}_{ar}.dat") + signal_alms[ar] = curvedsky.almxfl(signal_alms[ar], bl) + for k in range(n_splits[sv]): + noise_alms = simulation.generate_noise_alms(noise_mat[sv], arrays[sv], lmax) + for ar in arrays[sv]: + split = sph_tools.alm2map(signal_alms[ar] + noise_alms[ar], binary) + split.write_map(f"{test_dir}/maps_test_{sv}_{ar}_{k}.fits") - count += 1 # for now you need to manually copy the script in the test directory os.system("python get_mcm_and_bbl_mpi.py global_test.dict") @@ -203,16 +216,20 @@ os.system("python mc_tf_analysis.py global_test.dict") - # now we compare the products produced with your scripts to the reference data + spec_name = [] for id_sv1, sv1 in enumerate(surveys): for id_ar1, ar1 in enumerate(arrays[sv1]): for id_sv2, sv2 in enumerate(surveys): for id_ar2, ar2 in enumerate(arrays[sv2]): + # This ensures that we do not repeat redundant computations if (id_sv1 == id_sv2) & (id_ar1 > id_ar2) : continue if (id_sv1 > id_sv2) : continue - spec_name += ["%s_%sx%s_%s" % (sv1, ar1, sv2, ar2)] + + spec_name += [f"{sv1}_{ar1}x{sv2}_{ar2}" ] + + if plot_test == True: plot_dir = "test_plot" @@ -230,17 +247,17 @@ for sid1, spec1 in enumerate(spec_name): for spin in spin_pairs: - mcm = np.load("mcms/%s_mode_coupling_inv_%s.npy" % (spec1, spin)) + mcm = np.load(f"mcms/{spec1}_mode_coupling_inv_{spin}.npy") check = np.isclose(mcm, ref_data["mcm", spec1, spin], rtol=rtol, atol=atol, equal_nan=False) if check.all(): - print("mcm %s" % spin, spec1, u'\u2713') + print(f"mcm {spin}", spec1, u'\u2713') ntest_success += 1 else: - print("mcm %s" % spin, spec1, check) + print(f"mcm {spin}", spec1, check) ntest += 1 - my_l, my_ps = so_spectra.read_ps("spectra/Dl_%s_cross.dat" % spec1, spectra=spectra) + my_l, my_ps = so_spectra.read_ps(f"spectra/Dl_{spec1}_cross.dat", spectra=spectra) ps_ref = ref_data["spectra", spec1] @@ -256,37 +273,21 @@ if plot_test == True: plt.figure(figsize=(12,12)) plt.subplot(2,1,1) - plt.plot(my_l, my_ps[field], ".", label=" my ps %s" % spec1) - plt.plot(my_l, ps_ref[field], label="reference %s" % spec1) + plt.plot(my_l, my_ps[field], ".", label=f"my ps {spec1}") + plt.plot(my_l, ps_ref[field], label=f"reference {spec1}") plt.legend() plt.subplot(2,1,2) plt.plot(my_l, my_ps[field]/ps_ref[field], label=" my ps/ps ref") plt.legend() - plt.savefig("%s/%s_%s.png" % (plot_dir, spec1, field), bbox_inches="tight") + plt.savefig(f"{plot_dir}/{spec1}_{field}.png", bbox_inches="tight") plt.clf() plt.close() - - for my_key1 in ["filter", "nofilter"]: - for my_key2 in ["standard", "noE", "noB"]: - _, my_ps = so_spectra.read_ps(f"sim_spectra_for_tf/Dl_{spec1}_{my_key1}_{my_key2}_00000.dat", spectra=spectra) - ps_ref = ref_data[f"sim_spectra_{my_key1}_{my_key2}", spec1] - - for field in spectra: - - check = np.isclose(my_ps[field], ps_ref[field], rtol=rtol, atol=atol, equal_nan=False) - if check.all(): - print(f"sim spectra {my_key1} {my_key2} {spec1} {field}", u'\u2713') - ntest_success += 1 - else: - print(f"sim spectra {my_key1} {my_key2} {spec1} {field}", check) - ntest += 1 - for sid2, spec2 in enumerate(spec_name): if sid1 > sid2: continue - my_analytic_cov = np.load("covariances/analytic_cov_%s_%s.npy" % (spec1, spec2)) + my_analytic_cov = np.load(f"covariances/analytic_cov_{spec1}_{spec2}.npy") analytic_cov_ref = ref_data["analytic_cov", spec1, spec2] check = np.isclose(my_analytic_cov, analytic_cov_ref, rtol=rtol, atol=atol, equal_nan=False) @@ -302,17 +303,17 @@ plt.figure(figsize=(12,12)) plt.subplot(2,1,1) plt.semilogy() - plt.plot(my_analytic_cov.diagonal(), ".", label=" my cov %s %s" % (spec1, spec2)) - plt.plot(analytic_cov_ref.diagonal(), label="reference %s %s" % (spec1, spec2)) + plt.plot(my_analytic_cov.diagonal(), ".", label=f"my cov {spec1} {spec2}") + plt.plot(analytic_cov_ref.diagonal(), label="reference {spec1} {spec2}") plt.legend() plt.subplot(2,1,2) - plt.plot(my_analytic_cov.diagonal()/analytic_cov_ref.diagonal(), label=" my cov/cov ref") + plt.plot(my_analytic_cov.diagonal()/analytic_cov_ref.diagonal(), label="my cov/cov ref") plt.legend() - plt.savefig("%s/analytic_cov_diag_%s_%s.png" % (plot_dir, spec1, spec2), bbox_inches="tight") + plt.savefig(f"{plot_dir}/analytic_cov_diag_{spec1}_{spec2}.png", bbox_inches="tight") plt.clf() plt.close() print("") print("Summary of the tests") print("") -print("%d tests succesful for %d tests total" % (ntest_success, ntest)) +print(f"{ntest_success} tests succesful for {ntest} tests total")