/
fit_lineprofilesH.py
107 lines (87 loc) · 3.38 KB
/
fit_lineprofilesH.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
import pyspeckit
from pyspeckit.spectrum.models import n2hp
from spectral_cube import SpectralCube
import numpy as np
from radio_beam import Beam
from astropy.io import fits
import astropy.units as u
from skimage.morphology import remove_small_objects,closing,disk,opening
# Optically thin
Optically_Thin =False
Show_Optically_Thin =True
# Optically thick
Optically_Thick =False
Show_Optically_Thick=False
file_in='data/Core2_N2Hp_10.fits'
freq_line=93173.3920e6*u.Hz
file_thick='fits/Core2_N2Hp_thick_fitted_parameters_snr3.fits'
file_thin= 'fits/Core2_N2Hp_thin_fitted_parameters_snr3.fits'
snr_min = 3.
cube = pyspeckit.Cube(file_in)
cube.xarr.refX = freq_line
cube.xarr.velocity_convention = 'radio'
cube.xarr.convert_to_unit('km/s')
xmax=4; ymax=6
vmin=5.0; vmax=8.0
rms_map = cube.slice(-12, -4, unit='km/s').cube.std(axis=0)
peaksnr = cube.slice(vmin, vmax, unit='km/s').cube.max(axis=0)/rms_map
planemask = (peaksnr>snr_min)
planemask = remove_small_objects(planemask,min_size=40)
planemask = opening(planemask,disk(1))
F=False
T=True
multicore=4
import matplotlib.pyplot as plt
plt.ion()
if Optically_Thin:
cube.Registry.add_fitter('n2hp_vtau', pyspeckit.models.n2hp.n2hp_vtau_fitter, 4)
print('start optically thin fit')
cube.fiteach(fittype='n2hp_vtau', guesses=[80.0, 0.1, 6.7, 0.1], # Tex=5K, tau=0.1, v_center=7.1, \sigma_v=0.3 km/s
verbose_level=1, signal_cut=snr_min,
limitedmax=[F,F,T,T],
limitedmin=[T,T,T,T],
minpars=[ 0, 0,vmin,0.05],
maxpars=[350.0,0,vmax,1.0],
fixed=[F,T,F,F],
use_neighbor_as_guess=True,
position_order = 1/peaksnr,
errmap=rms_map,
multicore=multicore)
cube.write_fit( file_thin, clobber=True)
if Optically_Thick:
cube.Registry.add_fitter('n2hp_vtau', pyspeckit.models.n2hp.n2hp_vtau_fitter, 4)
print('start optically thick fit')
cube.fiteach(fittype='n2hp_vtau', guesses=[3, 5, 6.7, 0.1], # Tex=5K, tau=0.1, v_center=7.1, \sigma_v=0.3 km/s
verbose_level=2, signal_cut=snr_min,
limitedmax=[F,T,T,T],
limitedmin=[T,T,T,T],
minpars=[ 0, 0,vmin,0.05],
maxpars=[20.,50,vmax,1.0],
fixed=[F,F,F,F],
use_neighbor_as_guess=True,
position_order = 1/peaksnr,
errmap=rms_map,
multicore=multicore)
cube.write_fit( file_thick, clobber=True)
if Show_Optically_Thin:
#
cube.Registry.add_fitter('n2hp_vtau', pyspeckit.models.n2hp.n2hp_vtau_fitter, 4)
cube.load_model_fit(file_thin, npars=4, npeaks=1, _temp_fit_loc=(xmax,ymax))
cube.mapplot()
cube.plot_spectrum(xmax,ymax, plot_fit=True)
cube.mapplot.plane = cube.parcube[0,:,:]
cube.mapplot(estimator=None, vmin=2, vmax=20)
plt.draw()
plt.show()
plt.savefig('N2Hp_pyspeckit_poor_thin_fit.png')
if Show_Optically_Thick:
#
cube.Registry.add_fitter('n2hp_vtau', pyspeckit.models.n2hp.n2hp_vtau_fitter, 4)
cube.load_model_fit( file_thick, npars=4, npeaks=1, _temp_fit_loc=(xmax,ymax))
cube.mapplot()
cube.plot_spectrum(xmax,ymax, plot_fit=True)
cube.mapplot.plane = cube.parcube[0,:,:]
cube.mapplot(estimator=None, vmin=2, vmax=5)
plt.draw()
plt.show()
plt.savefig('N2Hp_pyspeckit_poor_thick_fit.png')