aboutsummaryrefslogtreecommitdiffstats
path: root/bin/analyze_mass_profile.py
diff options
context:
space:
mode:
authorAaron LI <aaronly.me@outlook.com>2017-02-20 12:11:25 +0800
committerAaron LI <aaronly.me@outlook.com>2017-02-20 12:11:25 +0800
commitcba36462e9e70f45341e432074c726dda5e31092 (patch)
tree0bc9885d0ff86b563e0fb5321c56d51d5687ba70 /bin/analyze_mass_profile.py
parent2a069ed00d6f1c83153be9174c296e5540f37d30 (diff)
downloadchandra-acis-analysis-cba36462e9e70f45341e432074c726dda5e31092.tar.bz2
Move shell/python scripts from 'mass_profile/' to 'bin/'
Diffstat (limited to 'bin/analyze_mass_profile.py')
-rwxr-xr-xbin/analyze_mass_profile.py195
1 files changed, 195 insertions, 0 deletions
diff --git a/bin/analyze_mass_profile.py b/bin/analyze_mass_profile.py
new file mode 100755
index 0000000..3ee128c
--- /dev/null
+++ b/bin/analyze_mass_profile.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+
+import sys
+import numpy
+import scipy.interpolate
+
+confidence_level=.68
+def read_file(param):
+ delta=float(param[0])
+
+ file_mass_center=open("mass_int_center.qdp").readlines();
+ file_delta_center=open("overdensity_center.qdp").readlines();
+
+ center_r=0
+ center_m=0
+ center_gm=0
+ center_gf=0
+
+
+ for i in range(0,len(file_mass_center)):
+ lm=file_mass_center[i].strip();
+ ld=file_delta_center[i].strip();
+ r,m=lm.split()
+ r,d=ld.split()
+ r=float(r)
+ d=float(d)
+ m=float(m)
+ if m<1e11:
+ continue
+ if d<delta:
+ center_r=r
+ center_m=m
+ for j in open("gas_mass_int_center.qdp"):
+ rgm,gm=j.strip().split()
+ rgm=float(rgm)
+ gm=float(gm)
+ if rgm>r:
+
+ center_gm=gm
+ center_gf=gm/m
+ break
+ break
+ if len(param)>1 and param[1]=='c':
+ #print("%s(<r%d)=%E solar mass"%("mass",delta,center_m))
+ #print("%s%d=%E kpc"%("r",delta,center_r))
+ #print("%s(<r%d)=%E solar mass"%("gas mass",delta,center_gm))
+ #print("%s(<r%d)=%E"%("gas fraction",delta,center_gf))
+ return center_m,center_r,center_gm,center_gf,None,None,None,None
+
+
+#print(center_gm,center_gf)
+ file_mass=open('summary_mass_profile.qdp').readlines()
+ file_delta=open('summary_overdensity.qdp').readlines()
+ file_gm=open('summary_gas_mass_profile.qdp')
+
+
+ flag=True
+ rlist=[]
+ mlist=[]
+ gmlist=[]
+ gflist=[]
+ old_m=0
+ invalid_count=0
+ for i in range(0,len(file_mass)):
+ lm=file_mass[i].strip()
+ ld=file_delta[i].strip()
+ if lm[0]=='n':
+ flag=True
+ old_m=0
+ continue
+ if not flag:
+ continue
+ r,m=lm.split()
+ m=float(m)
+ if m<1e12:
+ continue
+ if m<old_m:
+ invalid_count+=1
+ flag=False
+ continue
+ r,d=ld.split()
+ d=float(d)
+ r=float(r)
+
+ if d<delta:
+ #print("%s %e"%(d,m))
+ mlist.append(m)
+ rlist.append(r)
+ flag1=True
+ while True:
+ lgm=file_gm.readline().strip()
+ if lgm[0]=='n':
+ break
+ rgm,gm=lgm.split()
+ rgm=float(rgm)
+ gm=float(gm)
+ if rgm>r and flag1:
+ gmlist.append(gm)
+
+ flag1=False
+ gflist.append(gm/mlist[-1])
+ #print(gm,gflist[-1])
+ flag=False
+ old_m=m
+ print("%d abnormal data dropped"%(invalid_count))
+
+
+ return center_m,center_r,center_gm,center_gf,mlist,rlist,gmlist,gflist
+#center_m=numpy.mean(mlist)
+#center_r=numpy.mean(rlist)
+
+center_m,center_r,center_gm,center_gf,mlist,rlist,gmlist,gflist=read_file(sys.argv[1:])
+delta=float(sys.argv[1])
+
+if len(sys.argv)>2 and sys.argv[2]=='c':
+ print("%s(<r%d)=%E solar mass"%("mass",delta,center_m))
+ print("%s%d=%E kpc"%("r",delta,center_r))
+ print("%s(<r%d)=%E solar mass"%("gas mass",delta,center_gm))
+ print("%s(<r%d)=%E"%("gas fraction",delta,center_gf))
+ sys.exit(0)
+
+
+mlist.sort()
+rlist.sort()
+gflist.sort()
+gmlist.sort()
+
+m_idx=-1
+r_idx=-1
+gm_idx=-1
+gf_idx=-1
+delta=float(sys.argv[1])
+for i in range(len(mlist)-1):
+ if (center_m-mlist[i])*(center_m-mlist[i+1])<=0:
+ m_idx=i
+ break
+
+for i in range(len(rlist)-1):
+ if (center_r-rlist[i])*(center_r-rlist[i+1])<=0:
+ r_idx=i
+ break
+
+for i in range(len(gmlist)-1):
+ if (center_gm-gmlist[i])*(center_gm-gmlist[i+1])<=0:
+ gm_idx=i
+ break
+
+for i in range(len(gflist)-1):
+ if (center_gf-gflist[i])*(center_gf-gflist[i+1])<=0:
+ gf_idx=i
+ break
+
+
+if m_idx==-1 or r_idx==-1 or gf_idx==-1 or gm_idx==-1:
+ print("Error, the center value is not enclosed by the Monte-Carlo realizations, please check the result!")
+ print("m:%E %E %E"%(center_m,mlist[0],mlist[-1]))
+ print("gm:%E %E %E"%(center_gm,gmlist[0],gmlist[-1]))
+ print("gf:%E %E %E"%(center_gf,gflist[0],gflist[-1]))
+ print("r:%E %E %E"%(center_r,rlist[0],rlist[-1]))
+ sys.exit(1)
+
+
+mlidx=int(m_idx*(1-confidence_level))
+muidx=m_idx-1+int((len(mlist)-m_idx)*confidence_level)
+
+
+rlidx=int(r_idx*(1-confidence_level))
+ruidx=r_idx-1+int((len(rlist)-r_idx)*confidence_level)
+
+gmlidx=int(gm_idx*(1-confidence_level))
+gmuidx=gm_idx-1+int((len(gmlist)-gm_idx)*confidence_level)
+
+gflidx=int(gf_idx*(1-confidence_level))
+gfuidx=gf_idx-1+int((len(gflist)-gf_idx)*confidence_level)
+
+
+merr1=mlist[mlidx]-center_m
+merr2=mlist[muidx]-center_m
+
+rerr1=rlist[rlidx]-center_r
+rerr2=rlist[ruidx]-center_r
+
+gmerr1=gmlist[gmlidx]-center_gm
+gmerr2=gmlist[gmuidx]-center_gm
+
+gferr1=gflist[gflidx]-center_gf
+gferr2=gflist[gfuidx]-center_gf
+
+#print("%d %d %d"%(mlidx,m_idx,muidx))
+#print("%d %d %d"%(rlidx,r_idx,ruidx))
+
+print("m%d=\t%e\t %e/+%e solar mass (1 sigma)"%(delta,center_m,merr1,merr2))
+print("gas_m%d=\t%e\t %e/+%e solar mass (1 sigma)"%(delta,center_gm,gmerr1,gmerr2))
+print("gas_fraction%d=\t%e\t %e/+%e (1 sigma)"%(delta,center_gf,gferr1,gferr2))
+print("r%d=\t%d\t %d/+%d kpc (1 sigma)"%(delta,center_r,rerr1,rerr2))