offset_value_gen.py 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. import numpy as np
  2. import sys
  3. import matplotlib.pyplot as plt
  4. import matplotlib as mpl
  5. from scipy import signal
  6. import scipy.integrate as spi
  7. from scipy import asarray as ar, exp, sqrt
  8. from scipy.optimize import curve_fit
  9. #from astropy import modeling
  10. pixels = 512*2
  11. TAIL = [0xba98,0xfedc]*16
  12. DEAD = [0xdea1,0xdead,0xdea2,0xdead,0xdea3,0xdead,0xdea4,0xdead,0xdea5,0xdead,0xdea6,0xdead,0xdea7,0xdead,0xdea8,0xdead]
  13. def strip_data(filename, number_pixels, orbits, offset = None):
  14. global data
  15. ###############----------Read data from memory----------############################################
  16. np.set_printoptions(threshold='nan')
  17. data = np.fromfile(str(filename), dtype=np.uint16)
  18. #if offset is None:
  19. # data = np.memmap( str(filename), dtype=np.dtype('<u2'), mode='r')
  20. #else:
  21. # data = np.memmap( str(filename), dtype=np.dtype('<u2'), offset = (2*pixels*offset),mode='r')
  22. ###############----------Remove Header----------####################################################
  23. if (data[0] == 0x1111 and data[15] == 0xF888):
  24. print ('Removing header .....')
  25. data = data[16:]
  26. else:
  27. print ('No data header....')
  28. data = data
  29. ##############--------Search and remove for TAIL--------############################################
  30. offset = 0
  31. tailoffset = offset
  32. while np.any((data[tailoffset : tailoffset + len(TAIL)] != TAIL)):
  33. tailoffset += 8
  34. if tailoffset + len(TAIL) > len(data):
  35. print('Could not find tail')
  36. sys.exit(-1)
  37. print('Found tail at offset ' + str(tailoffset))
  38. ##############--------Search and remove for DEAD filling--------##################################
  39. deadcnt = 0
  40. deadoffset = tailoffset
  41. while np.any(data[deadoffset - len(DEAD) : deadoffset] == DEAD):
  42. deadcnt +=1
  43. deadoffset -= len(DEAD)
  44. print('Removed %d bytes of DEAD' %(deadcnt))
  45. ##############--------Set the pure data --------###################################################
  46. data = np.frombuffer((data[offset:deadoffset]), dtype = np.uint16)
  47. #dead = np.where(data == 0xdea1)
  48. #loc = np.amin(dead)
  49. #data = data[0:loc]
  50. ############-------Swap the data bytes and change from 16 bit to 14 bit---------####################
  51. data = data.byteswap()
  52. data = data >> 2
  53. #############---------Index decoder for the jesd data for 16 input mode----------###################
  54. odd_inner_idx_1 = [23,22,7,6,21,20,5,4,19,18,3,2,17,16,1,0] # working one
  55. odd_inner_idx_2 = [8,9,24,25,10,11,26,27,12,13,28,29,14,15,30,31] # non interleaved
  56. odd_index_1 = np.zeros([256], dtype=np.int64)
  57. odd_index_2 = np.zeros([256], dtype=np.int64)
  58. for i in range(16):
  59. for j in range(16):
  60. odd_index_1[i * 16 + j] = odd_inner_idx_1[i] + j * 64
  61. for i in range(16):
  62. for j in range(16):
  63. odd_index_2[i * 16 + j] = odd_inner_idx_2[i] + j * 64
  64. even_inner_idx_1 = [55,54,39,38,53,52,37,36,51,50,35,34,49,48,33,32] # working one
  65. even_inner_idx_2 = [40,41,56,57,42,43,58,59,44,45,60,61,46,47,62,63] # non interleaved
  66. even_index_1 = np.zeros([256], dtype=np.int64)
  67. even_index_2 = np.zeros([256], dtype=np.int64)
  68. for i in range(16):
  69. for j in range(16):
  70. even_index_1[i * 16 + j] = even_inner_idx_1[i] + j * 64
  71. for i in range(16):
  72. for j in range(16):
  73. even_index_2[i * 16 + j] = even_inner_idx_2[i] + j * 64
  74. ################------working part---------###########################################################
  75. #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
  76. #k = 32
  77. #pixel_map = []
  78. #a = index_interleave
  79. #for i in range(0, len(a), k):
  80. # pixel_map.extend((a[i:i + k])[::-1])
  81. ######################################################################################################
  82. l = 16
  83. odd_adc_2 = []
  84. odd_b = odd_index_2
  85. for i in range(0, len(odd_b), l):
  86. odd_adc_2.extend((odd_b[i:i + l])[::-1])
  87. even_adc_2 = []
  88. even_b = even_index_2
  89. for i in range(0, len(even_b), l):
  90. even_adc_2.extend((even_b[i:i + l])[::-1])
  91. #index_interleave = np.concatenate((odd_index_1,odd_adc_2),axis = 0) # for concatenated pixels
  92. #odd_index_interleave = np.concatenate((odd_index_1,odd_adc_2),axis = 0) # for concatenated pixels
  93. #even_index_interleave = np.concatenate((even_index_1,even_adc_2),axis = 0) # for concatenated pixels
  94. #odd_index_interleave = np.ravel(np.column_stack((odd_index_1,odd_adc_2))) # for interleaved pixels
  95. #even_index_interleave = np.ravel(np.column_stack((even_index_1,even_adc_2))) # for interleaved pixels
  96. #splitting the even part of the ADC since on the sensor they belong to the outer 256 x 2
  97. #even_index_interleave_left = even_index_interleave[0:256]
  98. #even_index_interleave_right = even_index_interleave[256:512]
  99. #splitting the even part of the ADC since on the sensor they belong to the outer 256 x 2
  100. odd_left_1 = odd_index_1[0:128]
  101. odd_right_1 = odd_index_1[128:256]
  102. odd_left_2 = odd_adc_2[0:128]
  103. odd_right_2 = odd_adc_2[128:256]
  104. #final_1024_index = np.concatenate((even_index_interleave_left,odd_index_interleave,even_index_interleave_right),axis = 0)
  105. #######################
  106. final_1024_index = 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
  107. ##############-------------Reshape the data as pixel x orbits-------------------###################
  108. if (orbits):
  109. data = data[0:orbits*512*2]
  110. data = np.reshape(data,(-1,pixels))
  111. data = data[:,final_1024_index]
  112. orb, pix = np.shape(data)
  113. return (data, orb)
  114. strip_data('f12345_2020-09-07T16h14m21s_Si01_m.bin',1024,1)
  115. np.set_printoptions(formatter={'int':hex})
  116. pixel_num = np.arange(1,513,1)
  117. modulated_data = data.astype(np.uint16)
  118. orbits, pixels = np.shape(modulated_data)
  119. ad = np.transpose(modulated_data)
  120. offset_to = ad - ad + 850
  121. offset_value = ad - offset_to
  122. x = 16
  123. print('ADC1 0x90A0')
  124. ###########
  125. print('Register 38 is',offset_value[4,:]) #D/E
  126. print('Register 36 is',offset_value[4+x,:]) #F/10
  127. print('Register 34 is',offset_value[4+2*x,:]) #11/12
  128. print('Register 32 is',offset_value[4+3*x,:]) #13/14
  129. print('Register 2C is',offset_value[4+4*x,:]) #19/1A
  130. print('Register 2A is',offset_value[4+5*x,:]) #1B/1C
  131. print('Register 28 is',offset_value[4+6*x,:]) #1D/1E
  132. print('Register 26 is',offset_value[4+7*x,:]) #1F/20
  133. ###########
  134. print('Register 37 is',offset_value[4+8*x,:]) #D/E
  135. print('Register 35 is',offset_value[4+9*x,:]) #F/10
  136. print('Register 33 is',offset_value[4+10*x,:]) #11/12
  137. print('Register 31 is',offset_value[4+11*x,:]) #13/14
  138. print('Register 2B is',offset_value[4+12*x,:]) #19/1A
  139. print('Register 29 is',offset_value[4+13*x,:]) #1B/1C
  140. print('Register 27 is',offset_value[4+14*x,:]) #1D/1E
  141. print('Register 25 is',offset_value[4+15*x,:]) #1F/20
  142. print('Register 1F is',offset_value[4+16*x,:]) #25/26
  143. print('Register 1D is',offset_value[4+17*x,:]) #27/28
  144. print('Register 1B is',offset_value[4+18*x,:]) #29/2A
  145. print('Register 19 is',offset_value[4+19*x,:]) #2B/2C
  146. print('Register 13 is',offset_value[4+20*x,:]) #31/32
  147. print('Register 11 is',offset_value[4+21*x,:]) #33/34
  148. print('Register F is' ,offset_value[4+22*x,:]) #35/36
  149. print('Register D is' ,offset_value[4+23*x,:]) #37/38
  150. ###########
  151. print('Register 20 is',offset_value[4+24*x,:]) #25/26
  152. print('Register 1E is',offset_value[4+25*x,:]) #27/28
  153. print('Register 1C is',offset_value[4+26*x,:]) #29/2A
  154. print('Register 1A is',offset_value[4+27*x,:]) #2B/2C
  155. print('Register 14 is',offset_value[4+28*x,:]) #31/32
  156. print('Register 12 is',offset_value[4+29*x,:]) #33/34
  157. print('Register 10 is' ,offset_value[4+30*x,:]) #35/36
  158. print('Register E is' ,offset_value[4+31*x,:]) #37/38
  159. ###################################################################
  160. print('ADC2 0x90A4')
  161. print('Register E is' ,offset_value[4+32*x,:]) #D/E
  162. print('Register 10 is' ,offset_value[4+33*x,:]) #F/10
  163. print('Register 12 is',offset_value[4+34*x,:]) #11/12
  164. print('Register 14 is',offset_value[4+35*x,:]) #13/14
  165. print('Register 1A is',offset_value[4+36*x,:]) #19/1A
  166. print('Register 1C is',offset_value[4+37*x,:]) #1B/1C
  167. print('Register 1E is',offset_value[4+38*x,:]) #1D/1E
  168. print('Register 20 is',offset_value[4+39*x,:]) #1F/20
  169. print('Register D is' ,offset_value[4+40*x,:]) #D/E
  170. print('Register F is' ,offset_value[4+41*x,:]) #F/10
  171. print('Register 11 is',offset_value[4+42*x,:]) #11/12
  172. print('Register 13 is',offset_value[4+43*x,:]) #13/14
  173. print('Register 19 is',offset_value[4+44*x,:]) #19/1A
  174. print('Register 1B is',offset_value[4+45*x,:]) #1B/1C
  175. print('Register 1D is',offset_value[4+46*x,:]) #1D/1E
  176. print('Register 1F is',offset_value[4+47*x,:]) #1F/20
  177. print('Register 25 is',offset_value[4+48*x,:]) #25/26
  178. print('Register 27 is',offset_value[4+49*x,:]) #27/28
  179. print('Register 29 is',offset_value[4+50*x,:]) #29/2A
  180. print('Register 2B is',offset_value[4+51*x,:]) #2B/2C
  181. print('Register 31 is',offset_value[4+52*x,:]) #31/32
  182. print('Register 33 is',offset_value[4+53*x,:]) #33/34
  183. print('Register 35 is',offset_value[4+54*x,:]) #35/36
  184. print('Register 37 is',offset_value[4+55*x,:]) #37/38
  185. print('Register 26 is',offset_value[4+56*x,:]) #25/26
  186. print('Register 28 is',offset_value[4+57*x,:]) #27/28
  187. print('Register 2A is',offset_value[4+58*x,:]) #29/2A
  188. print('Register 2C is',offset_value[4+59*x,:]) #2B/2C
  189. print('Register 32 is',offset_value[4+60*x,:]) #31/32
  190. print('Register 34 is',offset_value[4+61*x,:]) #33/34
  191. print('Register 36 is',offset_value[4+62*x,:]) #35/36
  192. print('Register 38 is',offset_value[4+63*x,:]) #37/38
  193. plt.show()