123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- ###### Read in data from KALYPSO
- #from docopt import docopt
- import numpy as np
- #import matplotlib.pyplot as plt
- #from mpl_toolkits.axes_grid1 import make_axes_locatable
- #import matplotlib as mpl
- #import strip_data
- import os
- NUMBER_PIXELS = 256
- DDR_FILLING = [0xba98,0xfedc]
- HEADER_0 = 0xABBA
- short_pattern = [0,1,2,3,3,2,1,0]
- long_pattern = np.repeat(short_pattern, 32)
- #####################################################################################
- ## strip_data (filename, number of pixels, orbits[opt.])
- ## return: data_array_stripped, data_consistency_is_ok, orbits
- #####################################################################################
- #####################################################################################
- def strip_data(filename, number_pixels, orbits, offset = None):
- # np.set_printoptions(threshold='nan')
- # data = np.fromfile(str(filename), dtype=np.uint16)
- if offset is None:
- data = np.memmap( str(filename), dtype=np.dtype('<u2'), mode='r')
- else:
- data = np.memmap( str(filename), dtype=np.dtype('<u2'), offset = (2*NUMBER_PIXELS*offset),mode='r')
-
- print(data.shape)
- if (orbits):
- data = data[0:orbits*number_pixels]
-
- print(data.shape)
- #####################################################################################
- ### Remove Header
- #####################################################################################
- if (data[0] == 43962):
- print("Removing header...")
- data = data[16:]
- data = np.append(data,[DDR_FILLING,DDR_FILLING,DDR_FILLING,DDR_FILLING,DDR_FILLING,DDR_FILLING,DDR_FILLING,DDR_FILLING])
- #####################################################################################
- ## Reshape list as an 256*whatever array
- #####################################################################################
- data = np.reshape(data, (-1,NUMBER_PIXELS))
- print(data.shape)
- # data = data[0:-8,:]
- #####################################################################################
- ### Remove Filling at the end
- #####################################################################################
- lines_with_filling = 0
- print("\n***********************")
- print("Removing DDR filling...")
- while (np.all(data[-1:]==DDR_FILLING) or np.all(data[-1:]==0x00000000)):
- data = data[0:-1,:]
- lines_with_filling += 1
- print("Removed %d bytes with DDR filling" % (lines_with_filling*512))
- print(data.shape)
- #####################################################################################
- ### Data consistency check
- #####################################################################################
- orbits, pixels = np.shape(data)
- high = (data & 0xC000) >> 14
- data = (data & 0x3fff)
- #print (NUMBER_PIXELS)
- #print (data)
- print(data.shape)
- print("\n***********************")
- print("Checking data consistency on %d orbits: " % orbits)
- if (not np.any(high - long_pattern)):
- print("everything is ok!")
- return (data, 1, orbits)
- else:
- print("error in data consistency!")
- #sys.exit("Error in data Consistency!!")
- #print (high - long_pattern)
- #print (np.where((high - long_pattern) != 0)[0])
- return (data, 1, orbits)
- strip_data('f12345_2020-02-12T11h45m01s_Si01_m.bin',256,1000)
|