strip_data.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import numpy as np
  2. import sys
  3. pixels = 512*2
  4. TAIL = [0xba98,0xfedc]*16
  5. DEAD = [0xdea1,0xdead,0xdea2,0xdead,0xdea3,0xdead,0xdea4,0xdead,0xdea5,0xdead,0xdea6,0xdead,0xdea7,0xdead,0xdea8,0xdead]
  6. def strip_data(filename, number_pixels, orbits, offset = None):
  7. ###############----------Read data from memory----------############################################
  8. np.set_printoptions(threshold='nan')
  9. # data = np.fromfile(str(filename), dtype=np.uint16)
  10. if offset is None:
  11. data = np.memmap( str(filename), dtype=np.dtype('<u2'), mode='r')
  12. else:
  13. data = np.memmap( str(filename), dtype=np.dtype('<u2'), offset = (2*pixels*offset),mode='r')
  14. ###############----------Remove Header----------####################################################
  15. if (data[0] == 0x1111 and data[15] == 0xF888):
  16. print ('Removing header .....')
  17. data = data[16:]
  18. else:
  19. print ('No data header....')
  20. data = data
  21. ##############--------Search and remove for TAIL--------############################################
  22. offset = 0
  23. tailoffset = offset
  24. while np.any((data[tailoffset : tailoffset + len(TAIL)] != TAIL)):
  25. tailoffset += 8
  26. if tailoffset + len(TAIL) > len(data):
  27. print('Could not find tail')
  28. #sys.exit(-1)
  29. data = data
  30. print('Found tail at offset ' + str(tailoffset))
  31. ##############--------Search and remove for DEAD filling--------##################################
  32. deadcnt = 0
  33. deadoffset = tailoffset
  34. while np.any(data[deadoffset - len(DEAD) : deadoffset] == DEAD):
  35. deadcnt +=1
  36. deadoffset -= len(DEAD)
  37. print('Removed %d bytes of DEAD' %(deadcnt))
  38. ##############--------Set the pure data --------###################################################
  39. data = np.frombuffer((data[offset:deadoffset]), dtype = np.uint16)
  40. #dead = np.where(data == 0xdea1)
  41. #loc = np.amin(dead)
  42. #data = data[0:loc]
  43. ############-------Swap the data bytes and change from 16 bit to 14 bit---------####################
  44. data = data.byteswap()
  45. #############---------Index decoder for the jesd data for 16 input mode----------###################
  46. odd_inner_idx_1 = [23,22,7,6,21,20,5,4,19,18,3,2,17,16,1,0] # working one
  47. odd_inner_idx_2 = [8,9,24,25,10,11,26,27,12,13,28,29,14,15,30,31] # non interleaved
  48. odd_index_1 = np.zeros([256], dtype=np.int64)
  49. odd_index_2 = np.zeros([256], dtype=np.int64)
  50. for i in range(16):
  51. for j in range(16):
  52. odd_index_1[i * 16 + j] = odd_inner_idx_1[i] + j * 64
  53. for i in range(16):
  54. for j in range(16):
  55. odd_index_2[i * 16 + j] = odd_inner_idx_2[i] + j * 64
  56. even_inner_idx_1 = [55,54,39,38,53,52,37,36,51,50,35,34,49,48,33,32] # working one
  57. even_inner_idx_2 = [40,41,56,57,42,43,58,59,44,45,60,61,46,47,62,63] # non interleaved
  58. even_index_1 = np.zeros([256], dtype=np.int64)
  59. even_index_2 = np.zeros([256], dtype=np.int64)
  60. for i in range(16):
  61. for j in range(16):
  62. even_index_1[i * 16 + j] = even_inner_idx_1[i] + j * 64
  63. for i in range(16):
  64. for j in range(16):
  65. even_index_2[i * 16 + j] = even_inner_idx_2[i] + j * 64
  66. #temp = [even_index_1[i^1] for i in range(len(even_index_1))]
  67. #even_index_1 = temp
  68. #swap odd left adc pixels
  69. #odd_index_1_t = odd_index_1 + 1
  70. #odd_index_1_t[:,0::2], odd_index_1_t[:,1::2] = odd_index_1[:,1::2], odd_index_1[:,0::2]
  71. #odd_index_1 = odd_index_1_t
  72. #swap even left adc pixels
  73. #even_index_1_t = even_index_1 + 1
  74. #even_index_1_t[:,0::2], even_index_1_t[:,1::2] = even_index_1[:,1::2], even_index_1[:,0::2]
  75. #even_index_1 = even_index_1_t
  76. ################------working part---------###########################################################
  77. #index_interleave = np.ravel(np.column_stack((index_1,index_2))) #interleaving the pixels, NOTE: interchange index_1 & index_2 if the pixels are swapped
  78. #k = 32
  79. #pixel_map = []
  80. #a = index_interleave
  81. #for i in range(0, len(a), k):
  82. # pixel_map.extend((a[i:i + k])[::-1])
  83. ######################################################################################################
  84. l = 16
  85. odd_adc_2 = []
  86. odd_b = odd_index_2
  87. for i in range(0, len(odd_b), l):
  88. odd_adc_2.extend((odd_b[i:i + l])[::-1])
  89. even_adc_2 = []
  90. even_b = even_index_2
  91. for i in range(0, len(even_b), l):
  92. even_adc_2.extend((even_b[i:i + l])[::-1])
  93. odd_index_interleave = np.concatenate((odd_index_1,odd_adc_2),axis = 0) # for concatenated pixels
  94. even_index_interleave = np.concatenate((even_index_1,even_adc_2),axis = 0) # for concatenated pixels
  95. #odd_index_interleave = np.ravel(np.column_stack((odd_index_1,odd_adc_2))) # for interleaved pixels
  96. #even_index_interleave = np.ravel(np.column_stack((even_index_1,even_adc_2))) # for interleaved pixels
  97. #splitting the even part of the ADC since on the sensor they belong to the outer 256 x 2
  98. even_index_interleave_left = even_index_interleave[0:256]
  99. even_index_interleave_right = even_index_interleave[256:512]
  100. #splitting the even part of the ADC since on the sensor they belong to the outer 256 x 2
  101. odd_left_1 = odd_index_1[0:128]
  102. odd_right_1 = odd_index_1[128:256]
  103. odd_left_2 = odd_adc_2[0:128]
  104. odd_right_2 = odd_adc_2[128:256]
  105. #temp = [odd_right_1[i^1] for i in range(len(odd_right_1))]
  106. #odd_right_1 = temp
  107. #temp1 = [even_index_1[i^1] for i in range(len(even_index_1))]
  108. #even_index_1 = temp1
  109. #final_1024_index = np.concatenate((even_index_interleave_left,odd_index_interleave,even_index_interleave_right),axis = 0)
  110. #######################
  111. final_1024_index_concatenated = np.concatenate((odd_left_1,even_index_1,odd_right_1,odd_left_2,even_adc_2,odd_right_2),axis = 0) # for concatenated pixels
  112. left = np.concatenate((odd_left_1,even_index_1,odd_right_1),axis = 0)
  113. right = np.concatenate((odd_left_2,even_adc_2,odd_right_2),axis = 0)
  114. final_1024_index_interleaved = np.ravel(np.column_stack((left,right))) #for interleaved pixels
  115. ##############-------------Reshape the data as pixel x orbits-------------------###################
  116. if (orbits):
  117. data = data[0:orbits*512*2]
  118. data = np.reshape(data,(-1,pixels))
  119. data = data[:,final_1024_index_interleaved]
  120. data = data >> 2
  121. data = ss.savgol_filter(data, 51, 3) # window size 51, polynomial order 3
  122. orb, pix = np.shape(data)
  123. return (data, orb)