forked from simoncasassus/ConeRot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Optim_DCone.py
207 lines (153 loc) · 6.25 KB
/
Optim_DCone.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
import sys
import numpy as np
import os
import os.path
from scipy import ndimage
from astropy.io import fits as pf
import re
from copy import deepcopy
from astropy.wcs import WCS
from scipy import optimize
import time
from time import gmtime,strftime
#import matplotlib as plt
import matplotlib.pyplot as plt
from pylab import *
import matplotlib.colors as colors
import scipy.optimize as op
include_path='/Users/azuleta/common/python/include/'
sys.path.append(include_path)
from ConeRot_local.funcs_DConeMaps import *
from ConeRot_local.DConeMaps import Model
from ConeRot_local.funcs_Optim_DCone import exec_ConjGrad_1region
import ConeRot_local.KineSummary as KineSummary
from ConeRot_local.funcs_Optim_DCone import exec_emcee
from ConeRot_local.funcs_Optim_DCone import exec_emcee
from ConeRot_local.funcs_Optim_DCone import exec_Regions
#def pass_model(Mpass):
# global M
# M=Mpass
######################################################################
class OptimModel():
#def __init__(self,M,PrintOptimStatus=True): #,DoConjGrad=False, RunMCMC=False
# self.PrintOptimStatus=M.PrintOptimStatus
# #self.DoConjGrad=DoConjGrad
# #self.RunMCMC=RunMCMC
def __init__(self, M,
RunMCMC=False,
Nit=1, #MCMC iterations
nwalkers=-1,
burn_in=50,
n_cores_MCMC=1,
BlindMCMC=False,
#a_min_regions=0.2,
#a_max_regions=0.3,
#n_abins=12,
#StoreRegions=False
n_cores_regions=4):
initlocals=locals()
initlocals.pop('self')
for a_attribute in initlocals.keys():
print( "OptimModel setting ",a_attribute," to ",initlocals[a_attribute])
setattr(self,a_attribute,initlocals[a_attribute])
# print( "opening log:",M.workdir+M.filelog)
# fout=open(M.workdir+M.filelog,"w+")
# M.fout=fout
def ConjGrad_1region(self,M):
M.DumpAllFitsFiles=False
M.Verbose=False
M.ComputeSkyImages=False
return exec_ConjGrad_1region(M,self)
def RecoverConjGrad_1region(self,M):
names = list(map( (lambda x: x[0]),M.domain))
bnds = list(map( (lambda x: x[1]),M.domain))
nvar=len(names)
result_ml=np.load(M.workdir+'result_ml.dat.npy')
print( "result_ml is ",result_ml)
print("LOG:",M.fout)
M.fout.write("Global: \n")
for iparam in range(nvar):
print( names[iparam],"->",result_ml[iparam])
setattr(M,names[iparam],result_ml[iparam])
M.fout.write(names[iparam]+"-> %.6f " % (result_ml[iparam]))
M.fout.write("\n")
M.DumpAllFitsFiles=True
M.prep_files()
M.grid_4center()
M.ComputeSkyImages=True
chi2=M.conicpolar_expansions()
print( "chi2=",chi2)
M.fout.write("chi2=%.6e\n" % (chi2))
inbasename=os.path.basename(M.filename_source)
inbasename=re.sub('.fits', '', inbasename)
inbasename=M.workdir+inbasename
fileout = inbasename+'_fig_summary.pdf'
nplots=3
if (M.DoErrorMap):
inbasenameerrormap=os.path.basename(M.filename_errormap)
inbasenameerrormap=re.sub('.fits', '', inbasenameerrormap)
inbasenameerrormap=M.workdir+inbasenameerrormap
nplots=4
else:
inbasenameerrormap=False
KineSummary.exec_summary(inbasename,fileout,vsyst=M.vsyst,basename_errormap=inbasenameerrormap,nplots=nplots)
def emcee(self,M):
M.DumpAllFitsFiles=False
M.Verbose=False
M.PrintOptimStatus=False
M.ComputeSkyImages=False
result_ml=np.load(M.workdir+'result_ml.dat.npy')
retvals = exec_emcee(M,result_ml,True,self)
return retvals
def RecoverMCMC(self,M):
names = list(map( (lambda x: x[0]),M.domain))
bnds = list(map( (lambda x: x[1]),M.domain))
nvar = len(names)
result_ml=np.load(M.workdir+'bestparams.dat.npy')
#self.RunMCMC=False
# exec_emcee(M,self.Nit,self.nwalkers,result_ml,self.n_cores_MCMC,False,self) #self.RunMCMC
exec_emcee(M,result_ml,False,self) #self.RunMCMC
M.fout.write("Global MCMC: \n")
print( "MCMC best params is ",result_ml)
for iparam in list(range(nvar)):
print( names[iparam],"->",result_ml[iparam])
setattr(M,names[iparam],result_ml[iparam])
M.fout.write(names[iparam]+"-> %.6f " % (result_ml[iparam]))
M.fout.write("\n")
mcmc_results=np.load(M.workdir+'mcmc_results.dat.npy')
mcmc_results=mcmc_results.tolist()
logstring="emcee posterior\n"
for iparam in list(range(nvar)):
#strparams=names[iparam]+" -> %.6f %.6f %.6f " % mcmc_results[iparam]
strparams=names[iparam]+" -> {0:.6f} {1:.6f} {2:.6f} ".format(*mcmc_results[iparam])
logstring=logstring+strparams+"\n"
M.fout.write(logstring)
M.DumpAllFitsFiles=True
#M.Optim=False
M.prep_files()
M.grid_4center()
M.ComputeSkyImages=True
chi2=M.conicpolar_expansions()
print( "chi2=",chi2)
print( "polar chi2=",M.polarchi2)
print( "sky chi2=",M.skychi2)
M.fout.write("chi2=%.3e\n" % (M.skychi2))
inbasename=os.path.basename(M.filename_source)
inbasename=re.sub('.fits', '', inbasename)
inbasename=M.workdir+inbasename
fileout = inbasename+'_emcee_fig_summary.pdf'
nplots=3
if (M.DoErrorMap):
inbasenameerrormap=os.path.basename(M.filename_errormap)
inbasenameerrormap=re.sub('.fits', '', inbasenameerrormap)
inbasenameerrormap=M.workdir+inbasenameerrormap
nplots=4
else:
inbasenameerrormap=False
KineSummary.exec_summary(inbasename,fileout,vsyst=M.vsyst,basename_errormap=inbasenameerrormap,nplots=nplots)
def Regions(self,M):
M.DumpAllFitsFiles=False
M.Verbose=False
M.PrintOptimStatus=False
exec_Regions(M,self) # self.n_cores_regions)
#exec_Regions(M,self.a_min_regions,self.a_max_regions,self.n_abins,self.n_cores_regions,self.StoreRegions)