From bc493177bd0f8c7f6648f4c1fe60645f6b2f057c Mon Sep 17 00:00:00 2001 From: linarphy Date: Tue, 16 May 2023 16:46:19 +0200 Subject: [PATCH] Add calibration (WIP) - Fix command parser - Add --calibration option - Add calibration (WIP) --- ETA.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 11 deletions(-) diff --git a/ETA.py b/ETA.py index f6b5247..01b7aff 100644 --- a/ETA.py +++ b/ETA.py @@ -8,12 +8,13 @@ from scipy.signal import convolve as sp_convolve from scipy.signal import find_peaks from scipy.ndimage import rotate -cache , filename , output = '' , None , None +cache , filename , output , calibration = '' , None , None , None if len( sys.argv ) < 2: raise Exception( 'ETA.py: type \'ETA.py -h\' for more information' ) -for i in range( 1 , len( sys.argv ) ): - arg = sys.argv[ i ] +argv , i = sys.argv[ 1 : ] , 0 +while i < len( argv ): + arg = argv[ i ] if arg[0] == '-': if len( arg ) < 2: raise Exception( 'ETA.py: unknown argument, type \'ETA.py -h\' for more information' ) @@ -27,23 +28,33 @@ for i in range( 1 , len( sys.argv ) ): elif arg == '-c': if i == len( sys.argv ) - 1: raise Exception( 'ETA.py: cache have to take a value' ) - arg[ i + 1 ] == '--cache=' + arg[ i + 1 ] + argv[ i + 1 ] = '--cache=' + argv[ i + 1 ] + i += 1 continue elif arg == '-o': if i == len( sys.argv ) - 1: raise Exception( 'ETA.py: output have to take a value' ) - arg[ i + 1 ] == '--output=' + arg[ i + 1 ] + argv[ i + 1 ] = '--output=' + argv[ i + 1 ] + i += 1 + continue + elif arg == '-a': + if i == len( sys.argv ) - 1: + raise Exception( 'ETA.py: calibration have to take a value' ) + argv[ i + 1 ] = '--calibration=' + argv[ i + 1 ] + i += 1 continue else: raise Exception( 'ETA.py: unknown argument "' + arg + '", type \'ETA.py -h\' for more information' ) if arg[1] == '-': # not elif because arg can change after last if if arg == '--help': print( 'ETA.py [options...] filename\ - \n -h --help show this help and quit\ - \n -v --version show version number and quit\ - \n -n --no-cache do not use cache and rewrite it\ - \n -c --cache use given cache\ - \n -o --output output file, default to standard output\ + \n -a --calibration calibration file, default to no calibration.\ + \n No calibration means no wavelength interpolation\ + \n -c --cache use given cache\ + \n -h --help show this help and quit\ + \n -n --no-cache do not use cache and rewrite it\ + \n -o --output output file, default to standard output\ + \n -v --version show version number and quit\ \n\ \nParse a naroo ETA fits' ) exit() @@ -56,14 +67,18 @@ for i in range( 1 , len( sys.argv ) ): cache = arg[ 8 : ] elif len( arg ) > 9 and arg[ : 9 ] == '--output=': output = arg[ 9 : ] + elif len( arg ) > 14 and arg[ : 14 ] == '--calibration=': + calibration = arg[ 14 : ] else: raise Exception( 'ETA.py: unknown argument "' + arg + '", type \'ETA.py -h\' for more information' ) else: raise Exception( 'ETA.py: this exception should never be raised' ) else: filename = arg + i += 1 if filename == None: raise Exception( 'ETA.py: filename should be given' ) +# TODO: check in advance file to check if exists or writeable data = utils.load( filename ) @@ -366,6 +381,28 @@ else: cache[ 'calibrations'] = calibrations cache[ 'stripes' ] = stripes +# Calibration + +if calibration != None: + calib_peaks = np.loadtxt( calibration ) + mean_calib_up = np.mean( data[ + calibrations[ 'top' ][ 'y' ][ 'min' ] : calibrations[ 'top' ][ 'y' ][ 'max' ], + border[ 'x' ][ 'min' ] : border[ 'x' ][ 'max' ] + ] , axis = 0 ) + mean_calib_up -= np.min( mean_calib_up ) + mean_calib_up /= np.max( mean_calib_up ) + + peaks_up = find_peaks( mean_calib_up , height = 0.6 )[0] + border[ 'x' ][ 'min' ] + + if len( peaks_up ) != len( calib_peaks ): + print( calib_peaks , peaks_up ) + print( len( calib_peaks ) , len( peaks_up ) ) + plt.plot( mean_calib_up ) + plt.show() + exit() + polyval = np.polyfit( peaks_up , calib_peaks , 1 ) + print( polyval ) + # First deformation list_ = data[ @@ -398,7 +435,7 @@ fall = np.array( [ stairs = np.zeros_like( results ) for x in range( size ): stairs[ : , x ] = results[ : , x ] # can be modified, but no used anymore so it's fine - stairs[ : fall[0] , x ] = 0 + stairs[ : fall[0] , x ] = 0 # TODO: put the mean for i in range( len( fall ) - 1 ): stairs[ fall[ i ] : fall[ i + 1 ] , x ] = np.mean( stairs[ fall[ i ] : fall[ i + 1 ] ] ) stairs[ fall[ -1 ] : , x ] = 0