-
Notifications
You must be signed in to change notification settings - Fork 0
/
inspect.py
134 lines (126 loc) · 5.69 KB
/
inspect.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
import mircx_mystic as mrx
from mrx import log
def calTest(files, UDD, obj, outDir, uset3amp=False, fixUDD=True, detLim=True, observables=['v2', 'cp']):
"""
- files is a python list (can be of length one) of calibrated
MIRC-X data files
- uset3amp is a flag use to determine whether to use v2 and cp (False)
or v2, cp and t3amp (True) in the fitting procedure.
- fixUDD is a flag to determine whether the uniform disk diameter
of the target is known and should be used. If False, the script
compares the fitted UDD to the given value as an initial
assessment of the goodness-of-fit of a no-point-source model.
- UDD is the uniform disk diameter of the target (in mas)
- detLim is a flag used to determine whether the detection limit
step of CANDID is to be done.
- observables is a python list of the interferometric observables
used in the fitting. By default, t3amp are not used.
"""
import numpy as np
try:
import candid
except ImportError as exception:
print('ERROR: ', exception)
if 'No module named' in str(exception):
print('Download CANDID from https://github.com/amerand/CANDID')
print('and install using:')
print(' python setup.py install --user')
print(' in CANDID directory')
elif "cannot import name 'factorial'" in str(exception):
print('CANDID is not python3 compatible (yet)')
print(' ')
print('To use CANDID within mircx_pipeline, you need to edit candid.py')
print('Please replace the line which reads:')
print(' from scipy.misc import factorial')
print('with the following lines:')
print(' try:')
print(' from scipy.misc import factorial')
print(' except ImportError:')
print(' from scipy.special import factorial')
print(' ')
print('Then re-install CANDID by running')
print(' python setup.py install --user')
print('in your CANDID directory.')
print(' ')
return ['failed: ImportError', 0]
try:
import cyvis
except ImportError:
print('CANDID not installed. Use:')
print(' python setup.py install --user')
print(' in CANDID directory')
return ['failed: ImportError', 0]
import matplotlib.pyplot as plt
from astropy.io import fits as pyfits
o = candid.Open(files)
log.info('Read files for '+str(obj)+' into CANDID')
if uset3amp == False:
o.observables = observables
with pyfits.open(files[0]) as fitsinput:
insmode = fitsinput[0].header['INSMODE']
if fixUDD == True:
log.info('Running CANDID fitMap with fixed UDD')
try:
o.fitMap(fig=0, addParam={'diam*':float(UDD)}, doNotFit=['diam*'])
except ValueError as exception:
log.error('Error encountered in CANDID: '+str(exception))
return ['failed', 0]
except MemoryError as exception:
log.error('Error encountered in CANDID: '+str(exception))
return ['failed: memory', 0]
plt.figure(0)
plt.savefig(outDir+'/'+obj+'_fitMap_fixUDD.pdf')
log.info('Write '+outDir+'/'+obj+'_fitMap_fixUDD.pdf')
plt.close()
plt.figure(1)
plt.savefig(outDir+'/'+obj+'_Residuals_fixUDD.pdf')
log.info('Write '+outDir+'/'+obj+'_Residuals_fixUDD.pdf')
plt.close()
ret = 'fixed: '
else:
candid.CONFIG['long exec warning'] = 3000
try:
log.info('Running CANDID fitMap with UDD as free parameter')
if 'GRISM' in insmode:
# if insmode == GRISM, use rmin and rmax to limit runtime and memory allocation:
o.fitMap(fig=0, rmin=0.54, rmax=30)
else:
o.fitMap(fig=0)
except TypeError as exception:
log.error('Error encountered in CANDID: '+str(exception))
return ['failed', 0]
except MemoryError as exception:
log.error('Error encountered in CANDID: '+str(exception))
return ['failed: memory', 0]
plt.figure(0)
plt.savefig(outDir+'/'+obj+'_fitMap_fitUDD.pdf')
log.info('Write '+outDir+'/'+obj+'_fitMap_fitUDD.pdf')
plt.close()
plt.figure(1)
plt.savefig(outDir+'/'+obj+'_Residuals_fitUDD.pdf')
log.info('Write '+outDir+'/'+obj+'_Residuals_fitUDD.pdf')
plt.close()
ret = 'free: '
if detLim == True:
candid.CONFIG['long exec warning'] = 3000
try:
p = o.bestFit
print('------------>>>',p.keys())
except AttributeError:
# Get here if longer computation is required
return ['failed: time', 0]
except MemoryError as exception:
log.error('Error encountered in CANDID: '+str(exception))
return ['failed: memory', 0]
log.info('Running CANDID detectionLimit with companion removed')
if 'GRISM' in insmode:
o.detectionLimit(fig=2, removeCompanion=p['best'], methods=['injection'], rmin=0.54, rmax=30, diam=p['best']['diam*'])
else:
o.detectionLimit(fig=2, removeCompanion=p['best'], methods=['injection'], diam=p['best']['diam*'])
plt.figure(2)
plt.plot([o.rmin, o.rmax], [-2.5*np.log10(p['best']['f']/100.)]*2, ls='--', color='k')
plt.plot([np.sqrt(p['best']['x']**2+p['best']['y']**2)], [-2.5*np.log10(p['best']['f']/100.)], ls=None, marker='*', ms=8)
plt.savefig(outDir+'/'+obj+'_detLim.pdf')
log.info('Write '+outDir+'/'+obj+'_detLim.pdf')
plt.close()
return [ret, p]