def pre(self, event): global l if cp.plot_vers == 2: if haveImCube: self.ax3.remove() #fx.visual() if cp.plot_vers == 3: self.ax4.remove() self.cbar2.remove() self.axslider2.remove() #fx.visual() self.ax2setup() if cp.plot_vers != 1: cp.plot_vers = 1 if 'ix' not in globals(): global ix, iy ix = spectra.shape[1] // 2 iy = spectra.shape[0] // 2 spec = np.array(spectra[iy][ix]) self.ax1.scatter(ix, iy, s=200, marker='x', c='white', linewidth=2.5) self.ax2_title.set_text('Pixel (%ix , %iy): Spectra' % (ix, iy)) self.curveSpec.set_ydata(spec) param = fx.paramSliders() #s = M2(freqs, *param) self.curveM2.set_ydata(M2(freqs, *param)) self.curveM1.set_ydata(M1(freqs, *param[:3])) self.curveLorentz.set_ydata(m2(freqs, *param[3:6])) #l, = ax2.loglog(freqs, s, lw=1.5, color='red') plt.text(0.05, 11.5, "*Using parameters found in: '%s'" % param_dir) self.axreload = plt.axes([0.83, 0.18, 0.05, 0.05]) self.axsaveFig = plt.axes([0.83, 0.11, 0.05, 0.05]) self.axreset = plt.axes([0.83, 0.04, 0.05, 0.05]) self.breload = Button(self.axreload, 'Reload') self.breload.on_clicked(fx.reload) self.bsaveFig = Button(self.axsaveFig, 'Save') self.bsaveFig.on_clicked(fx.saveFig) self.breset = Button(self.axreset, 'Reset') self.breset.on_clicked(fx.reset)
def update2(self): params = np.zeros((len(fx.axsliders))) for i in range(len(fx.axsliders)): params[i] = fx.fnsliders[i].val fx.fnsliders[i].valtext.set_text(text[i] % params[i]) cp.curveM2.set_ydata(M2(freqs, *params)) cp.curveM1.set_ydata(M1(freqs, *params[:3])) cp.curveLorentz.set_ydata(m2(freqs, *params[3:6]))
def timeSeries(self, event): global slid_mask if cp.plot_vers == 1: for slider in fx.axsliders: slider.remove() for axesObj in [self.axreload, self.axsaveFig, self.axreset]: axesObj.remove() if cp.plot_vers == 2: pass # maybe just: if cp.plot_vers != 2: else: if cp.plot_vers == 3: self.ax4.remove() self.cbar2.remove() self.axslider2.remove() #fx.visual() cp.plot_vers = 2 if 'ix' not in globals(): global ix, iy ix = spectra.shape[1]//2 iy = spectra.shape[0]//2 self.ax1.scatter(ix, iy, s=200, marker='x', c='white', linewidth=2.5) self.ax2setup() if haveImCube: # ax3: displays pixel timeseries self.ax3 = plt.subplot2grid((31,31),(22, 1), colspan=29, rowspan=8) self.ax3_title = self.ax3.set_title('Pixel (%ix , %iy): Timeseries' % (ix, iy), fontsize=fontSize) self.ax3.set_xlabel('Time', fontsize=fontSize, labelpad=5) self.ax3.set_ylabel('Intensity', fontsize=fontSize, labelpad=5) self.ax3.set_xlim(timestamps[0]-0.01*t_range, timestamps[-1]+0.01*t_range) self.ts, = self.ax3.plot(timestamps, emptyTimeseries, 'k') timeseries = np.array(imCube[iy+1][ix+1] / exposures) self.ts.set_ydata(timeseries) self.ax3.set_ylim(timeseries.min()*0.9, timeseries.max()*1.1) spec = np.array(spectra[iy][ix]) self.ax2_title.set_text('Pixel (%ix , %iy): Spectra' % (ix, iy)) self.curveSpec.set_ydata(spec) if haveParam: cp.curveM2.set_ydata(M2(freqs, *h_map[iy,ix,:6])) cp.curveM1.set_ydata(M1(freqs, *h_map[iy,ix,:3])) cp.curveLorentz.set_ydata(m2(freqs, *h_map[iy,ix,3:6]))
def update2(val): params = np.zeros((len(axsliders))) for i in range(len(axsliders)): params[i] = fnsliders[i].val fnsliders[i].valtext.set_text(text[i] % params[i]) """ if i == 0: params[i] = 10**fnsliders[i].val else: params[i] = fnsliders[i].val if i == 4: fnsliders[i].valtext.set_text(text[i] % (1./(np.exp(params[4])*60.))) else: fnsliders[i].valtext.set_text(text[i] % params[i]) """ s = M2(freqs, *params) #l.set_ydata(s) curveM2.set_ydata(s) curveM1.set_ydata(M1(freqs, *params[:3])) curveLorentz.set_ydata(m2(freqs, *params[3:6]))
def onclick(event): #global ix, iy ixx, iyy = event.xdata, event.ydata if event.inaxes == cp.ax1: global ix, iy del cp.ax1.collections[:] plt.draw() if cp.spec_hist == 'hist': cp.ax2setup() cp.spec_hist = 'spec' #print("location: (%fx, %fy)" % (ixx, iyy)) #print("location: (%ix, %iy)" % (ixx, iyy)) ix = int(round(ixx)) iy = int(round(iyy)) s = np.array(spectra[iy][ix]) if specVis_fit == True: # use 3x3 pixel-box std.dev. or adhoc method for fitting uncertainties if spec_unc == 'stddev': ds = np.array(stdDev[iy][ix]) elif spec_unc == 'adhoc': ds = ds0 specFit(s, ds) # update subplots cp.ax1.scatter(ix, iy, s=200, marker='x', c='white', linewidth=2.5) cp.ax2_title.set_text('Pixel (%ix , %iy): Spectra' % (ix, iy)) cp.curveSpec.set_ydata(s) # update spectra and timeseries if cp.plot_vers == 2: if haveImCube: timeseries = np.array(imCube[iy+1][ix+1] / exposures) cp.ts.set_ydata(timeseries) cp.ax3.set_ylim(timeseries.min()*0.9, timeseries.max()*1.1) cp.ax3_title.set_text('Pixel (%ix , %iy): Timeseries' % (ix, iy)) if haveParam: cp.curveM2.set_ydata(M2(freqs, *h_map[iy,ix,:6])) cp.curveM1.set_ydata(M1(freqs, *h_map[iy,ix,:3])) cp.curveLorentz.set_ydata(m2(freqs, *h_map[iy,ix,3:6])) # update spectra and model sliders if cp.plot_vers == 1: for slider in fx.axsliders: slider.remove() param = fx.paramSliders() plt.text(0.05, 11.5, "*Using parameters found in: '%s'" % param_dir) s = M2(freqs, *param) #l.set_ydata(s) cp.curveM2.set_ydata(s) cp.curveM1.set_ydata(M1(freqs, *param[:3])) cp.curveLorentz.set_ydata(m2(freqs, *param[3:6]))
def specFit(s, ds): ## fit data to combined power law plus gaussian component model try: m1_param = Fit(M1, freqs, s, p0=M1_guess, bounds=(M1_low, M1_high), sigma=ds, method='dogbox')[0] except RuntimeError: print("Error M1 - curve_fit failed") except ValueError: print("Error M1 - inf/NaN") A, n, C = m1_param # unpack model parameters try: m2_param0 = Fit(M2, freqs, s, p0=M2_guess, bounds=(M2_low, M2_high), sigma=ds, method='dogbox', max_nfev=3000)[0] except RuntimeError: print("Error M2 - curve_fit failed") except ValueError: print("Error M2 - inf/NaN") #A2, n2, C2, P2, fp2, fw2 = m2_param0 #print nlfit_gp try: m2_param = Fit(M2, freqs, s, p0=m2_param0, bounds=(M2_low, M2_high), sigma=ds, max_nfev=3000)[0] except RuntimeError: print("Error M2 - curve_fit failed") except ValueError: print("Error M2 - inf/NaN") A22, n22, C22, P22, fp22, fw22 = m2_param #print m2_param # create models from parameters m1_fit = M1(freqs, *m1_param) lorentz = m2(freqs, P22, fp22, fw22) m2_fit2 = M2(freqs, *m2_param) m1_fit2 = M1(freqs, A22, n22, C22) """ residsM1 = (s - m1_fit) chisqrM1 = ((residsM1/ds)**2).sum() residsM22 = (s - m2_fit2) chisqrM22 = ((residsM22/ds)**2).sum() redchisqrM22 = ((residsM22/ds)**2).sum()/float(freqs.size-6) f_test2 = ((chisqrM1-chisqrM22)/(6-3))/((chisqrM22)/(freqs.size-6)) dof1, dof2 = 3, 6 # degrees of freedom for model M1, M2 #p_val = ff.sf(f_test2, dof1, dof2) # extract the lorentzian amplitude scaling factor amp_scale2 = M1(np.exp(fp22), A22, n22, C22) """ fwhm = (1. / (np.exp(fp22+fw22) - np.exp(fp22-fw22))) / 60. pLoc = (1./np.exp(fp22))/60. #curveM1A.set_ydata(m1_fit) curveM2.set_ydata(m2_fit2) curveM1.set_ydata(m1_fit2) curveLorentz.set_ydata(lorentz) p_index.set_text(r'$n$ = {0:0.2f}'.format(n22)) p_amp.set_text(r'$\alpha$ = {0:0.2e}'.format(P22)) p_loc.set_text(r'$\beta$ = {0:0.1f} [min]'.format(pLoc)) p_wid.set_text(r'$FWHM$ = {0:0.1f} [min]'.format(fwhm))
def onclick(event): #global ix, iy global fnsliders global axsliders ixx, iyy = event.xdata, event.ydata if event.inaxes == ax1: global ix, iy del ax1.collections[:] plt.draw() #print("location: (%fx, %fy)" % (ixx, iyy)) #print("location: (%ix, %iy)" % (ixx, iyy)) ix = int(round(ixx)) iy = int(round(iyy)) #print(spectra) s = np.array(spectra[iy][ix]) if specVis_fit == True: # use 3x3 pixel-box std.dev. or adhoc method for fitting uncertainties if spec_unc == 'stddev': ds = np.array(stdDev[iy][ix]) elif spec_unc == 'adhoc': ds = ds0 specFit(s, ds) # update subplots ax1.scatter(ix, iy, s=200, marker='x', c='white', linewidth=2.5) title.set_text('Pixel (%ix , %iy): Spectra' % (ix, iy)) curveSpec.set_ydata(s) timeseries = np.array(imCube[iy + 1][ix + 1] / exposures) if toggle3 == 2: ts.set_ydata(timeseries) ax3.set_ylim(timeseries.min() * 0.9, timeseries.max() * 1.1) title3.set_text('Pixel (%ix , %iy): Timeseries' % (ix, iy)) if haveParam: curveM2.set_ydata(M2(freqs, *h_map[iy, ix, :6])) curveM1.set_ydata(M1(freqs, *h_map[iy, ix, :3])) curveLorentz.set_ydata(m2(freqs, *h_map[iy, ix, 3:6])) if toggle3 == 1: for slider in axsliders: slider.remove() axsliders = [] fnsliders = [] if haveParam: param = h_map[iy, ix, :6] else: param = (np.array(M2_low) + np.array(M2_high)) / 2 # make parameter sliders for i, M2_label in enumerate(M2_labels): axsliders.append(plt.axes([0.15, 0.23 - (0.04 * i), 0.6, 0.02])) fnsliders.append( Slider(axsliders[i], M2_label, M2_low[i], M2_high[i], param[i])) fnsliders[i].on_changed(update2) fnsliders[i].valtext.set_text(text[i] % param[i]) plt.text(0.05, 11.5, "*Using parameters found in: '%s'" % param_dir) s = M2(freqs, *param) #l.set_ydata(s) curveM2.set_ydata(s) curveM1.set_ydata(M1(freqs, *param[:3])) curveLorentz.set_ydata(m2(freqs, *param[3:6]))