Add & Fix final format
This commit is contained in:
parent
5e8e21b66b
commit
32403fdce4
1 changed files with 62 additions and 23 deletions
85
spectrum.py
85
spectrum.py
|
@ -7,6 +7,7 @@ import sys
|
||||||
import shelve
|
import shelve
|
||||||
import pathlib
|
import pathlib
|
||||||
from scipy.ndimage import rotate
|
from scipy.ndimage import rotate
|
||||||
|
from astropy.io import fits
|
||||||
|
|
||||||
cache , filename , output , calibration , intensity_calibration , verbose , no_cache = '' , None , None , None , None , False, False
|
cache , filename , output , calibration , intensity_calibration , verbose , no_cache = '' , None , None , None , None , False, False
|
||||||
if len( sys.argv ) < 2:
|
if len( sys.argv ) < 2:
|
||||||
|
@ -107,7 +108,10 @@ if verbose:
|
||||||
\n===========================================' )
|
\n===========================================' )
|
||||||
# TODO: check in advance file to check if exists or writeable
|
# TODO: check in advance file to check if exists or writeable
|
||||||
|
|
||||||
data = utils.load( filename )
|
hdul = fits.open( filename )
|
||||||
|
data = hdul[0].data
|
||||||
|
head = hdul[0].header
|
||||||
|
hdul.close()
|
||||||
if verbose:
|
if verbose:
|
||||||
print( 'data loaded' )
|
print( 'data loaded' )
|
||||||
|
|
||||||
|
@ -570,7 +574,7 @@ if intensity != None:
|
||||||
|
|
||||||
with shelve.open( str( intensity_file ) ) as storage:
|
with shelve.open( str( intensity_file ) ) as storage:
|
||||||
intensity_stairs = storage[ 'data' ]
|
intensity_stairs = storage[ 'data' ]
|
||||||
intensity_wavelengths = storage[ 'wavelength' ]
|
intensity_wavelengths = storage[ 'wavelength' ] * 1e-10
|
||||||
|
|
||||||
final_intensity = np.zeros( len( wavelengths ) )
|
final_intensity = np.zeros( len( wavelengths ) )
|
||||||
for index in range( len( wavelengths ) ):
|
for index in range( len( wavelengths ) ):
|
||||||
|
@ -580,35 +584,37 @@ if intensity != None:
|
||||||
intensity_wavelengths,
|
intensity_wavelengths,
|
||||||
intensity_wavelength ,
|
intensity_wavelength ,
|
||||||
)
|
)
|
||||||
|
if len( intensity_index ) != 1:
|
||||||
|
break
|
||||||
|
intensity_index = intensity_index[0]
|
||||||
|
if abs( intensity_wavelength - intensity_wavelengths[ intensity_index ] ) > 5e-10:
|
||||||
|
break
|
||||||
index_stair = np.where(
|
index_stair = np.where(
|
||||||
intensity_stairs[
|
intensity_stairs[
|
||||||
: ,
|
: ,
|
||||||
intensity_index,
|
intensity_index,
|
||||||
0 ,
|
0 ,
|
||||||
] < intensity_value
|
] < intensity_value
|
||||||
)[0][-1]
|
)
|
||||||
stair_before = intensity_stairs[ index_stair , intensity_index ]
|
if len( index_stair[0] ) == 0:
|
||||||
stair_after = intensity_stairs[ index_stair - 1 , intensity_index ]
|
index_stair = intensity_stairs.shape[0] - 1
|
||||||
|
else:
|
||||||
|
index_stair = index_stair[0][0]
|
||||||
|
|
||||||
|
stair_before = intensity_stairs[ index_stair , intensity_index , 0 ]
|
||||||
|
stair_after = intensity_stairs[ index_stair - 1 , intensity_index , 0 ]
|
||||||
step = 0.2
|
step = 0.2
|
||||||
start_step = step * ( stairs.shape[0] - index_stair - 1 )
|
|
||||||
|
|
||||||
index_polyval = np.polyfit(
|
index_polyval = np.polyfit( # fraction stair index from intensity value
|
||||||
[ index_stair , index_stair - 1 ],
|
|
||||||
[ stair_before , stair_after ]
|
|
||||||
)
|
|
||||||
|
|
||||||
stair_polyval = np.polyfit(
|
|
||||||
[ stair_before , stair_after ],
|
[ stair_before , stair_after ],
|
||||||
[ 0 , step ]
|
[ index_stair , index_stair - 1 ],
|
||||||
|
1 ,
|
||||||
)
|
)
|
||||||
|
true_intensity_value = ( intensity_stairs.shape[0] - np.polyval( index_polyval , intensity_value ) - 1 ) * step
|
||||||
|
if true_intensity_value < 0:
|
||||||
|
true_intensity_value = 0
|
||||||
|
|
||||||
final_intensity[index] = start_step + np.polyval( # the step fraction
|
final_intensity[index] = true_intensity_value
|
||||||
stair_polyval,
|
|
||||||
np.polyval( index_polyval , intensity_index ), # the stair "fraction"
|
|
||||||
)
|
|
||||||
|
|
||||||
plt.plot( final_intensity )
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
if verbose:
|
if verbose:
|
||||||
print( 'intensity calibration finished' )
|
print( 'intensity calibration finished' )
|
||||||
|
@ -621,9 +627,42 @@ if output == None:
|
||||||
else:
|
else:
|
||||||
if verbose:
|
if verbose:
|
||||||
print( 'storing result in ' + output )
|
print( 'storing result in ' + output )
|
||||||
output_file = pathlib.Path( output )
|
main_hdu = fits.PrimaryHDU( final_intensity )
|
||||||
with shelve.open( str( output_file ) ) as output:
|
main_hdu.header[ 'CRVAL1' ] = wavelengths[0]
|
||||||
output[ 'data' ] = mean_data
|
main_hdu.header[ 'CDELT1' ] = wavelengths[1] - wavelengths[0]
|
||||||
|
main_hdu.header[ 'CTYPE1' ] = 'Wavelength'
|
||||||
|
main_hdu.header[ 'CUNIT1' ] = 'Angstrom'
|
||||||
|
main_hdu.header[ 'OBJNAME' ] = head[ 'OBJECT' ]
|
||||||
|
# missing from Naroo
|
||||||
|
#main_hdu.header[ 'OBSERVER' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'DATE-OBS' ] = head| '' ]
|
||||||
|
#main_hdu.header[ 'EXPTIME' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'TELESCOP' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'INSTRUME' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'RA' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'DEC' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'EQUINOX' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'MID-HJD' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'DETNAME' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'INSTRUME' ] = head[ '' ]
|
||||||
|
main_hdu.header[ 'RADECSYS' ] = 'FKS'
|
||||||
|
main_hdu.header[ 'OBS-ID' ] = head[ 'OBS_ID' ]
|
||||||
|
|
||||||
|
# BSS keywords
|
||||||
|
main_hdu.header[ 'BSS_VHEL' ] = 0
|
||||||
|
main_hdu.header[ 'BSS_TELL' ] = 'None'
|
||||||
|
main_hdu.header[ 'BSS_COM' ] = 'None'
|
||||||
|
# Not understood
|
||||||
|
# main_hdu.header[ 'BSS_ORD' ] = ?
|
||||||
|
# missing from Naroo
|
||||||
|
#main_hdu.header[ 'BSS_INST' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'BSS_SITE' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'BSS_LAT' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'BSS_LONG' ] = head[ '' ]
|
||||||
|
#main_hdu.header[ 'BSS_ELEV' ] = head[ '' ]
|
||||||
|
|
||||||
|
hdul = fits.HDUList( [ main_hdu ] )
|
||||||
|
hdul.writeto( output , overwrite = True )
|
||||||
if verbose:
|
if verbose:
|
||||||
print( 'output writing finished' )
|
print( 'output writing finished' )
|
||||||
print( '===========================================\
|
print( '===========================================\
|
||||||
|
|
Loading…
Reference in a new issue