Surface NMR processing and inversion GUI
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

epsPlots.py 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. from SEGPlot import *
  2. import sys
  3. sys.path.append( '../tressel' )
  4. import matplotlib.pyplot as plt
  5. import matplotlib.ticker
  6. import scipy.io as sio
  7. import scipy.signal as signal
  8. import numpy as np
  9. import mrsurvey
  10. import pickle
  11. import decay
  12. import cmaps
  13. plt.register_cmap(name='viridis', cmap=cmaps.viridis)
  14. plt.register_cmap(name='inferno', cmap=cmaps.inferno)
  15. plt.register_cmap(name='inferno_r', cmap=cmaps.inferno_r)
  16. plt.register_cmap(name='magma', cmap=cmaps.magma)
  17. plt.register_cmap(name='magma_r', cmap=cmaps.magma_r)
  18. class canvas():
  19. def __init__(self):
  20. self.fig = plt.figure( figsize=(pc2in(20),pc2in(20) ) )
  21. self.ax1 = self.fig.add_subplot((211))
  22. self.ax2 = self.fig.add_subplot((212), sharex=self.ax1)
  23. def draw(self):
  24. plt.draw()
  25. def reAx2(self):
  26. try:
  27. self.fig.clear()
  28. except:
  29. pass
  30. try:
  31. self.ax1.clear()
  32. self.delaxes(self.ax1) #.clear()
  33. except:
  34. pass
  35. try:
  36. self.ax2.clear()
  37. self.delaxes(self.ax2) #.clear()
  38. except:
  39. pass
  40. self.ax1 = self.fig.add_subplot(211)
  41. self.ax2 = self.fig.add_subplot(212)
  42. self.ax1.tick_params(axis='both', which='major', labelsize=8)
  43. self.ax2.tick_params(axis='both', which='major', labelsize=8)
  44. self.ax1.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  45. self.ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  46. self.ax1.yaxis.get_offset_text().set_size(8)
  47. self.ax2.yaxis.get_offset_text().set_size(8)
  48. def reAx4(self):
  49. try:
  50. self.fig.clear()
  51. except:
  52. pass
  53. # two main axes
  54. self.ax1 = self.fig.add_axes([0.15, 0.55, 0.625, 0.3672])
  55. self.ax2 = self.fig.add_axes([0.15, 0.135 , 0.625, 0.3672])
  56. # for colourbars
  57. self.cax1 = self.fig.add_axes([0.8, 0.55 , 0.025, 0.3672])
  58. self.cax2 = self.fig.add_axes([0.8, 0.135, 0.025, 0.3672])
  59. self.ax1.tick_params(axis='both', which='major', labelsize=8)
  60. self.ax2.tick_params(axis='both', which='major', labelsize=8)
  61. self.ax1.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  62. self.ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  63. self.ax1.yaxis.get_offset_text().set_size(8)
  64. self.ax2.yaxis.get_offset_text().set_size(8)
  65. self.cax1.tick_params(axis='both', which='major', labelsize=8)
  66. self.cax2.tick_params(axis='both', which='major', labelsize=8)
  67. self.cax1.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  68. self.cax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')
  69. self.cax1.yaxis.get_offset_text().set_size(8) #.get_text()
  70. self.cax2.yaxis.get_offset_text().set_size(8) #.get_text()
  71. self.cax1.tick_params(labelsize=8)
  72. self.cax2.tick_params(labelsize=8)
  73. #self.ax1.yaxis.minorticks_off()
  74. #self.ax2.yaxis.minorticks_off()
  75. plt.tick_params(
  76. axis='y', # changes apply to the x-axis
  77. which='minor', # both major and minor ticks are affected
  78. bottom='off', # ticks along the bottom edge are off
  79. top='off', # ticks along the top edge are off
  80. labelbottom='off')
  81. if __name__ == "__main__":
  82. first = True
  83. for ffile in sys.argv[1::]:
  84. Canvas = canvas()
  85. pfile = file(ffile)
  86. unpickle = pickle.Unpickler(pfile)
  87. MRS = mrsurvey.GMRDataProcessor()
  88. MRS.DATADICT = unpickle.load()
  89. MRS.pulseType = MRS.DATADICT["INFO"]["pulseType"]
  90. MRS.transFreq = MRS.DATADICT["INFO"]["transFreq"]
  91. MRS.pulseLength = MRS.DATADICT["INFO"]["pulseLength"]
  92. MRS.TuneCapacitance = MRS.DATADICT["INFO"]["TuneCapacitance"]
  93. MRS.samp = MRS.DATADICT["INFO"]["samp"]
  94. MRS.nPulseMoments = MRS.DATADICT["INFO"]["nPulseMoments"]
  95. MRS.deadTime = MRS.DATADICT["INFO"]["deadTime"]
  96. MRS.quadDet(1, True, Canvas)
  97. MRS.gateIntegrate(14, 1, Canvas )
  98. #Canvas.fig.suptitle(r"\textbf{Experiment 0, channel 4}", fontsize=8) #, fontweight='bold')
  99. Canvas.ax1.set_title(r"Experiment 0, channel 4", fontsize=8)
  100. #Canvas.ax1.set_title("Channel 4")
  101. plt.savefig("test.eps", dpi=2200)
  102. if first:
  103. mat = MRS.DATADICT["CA"]
  104. pmat = MRS.DATADICT["CP"]
  105. first = False
  106. else:
  107. mat += MRS.DATADICT["CA"]
  108. pmat += MRS.DATADICT["CP"]
  109. quadSum = True
  110. if quadSum:
  111. Canvas.ax1.clear()
  112. Canvas.ax2.clear()
  113. Canvas.cax1.clear()
  114. Canvas.cax2.clear()
  115. pulse = "Pulse 1"
  116. clip = 1
  117. QQ = np.average(MRS.DATADICT[pulse]["Q"], axis=1 )
  118. im1 = Canvas.ax1.pcolormesh( 1e3*MRS.DATADICT[pulse]["TIMES"][clip-1:-clip], QQ, mat, cmap='coolwarm_r', rasterized=True, vmin=-np.max(np.abs(mat)), vmax=np.max(np.abs(mat)))
  119. im2 = Canvas.ax2.pcolormesh( 1e3*MRS.DATADICT[pulse]["TIMES"][clip-1:-clip], QQ, pmat, cmap='coolwarm_r', rasterized=True, vmin=-np.max(np.abs(pmat)), vmax=np.max(np.abs(pmat)))
  120. cb2 = Canvas.fig.colorbar(im2, cax=Canvas.cax2)
  121. cb2.set_label("Noise residual (nV)", fontsize=8)
  122. #canvas.ax2.yaxis.set_ticks( QQ[0,9::7] )
  123. Canvas.ax1.set_yscale('log')
  124. Canvas.ax2.set_yscale('log')
  125. qlabs = np.append(np.concatenate( (QQ[0:1],QQ[9::10] )), QQ[-1] )
  126. Canvas.ax1.yaxis.set_ticks( qlabs ) # np.append(np.concatenate( (QQ[0:1],QQ[9::10] )), QQ[-1] ) )
  127. Canvas.ax2.yaxis.set_ticks( qlabs ) #np.append(np.concatenate( (QQ[0:1],QQ[9::10] )), QQ[-1] ) )
  128. #formatter = matplotlib.ticker.LogFormatter(10, labelOnlyBase=False)
  129. formatter = matplotlib.ticker.FuncFormatter(lambda x, pos: str((round(x,1))))
  130. Canvas.ax1.yaxis.set_major_formatter(formatter)#matplotlib.ticker.FormatStrFormatter('%d.1'))
  131. Canvas.ax2.yaxis.set_major_formatter(formatter)#matplotlib.ticker.FormatStrFormatter('%d.1'))
  132. plt.setp(Canvas.ax1.get_xticklabels(), visible=False)
  133. t = 1e3*MRS.DATADICT[pulse]["TIMES"][clip-1:-clip],
  134. Canvas.ax1.set_ylim( np.min(QQ), np.max(QQ) )
  135. Canvas.ax2.set_ylim( np.min(QQ), np.max(QQ) )
  136. Canvas.ax1.set_xlim( np.min(t), np.max(t) )
  137. Canvas.ax2.set_xlim( np.min(t), np.max(t) )
  138. cb1 = Canvas.fig.colorbar(im1, cax=Canvas.cax1)
  139. cb1.set_label("Phased amplitude (nV)", fontsize=8)
  140. Canvas.ax2.set_xlabel(r"Time (ms)", fontsize=8)
  141. Canvas.ax1.set_ylabel(r"$q$ ( $\mathrm{A}\cdot\mathrm{s}$)", fontsize=8)
  142. Canvas.ax2.set_ylabel(r"$q$ ( $\mathrm{A}\cdot\mathrm{s}$)", fontsize=8)
  143. plt.savefig("quadSum.eps")
  144. plt.show()