def __init__(self,clusterCosmology, \ fwhms=[1.5],rms_noises =[1.], freqs = [150.],lmax=8000,lknee=0.,alpha=1., \ dell=1.,ksz_file='input/ksz_BBPS.txt',ksz_p_file='input/ksz_p_BBPS.txt', \ tsz_cib_file='input/sz_x_cib_template.dat',fg=True): self.cc = clusterCosmology if (len(freqs) > 1): fq_mat = np.matlib.repmat(freqs, len(freqs), 1) fq_mat_t = np.transpose(np.matlib.repmat(freqs, len(freqs), 1)) else: fq_mat = freqs fq_mat_t = freqs self.fgs = fgNoises( self.cc.c, ksz_file=ksz_file, ksz_p_file=ksz_p_file, tsz_cib_file=tsz_cib_file, tsz_battaglia_template_csv="data/sz_template_battaglia.csv") self.dell = dell self.evalells = np.arange(2, lmax, self.dell) self.N_ll_cmb = self.evalells * 0.0 self.W_ll_cmb = np.zeros([len(self.evalells), len(np.array(freqs))]) self.freq = freqs f_nu_cmb = f_nu_tsz * 0.0 + 1. for ii in range(len(self.evalells)): cmb_els = fq_mat * 0.0 + self.cc.cleefunc(self.evalells[ii]) ## MAKE POL NOISE inst_noise = (old_div( noise_func(self.evalells[ii], np.array(fwhms), np.array(rms_noises), lknee, alpha, dimensionless=False), self.cc.c['TCMBmuK']**2.)) nells = np.diag(inst_noise) totfg = (self.fgs.rad_pol_ps(self.evalells[ii],fq_mat,fq_mat_t) + \ self.fgs.gal_dust_pol(self.evalells[ii],fq_mat,fq_mat_t) + \ self.fgs.gal_sync_pol(self.evalells[ii],fq_mat,fq_mat_t)) N_ll_for_cmb = nells + totfg N_ll_for_cmb_inv = np.linalg.inv(N_ll_for_cmb) self.W_ll_cmb[ii,:] = 1./np.dot(np.transpose(f_nu_cmb),np.dot(N_ll_for_cmb_inv,f_nu_cmb)) \ * np.dot(np.transpose(f_nu_cmb),N_ll_for_cmb_inv) self.N_ll_cmb[ii] = np.dot( np.transpose(self.W_ll_cmb[ii, :]), np.dot(N_ll_for_cmb, self.W_ll_cmb[ii, :]))
def __init__(self,shape,wcs,theory,freqs,beams,noises,lknees,alphas,ellmins,ellmaxes): fgn = fg.fgNoises(cosmology.defaultConstants,ksz_file='/home/msyriac/repos/szar/input/ksz_BBPS.txt', ksz_p_file='/home/msyriac/repos/szar/input/ksz_p_BBPS.txt', tsz_cib_file='/home/msyriac/repos/szar/input/sz_x_cib_template.txt', ksz_battaglia_test_csv=None, tsz_battaglia_template_csv="/home/msyriac/repos/szar/input/sz_template_battaglia.csv", rs_template="/home/msyriac/repos/szar/input/fiducial_scalCls_lensed_5_5.txt", rsx_template="/home/msyriac/repos/szar/input/fiducial_scalCls_lensed_1_5.txt", components=['tsz','cibp','cibc','radps'],lmax=20000) self.modlmap = enmap.modlmap(shape,wcs) modlmap = self.modlmap self.fgn = fgn lmax = self.modlmap.max() ells = np.arange(0,lmax,1) ps_cmb = theory.lCl('TT',modlmap).reshape((1,1,shape[-2],shape[-1])) self.ps_cmb = ps_cmb ps_y = fgn.tsz_template(ells).reshape((1,1,ells.size))*self.fgn.c['A_tsz']*2.*np.pi*np.nan_to_num(1./ells/(ells+1.)) ps_cibp = (fgn.c['A_cibp'] * ((ells/fgn.c['ell0sec'])) ** 2.0 *2.*np.pi*np.nan_to_num(1./ells/(ells+1.))).reshape((1,1,ells.size)) ps_cibc = (fgn.c['A_cibc'] * ((ells/fgn.c['ell0sec'])) ** (2.-fgn.c['n_cib']) * 2.*np.pi*np.nan_to_num(1./ells/(ells+1.))).reshape((1,1,ells.size)) ps_radps = (fgn.c['A_ps'] * ((ells/fgn.c['ell0sec'])) ** 2 * 2.*np.pi*np.nan_to_num(1./ells/(ells+1.))).reshape((1,1,ells.size)) self.cgen = maps.MapGen(shape[-2:],wcs,ps_cmb) self.tgen = maps.MapGen(shape[-2:],wcs,ps_y) self.cibpgen = maps.MapGen(shape[-2:],wcs,ps_cibp) self.cibcgen = maps.MapGen(shape[-2:],wcs,ps_cibc) self.radpsgen = maps.MapGen(shape[-2:],wcs,ps_radps) self.shape = shape ; self.wcs = wcs self.freqs = freqs self.kbeams = [] self.ngens = [] self.n2ds = [] for ai,nu in enumerate(self.freqs): self.kbeams.append(maps.gauss_beam(fwhm=beams[ai],ell=self.modlmap)) n2d = cosmology.noise_func(self.modlmap,0,noises[ai],lknee=lknees[ai],alpha=alphas[ai],dimensionless=False,TCMB=2.7255e6) n2d[modlmap<ellmins[ai]] = 0 n2d[modlmap>ellmaxes[ai]] = 0 n2dmod = n2d.copy() n2dmod[modlmap>ellmaxes[ai]] = 1e90 n2dmod[modlmap<ellmins[ai]] = 1e90 self.n2ds.append(n2dmod.copy()) ps_noise = n2d.reshape((1,1,shape[-2],shape[-1])) self.ngens.append(maps.MapGen(shape[-2:],wcs,ps_noise)) self.ellmins = ellmins self.ellmaxes = ellmaxes
constDict = dictFromSection(Config, 'constants') clusterDict = dictFromSection(Config, 'cluster_params') fparams = {} # the for (key, val) in Config.items('params'): if ',' in val: param, step = val.split(',') fparams[key] = float(param) else: fparams[key] = float(val) clttfile = Config.get('general', 'clttfile') cc = ClusterCosmology(fparams, constDict, lmax=8000, pickling=True) #clTTFixFile=clttfile) fgs = fgNoises(cc.c, ksz_battaglia_test_csv="data/ksz_template_battaglia.csv", tsz_battaglia_template_csv="data/sz_template_battaglia.csv") cf = 1 constraint_tag = ['', '_constrained'] #experimentName = "CMB-Probe-50cm" experimentName = "CCATP-MSIP" #experimentName = "CCATP-SO-MSIP" beams = listFromConfig(Config, experimentName, 'beams') noises = listFromConfig(Config, experimentName, 'noises') freqs = listFromConfig(Config, experimentName, 'freqs') lmax = int(Config.getfloat(experimentName, 'lmax')) lknee = listFromConfig(Config, experimentName, 'lknee')[0] alpha = listFromConfig(Config, experimentName, 'alpha')[0] fsky = Config.getfloat(experimentName, 'fsky')
def __init__(self,clusterCosmology,clusterDict, \ fwhms=[1.5],rms_noises =[1.], freqs = [150.],lmax=8000,lknee=0.,alpha=1., \ dell=10,pmaxN=5,numps=1000,nMax=1, \ ymin=1.e-14,ymax=4.42e-9,dlnY = 0.1, qmin=5., \ ksz_file=root_dir+'input/ksz_BBPS.txt',ksz_p_file=root_dir+'input/ksz_p_BBPS.txt', \ tsz_cib_file=root_dir+'input/sz_x_cib_template.txt',fg=True,tsz_cib=False, tsz_battaglia_template_csv=root_dir+"input/sz_template_battaglia.csv",v3mode=-1,fsky=None): self.cc = clusterCosmology self.P0 = clusterDict['P0'] self.xc = clusterDict['xc'] self.al = clusterDict['al'] self.gm = clusterDict['gm'] self.bt = clusterDict['bt'] self.scaling = self.cc.paramDict self.qmin = qmin lnYmin = np.log(ymin) lnYmax = np.log(ymax) self.lnY = np.arange(lnYmin, lnYmax, dlnY) fgs = fgNoises(self.cc.c, ksz_file=ksz_file, ksz_p_file=ksz_p_file, tsz_cib_file=tsz_cib_file, tsz_battaglia_template_csv=tsz_battaglia_template_csv) self.dell = dell self.nlinv = 0. self.nlinv_cmb = 0. self.nlinv_nofg = 0. self.nlinv_cmb_nofg = 0. self.evalells = np.arange(2, lmax, self.dell) if v3mode > -1: print("V3 flag enabled.") import szar.V3_calc_public as v3 if v3mode <= 2: import szar.so_noise_lat_v3_1_CAND as v3_1 lat = v3_1.SOLatV3point1(v3mode, el=50.) vfreqs = lat.get_bands() # v3.Simons_Observatory_V3_LA_bands() print("Simons Obs") print("Replacing ", freqs, " with ", vfreqs) N_bands = len(vfreqs) freqs = vfreqs vbeams = lat.get_beams() #v3.Simons_Observatory_V3_LA_beams() print("Replacing ", fwhms, " with ", vbeams) fwhms = vbeams v3lmax = self.evalells.max() v3dell = np.diff(self.evalells)[0] print("Using ", fsky, " for fsky") v3ell, N_ell_T_LA_full, N_ell_P_LA = lat.get_noise_curves( fsky, v3lmax + v3dell, v3dell, full_covar=True, deconv_beam=True) N_ell_T_LA = np.diagonal(N_ell_T_LA_full).T Map_white_noise_levels = lat.get_white_noise(fsky)**.5 #v3ell, N_ell_T_LA, N_ell_P_LA, Map_white_noise_levels = v3.Simons_Observatory_V3_LA_noise(sensitivity_mode=v3mode,f_sky=fsky,ell_max=v3lmax+v3dell,delta_ell=v3dell) elif v3mode == 3: vfreqs = v3.AdvACT_bands() print("AdvACT") print("Replacing ", freqs, " with ", vfreqs) freqs = vfreqs vbeams = v3.AdvACT_beams() print("Replacing ", fwhms, " with ", vbeams) fwhms = vbeams v3lmax = self.evalells.max() v3dell = np.diff(self.evalells)[0] print("Using ", fsky, " for fsky") v3ell, N_ell_T_LA, N_ell_P_LA, Map_white_noise_levels = v3.AdvACT_noise( f_sky=fsky, ell_max=v3lmax + v3dell, delta_ell=v3dell) elif v3mode == 4: import szar.noise_model_190604d_public as s4 #mode = 2 #ncalc = s4.S4LatV1(mode, N_tels=2) #vfreqs = ncalc.get_bands() print("S4") v3lmax = self.evalells.max() v3dell = np.diff(self.evalells)[0] v3ell = np.arange(2, v3lmax + 1, v3dell) #print (v3ell, self.evalells) info, vfreqs, Nmatrix = s4.get_model('hires_deepwide', 'TT', v3ell, gal_cut=10, deconv_beam=True) print("Replacing ", freqs, " with ", vfreqs) print("Using ", fsky, " for fsky") freqs = vfreqs #vbeams = ncalc.get_beams() #print("Replacing ",fwhms, " with ", vbeams) fwhms = freqs * 1. #not used N_ell_T_LA_full = Nmatrix N_ell_T_LA = np.diagonal(N_ell_T_LA_full).T print(N_ell_T_LA.shape) elif v3mode == 5: import szar.lat_noise_190528_w350ds4 as ccatp tubes = (0, 0, 0, 2, 2, 1) lat = ccatp.CcatLatv2(v3mode, el=50., survey_years=4000 / 24. / 365.24, survey_efficiency=1.0, N_tubes=tubes) vfreqs = lat.get_bands() # v3.Simons_Observatory_V3_LA_bands() print("CCATP") print("Replacing ", freqs, " with ", vfreqs) N_bands = len(vfreqs) freqs = vfreqs vbeams = lat.get_beams() #v3.Simons_Observatory_V3_LA_beams() print("Replacing ", fwhms, " with ", vbeams) fwhms = vbeams v3lmax = self.evalells.max() v3dell = np.diff(self.evalells)[0] print("Using ", fsky, " for fsky") v3ell, N_ell_T_LA_full, N_ell_P_LA = lat.get_noise_curves( fsky, v3lmax + v3dell, v3dell, full_covar=True, deconv_beam=True) N_ell_T_LA = np.diagonal(N_ell_T_LA_full).T Map_white_noise_levels = lat.get_white_noise(fsky)**.5 if v3mode >= 7: usemode = v3mode - 6 print("V3mode ", usemode) vfreqs = v3.Simons_Observatory_V3_LA_bands() print("Simons Obs") print("Replacing ", freqs, " with ", vfreqs) freqs = vfreqs vbeams = v3.Simons_Observatory_V3_LA_beams() print("Replacing ", fwhms, " with ", vbeams) fwhms = vbeams v3lmax = self.evalells.max() v3dell = np.diff(self.evalells)[0] print("Using ", fsky, " for fsky") v3ell, N_ell_T_LA, N_ell_P_LA, Map_white_noise_levels = v3.Simons_Observatory_V3_LA_noise( sensitivity_mode=usemode, f_sky=fsky, ell_max=v3lmax + v3dell, delta_ell=v3dell) assert np.all(v3ell == self.evalells) # pl = io.Plotter(yscale='log',xlabel='l',ylabel='D_l') for ii, (freq, fwhm, noise) in enumerate(zip(freqs, fwhms, rms_noises)): freq_fac = (f_nu(self.cc.c, freq))**2 if v3mode > -1: inst_noise = N_ell_T_LA[ii] / self.cc.c['TCMBmuK']**2. else: inst_noise = (noise_func(self.evalells, fwhm, noise, lknee, alpha, dimensionless=False) / self.cc.c['TCMBmuK']**2.) # pl.add(self.evalells,inst_noise*self.evalells**2.,color="C"+str(ii)) # pl.add(self.evalells,N_ell_T_LA[ii]*self.evalells**2./ self.cc.c['TCMBmuK']**2.,color="C"+str(ii),ls="--") nells = self.cc.clttfunc(self.evalells) + inst_noise self.nlinv_nofg += old_div((freq_fac), nells) self.nlinv_cmb_nofg += (old_div(1., inst_noise)) totfg = (fgs.rad_ps(self.evalells,freq,freq) + fgs.cib_p(self.evalells,freq,freq) + \ fgs.cib_c(self.evalells,freq,freq) + fgs.ksz_temp(self.evalells)) \ / self.cc.c['TCMBmuK']**2. / ((self.evalells+1.)*self.evalells) * 2.* np.pi nells += totfg if (tsz_cib): tszcib = fgs.tSZ_CIB(self.evalells,freq,freq) \ / self.cc.c['TCMBmuK']**2. / ((self.evalells+1.)*self.evalells) * 2.* np.pi nells += tszcib self.nlinv += old_div((freq_fac), nells) self.nlinv_cmb += (old_div(1., (inst_noise + totfg))) # pl.add(self.evalells,self.cc.clttfunc(self.evalells)*self.evalells**2.,color='k',lw=3) # pl.done(io.dout_dir+"v3comp.png") self.nl_old = (1. / self.nlinv) self.nl_cmb = (1. / self.nlinv_cmb) self.nl_nofg = (1. / self.nlinv_nofg) self.nl_cmb_nofg = (1. / self.nlinv_cmb_nofg) f_nu_tsz = f_nu(self.cc.c, np.array(freqs)) if (len(freqs) > 1): fq_mat = repmat(freqs, len(freqs), 1) fq_mat_t = np.transpose(repmat(freqs, len(freqs), 1)) else: fq_mat = np.array(freqs) fq_mat_t = np.array(freqs) self.nl = self.evalells * 0.0 for ii in range(len(self.evalells)): cmb_els = fq_mat * 0.0 + self.cc.clttfunc(self.evalells[ii]) if v3mode < 0: inst_noise = (old_div( noise_func(self.evalells[ii], np.array(fwhms), np.array(rms_noises), lknee, alpha, dimensionless=False), self.cc.c['TCMBmuK']**2.)) nells = np.diag(inst_noise) elif v3mode <= 2: nells = N_ell_T_LA_full[:, :, ii] / self.cc.c['TCMBmuK']**2. #corr_pairs = [(0,1),(2,3),(4,5)] #N_ell_LA_T = N_ell_LA_T_full[range(N_bands),range(N_bands)] #N_ell_LA_Tx = [N_ell_LA_T_full[i,j] for i,j in corr_pairs] #N_ell_LA_P = N_ell_LA_P_full[range(N_bands),range(N_bands)] #N_ell_LA_Px = [N_ell_LA_P_full[i,j] for i,j in corr_pairs] #nells = N_ell_LA_Tx #ndiags = [] #for ff in range(len(freqs)): # inst_noise = old_div(N_ell_T_LA[ff,ii], self.cc.c['TCMBmuK']**2.) # ndiags.append(inst_noise) #nells = np.diag(np.array(ndiags)) ## Adding in atmo. freq-freq correlations #nells[0,1] = old_div(N_ell_T_LA[6,ii], self.cc.c['TCMBmuK']**2.) #nells[1,0] = old_div(N_ell_T_LA[6,ii], self.cc.c['TCMBmuK']**2.) #nells[2,3] = old_div(N_ell_T_LA[7,ii], self.cc.c['TCMBmuK']**2.) #nells[3,2] = old_div(N_ell_T_LA[7,ii], self.cc.c['TCMBmuK']**2.) #nells[4,5] = old_div(N_ell_T_LA[8,ii], self.cc.c['TCMBmuK']**2.) #nells[5,4] = old_div(N_ell_T_LA[8,ii], self.cc.c['TCMBmuK']**2.) elif v3mode == 3: ndiags = [] for ff in range(len(freqs)): inst_noise = old_div(N_ell_T_LA[ff, ii], self.cc.c['TCMBmuK']**2.) ndiags.append(inst_noise) nells = np.diag(np.array(ndiags)) # Adding in atmo. freq-freq correlations nells[0, 1] = old_div(N_ell_T_LA[5, ii], self.cc.c['TCMBmuK']**2.) nells[1, 0] = old_div(N_ell_T_LA[5, ii], self.cc.c['TCMBmuK']**2.) nells[2, 3] = old_div(N_ell_T_LA[6, ii], self.cc.c['TCMBmuK']**2.) nells[3, 2] = old_div(N_ell_T_LA[6, ii], self.cc.c['TCMBmuK']**2.) nells[3, 4] = old_div(N_ell_T_LA[7, ii], self.cc.c['TCMBmuK']**2.) nells[4, 3] = old_div(N_ell_T_LA[7, ii], self.cc.c['TCMBmuK']**2.) elif v3mode == 4: nells = N_ell_T_LA_full[:, :, ii] / self.cc.c['TCMBmuK']**2. elif v3mode == 5: nells = N_ell_T_LA_full[:, :, ii] / self.cc.c['TCMBmuK']**2. elif v3mode >= 7: ndiags = [] for ff in range(len(freqs)): inst_noise = old_div(N_ell_T_LA[ff, ii], self.cc.c['TCMBmuK']**2.) ndiags.append(inst_noise) nells = np.diag(np.array(ndiags)) # Adding in atmo. freq-freq correlations nells[0, 1] = old_div(N_ell_T_LA[6, ii], self.cc.c['TCMBmuK']**2.) nells[1, 0] = old_div(N_ell_T_LA[6, ii], self.cc.c['TCMBmuK']**2.) nells[2, 3] = old_div(N_ell_T_LA[7, ii], self.cc.c['TCMBmuK']**2.) nells[3, 2] = old_div(N_ell_T_LA[7, ii], self.cc.c['TCMBmuK']**2.) nells[4, 5] = old_div(N_ell_T_LA[8, ii], self.cc.c['TCMBmuK']**2.) nells[5, 4] = old_div(N_ell_T_LA[8, ii], self.cc.c['TCMBmuK']**2.) totfg = (fgs.rad_ps(self.evalells[ii],fq_mat,fq_mat_t) + fgs.cib_p(self.evalells[ii],fq_mat,fq_mat_t) + fgs.cib_c(self.evalells[ii],fq_mat,fq_mat_t)) \ / self.cc.c['TCMBmuK']**2. / ((self.evalells[ii]+1.)*self.evalells[ii]) * 2.* np.pi if (tsz_cib): totfg += fgs.tSZ_CIB(self.evalells[ii], fq_mat, fq_mat_t) / self.cc.c['TCMBmuK']**2. / ( (self.evalells[ii] + 1.) * self.evalells[ii]) * 2. * np.pi totfg += fgs.tSZ( self.evalells[ii], fq_mat, fq_mat_t ) / self.cc.c['TCMBmuK']**2. / ( (self.evalells[ii] + 1.) * self.evalells[ii] ) * 2. * np.pi / 2. # factor of two accounts for resolved halos ksz = fq_mat * 0.0 + fgs.ksz_temp( self.evalells[ii]) / self.cc.c['TCMBmuK']**2. / ( (self.evalells[ii] + 1.) * self.evalells[ii]) * 2. * np.pi nells += totfg + cmb_els + ksz self.nl[ii] = old_div( 1., (np.dot(np.transpose(f_nu_tsz), np.dot(np.linalg.inv(nells), f_nu_tsz)))) # from orphics.io import Plotter # pl = Plotter(yscale='log',xlabel='l',ylabel='D_l') # pl.add(self.evalells,self.nl*self.evalells**2.) # ells = np.arange(2,3000,1) # pl.add(ells,self.cc.clttfunc(ells)*ells**2.) # pl.done("nltt.png") # sys.exit() self.fg = fg c = self.xc alpha = self.al beta = self.bt gamma = self.gm p = lambda x: old_div(1., (((c * x)**gamma) * ((1. + ( (c * x)**alpha))**(old_div((beta - gamma), alpha))))) pmaxN = pmaxN numps = numps pzrange = np.linspace(-pmaxN, pmaxN, numps) self.g = lambda x: np.trapz(p(np.sqrt(pzrange**2. + x**2.)), pzrange, np.diff(pzrange)) self.gxrange = np.linspace(0., nMax, numps) self.gint = np.array([self.g(x) for x in self.gxrange]) self.gnorm_pre = np.trapz(self.gxrange * self.gint, self.gxrange)