diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..35410cacdc5e87f985c93a96520f5e11a5c822e4
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/csst_ifs_gehong.iml b/.idea/csst_ifs_gehong.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d0876a78d06ac03b5d78c8dcdb95570281c6f1d6
--- /dev/null
+++ b/.idea/csst_ifs_gehong.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..105ce2da2d6447d11dfe32bfb846c3d5b199fc99
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a1d3bd1230ec47bc40fa2470229175e305bce62
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csst_ifs_gehong/config.py b/csst_ifs_gehong/config.py
index bedef18cb1e4c3b9ec8c921ac3bdcddaac712a15..d5c06857a35b17dc15b7d923373161660d482862 100644
--- a/csst_ifs_gehong/config.py
+++ b/csst_ifs_gehong/config.py
@@ -1,5 +1,6 @@
import numpy as np
+
class config():
"""
The configuration of spectral modeling. The default value is used for ETC calculation.
@@ -21,9 +22,9 @@ class config():
dpix : float, optional
Pixel size in the spatial direction, by default 0.2arcsec
"""
- def __init__(self, wave_min = 3500.0, wave_max = 10000.0,
- dlam = 2.0, inst_fwhm = 0.1,
- nx = 30, ny = 30, dpix = 0.2):
+ def __init__(self, wave_min=3500.0, wave_max=10000.0,
+ dlam=2.0, inst_fwhm=0.1,
+ nx=30, ny=30, dpix=0.2):
self.dlam = dlam
self.wave = np.arange(wave_min, wave_max, dlam)
self.wave_min = wave_min
diff --git a/csst_ifs_gehong/cube3d.py b/csst_ifs_gehong/cube3d.py
index 1a92eddb7e36cba48485d479a2534a2281f33cd9..0bbf67b1959af6ab342559a893776024eb12b891 100644
--- a/csst_ifs_gehong/cube3d.py
+++ b/csst_ifs_gehong/cube3d.py
@@ -1,52 +1,52 @@
-import astropy.units as u
import numpy as np
-from scipy.interpolate import interp1d
-from .spec1d import *
+from .spec1d import StellarContinuum, HII_Region
import astropy.wcs
+from astropy.io import fits
+
class Cube3D():
"""
Class of 3-dimentional spectral cube
"""
- def __init__(self, config, stellar_map = None, gas_map = None):
+ def __init__(self, config, stellar_map=None, gas_map=None):
- self.config= config
+ self.config = config
- self.nx = config.nx
- self.ny = config.ny
- self.dpix = config.dpix
+ self.nx = config.nx
+ self.ny = config.ny
+ self.dpix = config.dpix
self.fov_x = config.fov_x
self.fov_y = config.fov_y
- self.wave = config.wave
- self.nz = len(self.wave)
+ self.wave = config.wave
+ self.nz = len(self.wave)
self.wave0 = np.min(self.wave)
self.inst_fwhm = config.inst_fwhm
- self.flux = np.zeros((self.nx,self.ny,self.nz))
+ self.flux = np.zeros((self.nx, self.ny, self.nz))
self.stellar_map = stellar_map
- self.gas_map = gas_map
+ self.gas_map = gas_map
- def make_cube(self, stellar_tem = None, hii_tem = None):
+ def make_cube(self, stellar_tem=None, hii_tem=None):
for i in range(self.nx):
for j in range(self.ny):
if self.stellar_map is not None:
- ss = StellarContinuum(self.config, stellar_tem, mag = self.stellar_map.mag[i,j],
- age = self.stellar_map.age[i,j], feh = self.stellar_map.feh[i,j],
- vel = self.stellar_map.vel[i,j], vdisp = self.stellar_map.vdisp[i,j],
- ebv = self.stellar_map.ebv[i,j])
+ ss = StellarContinuum(self.config, stellar_tem, mag=self.stellar_map.mag[i, j],
+ age=self.stellar_map.age[i, j], feh=self.stellar_map.feh[i, j],
+ vel=self.stellar_map.vel[i, j], vdisp=self.stellar_map.vdisp[i, j],
+ ebv=self.stellar_map.ebv[i, j])
if self.gas_map is not None:
- gg = HII_Region(self.config, hii_tem, halpha = self.gas_map.halpha[i,j],
- logz = self.gas_map.zh[i,j], vel = self.gas_map.vel[i,j],
- vdisp = self.gas_map.vdisp[i,j], ebv = self.gas_map.ebv[i,j])
- self.flux[i,j,:] = ss.flux + gg.flux
+ gg = HII_Region(self.config, hii_tem, halpha=self.gas_map.halpha[i, j],
+ logz=self.gas_map.zh[i, j], vel=self.gas_map.vel[i, j],
+ vdisp=self.gas_map.vdisp[i, j], ebv=self.gas_map.ebv[i, j])
+ self.flux[i, j, :] = ss.flux + gg.flux
else:
- self.flux[i,j,:] = ss.flux
+ self.flux[i, j, :] = ss.flux
def wcs_info(self):
- wcs = fits.Header()
+ # wcs = fits.Header()
wcs_dict = {'CTYPE1': 'WAVE ',
'CUNIT1': 'Angstrom',
'CDELT1': self.config.dlam,
@@ -62,33 +62,33 @@ class Cube3D():
'CDELT3': self.dpix / 3600.,
'CRPIX3': np.round(self.nx / 2.),
'CRVAL3': 1,
- 'BUNIT' : '10**(-17)*erg/s/cm**2/Angstrom'}
+ 'BUNIT': '10**(-17)*erg/s/cm**2/Angstrom'}
input_wcs = astropy.wcs.WCS(wcs_dict)
self.wcs_header = input_wcs.to_header()
- def insert_spec(self, spec, dx = 0, dy = 0):
+ def insert_spec(self, spec, dx=0, dy=0):
x0 = np.int(np.round(self.config.nx / 2.))
y0 = np.int(np.round(self.config.ny / 2.))
self.flux[x0 + dx, y0 + dy, :] = self.flux[x0 + dx, y0 + dy, :] + spec.flux
- def savefits(self, filename, path = './'):
+ def savefits(self, filename, path='./'):
hdr = fits.Header()
hdr['FILETYPE'] = 'SCICUBE'
- hdr['CODE'] = 'CSST-IFS-GEHONG'
- hdr['VERSION'] = '0.0.1'
+ hdr['CODE'] = 'CSST-IFS-GEHONG'
+ hdr['VERSION'] = '0.0.1'
- hdr['OBJECT'] = 'NGC1234'
- hdr['RA'] = 0.0
- hdr['DEC'] = 0.0
+ hdr['OBJECT'] = 'NGC1234'
+ hdr['RA'] = 0.0
+ hdr['DEC'] = 0.0
- hdu0 = fits.PrimaryHDU(header = hdr)
+ hdu0 = fits.PrimaryHDU(header=hdr)
self.wcs_info()
hdr = self.wcs_header
- hdu1 = fits.ImageHDU(self.flux, header = hdr)
+ hdu1 = fits.ImageHDU(self.flux, header=hdr)
# Output
hdulist = fits.HDUList([hdu0, hdu1])
- hdulist.writeto(path + filename, overwrite = True)
\ No newline at end of file
+ hdulist.writeto(path + filename, overwrite=True)
\ No newline at end of file
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.40T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm0.71T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.31T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm1.71T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zm2.32T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.00T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0631_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0631_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0708_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0708_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0794_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0794_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0891_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.0891_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1122_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1122_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1259_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1259_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1413_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1413_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1585_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1585_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1778_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1778_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1995_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.1995_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2239_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2239_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2512_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2512_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2818_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.2818_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3162_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3162_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3548_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3548_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3981_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.3981_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.4467_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.4467_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.5012_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.5012_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.5623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.5623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.6310_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.6310_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.7079_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.7079_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.7943_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.7943_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.8913_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T00.8913_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.1220_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.1220_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.2589_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.2589_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.4125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.4125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.5849_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.5849_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.7783_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.7783_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.9953_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T01.9953_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.2387_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.2387_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.5119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.5119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.8184_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T02.8184_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.1623_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.1623_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.5481_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.5481_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.9811_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T03.9811_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T04.4668_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T04.4668_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T05.0119_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T05.0119_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T05.6234_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T05.6234_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T06.3096_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T06.3096_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T07.0795_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T07.0795_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T07.9433_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T07.9433_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T08.9125_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T08.9125_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T10.0000_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T10.0000_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T11.2202_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T11.2202_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T12.5893_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T12.5893_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T14.1254_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T14.1254_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T15.8489_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T15.8489_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T17.7828_iPp0.00_baseFe.fits b/csst_ifs_gehong/data/EMILES/Ech1.30Zp0.22T17.7828_iPp0.00_baseFe.fits
old mode 100755
new mode 100644
diff --git a/csst_ifs_gehong/map2d.py b/csst_ifs_gehong/map2d.py
index 24c328bfce3c26ed9643635482ba46b7791ee8d7..5ffd512a9207b50653be39876a0841c69d3ba7cd 100644
--- a/csst_ifs_gehong/map2d.py
+++ b/csst_ifs_gehong/map2d.py
@@ -2,11 +2,11 @@ from __future__ import division
import scipy.special as sp
import numpy as np
-from astropy.io import fits
from skimage.transform import resize
-def Sersic2D(x, y, mag = 12.0, r_eff = 1.0, n = 2.0, ellip = 0.5,
- theta = 0.0, x_0 = 0.0, y_0 = 0.0, pixelscale = 0.01):
+
+def Sersic2D(x, y, mag=12.0, r_eff=1.0, n=2.0, ellip=0.5,
+ theta=0.0, x_0=0.0, y_0=0.0, pixelscale=0.01):
"""
Sersic2D: Caculate the surface brightness at given spatial position base on the Sersic model.
@@ -35,7 +35,6 @@ def Sersic2D(x, y, mag = 12.0, r_eff = 1.0, n = 2.0, ellip = 0.5,
Returns
-------
-
_description_
"""
@@ -48,7 +47,7 @@ def Sersic2D(x, y, mag = 12.0, r_eff = 1.0, n = 2.0, ellip = 0.5,
cos_theta, sin_theta = np.cos(theta_radian), np.sin(theta_radian)
x_maj = (x - x_0) * cos_theta + (y - y_0) * sin_theta
x_min = -(x - x_0) * sin_theta + (y - y_0) * cos_theta
- z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
+ z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
profile = np.exp(-bn * (z ** (1 / n) - 1))
# Normalization
@@ -61,8 +60,9 @@ def Sersic2D(x, y, mag = 12.0, r_eff = 1.0, n = 2.0, ellip = 0.5,
return sb_mag
-def VelMap2D(x, y, vmax = 200.0, rt = 1.0, ellip = 0.5,
- theta = 0.0, x_0 = 0.0, y_0 = 0.0):
+
+def VelMap2D(x, y, vmax=200.0, rt=1.0, ellip=0.5,
+ theta=0.0, x_0=0.0, y_0=0.0):
"""
VelMap2D: Caculate the velocity at given spatial position base on the rotating disk model.
The rotation curve is adpot as the tanh model.
@@ -100,13 +100,14 @@ def VelMap2D(x, y, vmax = 200.0, rt = 1.0, ellip = 0.5,
cos_theta, sin_theta = np.cos(theta_radian), np.sin(theta_radian)
x_maj = (x - x_0) * cos_theta + (y - y_0) * sin_theta
x_min = -(x - x_0) * sin_theta + (y - y_0) * cos_theta
- z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
+ z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
profile = vmax * np.tanh(z) * ((x_maj / a) / z)
return profile
-def GradMap2D(x, y, a0 = 10.0, r_eff = 1.0, gred = -1.0, ellip = 0.5,
- theta = 0.0, x_0 = 0.0, y_0 = 0.0):
+
+def GradMap2D(x, y, a0=10.0, r_eff=1.0, gred=-1.0, ellip=0.5,
+ theta=0.0, x_0=0.0, y_0=0.0):
"""
GradMap2D: Caculate the intensity at given spatial position base on the disk model.
The radial profile is adpot as the gradient model.
@@ -138,7 +139,6 @@ def GradMap2D(x, y, a0 = 10.0, r_eff = 1.0, gred = -1.0, ellip = 0.5,
_description_
"""
-
# Convert the angle in degree to angle to radians
theta_radian = theta / 180 * np.pi
@@ -147,11 +147,12 @@ def GradMap2D(x, y, a0 = 10.0, r_eff = 1.0, gred = -1.0, ellip = 0.5,
cos_theta, sin_theta = np.cos(theta_radian), np.sin(theta_radian)
x_maj = (x - x_0) * cos_theta + (y - y_0) * sin_theta
x_min = -(x - x_0) * sin_theta + (y - y_0) * cos_theta
- z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
+ z = (abs(x_maj / a) ** 2 + abs(x_min / b) ** 2) ** (1 / 2)
profile = a0 + z * gred
return profile
+
class Map2d(object):
def __init__(self, config):
@@ -166,11 +167,11 @@ class Map2d(object):
self.xsamp = config.dpix
self.ysamp = config.dpix
startx = -(config.nx - 1) / 2.0 * self.xsamp
- stopx = (config.nx - 1) / 2.0 * self.xsamp
+ stopx = (config.nx - 1) / 2.0 * self.xsamp
starty = -(config.ny - 1) / 2.0 * self.ysamp
- stopy = (config.ny - 1) / 2.0 * self.ysamp
- xvals = np.linspace(startx, stopx, num = config.nx)
- yvals = np.linspace(starty, stopy, num = config.ny)
+ stopy = (config.ny - 1) / 2.0 * self.ysamp
+ xvals = np.linspace(startx, stopx, num=config.nx)
+ yvals = np.linspace(starty, stopy, num=config.ny)
ones = np.ones((config.ny, config.nx))
x = ones * xvals
@@ -178,8 +179,8 @@ class Map2d(object):
self.nx = config.nx
self.ny = config.ny
- self.x = x
- self.y = y
+ self.x = x
+ self.y = y
self.row = xvals
# flip Y axis because we use Y increasing from bottom to top
self.col = yvals[::-1]
@@ -207,7 +208,7 @@ class Map2d(object):
ysh_rot = -xsh * np.sin(pa_radians) + ysh * np.cos(pa_radians)
return ysh_rot, xsh_rot
- def sersic_map(self, mag = 12.0, r_eff = 2.0, n = 2.5, ellip = 0.5, theta = -50.0):
+ def sersic_map(self, mag=12.0, r_eff=2.0, n=2.5, ellip=0.5, theta=-50.0):
"""
Generate 2D map of Sersic model
@@ -229,7 +230,7 @@ class Map2d(object):
if (mag > 26) or (mag < 8):
print("Notice: Your input integral magnitude of Sersic mode (mag) is > 26 mag or < 8 mag.")
if (r_eff <= 0):
- #raise Exception("Effective radius (r_eff) should be > 0 arcsec!")
+ # raise Exception("Effective radius (r_eff) should be > 0 arcsec!")
print("Effective radius (r_eff) should be > 0 arcsec!")
if (n < 0):
raise Exception("Sersic index (n) should be > 0!")
@@ -240,17 +241,17 @@ class Map2d(object):
if (theta > 180) or (theta < -180):
print("Notice: Your input position angle (theta) is > 180 degree or < -180 degree.")
- self.reff = r_eff / self.xsamp
- self.mag = mag
- self.n = n
+ self.reff = r_eff / self.xsamp
+ self.mag = mag
+ self.n = n
self.ellip = ellip
self.theta = theta
- self.map = Sersic2D(self.x, self.y, mag = self.mag,
- r_eff = self.reff, n = self.n,
- ellip = self.ellip, theta = self.theta,
- pixelscale = self.xsamp * self.ysamp)
+ self.map = Sersic2D(self.x, self.y, mag=self.mag,
+ r_eff=self.reff, n=self.n,
+ ellip=self.ellip, theta=self.theta,
+ pixelscale=self.xsamp * self.ysamp)
- def tanh_map(self, vmax = 200.0, rt = 2.0, ellip = 0.5, theta = -50.0):
+ def tanh_map(self, vmax=200.0, rt=2.0, ellip=0.5, theta=-50.0):
"""
Generate 2D velocity map of rotating disk according to tanh rotation curve
@@ -268,25 +269,25 @@ class Map2d(object):
# Check Input Parameters
if (vmax <= 0):
- #print("Notice: Your input maximum rotational velocity (vmax) is <= 0 km/s!")
+ # print("Notice: Your input maximum rotational velocity (vmax) is <= 0 km/s!")
raise Exception("Maximum rotational velocity (vmax) should be >0 km/s!")
if (rt <= 0):
- #raise Exception("Turn-over radius (rt) should be > 0 arcsec!")
+ # raise Exception("Turn-over radius (rt) should be > 0 arcsec!")
raise Exception("Turn-over radius (rt) should be > 0 arcsec!")
if (ellip > 1) or (ellip < 0):
raise Exception("Ellipcity (ellip) should be >= 0 and < 1!")
- #print("Ellipcity (ellip) should be >= 0 and < 1!")
+ # print("Ellipcity (ellip) should be >= 0 and < 1!")
if (theta > 180) or (theta < -180):
print("Notice: Your input position angle (theta) is > 180 degree or < -180 degree.")
- self.vmax = vmax
- self.rt = rt / self.xsamp
+ self.vmax = vmax
+ self.rt = rt / self.xsamp
self.ellip = ellip
self.theta = theta
- self.map = VelMap2D(self.x, self.y, vmax = self.vmax, rt = self.rt,
- ellip = self.ellip, theta = self.theta)
+ self.map = VelMap2D(self.x, self.y, vmax=self.vmax, rt=self.rt,
+ ellip=self.ellip, theta=self.theta)
- def gred_map(self, a0 = 10, r_eff = 1, gred = -1, ellip = 0.5, theta = 0):
+ def gred_map(self, a0=10, r_eff=1, gred=-1, ellip=0.5, theta=0):
"""
Generate 2D maps according to the radial gradient form
@@ -306,20 +307,20 @@ class Map2d(object):
# Check Input Parameters
if (r_eff <= 0):
raise Exception("Effective radius (r_eff) should be > 0 arcsec!")
- #print("Effective radius (r_eff) should be > 0 arcsec!")
+ # print("Effective radius (r_eff) should be > 0 arcsec!")
if (ellip > 1) or (ellip < 0):
- #raise Exception("Ellipcity (ellip) should be >= 0 and < 1!")
+ # raise Exception("Ellipcity (ellip) should be >= 0 and < 1!")
print("Notice: Ellipcity (ellip) should be >= 0 and < 1!")
if (theta > 180) or (theta < -180):
print("Notice: Your input position angle (theta) is > 180 degree or < -180 degree.")
- self.a0 = a0
- self.reff = r_eff / self.xsamp
- self.gred = gred
+ self.a0 = a0
+ self.reff = r_eff / self.xsamp
+ self.gred = gred
self.ellip = ellip
self.theta = theta
- self.map = GradMap2D(self.x, self.y, a0 = self.a0, r_eff = self.reff,
- gred = self.gred, ellip = self.ellip, theta = self.theta)
+ self.map = GradMap2D(self.x, self.y, a0=self.a0, r_eff=self.reff,
+ gred=self.gred, ellip=self.ellip, theta=self.theta)
def load_map(self, image):
"""
@@ -334,7 +335,8 @@ class Map2d(object):
self.map = resize(image, (self.nx, self.ny))
else:
print("Input array should be a 2d-array!")
-
+
+
class StellarPopulationMap():
"""
Class of 2D maps for the parameters of stellar population, such as
@@ -358,55 +360,56 @@ class StellarPopulationMap():
ebv : class, optional
Class of the map of dust extinction, by default None
"""
- def __init__(self, config, sbright = None, logage = None,
- feh = None, vel = None, vdisp = None, ebv = None):
+ def __init__(self, config, sbright=None, logage=None,
+ feh=None, vel=None, vdisp=None, ebv=None):
- self.nx = config.nx
- self.ny = config.ny
- self.dpix = config.dpix
+ self.nx = config.nx
+ self.ny = config.ny
+ self.dpix = config.dpix
self.fov_x = config.fov_x
self.fov_y = config.fov_y
- if (sbright == None):
+ if (sbright is None):
print('Input SurfaceBrightness Map is empty!')
else:
self.sbright = sbright.map
self.mag = self.sbright - 2.5 * np.log10(self.dpix * self.dpix)
- if (logage == None):
+ if (logage is None):
print('Input Age Map is empty!')
else:
- self.logage = logage.map
+ self.logage = logage.map
self.age = 10 ** self.logage / 1e9
- if (feh == None):
+ if (feh is None):
print('Input Metallicity Map is empty!')
else:
- self.feh = feh.map
+ self.feh = feh.map
- if (vel == None):
+ if (vel is None):
print('Input Velocity Map is empty!')
else:
- self.vel = vel.map
+ self.vel = vel.map
- if (vdisp == None):
+ if (vdisp is None):
print('Input VelocityDispersion Map is empty!')
else:
- self.vdisp = vdisp.map
+ self.vdisp = vdisp.map
ind_overrange = (self.vdisp < 10)
if len(self.vdisp[ind_overrange]) > 0:
print("Notice: Spaxel with <10km/s in the input vdisp map will be automatically adjusted to 10km/s.")
self.vdisp[ind_overrange] = 10
- if (ebv == None):
+ if (ebv is None):
print('Input EBV Map is empty!')
else:
- self.ebv = ebv.map
+ self.ebv = ebv.map
ind_overrange = (self.ebv < 0)
if len(self.ebv[ind_overrange]) > 0:
print("Notice: Spaxel with < 0 mag in the input ebv map will be automatically adjusted to 0 mag.")
self.ebv[ind_overrange] = 0
+
class IonizedGasMap():
"""
Class of 2D maps for the parameters of ionized gas, such as
@@ -428,42 +431,42 @@ class IonizedGasMap():
ebv : class, optional
Class of the map of dust extinction, by default None
"""
- def __init__(self, config, halpha = None, zh = None, vel = None, vdisp = None, ebv = None):
+ def __init__(self, config, halpha=None, zh=None, vel=None, vdisp=None, ebv=None):
- self.nx = config.nx
- self.ny = config.ny
- self.dpix = config.dpix
- self.fov_x = config.fov_x
- self.fov_y = config.fov_y
+ self.nx = config.nx
+ self.ny = config.ny
+ self.dpix = config.dpix
+ self.fov_x = config.fov_x
+ self.fov_y = config.fov_y
- if (halpha == None):
+ if (halpha is None):
print('Input Halpha Map is empty!')
else:
self.halpha = halpha.map
- if (zh == None):
+ if (zh is None):
print('Input ZH Map is empty!')
else:
- self.zh = zh.map
+ self.zh = zh.map
- if (vel == None):
+ if (vel is None):
print('Input Vel Map is empty!')
else:
- self.vel = vel.map
+ self.vel = vel.map
- if (vdisp == None):
+ if (vdisp is None):
print('Input Vdisp Map is empty!')
ind_overrange = (self.vdisp < 10)
if len(self.vdisp[ind_overrange]) > 0:
print("Notice: Spaxel with <10km/s in the input vdisp map will be automatically adjusted to 10km/s.")
self.vdisp[ind_overrange] = 10
else:
- self.vdisp = vdisp.map
+ self.vdisp = vdisp.map
- if (ebv == None):
+ if (ebv is None):
print('Input EBV Map is empty!')
else:
- self.ebv = ebv.map
+ self.ebv = ebv.map
ind_overrange = (self.ebv < 0)
if len(self.ebv[ind_overrange]) > 0:
print("Notice: Spaxel with < 0 mag in the input ebv map will be automatically adjusted to 0 mag.")
diff --git a/csst_ifs_gehong/spec1d.py b/csst_ifs_gehong/spec1d.py
index dbcea4f3b10722212ab953a89a981628fb2228ab..c15cd429447715cf6c5463ef08dcb6a979e3c794 100644
--- a/csst_ifs_gehong/spec1d.py
+++ b/csst_ifs_gehong/spec1d.py
@@ -6,10 +6,12 @@ import numpy as np
import astropy.units as u
from astropy.io import fits
from scipy.stats import norm
+from scipy import ndimage
from scipy.interpolate import interp1d
data_path = os.path.dirname(os.path.abspath(__file__))
+
def readcol(filename, **kwargs):
"""
readcol, taken from ppxf.
@@ -27,7 +29,7 @@ def readcol(filename, **kwargs):
f = np.genfromtxt(filename, dtype=None, **kwargs)
t = type(f[0])
- if t == np.ndarray or t == np.void: # array or structured array
+ if t == np.ndarray or t == np.void: # array or structured array
f = map(np.array, zip(*f))
# In Python 3.x all strings (e.g. name='NGC1023') are Unicode strings by defauls.
@@ -38,10 +40,11 @@ def readcol(filename, **kwargs):
# test a == 'NGC1023' will give True as expected.
if sys.version >= '3':
- f = [v.astype(str) if v.dtype.char=='S' else v for v in f]
+ f = [v.astype(str) if v.dtype.char == 'S' else v for v in f]
return f
+
def log_rebin(lamRange, spec, oversample=False, velscale=None, flux=False):
"""
Logarithmically rebin a spectrum, while rigorously conserving the flux.
@@ -78,38 +81,39 @@ def log_rebin(lamRange, spec, oversample=False, velscale=None, flux=False):
assert len(s) == 1, 'input spectrum must be a vector'
n = s[0]
if oversample:
- m = int(n*oversample)
+ m = int(n * oversample)
else:
m = int(n)
- dLam = np.diff(lamRange)/(n - 1.) # Assume constant dLam
- lim = lamRange/dLam + [-0.5, 0.5] # All in units of dLam
- borders = np.linspace(*lim, num=n+1) # Linearly
+ dLam = np.diff(lamRange) / (n - 1.) # Assume constant dLam
+ lim = lamRange / dLam + [-0.5, 0.5] # All in units of dLam
+ borders = np.linspace(*lim, num=n + 1) # Linearly
logLim = np.log(lim)
c = 299792.458 # Speed of light in km/s
if velscale is None: # Velocity scale is set by user
- velscale = np.diff(logLim)/m*c # Only for output
+ velscale = np.diff(logLim) / m * c # Only for output
else:
- logScale = velscale/c
- m = int(np.diff(logLim)/logScale) # Number of output pixels
- logLim[1] = logLim[0] + m*logScale
+ logScale = velscale / c
+ m = int(np.diff(logLim) / logScale) # Number of output pixels
+ logLim[1] = logLim[0] + m * logScale
- newBorders = np.exp(np.linspace(*logLim, num=m+1)) # Logarithmically
- k = (newBorders - lim[0]).clip(0, n-1).astype(int)
+ newBorders = np.exp(np.linspace(*logLim, num=m + 1)) # Logarithmically
+ k = (newBorders - lim[0]).clip(0, n - 1).astype(int)
specNew = np.add.reduceat(spec, k)[:-1] # Do analytic integral
specNew *= np.diff(k) > 0 # fix for design flaw of reduceat()
- specNew += np.diff((newBorders - borders[k])*spec[k])
+ specNew += np.diff((newBorders - borders[k]) * spec[k])
if not flux:
specNew /= np.diff(newBorders)
# Output log(wavelength): log of geometric mean
- logLam = np.log(np.sqrt(newBorders[1:]*newBorders[:-1])*dLam)
+ logLam = np.log(np.sqrt(newBorders[1:] * newBorders[:-1]) * dLam)
return specNew, logLam, velscale
+
def gaussian_filter1d(spec, sig):
"""
One-dimensional Gaussian convolution
@@ -126,23 +130,24 @@ def gaussian_filter1d(spec, sig):
Spectrum after convolution
"""
sig = sig.clip(0.01) # forces zero sigmas to have 0.01 pixels
- p = int(np.ceil(np.max(3*sig)))
- m = 2*p + 1 # kernel size
+ p = int(np.ceil(np.max(3 * sig)))
+ m = 2 * p + 1 # kernel size
x2 = np.linspace(-p, p, m)**2
n = spec.size
a = np.zeros((m, n))
for j in range(m): # Loop over the small size of the kernel
- a[j, p:-p] = spec[j:n-m+j+1]
+ a[j, p:-p] = spec[j:n - m + j + 1]
- gau = np.exp(-x2[:, None]/(2*sig**2))
+ gau = np.exp(-x2[:, None] / (2 * sig**2))
gau /= np.sum(gau, 0)[None, :] # Normalize kernel
- conv_spectrum = np.sum(a*gau, 0)
+ conv_spectrum = np.sum(a * gau, 0)
return conv_spectrum
-def calibrate(wave, flux, mag, filtername = 'SLOAN_SDSS.r'):
+
+def calibrate(wave, flux, mag, filtername='SLOAN_SDSS.r'):
"""
Flux calibration of spectrum
@@ -164,11 +169,11 @@ def calibrate(wave, flux, mag, filtername = 'SLOAN_SDSS.r'):
"""
# Loading response curve
if filtername == '5100':
- wave0 = np.linspace(3000,10000,7000)
+ wave0 = np.linspace(3000, 10000, 7000)
response0 = np.zeros(7000)
response0[(wave0 > 5050) & (wave0 < 5150)] = 1.
else:
- filter_file = data_path + '/data/filter/' + filtername+'.filter'
+ filter_file = data_path + '/data/filter/' + filtername + '.filter'
wave0, response0 = readcol(filter_file)
# Setting the response
@@ -183,7 +188,7 @@ def calibrate(wave, flux, mag, filtername = 'SLOAN_SDSS.r'):
preflux = np.sum(flux * response * np.mean(np.diff(wave))) / np.sum(response * np.mean(np.diff(wave)))
# Real flux from magnitude for given filter
- realflux = (mag * u.STmag).to(u.erg/u.s/u.cm**2/u.AA).value
+ realflux = (mag * u.STmag).to(u.erg / u.s / u.cm**2 / u.AA).value
# Normalization
flux_ratio = realflux / preflux
@@ -194,7 +199,8 @@ def calibrate(wave, flux, mag, filtername = 'SLOAN_SDSS.r'):
# ----------------
# Reddening Module
-def Calzetti_Law(wave, Rv = 4.05):
+
+def Calzetti_Law(wave, Rv=4.05):
"""
Dust Extinction Curve of Calzetti et al. (2000)
@@ -210,18 +216,19 @@ def Calzetti_Law(wave, Rv = 4.05):
float
Extinction value corresponding to the input wavelength
"""
- wave_number = 1./(wave * 1e-4)
+ wave_number = 1. / (wave * 1e-4)
reddening_curve = np.zeros(len(wave))
idx = (wave >= 1200) & (wave < 6300)
- reddening_curve[idx] = 2.659 * ( -2.156 + 1.509 * wave_number[idx] - 0.198 * \
- (wave_number[idx] ** 2)) + 0.011 * (wave_number[idx] **3 ) + Rv
+ reddening_curve[idx] = 2.659 * (-2.156 + 1.509 * wave_number[idx] - 0.198 *
+ (wave_number[idx] ** 2)) + 0.011 * (wave_number[idx] ** 3) + Rv
idx = (wave >= 6300) & (wave <= 22000)
- reddening_curve[idx] = 2.659 * ( -1.857 + 1.040 * wave_number[idx]) + Rv
+ reddening_curve[idx] = 2.659 * (-1.857 + 1.040 * wave_number[idx]) + Rv
return reddening_curve
-def reddening(wave, flux, ebv = 0.0, law = 'calzetti', Rv = 4.05):
+
+def reddening(wave, flux, ebv=0.0, law='calzetti', Rv=4.05):
"""
Reddening an input spectra through a given reddening curve.
@@ -243,7 +250,7 @@ def reddening(wave, flux, ebv = 0.0, law = 'calzetti', Rv = 4.05):
float array
Flux of spectra after reddening
"""
- curve = Calzetti_Law(wave, Rv = Rv)
+ curve = Calzetti_Law(wave, Rv=Rv)
fluxNew = flux / (10. ** (0.4 * ebv * curve))
return fluxNew
@@ -251,6 +258,7 @@ def reddening(wave, flux, ebv = 0.0, law = 'calzetti', Rv = 4.05):
# Emission Lines
################
+
def SingleEmissinoLine(wave, line_wave, FWHM_inst):
"""
Profile of single emission line (Gaussian profile)
@@ -273,6 +281,7 @@ def SingleEmissinoLine(wave, line_wave, FWHM_inst):
flux = norm.pdf(wave, line_wave, sigma)
return flux
+
class EmissionLineTemplate():
"""
Template for the emission lines
@@ -290,7 +299,7 @@ class EmissionLineTemplate():
by default 'hii'
"""
- def __init__(self, config, lam_range = [500, 15000], dlam = 0.1, model = 'hii'):
+ def __init__(self, config, lam_range=[500, 15000], dlam=0.1, model='hii'):
self.lam_range = lam_range
self.wave = np.arange(lam_range[0], lam_range[1], 0.1)
@@ -305,8 +314,8 @@ class EmissionLineTemplate():
line_table = fits.open(flux_table_file)
# Emission line list
- line_list = line_table[1].data
- line_wave = line_list['Wave']
+ line_list = line_table[1].data
+ line_wave = line_list['Wave']
line_names = line_list['Name']
w = (line_wave > lam_range[0]) & (line_wave < lam_range[1])
@@ -315,7 +324,7 @@ class EmissionLineTemplate():
# Make parameter grid
grid = line_table[2].data
- self.logz_grid = grid['logZ']
+ self.logz_grid = grid['logZ']
# Narrow line region model of
if model == 'nlr':
@@ -325,8 +334,8 @@ class EmissionLineTemplate():
line_table = fits.open(flux_table_file)
# Emission line list
- line_list = line_table[1].data
- line_wave = line_list['Wave']
+ line_list = line_table[1].data
+ line_wave = line_list['Wave']
line_names = line_list['Name']
w = (line_wave > lam_range[0]) & (line_wave < lam_range[1])
@@ -335,7 +344,7 @@ class EmissionLineTemplate():
# Make parameter grid
grid = line_table[2].data
- self.logz_grid = grid['logZ']
+ self.logz_grid = grid['logZ']
# Flux ratio
flux_ratio = line_table[3].data
@@ -344,14 +353,15 @@ class EmissionLineTemplate():
# Make emission line
nline = len(line_wave)
for i in range(nline):
- if i==0:
- emission_line = SingleEmissinoLine(self.wave, line_wave[i], self.FWHM_inst)
+ if i == 0:
+ emission_line = SingleEmissinoLine(self.wave, line_wave[i], self.FWHM_inst)
emission_lines = emission_line
else:
- emission_line = SingleEmissinoLine(self.wave, line_wave[i], self.FWHM_inst)
+ emission_line = SingleEmissinoLine(self.wave, line_wave[i], self.FWHM_inst)
emission_lines = np.vstack((emission_lines, emission_line))
self.emission_lines = emission_lines.T
+
class HII_Region():
"""
@@ -380,29 +390,28 @@ class HII_Region():
The value of logZ should be between -2 and 0.5.
"""
- def __init__(self, config, temp, halpha = 100.0, logz = 0.0,
- vel = 100.0, vdisp = 120.0, ebv = 0.1):
+ def __init__(self, config, temp, halpha=100.0, logz=0.0, vel=100.0, vdisp=120.0, ebv=0.1):
# Check Input Parameters
- #if (halpha < 0):
+ # if (halpha < 0):
# print("Notice: Your input Halpha flux (halpha) is < 0 erg/s/A/cm^2. ")
if (logz >= -2) & (logz <= 0.5):
indz = np.argmin(np.abs(logz - temp.logz_grid))
flux_ratio = temp.flux_ratio[indz, :]
else:
raise ValueError('Input gas-phase metallicity (logz) should be [-2, 0.5]!')
- #if (ebv < 0):
+ # if (ebv < 0):
# ebv = 0
# print('Notice: Your input dust extinction (ebv) is < 0 mag, which will be automatically adjusted to 0 mag. ')
# Make emission line spectra through adding emission lines
emlines = temp.emission_lines * flux_ratio
- flux_combine = np.sum(emlines, axis = 1)
+ flux_combine = np.sum(emlines, axis=1)
flux_calibrate = flux_combine * halpha # Units: erg/s/A/cm^2
# Dust attenuation
if np.isscalar(ebv):
- flux_dust = reddening(temp.wave, flux_calibrate, ebv = ebv)
+ flux_dust = reddening(temp.wave, flux_calibrate, ebv=ebv)
# Broadening caused by Velocity Dispersion
velscale = 10
@@ -412,7 +421,7 @@ class HII_Region():
sigma_gas = vdisp / velscale # in pixel
sigma_LSF = temp.FWHM_inst / (np.exp(logLam)) * 3e5 / velscale # in pixel
- if sigma_gas>0:
+ if sigma_gas > 0:
sigma_dif = np.zeros(len(flux_logwave))
idx = (sigma_gas > sigma_LSF)
sigma_dif[idx] = np.sqrt(sigma_gas ** 2. - sigma_LSF[idx] ** 2.)
@@ -435,6 +444,7 @@ class HII_Region():
# AGN Spectra
#############
+
class AGN_NLR():
"""
@@ -463,8 +473,7 @@ class AGN_NLR():
The value of logZ should be between -2 and 0.5.
"""
- def __init__(self, config, temp, halpha = 100.0, logz = 0.0,
- vel = 100.0, vdisp = 120.0, ebv = 0.1):
+ def __init__(self, config, temp, halpha=100.0, logz=0.0, vel=100.0, vdisp=120.0, ebv=0.1):
if (logz >= -2.3) & (logz <= 0.54):
indz = np.argmin(np.abs(logz - temp.logz_grid))
@@ -473,13 +482,13 @@ class AGN_NLR():
raise ValueError('The value of logZ is not in the range of [-2.3, 0.54]')
# Make emission line spectra through adding emission lines
- emlines = temp.emission_lines * (flux_ratio / flux_ratio[6] )
- flux_combine = np.sum(emlines, axis = 1)
+ emlines = temp.emission_lines * (flux_ratio / flux_ratio[6])
+ flux_combine = np.sum(emlines, axis=1)
flux_calibrate = flux_combine * halpha # Units: 1e-17 erg/s/A/cm^2
# Dust attenuation
if np.isscalar(ebv):
- flux_dust = reddening(temp.wave, flux_calibrate, ebv = ebv)
+ flux_dust = reddening(temp.wave, flux_calibrate, ebv=ebv)
# Broadening caused by Velocity Dispersion
velscale = 10
@@ -489,7 +498,7 @@ class AGN_NLR():
sigma_gas = vdisp / velscale # in pixel
sigma_LSF = temp.FWHM_inst / (np.exp(logLam)) * 3e5 / velscale # in pixel
- if sigma_gas>0:
+ if sigma_gas > 0:
sigma_dif = np.zeros(len(flux_logwave))
idx = (sigma_gas > sigma_LSF)
sigma_dif[idx] = np.sqrt(sigma_gas ** 2. - sigma_LSF[idx] ** 2.)
@@ -505,6 +514,7 @@ class AGN_NLR():
self.wave = config.wave
self.flux = flux_red
+
class AGN_BLR():
"""
@@ -526,8 +536,8 @@ class AGN_BLR():
Wavelength range, by default [500, 15000]
"""
- def __init__(self, config, hbeta_flux = 100.0, hbeta_fwhm = 2000.0, ebv = 0.1,
- vel = 0., lam_range = [500, 15000]):
+ def __init__(self, config, hbeta_flux=100.0, hbeta_fwhm=2000.0, ebv=0.1,
+ vel=0., lam_range=[500, 15000]):
wave_rest = np.arange(lam_range[0], lam_range[1], 0.1)
@@ -537,23 +547,23 @@ class AGN_BLR():
# Make emission lines
for i in range(len(line_names)):
- if i==0:
- emission_line = SingleEmissinoLine(wave_rest, line_waves[i],
- hbeta_fwhm / 3e5 * line_waves[i])
+ if i == 0:
+ emission_line = SingleEmissinoLine(wave_rest, line_waves[i],
+ hbeta_fwhm / 3e5 * line_waves[i])
emission_lines = emission_line
else:
- emission_line = SingleEmissinoLine(wave_rest, line_waves[i],
- hbeta_fwhm / 3e5 * line_waves[i])
+ emission_line = SingleEmissinoLine(wave_rest, line_waves[i],
+ hbeta_fwhm / 3e5 * line_waves[i])
emission_lines = np.vstack((emission_lines, emission_line))
emlines = emission_lines.T * line_ratio
- flux_combine = np.sum(emlines, axis = 1)
+ flux_combine = np.sum(emlines, axis=1)
# Flux callibration
flux_calibrate = flux_combine * hbeta_flux # Units: 1e-17 erg/s/A/cm^2
# Dust attenuation
if np.isscalar(ebv):
- flux_dust = reddening(wave_rest, flux_calibrate, ebv = ebv)
+ flux_dust = reddening(wave_rest, flux_calibrate, ebv=ebv)
else:
flux_dust = flux_calibrate
@@ -565,6 +575,7 @@ class AGN_BLR():
self.wave = config.wave
self.flux = flux_red
+
class AGN_FeII():
"""
Class for FeII emission lines of AGN
@@ -583,18 +594,18 @@ class AGN_FeII():
Dust extinction, by default 0.1
"""
- def __init__(self, config, hbeta_broad = 100.0, r4570 = 0.4, ebv = 0.1, vel = 100.0):
+ def __init__(self, config, hbeta_broad=100.0, r4570=0.4, ebv=0.1, vel=100.0):
filename = data_path + '/data/FeII.AGN.fits'
# Loading FeII template
hdulist = fits.open(filename)
data = hdulist[1].data
- wave_rest = data['WAVE']
+ wave_rest = data['WAVE']
flux_model = data['FLUX']
# Determine the flux of FeII
- Fe4570_temp = 100
+ Fe4570_temp = 100
Fe4570_model = hbeta_broad * r4570
Ratio_Fe4570 = Fe4570_model / Fe4570_temp
@@ -603,18 +614,19 @@ class AGN_FeII():
# Dust attenuation
if np.isscalar(ebv):
- flux_dust = reddening(wave_rest, flux_calibrate, ebv = ebv)
+ flux_dust = reddening(wave_rest, flux_calibrate, ebv=ebv)
else:
flux_dust = flux_calibrate
# Redshift
redshift = vel / 3e5
- wave_r = wave_rest * (1 + redshift)
+ wave_r = wave_rest * (1 + redshift)
flux_red = np.interp(config.wave, wave_r, flux_dust)
self.wave = config.wave
self.flux = flux_red
+
class AGN_Powerlaw():
"""
@@ -634,28 +646,29 @@ class AGN_Powerlaw():
Dust extinction, by default 0.1
"""
- def __init__(self, config, m5100 = 1000.0, alpha = -1.5, vel = 100.0, ebv = 0.1):
+ def __init__(self, config, m5100=1000.0, alpha=-1.5, vel=100.0, ebv=0.1):
- wave_rest = np.linspace(1000,20000,10000)
- flux = wave_rest ** alpha
+ wave_rest = np.linspace(1000, 20000, 10000)
+ flux = wave_rest ** alpha
# Flux calibration
flux_calibrate = calibrate(wave_rest, flux, m5100, filtername='5100')
# Dust attenuation
if np.isscalar(ebv):
- flux_dust = reddening(wave_rest, flux_calibrate, ebv = ebv)
+ flux_dust = reddening(wave_rest, flux_calibrate, ebv=ebv)
else:
flux_dust = flux_calibrate
# Redshift
redshift = vel / 3e5
- wave_r = wave_rest * (1 + redshift)
+ wave_r = wave_rest * (1 + redshift)
flux_red = np.interp(config.wave, wave_r, flux_dust)
self.wave = config.wave
self.flux = flux_red
+
class AGN():
"""
@@ -689,12 +702,12 @@ class AGN():
dist : float, optional
Luminosity distance of AGN, by default 20.0Mpc
"""
- def __init__(self, config, nlr_template, bhmass = 1e6, edd_ratio = 0.05,
- halpha_broad = 100.0, halpha_narrow = 100.0, vdisp_broad = 5000.0, vdisp_narrow = 500.0,
- vel = 1000.0, logz = 0.0, ebv = 0.1, dist = 20.0):
+ def __init__(self, config, nlr_template, bhmass=1e6, edd_ratio=0.05,
+ halpha_broad=100.0, halpha_narrow=100.0, vdisp_broad=5000.0, vdisp_narrow=500.0,
+ vel=1000.0, logz=0.0, ebv=0.1, dist=20.0):
# Check Input Parameters
- if (bhmass <0):
+ if (bhmass < 0):
raise Exception("Input black hole mass (bhmass) should be >= 0 solarmass.")
if (edd_ratio < 0):
raise Exception("Input Eddington ratio (edd_ratio) should be >= 0.")
@@ -716,22 +729,23 @@ class AGN():
self.flux = self.wave * 0
if (vdisp_narrow > 0) & (halpha_narrow > 0):
- NLR = AGN_NLR(config, nlr_template, halpha = halpha_narrow, logz = logz,
- vel = vel, vdisp = vdisp_narrow, ebv = ebv)
+ NLR = AGN_NLR(config, nlr_template, halpha=halpha_narrow, logz=logz,
+ vel=vel, vdisp=vdisp_narrow, ebv=ebv)
self.flux = self.flux + NLR.flux
if (halpha_broad > 0) & (vdisp_broad > 0):
- BLR = AGN_BLR(config, hbeta_flux = halpha_broad / 2.579,
- hbeta_fwhm = vdisp_broad / 2.355, ebv = ebv, vel = vel)
+ BLR = AGN_BLR(config, hbeta_flux=halpha_broad / 2.579,
+ hbeta_fwhm=vdisp_broad / 2.355, ebv=ebv, vel=vel)
self.flux = self.flux + BLR.flux
if (bhmass > 0) & (edd_ratio > 0):
- m5100 = BHmass_to_M5100(bhmass, edd_ratio = edd_ratio, dist = dist)
- PL = AGN_Powerlaw(config, m5100 = m5100, ebv = ebv, vel = vel)
- Fe = AGN_FeII(config, hbeta_broad = halpha_broad / 2.579, ebv = ebv, vel = vel)
+ m5100 = BHmass_to_M5100(bhmass, edd_ratio=edd_ratio, dist=dist)
+ PL = AGN_Powerlaw(config, m5100=m5100, ebv=ebv, vel=vel)
+ Fe = AGN_FeII(config, hbeta_broad=halpha_broad / 2.579, ebv=ebv, vel=vel)
self.flux = self.flux + PL.flux + Fe.flux
-def BHmass_to_M5100(bhmass, edd_ratio = 0.05, dist = 21.0):
+
+def BHmass_to_M5100(bhmass, edd_ratio=0.05, dist=21.0):
"""
Caculate magnitude at 5100A according to the black hole mass
@@ -765,16 +779,6 @@ def BHmass_to_M5100(bhmass, edd_ratio = 0.05, dist = 21.0):
# Stellar Spectra
#################
-"""
- Extract the age and metallicity from the name of a file of
- the MILES library of Single Stellar Population models as
- downloaded from http://miles.iac.es/ as of 2016
-
- :param filename: string possibly including full path
- (e.g. 'miles_library/Mun1.30Zm0.40T03.9811.fits')
- :return: age (Gyr), [M/H]
-
- """
def age_metal(filename):
"""
@@ -799,8 +803,8 @@ def age_metal(filename):
This is not a standard MILES filename
"""
s = path.basename(filename)
- age = float(s[s.find("T")+1:s.find("_iPp0.00_baseFe.fits")])
- metal = s[s.find("Z")+1:s.find("T")]
+ age = float(s[s.find("T") + 1:s.find("_iPp0.00_baseFe.fits")])
+ metal = s[s.find("Z") + 1:s.find("T")]
if "m" in metal:
metal = -float(metal[1:])
elif "p" in metal:
@@ -810,6 +814,7 @@ def age_metal(filename):
return age, metal
+
class StellarContinuumTemplate(object):
"""
Class of single stellar population template.
@@ -826,9 +831,9 @@ class StellarContinuumTemplate(object):
normalize : bool, optional
Set to True to normalize each template to mean=1, by default False
"""
- def __init__(self, config, velscale = 50,
- pathname = data_path + '/data/EMILES/Ech*_baseFe.fits',
- normalize = False):
+ def __init__(self, config, velscale=50,
+ pathname=data_path + '/data/EMILES/Ech*_baseFe.fits',
+ normalize=False):
FWHM_inst = config.inst_fwhm
@@ -849,9 +854,9 @@ class StellarContinuumTemplate(object):
hdu = fits.open(files[0])
ssp = hdu[0].data
h2 = hdu[0].header
- lam_range_temp = h2['CRVAL1'] + np.array([0, h2['CDELT1']*(h2['NAXIS1']-1)])
+ lam_range_temp = h2['CRVAL1'] + np.array([0, h2['CDELT1'] * (h2['NAXIS1'] - 1)])
sspNew, log_lam_temp = log_rebin(lam_range_temp, ssp, velscale=velscale)[:2]
- #wave=((np.arange(hdr['NAXIS1'])+1.0)-hdr['CRPIX1'])*hdr['CDELT1']+hdr['CRVAL1']
+ # wave=((np.arange(hdr['NAXIS1'])+1.0)-hdr['CRPIX1'])*hdr['CDELT1']+hdr['CRVAL1']
templates = np.empty((sspNew.size, n_ages, n_metal))
age_grid = np.empty((n_ages, n_metal))
@@ -873,19 +878,19 @@ class StellarContinuumTemplate(object):
Emile_FWHM[np.where((Emile_wave >= 3060) & (Emile_wave < 3540))] = 3.
Emile_FWHM[np.where((Emile_wave >= 3540) & (Emile_wave < 8950))] = 2.5
Lwave = Emile_wave[np.where(Emile_wave >= 8950)]
- Emile_FWHM[np.where(Emile_wave >= 8950)]=60*2.35/3.e5*Lwave # sigma=60km/s at lambda > 8950
+ Emile_FWHM[np.where(Emile_wave >= 8950)] = 60 * 2.35 / 3.e5 * Lwave # sigma=60km/s at lambda > 8950
LSF = Emile_FWHM
- FWHM_eff=Emile_FWHM.copy() # combined FWHM from stellar library and instrument(input)
+ FWHM_eff = Emile_FWHM.copy() # combined FWHM from stellar library and instrument(input)
if np.isscalar(FWHM_inst):
FWHM_eff[Emile_FWHM < FWHM_inst] = FWHM_inst
LSF[Emile_FWHM < FWHM_inst] = FWHM_inst
else:
FWHM_eff[Emile_FWHM < FWHM_inst] = FWHM_inst[Emile_FWHM < FWHM_inst]
LSF[Emile_FWHM < FWHM_inst] = FWHM_inst[Emile_FWHM < FWHM_inst]
- FWHM_dif = np.sqrt(FWHM_eff**2 - Emile_FWHM**2)
- sigma_dif = FWHM_dif/2.355/h2['CDELT1'] # Sigma difference in pixels
+ FWHM_dif = np.sqrt(FWHM_eff**2 - Emile_FWHM**2)
+ sigma_dif = FWHM_dif / 2.355 / h2['CDELT1'] # Sigma difference in pixels
# Here we make sure the spectra are sorted in both [M/H] and Age
# along the two axes of the rectangular grid of templates.
@@ -898,14 +903,14 @@ class StellarContinuumTemplate(object):
ssp = ndimage.gaussian_filter1d(ssp, sigma_dif)
else:
ssp = gaussian_filter1d(ssp, sigma_dif) # convolution with variable sigma
- sspNew = log_rebin(lam_range_temp, ssp, velscale=velscale)[0]
+ sspNew = log_rebin(lam_range_temp, ssp, velscale=velscale)[0]
if normalize:
sspNew /= np.mean(sspNew)
templates[:, j, k] = sspNew
- age_grid[j, k] = age
+ age_grid[j, k] = age
metal_grid[j, k] = metal
- self.templates = templates/np.median(templates) # Normalize by a scalar
+ self.templates = templates / np.median(templates) # Normalize by a scalar
self.log_lam_temp = log_lam_temp
self.age_grid = age_grid
self.metal_grid = metal_grid
@@ -920,18 +925,19 @@ class StellarContinuumTemplate(object):
massfile = isedpath + 'out_mass_CH_PADOVA00'
n_metal = self.n_metal
n_ages = self.n_ages
- fage = self.age_grid[:,0]
+ # fage = self.age_grid[:,0]
- fMs = np.zeros((n_ages,n_metal))
+ fMs = np.zeros((n_ages, n_metal))
Metal, Age, Ms = readcol(massfile, usecols=(2, 3, 6))
for i in range(n_metal):
for j in range(self.n_ages):
locmin = np.argmin(abs(Metal - self.metal_grid[j, i])) & np.argmin(abs(Age - self.age_grid[j, i]))
- fMs[j,i] = Ms[locmin]
+ fMs[j, i] = Ms[locmin]
return fMs
+
class StellarContinuum():
"""
The class of stellar continuum
@@ -955,8 +961,8 @@ class StellarContinuum():
ebv : float, optional
Dust extinction, by default 0.1
"""
- def __init__(self, config, template, mag = 15.0, age = 1.0, feh = 0.0,
- vel = 100.0, vdisp = 100.0, ebv = 0.1):
+ def __init__(self, config, template, mag=15.0, age=1.0, feh=0.0,
+ vel=100.0, vdisp=100.0, ebv=0.1):
# Check Input Parameters
if (mag > 26) or (mag < 8):
@@ -967,24 +973,23 @@ class StellarContinuum():
print("Notice: Your input median metallicity (feh) is beyond the range of stellar template [-2.32, 0.22], which will be automatically adjusted to the upper limit.")
if (feh < -2.32):
raise Exception('Your input median metallicity (feh) is beyond the range of stellar template [-2.32, 0.22]')
- #if (ebv < 0):
+ # if (ebv < 0):
# ebv = 0
# print('Notice: Your input dust extinction (ebv) is < 0 mag, which will be automatically adjusted to 0 mag. ')
-
# -----------------
# Stellar Continuum
SSP_temp = template.templates
# Select metal bins
- metals = template.metal_grid[0,:]
+ metals = template.metal_grid[0, :]
minloc = np.argmin(abs(feh - metals))
tpls = SSP_temp[:, :, minloc]
- fmass = template.fmass_ssp()[:, minloc]
+ # fmass = template.fmass_ssp()[:, minloc]
# Select age bins
- Ages = template.age_grid[:,0]
- minloc = np.argmin(abs(age-Ages))
+ Ages = template.age_grid[:, 0]
+ minloc = np.argmin(abs(age - Ages))
Stellar = tpls[:, minloc]
wave = np.exp(template.log_lam_temp)
@@ -993,7 +998,7 @@ class StellarContinuum():
sigma_gal = vdisp / template.velscale # in pixel
sigma_LSF = template.LSF / template.velscale # in pixel
- if sigma_gal>0:
+ if sigma_gal > 0:
sigma_dif = np.zeros(len(Stellar))
idx = (sigma_gal > sigma_LSF)
sigma_dif[idx] = np.sqrt(sigma_gal ** 2. - sigma_LSF[idx] ** 2.)
@@ -1007,7 +1012,7 @@ class StellarContinuum():
# Dust Reddening
if np.isscalar(ebv):
- flux0 = reddening(wave, flux0, ebv = ebv)
+ flux0 = reddening(wave, flux0, ebv=ebv)
# Redshift
redshift = vel / 3e5
@@ -1027,6 +1032,7 @@ class StellarContinuum():
# Single Star Spectra
#####################
+
class SingleStarTemplate():
"""
Class of single stellar template
@@ -1038,18 +1044,18 @@ class SingleStarTemplate():
velscale : float, option
velocity scale in km/s per pixels, by default 20.0km/s
"""
- def __init__(self, config, velscale = 20):
+ def __init__(self, config, velscale=20):
FWHM_inst = config.inst_fwhm
filename = data_path + '/data/Starlib.XSL.fits'
hdulist = fits.open(filename)
- lam = hdulist[1].data['Wave']
+ lam = hdulist[1].data['Wave']
flux = hdulist[2].data
- par = hdulist[3].data
+ par = hdulist[3].data
lam_range_temp = np.array([3500, 12000])
- TemNew, log_lam_temp = log_rebin(lam_range_temp, flux[1, :], velscale = velscale)[:2]
+ TemNew, log_lam_temp = log_rebin(lam_range_temp, flux[1, :], velscale=velscale)[:2]
# FWHM of XLS templates
Temp_wave = np.exp(log_lam_temp)
@@ -1057,18 +1063,18 @@ class SingleStarTemplate():
Temp_FWHM[(Temp_wave < 5330)] = 13 * 2.35 / 3e5 * Temp_wave[(Temp_wave < 5330)] # sigma = 13km/s at lambda <5330
Temp_FWHM[(Temp_wave >= 5330) & (Temp_wave < 9440)] = 11 * 2.35 / 3e5 * Temp_wave[(Temp_wave >= 5330) & (Temp_wave < 9440)]
# sigma = 13km/s at 5330 < lambda < 9440
- Temp_FWHM[(Temp_wave >= 9440)] = 16 * 2.35 / 3e5 * Temp_wave[(Temp_wave >= 9440)] # sigma=16km/s at lambda > 9440
+ Temp_FWHM[(Temp_wave >= 9440)] = 16 * 2.35 / 3e5 * Temp_wave[(Temp_wave >= 9440)] # sigma=16km/s at lambda > 9440
LSF = Temp_FWHM
FWHM_eff = Temp_FWHM.copy() # combined FWHM from stellar library and instrument(input)
if np.isscalar(FWHM_inst):
FWHM_eff[Temp_FWHM < FWHM_inst] = FWHM_inst
- LSF[Temp_FWHM < FWHM_inst] = FWHM_inst
+ LSF[Temp_FWHM < FWHM_inst] = FWHM_inst
else:
FWHM_eff[Temp_FWHM < FWHM_inst] = FWHM_inst[Temp_FWHM < FWHM_inst]
- LSF[Temp_FWHM < FWHM_inst] = FWHM_inst[Temp_FWHM < FWHM_inst]
- FWHM_dif = np.sqrt(FWHM_eff ** 2 - Temp_FWHM ** 2)
+ LSF[Temp_FWHM < FWHM_inst] = FWHM_inst[Temp_FWHM < FWHM_inst]
+ FWHM_dif = np.sqrt(FWHM_eff ** 2 - Temp_FWHM ** 2)
sigma_dif = FWHM_dif / 2.355 / (lam[1] - lam[0]) # Sigma difference in pixels
temp = np.empty((TemNew.size, par.size))
@@ -1080,16 +1086,16 @@ class SingleStarTemplate():
temp1 = gaussian_filter1d(temp0, sigma_dif) # convolution with variable sigma
tempNew = temp1 / np.mean(temp1)
temp[:, i] = tempNew
-
- self.templates = temp
+ self.templates = temp
self.log_lam_temp = log_lam_temp
self.teff_grid = par['Teff']
- self.feh_grid = par['FeH']
+ self.feh_grid = par['FeH']
self.logg_grid = par['logg']
- self.LSF = Temp_FWHM
- self.velscale = velscale
+ self.LSF = Temp_FWHM
+ self.velscale = velscale
+
class SingleStar():
"""
@@ -1113,7 +1119,7 @@ class SingleStar():
Dust extinction, by default 0.1
"""
- def __init__(self, config, template, mag = 15.0, teff = 10000.0, feh = 0.0, vel = 100.0, ebv = 0.0):
+ def __init__(self, config, template, mag=15.0, teff=10000.0, feh=0.0, vel=100.0, ebv=0.0):
# Check Input Parameters
if (mag > 26) or (mag < 8):
@@ -1130,7 +1136,6 @@ class SingleStar():
if (feh < -2.69):
raise Exception('Your input metallicity (feh) is beyond the range of stellar template [-2.69, 0.81]')
-
StarTemp = template.templates
# Select metal bins
@@ -1139,14 +1144,14 @@ class SingleStar():
# Select Teff bins
Teff_FeH = template.teff_grid[idx_FeH]
- minloc = np.argmin(abs(teff - Teff_FeH))
+ minloc = np.argmin(abs(teff - Teff_FeH))
starspec = tpls[:, minloc]
wave = np.exp(template.log_lam_temp)
# Dust Reddening
if np.isscalar(ebv):
- starspec = reddening(wave, starspec, ebv = ebv)
+ starspec = reddening(wave, starspec, ebv=ebv)
# Redshift
redshift = vel / 3e5
diff --git a/tests/__pycache__/test_cube3d.cpython-312-pytest-7.4.4.pyc b/tests/__pycache__/test_cube3d.cpython-312-pytest-7.4.4.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..c42ef063619d2b45aedb9f89196f88dc6187ea3f
Binary files /dev/null and b/tests/__pycache__/test_cube3d.cpython-312-pytest-7.4.4.pyc differ
diff --git a/tests/__pycache__/test_map2d.cpython-312-pytest-7.4.4.pyc b/tests/__pycache__/test_map2d.cpython-312-pytest-7.4.4.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4bba01366d9257158d5a68282130eb697fe266e7
Binary files /dev/null and b/tests/__pycache__/test_map2d.cpython-312-pytest-7.4.4.pyc differ
diff --git a/tests/__pycache__/test_spec1d.cpython-312-pytest-7.4.4.pyc b/tests/__pycache__/test_spec1d.cpython-312-pytest-7.4.4.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..031aeb3cad20ad7d1b708a7ee3fb292f129890bf
Binary files /dev/null and b/tests/__pycache__/test_spec1d.cpython-312-pytest-7.4.4.pyc differ