def fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, deltal=1, cambparams=CambDefaultParams, maxellcamb=MAXELL, der=False, basic_spectra=False, errors=False, noT=False, noE=False, noTE=False, noB=False, minell=False, maxell=False, varnames=False, plotmat=False): nbins = maxellcamb/deltal lmin = 1+(deltal)*np.arange(nbins) lmax = lmin+deltal-1 lcenter = (lmax+lmin)/2 ##### Generate basic spectra if basic_spectra is False: print("Calculate Basic Spectra") binned, spec, basic_spectra = get_binned_spectra(pars, lcenter, lmin, lmax) ##### Generate derivatives if der is False: print("Calculate Derivatives") args = [lcenter, lmin, lmax, fsky, mukarcminT, fwhmdeg, deltal, CambDefaultParams, False, MAXELL] der = FisherNew.give_derivatives(pars, args, return_bins_and_errors) ##### Calculate Error bars if needed args = [lcenter, lmin, lmax, fsky, mukarcminT, fwhmdeg, deltal, CambDefaultParams, basic_spectra, MAXELL] data, theerrors = return_bins_and_errors(pars, args) nbins = len(data)/4 allell = np.ravel(np.array([lcenter, lcenter, lcenter, lcenter])) allellmin = np.ravel(np.array([lmin, lmin, lmin, lmin])) allellmax = np.ravel(np.array([lmax, lmax, lmax, lmax])) ##### Update errors if errors is not False: theerrors = errors if noT is True: theerrors[0*nbins:1*nbins] = 1e30 if noE is True: theerrors[1*nbins:2*nbins] = 1e30 if noTE is True: theerrors[2*nbins:3*nbins] = 1e30 if noB is True: theerrors[3*nbins:4*nbins] = 1e30 if minell is not False: mask = allell < minell theerrors[mask] = 1e30 if maxell is not False: mask = allell > maxell theerrors[mask] = 1e30 ### Remove low ell not allowed by fsky fskyminell = np.int(180/np.degrees((np.sqrt(2*fsky)))) mask = allellmin < fskyminell theerrors[mask] = 1e30 ##### Calculate Fisher Matrix fm = FisherNew.fishermatrix(pars, args, der, theerrors, return_bins_and_errors) if plotmat: clf() a0,leg0 = FisherNew.plot_fisher(fm, pars,'b', varnames=varnames, onesigma=True) subplot(2,2,2) axis('off') legend([a0],[leg0],loc='upper right',fontsize=10) return fm, basic_spectra, der, lcenter, data, theerrors
fwhmdeg = 4./60 fm_hrs, dum, dum, lcenter, data, error = CMBspectra.fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, basic_spectra=basic_spec, der=der, deltal=25, varnames=varnames, noT=noT, noE=noE, noTE=noTE) errhrs = np.reshape(error,(4,nbins)) ## CORE++ ? fsky = 0.75 mukarcminT = 0.1 pars['lensing_residual'] = 0.1 fwhmdeg = 3./60 fm_hrsplus, dum, dum, lcenter, data, error = CMBspectra.fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, basic_spectra=basic_spec, der=der, deltal=25, varnames=varnames, noT=noT, noE=noE, noTE=noTE) errhrsplus = np.reshape(error,(4,nbins)) #### get the correct matrix for r and ns ## fix nt sub_fm_stage4 = FisherNew.submatrix(fm_stage4,[0,1,3]) sub_fm_lrs = FisherNew.submatrix(fm_lrs,[0,1,3]) sub_fm_lrs_stage4 = FisherNew.submatrix(fm_stage4+fm_lrs,[0,1,3]) sub_fm_hrs = FisherNew.submatrix(fm_hrs,[0,1,3]) sub_fm_hrsplus = FisherNew.submatrix(fm_hrsplus,[0,1,3]) ## Marginalize over al and reverse order for having ns, r cov_nsr_stage4 = FisherNew.submatrix(np.linalg.inv(sub_fm_stage4), [0,2]) cov_nsr_lrs = FisherNew.submatrix(np.linalg.inv(sub_fm_lrs), [0,2]) cov_nsr_lrs_stage4 = FisherNew.submatrix(np.linalg.inv(sub_fm_lrs_stage4), [0,2]) cov_nsr_hrs = FisherNew.submatrix(np.linalg.inv(sub_fm_hrs), [0,2]) cov_nsr_hrsplus = FisherNew.submatrix(np.linalg.inv(sub_fm_hrsplus), [0,2]) fm_nsr_lrs.append(np.linalg.inv(cov_nsr_lrs)) fm_nsr_stage4.append(np.linalg.inv(cov_nsr_stage4)) fm_nsr_lrs_stage4.append(np.linalg.inv(cov_nsr_lrs_stage4))
mukarcminT = 4.*(fsky/0.01)**0.5 pars['lensing_residual'] = 1 fwhmdeg = 0.52 fmqubicnew, dum, dum, lcenter, data, error = CMBspectra.fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, basic_spectra=basic_spec, der=der, noT=True, noE=True, noTE=True, deltal=25, varnames=varnames, maxell = 1./np.radians(fwhmdeg / 2.35)) # QUBIC reoptimized fsky = 0.04 mukarcminT = 4.*(fsky/0.01)**0.5/sqrt(6) pars['lensing_residual'] = 1 fwhmdeg = 0.52 fmqubicnew6, dum, dum, lcenter, data, error = CMBspectra.fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, basic_spectra=basic_spec, der=der, noT=True, noE=True, noTE=True, deltal=25, varnames=varnames, maxell = 1./np.radians(fwhmdeg / 2.35)) clf() a1,leg1 = FisherNew.plot_fisher(fmqubic, pars,'b', fixed=['tensor_index','scalar_index'], varnames=varnames, onesigma=True) a2,leg2 = FisherNew.plot_fisher(fmqubicnew, pars,'g', fixed=['tensor_index','scalar_index'], varnames=varnames, onesigma=True) a3,leg3 = FisherNew.plot_fisher(fmqubicnew6, pars,'r', fixed=['tensor_index','scalar_index'], varnames=varnames, onesigma=True) a0,leg0 = FisherNew.plot_fisher(fmbicep2, pars,'k', fixed=['tensor_index','scalar_index'], varnames=varnames, onesigma=True) subplot(4,4,4) axis('off') legend([a0, a1, a2, a3],[leg0, leg1, leg2, leg3]) ################# satellites pars = {'tensor_ratio':0.01, 'tensor_index':-0.025, 'lensing_residual':1, 'scalar_index':0.9624} varnames = {'tensor_ratio':'$r$', 'tensor_index':'$n_T$', 'lensing_residual':'$a_L$', 'scalar_index':'$n_S$'} fm, basic_spec, der, lcenter, data, error = CMBspectra.fisher_analysis(pars, fsky, mukarcminT, fwhmdeg, deltal=25) nbins=len(data)/4 noT=False noE=False