Commit 1e7c8b77 authored by Matthieu Tristram's avatar Matthieu Tristram
Browse files

Merge branch 'master' of https://gitlab.in2p3.fr/cosmotools/CAMEL

parents 06918c8c 0e6248b6
/cmt/Makefile
/cmt/cleanup.csh
/cmt/cleanup.sh
/cmt/requirements
/cmt/setup.csh
/cmt/setup.sh
/lik/camel_data
/lik/planck_data
/src/class_extra/spectra_extra.ph
/src/ini.pp
/src/spectra_extra.pp
/Linux-x86_64/
*.egg-info/
*__pycache__/
MultipolesRange = camel_data/Hillipop/Binning/binning.fits
Beams = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/bell/beam
XSpectra = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
XSpectraErrors = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
CovMatrix = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/pclcvm/invfll_DX11dr3HM_SG_pack
SZ = camel_data/Hillipop/Foregrounds/ClSZ_poiss_corr_MD2_cppp_bestCl_NILC_extra12_cibps_lmax10000.fits
kSZ = camel_data/Hillipop/Foregrounds/ksz_shaw_bat_PWAS_MD_tau062.fits
CIB = camel_data/Hillipop/Foregrounds/CIB_v3
SZxCIB = camel_data/Hillipop/Foregrounds/SZxCIB
Dust = camel_data/Hillipop/Foregrounds/Dust_LALmaskSuperExt-ConservativeCO_DX11d
TT = 0
EE = 1
BB = 0
TE = 0
ET = 0
map = 6
freq0 = 100
freq1 = 100
freq2 = 143
freq3 = 143
freq4 = 217
freq5 = 217
FileOut =
MultipolesRange = camel_data/Hillipop/Binning/binning.fits
Beams = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/bell/beam
XSpectra = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
XSpectraErrors = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
CovMatrix = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/pclcvm/invfll_DX11dr3HM_SG_pack
SZ = camel_data/Hillipop/Foregrounds/ClSZ_poiss_corr_MD2_cppp_bestCl_NILC_extra12_cibps_lmax10000.fits
kSZ = camel_data/Hillipop/Foregrounds/ksz_shaw_bat_PWAS_MD_tau062.fits
CIB = camel_data/Hillipop/Foregrounds/CIB_v3
SZxCIB = camel_data/Hillipop/Foregrounds/SZxCIB
Dust = camel_data/Hillipop/Foregrounds/Dust_LALmaskSuperExt-ConservativeCO_DX11d
TT = 0
EE = 1
BB = 0
TE = 1
ET = 1
map = 6
freq0 = 100
freq1 = 100
freq2 = 143
freq3 = 143
freq4 = 217
freq5 = 217
FileOut =
MultipolesRange = camel_data/Hillipop/Binning/binning.fits
Beams = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/bell/beam
XSpectra = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
XSpectraErrors = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/spectra/cross_DX11d_HM_SuperExtCO
CovMatrix = camel_data/Hillipop/Data/DX11d_r3_HM/LALmaskSuperExt-ConservativeCO/pclcvm/invfll_DX11dr3HM_SG_pack
SZ = camel_data/Hillipop/Foregrounds/ClSZ_poiss_corr_MD2_cppp_bestCl_NILC_extra12_cibps_lmax10000.fits
kSZ = camel_data/Hillipop/Foregrounds/ksz_shaw_bat_PWAS_MD_tau062.fits
CIB = camel_data/Hillipop/Foregrounds/CIB_v3
SZxCIB = camel_data/Hillipop/Foregrounds/SZxCIB
Dust = camel_data/Hillipop/Foregrounds/Dust_LALmaskSuperExt-ConservativeCO_DX11d
TT = 1
EE = 1
BB = 0
TE = 0
ET = 0
map = 6
freq0 = 100
freq1 = 100
freq2 = 143
freq3 = 143
freq4 = 217
freq5 = 217
FileOut =
...@@ -46,7 +46,7 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None): ...@@ -46,7 +46,7 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None):
line_size=np.mean([len(f.readline()) for i in range(100)]) line_size=np.mean([len(f.readline()) for i in range(100)])
# print( line_size) # print( line_size)
nsamp = os.stat(name).st_size / line_size nsamp = os.stat(name).st_size / line_size
# print(nsamp) # print(nsamp)
if 0 < burnin < 1: if 0 < burnin < 1:
...@@ -55,15 +55,15 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None): ...@@ -55,15 +55,15 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None):
ist = int(-burnin) ist = int(-burnin)
else: else:
ist = int(nsamp-burnin) ist = int(nsamp-burnin)
if int(line_size*ist*1.2) < os.path.getsize(name): if int(line_size*ist*1.2) < os.path.getsize(name):
f.seek(-int(line_size*ist*1.2),os.SEEK_END) f.seek(-int(line_size*ist*1.2),os.SEEK_END)
lines_found=f.readlines() lines_found=f.readlines()
f.close() f.close()
# data=[np.array(x.split(),float) for x in lines_found[-ist:]] # data=[np.array(x.split(),float) for x in lines_found[-ist:]]
data=[[float(c) for c in x.split()] for x in lines_found[-ist:]] data=[[float(c) for c in x.split()] for x in lines_found[-ist:]]
if len(chain)==0: if len(chain)==0:
chain = data chain = data
else: else:
...@@ -72,8 +72,8 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None): ...@@ -72,8 +72,8 @@ def mergeMC( filename, burnin=0.9, num=None, ext="txt", par=None, nelts=None):
if nelts: if nelts:
if nelts < len(chain): if nelts < len(chain):
chain = chain[np.array(np.random.random(nelts)*len(chain),int),:] chain = chain[np.array(np.random.random(nelts)*len(chain),int),:]
dchain = dict( zip(par,np.transpose(chain))) dchain = dict( list(zip(par,np.transpose(chain))))
return(dchain) return(dchain)
...@@ -89,10 +89,10 @@ def MCparnames( filename, num=1, ext="txt"): ...@@ -89,10 +89,10 @@ def MCparnames( filename, num=1, ext="txt"):
def Parnames( parfile, par_type=None): def Parnames( parfile, par_type=None):
param_list = [] param_list = []
if not os.path.isfile(parfile): if not os.path.isfile(parfile):
raise ValueError( "Filename do not exists: %s" % parfile) raise ValueError( "Filename do not exists: %s" % parfile)
sf = open(parfile) sf = open(parfile)
par_type=[par_type] if par_type else ["par","fix"] par_type=[par_type] if par_type else ["par","fix"]
...@@ -123,8 +123,8 @@ def scan(filename): ...@@ -123,8 +123,8 @@ def scan(filename):
while not l[index].startswith("SCANNING PAR"): while not l[index].startswith("SCANNING PAR"):
index = index+1 index = index+1
print(l[index].replace("\n","")) print((l[index].replace("\n","")))
while not l[index].startswith("it "): while not l[index].startswith("it "):
index = index+1 index = index+1
...@@ -141,38 +141,38 @@ def scan(filename): ...@@ -141,38 +141,38 @@ def scan(filename):
#expand given mat with the given parameters on the diag #expand given mat with the given parameters on the diag
def expand_cov( mat, par, newpar, newvar): def expand_cov( mat, par, newpar, newvar):
match = [newpar.index(i) for i in newpar if i in par] match = [newpar.index(i) for i in newpar if i in par]
notmatch = [newpar.index(i) for i in newpar if i not in par] notmatch = [newpar.index(i) for i in newpar if i not in par]
sz = len(newpar) sz = len(newpar)
newmat = np.zeros( (sz, sz)) newmat = np.zeros( (sz, sz))
for i in match: for i in match:
for j in match: for j in match:
newmat[i,j] = mat[par.index(newpar[i]),par.index(newpar[j])] newmat[i,j] = mat[par.index(newpar[i]),par.index(newpar[j])]
for i in notmatch: for i in notmatch:
newmat[i,i] = newvar[i] newmat[i,i] = newvar[i]
return( newmat) return( newmat)
def extract_chains( chainame, nchain): def extract_chains( chainame, nchain):
chain = [] chain = []
for c in range(0,nchain): for c in range(0,nchain):
print( "%s%d.txt" % (chainame,c+1)) print(( "%s%d.txt" % (chainame,c+1)))
data = [] data = []
with open("%s%d.txt" % (chainame,c+1)) as f: with open("%s%d.txt" % (chainame,c+1)) as f:
f.readline() f.readline()
for line in f: for line in f:
data.append( [float(a) for a in line.split()]) data.append( [float(a) for a in line.split()])
chain.append( np.array(np.transpose(data))) chain.append( np.array(np.transpose(data)))
return(chain) return(chain)
...@@ -197,12 +197,12 @@ def sig2ci( val, sig): ...@@ -197,12 +197,12 @@ def sig2ci( val, sig):
def cov2cor( mat): def cov2cor( mat):
cor = mat.copy() cor = mat.copy()
for i in range( len(mat)): for i in range( len(mat)):
for j in range( len(mat)): for j in range( len(mat)):
cor[i,j] = mat[i,j]/np.sqrt(mat[i,i]*mat[j,j]) cor[i,j] = mat[i,j]/np.sqrt(mat[i,i]*mat[j,j])
return(cor) return(cor)
...@@ -213,19 +213,19 @@ def cov2cor( mat): ...@@ -213,19 +213,19 @@ def cov2cor( mat):
def GelmanRubin( chains, gap=10000, length_min=1000, length_max=None, new=False): def GelmanRubin( chains, gap=10000, length_min=1000, length_max=None, new=False):
#plot GelmanRubin test skipping first parameter=chi2 #plot GelmanRubin test skipping first parameter=chi2
nchain = len(chains) nchain = len(chains)
nsamples = min( [len(c[0]) for c in chains]) nsamples = min( [len(c[0]) for c in chains])
if length_max==None: if length_max==None:
length_max = nsamples length_max = nsamples
if length_max > nsamples: if length_max > nsamples:
print( "Not enough samples...") print( "Not enough samples...")
exit() exit()
it = range(length_min,length_max,gap)[1:-1] it = list(range(length_min,length_max,gap))[1:-1]
R = [] R = []
for isamp in it: for isamp in it:
print( "%d%%" % int(it.index(isamp)*100./len(it))) print(( "%d%%" % int(it.index(isamp)*100./len(it))))
if new: if new:
#Gelman-Rubin stat on the last "gap" samples for each iteration #Gelman-Rubin stat on the last "gap" samples for each iteration
n = gap n = gap
...@@ -238,21 +238,21 @@ def GelmanRubin( chains, gap=10000, length_min=1000, length_max=None, new=False) ...@@ -238,21 +238,21 @@ def GelmanRubin( chains, gap=10000, length_min=1000, length_max=None, new=False)
#within Chain #within Chain
mchain = np.mean( tmp,2) mchain = np.mean( tmp,2)
schain = np.var( tmp,2, ddof=1) schain = np.var( tmp,2, ddof=1)
#between chains #between chains
W = np.mean( schain,0) W = np.mean( schain,0)
B = np.var( mchain,0, ddof=1)*n B = np.var( mchain,0, ddof=1)*n
#sqrt ? #sqrt ?
R.append( ( (n-1.)/n*W + B/n )/W ) R.append( ( (n-1.)/n*W + B/n )/W )
return(it,np.array(R)) return(it,np.array(R))
def Geweke( chains, gap=10000, length_max=None): def Geweke( chains, gap=10000, length_max=None):
length_min = 1000 length_min = 1000
nchain = len(chains) nchain = len(chains)
nsamples = min( [len(c[0]) for c in chains]) nsamples = min( [len(c[0]) for c in chains])
if length_max==None: if length_max==None:
length_max = nsamples length_max = nsamples
...@@ -260,22 +260,22 @@ def Geweke( chains, gap=10000, length_max=None): ...@@ -260,22 +260,22 @@ def Geweke( chains, gap=10000, length_max=None):
if length_max > nsamples: if length_max > nsamples:
print( "Not enough samples...") print( "Not enough samples...")
exit() exit()
it = range(length_min,length_max,gap)[1:] it = list(range(length_min,length_max,gap))[1:]
T = [] T = []
for isamp in it: for isamp in it:
print( "%d%%" % int(it.index(isamp)*100./len(it))) print(( "%d%%" % int(it.index(isamp)*100./len(it))))
n = length_max-isamp n = length_max-isamp
tmp1 = [data[:,isamp:isamp+n*0.1] for data in chains] tmp1 = [data[:,isamp:isamp+n*0.1] for data in chains]
tmp2 = [data[:,isamp+n*0.5:length_max] for data in chains] tmp2 = [data[:,isamp+n*0.5:length_max] for data in chains]
#Tscore #Tscore
Z1 = np.mean( tmp1,2) Z1 = np.mean( tmp1,2)
Z2 = np.mean( tmp2,2) Z2 = np.mean( tmp2,2)
s = np.sqrt( np.var(tmp1,2)/(n*0.1) + np.var(tmp2,2)/(n*0.5) ) s = np.sqrt( np.var(tmp1,2)/(n*0.1) + np.var(tmp2,2)/(n*0.5) )
T.append( (Z1-Z2)/s) T.append( (Z1-Z2)/s)
return(it,T) return(it,T)
######################################################################## ########################################################################
...@@ -401,7 +401,7 @@ to_cosmomcName = { ...@@ -401,7 +401,7 @@ to_cosmomcName = {
'Aps143x217' : 'Aps143x217', 'Aps143x217' : 'Aps143x217',
} }
from_cosmomcName = dict(zip(to_cosmomcName.values(),to_cosmomcName.keys())) from_cosmomcName = dict(list(zip(list(to_cosmomcName.values()),list(to_cosmomcName.keys()))))
...@@ -426,7 +426,7 @@ def posterior1d( chains, params, nbin=50, smooth=1, ...@@ -426,7 +426,7 @@ def posterior1d( chains, params, nbin=50, smooth=1,
if np.size(lw) == 1: if np.size(lw) == 1:
lw = [lw]*nchain lw = [lw]*nchain
elif np.size(lw) < nchain: elif np.size(lw) < nchain:
lw = [1]*nchain lw = [1]*nchain
if np.prod(subplot) < npar: if np.prod(subplot) < npar:
subplot[1] = np.ceil(np.double(npar)/subplot[0]) subplot[1] = np.ceil(np.double(npar)/subplot[0])
...@@ -441,16 +441,16 @@ def posterior1d( chains, params, nbin=50, smooth=1, ...@@ -441,16 +441,16 @@ def posterior1d( chains, params, nbin=50, smooth=1,
for c in range(nchain): for c in range(nchain):
chain = chains[c] chain = chains[c]
if chain.has_key(par): if par in chain:
hist1d( chain[par], smooth=smooth, color=colors[c], linestyle=linestyles[c], lw=lw[c], bins=nbin) hist1d( chain[par], smooth=smooth, color=colors[c], linestyle=linestyles[c], lw=lw[c], bins=nbin)
ax.tick_params(axis='both', which='major', labelsize=16) ax.tick_params(axis='both', which='major', labelsize=16)
ax.locator_params(tight=True, nbins=6) ax.locator_params(tight=True, nbins=6)
plt.xlabel( parname.get(par,par)) plt.xlabel( parname.get(par,par))
if extent: if extent:
ax.set_xlim( extent[params.index(par)]) ax.set_xlim( extent[params.index(par)])
#legend #legend
if names != []: if names != []:
# if len(params) >= 2: # if len(params) >= 2:
...@@ -476,7 +476,7 @@ def posterior2d( chains, par1, par2, *args, **kwargs): ...@@ -476,7 +476,7 @@ def posterior2d( chains, par1, par2, *args, **kwargs):
x = chain[par1] x = chain[par1]
y = chain[par2] y = chain[par2]
# ax = kwargs.pop("ax", plt.gca()) # ax = kwargs.pop("ax", plt.gca())
extent = kwargs.pop("extent", [[x.min(), x.max()], [y.min(), y.max()]]) extent = kwargs.pop("extent", [[x.min(), x.max()], [y.min(), y.max()]])
bins = kwargs.pop("bins", 50) bins = kwargs.pop("bins", 50)
...@@ -485,12 +485,12 @@ def posterior2d( chains, par1, par2, *args, **kwargs): ...@@ -485,12 +485,12 @@ def posterior2d( chains, par1, par2, *args, **kwargs):
linewidths = kwargs.pop("linewidths", None) linewidths = kwargs.pop("linewidths", None)
fill = kwargs.get("fill", True) fill = kwargs.get("fill", True)
datapoints = kwargs.get("datapoints", False) datapoints = kwargs.get("datapoints", False)
contours = kwargs.get("contours", False) contours = kwargs.get("contours", False)
levels = kwargs.get("levels", [0.68,0.95]) levels = kwargs.get("levels", [0.68,0.95])
cmap = kwargs.get("cmap", None) cmap = kwargs.get("cmap", None)
# cmap = cm.get_cmap(kwargs.get("cmap", None)) # cmap = cm.get_cmap(kwargs.get("cmap", None))
X = np.linspace(extent[0][0], extent[0][1], bins + 1) X = np.linspace(extent[0][0], extent[0][1], bins + 1)
Y = np.linspace(extent[1][0], extent[1][1], bins + 1) Y = np.linspace(extent[1][0], extent[1][1], bins + 1)
try: try:
...@@ -507,22 +507,22 @@ def posterior2d( chains, par1, par2, *args, **kwargs): ...@@ -507,22 +507,22 @@ def posterior2d( chains, par1, par2, *args, **kwargs):
gkde = scipy.stats.gaussian_kde([x, y]) gkde = scipy.stats.gaussian_kde([x, y])
dx = (extent[0][1]-extent[0][0])/(bins+1.) dx = (extent[0][1]-extent[0][0])/(bins+1.)
dy = (extent[1][1]-extent[1][0])/(bins+1.) dy = (extent[1][1]-extent[1][0])/(bins+1.)
x2,y2 = np.mgrid[extent[0][0]:extent[0][1]:dx, extent[1][0]:extent[1][1]:dy] x2,y2 = np.mgrid[extent[0][0]:extent[0][1]:dx, extent[1][0]:extent[1][1]:dy]
z = np.array(gkde.evaluate([x2.flatten(),y2.flatten()])).reshape(x2.shape) z = np.array(gkde.evaluate([x2.flatten(),y2.flatten()])).reshape(x2.shape)
W = np.append(ctr_level( z, levels),z.max()) W = np.append(ctr_level( z, levels),z.max())
if fill: if fill:
plt.contourf(x2, y2, z, W, alpha=alpha, cmap=cm.get_cmap(cmap), antialiased=True, colors=colors) plt.contourf(x2, y2, z, W, alpha=alpha, cmap=cm.get_cmap(cmap), antialiased=True, colors=colors)
if contours: if contours:
plt.contour(x2, y2, z, W,linewidths=linewidths, colors=colors, antialiased=False) plt.contour(x2, y2, z, W,linewidths=linewidths, colors=colors, antialiased=False)
plt.xlim(extent[0]) plt.xlim(extent[0])
plt.ylim(extent[1]) plt.ylim(extent[1])
plt.xlabel(parname.get(par1,par1)) plt.xlabel(parname.get(par1,par1))
plt.ylabel(parname.get(par2,par2)) plt.ylabel(parname.get(par2,par2))
...@@ -538,12 +538,12 @@ def hist2d( chain, par1, par2, *args, **kwargs): ...@@ -538,12 +538,12 @@ def hist2d( chain, par1, par2, *args, **kwargs):
x = chain[par1] x = chain[par1]
y = chain[par2] y = chain[par2]
extent = kwargs.pop("extent", [[x.min(), x.max()], [y.min(), y.max()]]) extent = kwargs.pop("extent", [[x.min(), x.max()], [y.min(), y.max()]])
bins = kwargs.pop("bins", 50) bins = kwargs.pop("bins", 50)
nsmooth = kwargs.pop("nsmooth", 0.) nsmooth = kwargs.pop("nsmooth", 0.)
cmap = kwargs.get("cmap", None) cmap = kwargs.get("cmap", None)
X = np.linspace(extent[0][0], extent[0][1], bins + 1) X = np.linspace(extent[0][0], extent[0][1], bins + 1)
Y = np.linspace(extent[1][0], extent[1][1], bins + 1) Y = np.linspace(extent[1][0], extent[1][1], bins + 1)
try: try:
...@@ -556,22 +556,22 @@ def hist2d( chain, par1, par2, *args, **kwargs): ...@@ -556,22 +556,22 @@ def hist2d( chain, par1, par2, *args, **kwargs):
if nsmooth != 0.: if nsmooth != 0.:
H = nd.gaussian_filter( H, nsmooth) H = nd.gaussian_filter( H, nsmooth)
npts = 5. npts = 5.
# plt.imshow( H.T, origin='bottom', **kwargs) # plt.imshow( H.T, origin='bottom', **kwargs)
# plt.xticks(np.arange(npts+1)/npts*bins,["%4.2f" % i for i in np.linspace(extent[0][0],extent[0][1],npts+1)]) # plt.xticks(np.arange(npts+1)/npts*bins,["%4.2f" % i for i in np.linspace(extent[0][0],extent[0][1],npts+1)])
# plt.yticks(np.arange(npts+1)/npts*bins,["%4.2f" % i for i in np.linspace(extent[1][0],extent[1][1],npts+1)]) # plt.yticks(np.arange(npts+1)/npts*bins,["%4.2f" % i for i in np.linspace(extent[1][0],extent[1][1],npts+1)])
plt.pcolormesh( X, Y, H.T, **kwargs) plt.pcolormesh( X, Y, H.T, **kwargs)
plt.xlabel(parname.get(par1,par1)) plt.xlabel(parname.get(par1,par1))
plt.ylabel(parname.get(par2,par2)) plt.ylabel(parname.get(par2,par2))
def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], linestyles=[], smooth=1., fontsize=12, rotation=0, def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], linestyles=[], smooth=1., fontsize=12,
contour=True, fill=False, cmaps=[], bestfit=None, Norm=True, weights=None): contour=True, fill=False, cmaps=[], bestfit=None, Norm=True, weights=None):
import matplotlib.ticker as mtick import matplotlib.ticker as mtick
fig=plt.figure(figsize=(14,12)) fig=plt.figure(figsize=(14,12))
plt.subplots_adjust(hspace=0.001,wspace=0.001) plt.subplots_adjust(hspace=0.001,wspace=0.001)
...@@ -599,7 +599,7 @@ def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], lines ...@@ -599,7 +599,7 @@ def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], lines
if len(linestyles) < nchain: if len(linestyles) < nchain:
linestyles = ['-']*nchain linestyles = ['-']*nchain
if weights == None: if weights == None:
weights = [np.ones(len(c['chi2'])) for c in chains] weights = [np.ones(len(c['chi2'])) for c in chains]
...@@ -626,10 +626,10 @@ def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], lines ...@@ -626,10 +626,10 @@ def triangle( chains, params, nbin=50, parnames=None, names=[], colors=[], lines
Y = nd.gaussian_filter1d( h, smooth,mode='nearest') Y = nd.gaussian_filter1d( h, smooth,mode='nearest')