diff --git a/QtPyLoT.py b/QtPyLoT.py index cae007c4..2ba21c67 100755 --- a/QtPyLoT.py +++ b/QtPyLoT.py @@ -273,8 +273,7 @@ class MainWindow(QMainWindow): slot=self.autoPick, shortcut='Alt+Ctrl+A', icon=auto_icon, tip='Automatically pick' ' the entire dataset' - ' displayed!', - checkable=False) + ' displayed!') autoPickToolBar = self.addToolBar("autoPyLoT") autoPickActions = (auto_pick,) diff --git a/pylot/core/active/seismicshot.py b/pylot/core/active/seismicshot.py index 6bec9c70..522e4afc 100644 --- a/pylot/core/active/seismicshot.py +++ b/pylot/core/active/seismicshot.py @@ -437,7 +437,7 @@ class SeismicShot(object): if self.getDistance(traceID) == distance: traceID_list.append(traceID) if distancebin[0] >= 0 and distancebin[1] > 0: - if self.getDistance(traceID) > distancebin[0] and self.getDistance(traceID) < distancebin[1]: + if distancebin[0] < self.getDistance(traceID) < distancebin[1]: traceID_list.append(traceID) if len(traceID_list) > 0: diff --git a/pylot/core/analysis/magnitude.py b/pylot/core/analysis/magnitude.py index 3beaac90..ab455762 100644 --- a/pylot/core/analysis/magnitude.py +++ b/pylot/core/analysis/magnitude.py @@ -185,7 +185,7 @@ class DCfc(Magnitude): [optspecfit, pcov] = curve_fit(synthsourcespec, F, YY.real, [DCin, Fcin]) self.w0 = optspecfit[0] self.fc = optspecfit[1] - print ("DCfc: Determined DC-value: %e m/Hz, \n" \ + print ("DCfc: Determined DC-value: %e m/Hz, \n" "Determined corner frequency: %f Hz" % (self.w0, self.fc)) diff --git a/pylot/core/pick/CharFuns.py b/pylot/core/pick/CharFuns.py index 0ffe9b52..e4c78ffd 100644 --- a/pylot/core/pick/CharFuns.py +++ b/pylot/core/pick/CharFuns.py @@ -165,12 +165,12 @@ class CharacteristicFunction(object): stop = min([len(self.orig_data[0]), len(self.orig_data[1])]) elif self.cut[0] == 0 and self.cut[1] is not 0: start = 0 - stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), \ - len(self.orig_data[1])]) + stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), + len(self.orig_data[1])]) else: start = max([0, self.cut[0] / self.dt]) - stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), \ - len(self.orig_data[1])]) + stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), + len(self.orig_data[1])]) hh = self.orig_data.copy() h1 = hh[0].copy() h2 = hh[1].copy() @@ -181,15 +181,15 @@ class CharacteristicFunction(object): elif len(self.orig_data) == 3: if self.cut[0] == 0 and self.cut[1] == 0: start = 0 - stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), \ - len(self.orig_data[1]), len(self.orig_data[2])]) + stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), + len(self.orig_data[1]), len(self.orig_data[2])]) elif self.cut[0] == 0 and self.cut[1] is not 0: start = 0 stop = self.cut[1] / self.dt else: start = max([0, self.cut[0] / self.dt]) - stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), \ - len(self.orig_data[1]), len(self.orig_data[2])]) + stop = min([self.cut[1] / self.dt, len(self.orig_data[0]), + len(self.orig_data[1]), len(self.orig_data[2])]) hh = self.orig_data.copy() h1 = hh[0].copy() h2 = hh[1].copy() @@ -231,7 +231,7 @@ class AICcf(CharacteristicFunction): cumsumcf = np.cumsum(np.power(xnp, 2)) i = np.where(cumsumcf == 0) cumsumcf[i] = np.finfo(np.float64).eps - cf[k] = ((k - 1) * np.log(cumsumcf[k] / k) + (datlen - k + 1) * \ + cf[k] = ((k - 1) * np.log(cumsumcf[k] / k) + (datlen - k + 1) * np.log((cumsumcf[datlen - 1] - cumsumcf[k - 1]) / (datlen - k + 1))) cf[0] = cf[1] inf = np.isinf(cf) diff --git a/pylot/core/pick/autopick.py b/pylot/core/pick/autopick.py index b4da61b3..19d33b02 100755 --- a/pylot/core/pick/autopick.py +++ b/pylot/core/pick/autopick.py @@ -204,27 +204,27 @@ def autopickstation(wfstream, pickparam): if len(ndat) == 0 or len(edat) == 0: print ("One or more horizontal components missing!") print ("Signal length only checked on vertical component!") - print ("Decreasing minsiglengh from %f to %f" \ - % (minsiglength, minsiglength / 2)) + print ("Decreasing minsiglengh from %f to %f" + % (minsiglength, minsiglength / 2)) Pflag = checksignallength(zne, aicpick.getpick(), tsnrz, - minsiglength / 2, \ + minsiglength / 2, nfacsl, minpercent, iplot) else: # filter and taper horizontal traces trH1_filt = edat.copy() trH2_filt = ndat.copy() trH1_filt.filter('bandpass', freqmin=bph1[0], - freqmax=bph1[1], \ - zerophase=False) + freqmax=bph1[1], + zerophase=False) trH2_filt.filter('bandpass', freqmin=bph1[0], - freqmax=bph1[1], \ - zerophase=False) + freqmax=bph1[1], + zerophase=False) trH1_filt.taper(max_percentage=0.05, type='hann') trH2_filt.taper(max_percentage=0.05, type='hann') zne += trH1_filt zne += trH2_filt Pflag = checksignallength(zne, aicpick.getpick(), tsnrz, - minsiglength, \ + minsiglength, nfacsl, minpercent, iplot) if Pflag == 1: @@ -234,7 +234,7 @@ def autopickstation(wfstream, pickparam): print 'One or more horizontal components missing!' print 'Skipping control function checkZ4S.' else: - Pflag = checkZ4S(zne, aicpick.getpick(), zfac, \ + Pflag = checkZ4S(zne, aicpick.getpick(), zfac, tsnrz[3], iplot) if Pflag == 0: Pmarker = 'SinsteadP' @@ -331,7 +331,7 @@ def autopickstation(wfstream, pickparam): # waveform after P onset! zc = crossings_nonzero_all(wfzc) if np.size(zc) == 0: - print ("Something is wrong with the waveform, " \ + print ("Something is wrong with the waveform, " "no zero crossings derived!") print ("Cannot calculate source spectrum!") else: @@ -341,7 +341,7 @@ def autopickstation(wfstream, pickparam): w0 = specpara.getw0() fc = specpara.getfc() - print ("autopickstation: P-weight: %d, SNR: %f, SNR[dB]: %f, " \ + print ("autopickstation: P-weight: %d, SNR: %f, SNR[dB]: %f, " "Polarity: %s" % (Pweight, SNRP, SNRPdB, FM)) Sflag = 1 @@ -352,7 +352,7 @@ def autopickstation(wfstream, pickparam): Sflag = 0 else: - print ("autopickstation: No vertical component data available!, " \ + print ("autopickstation: No vertical component data available!, " "Skipping station!") if edat is not None and ndat is not None and len(edat) > 0 and len( @@ -593,8 +593,8 @@ def autopickstation(wfstream, pickparam): if restflag == 1: # calculate WA-peak-to-peak amplitude # using subclass WApp of superclass Magnitude - wapp = WApp(cordat, mpickP, mpickP + sstop + (0.5 * (mpickP \ - + sstop)), iplot) + wapp = WApp(cordat, mpickP, mpickP + sstop + (0.5 * (mpickP + + sstop)), iplot) Ao = wapp.getwapp() else: @@ -771,14 +771,14 @@ def autopickstation(wfstream, pickparam): # create dictionary # for P phase phase = 'P' - phasepick = {'lpp': lpickP, 'epp': epickP, 'mpp': mpickP, 'spe': Perror, \ + phasepick = {'lpp': lpickP, 'epp': epickP, 'mpp': mpickP, 'spe': Perror, 'snr': SNRP, 'snrdb': SNRPdB, 'weight': Pweight, 'fm': FM} picks = {phase: phasepick} # add P marker picks[phase]['marked'] = Pmarker # add S phase phase = 'S' - phasepick = {'lpp': lpickS, 'epp': epickS, 'mpp': mpickS, 'spe': Serror, \ + phasepick = {'lpp': lpickS, 'epp': epickS, 'mpp': mpickS, 'spe': Serror, 'snr': SNRS, 'snrdb': SNRSdB, 'weight': Sweight, 'fm': None} picks[phase] = phasepick # add Wood-Anderson amplitude diff --git a/pylot/core/pick/run_makeCF.py b/pylot/core/pick/run_makeCF.py index d1748d67..2ecd636f 100755 --- a/pylot/core/pick/run_makeCF.py +++ b/pylot/core/pick/run_makeCF.py @@ -6,8 +6,8 @@ Only for test purposes! """ -from obspy.core import read -import matplotlib.pyplot as plt +from obspy.core import read +import matplotlib.pyplot as plt import numpy as np from pylot.core.pick.CharFuns import CharacteristicFunction from pylot.core.pick.Picker import AutoPicking @@ -56,7 +56,7 @@ def run_makeCF(project, database, event, iplot, station=None): st_copy = st.copy() #filter and taper data tr_filt = st[0].copy() - tr_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False) + tr_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False) tr_filt.taper(max_percentage=0.05, type='hann') st_copy[0].data = tr_filt.data ############################################################## @@ -120,8 +120,8 @@ def run_makeCF(project, database, event, iplot, station=None): #filter and taper data trH1_filt = H[0].copy() trH2_filt = H[1].copy() - trH1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) - trH2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) + trH1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) + trH2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) trH1_filt.taper(max_percentage=0.05, type='hann') trH2_filt.taper(max_percentage=0.05, type='hann') H_copy[0].data = trH1_filt.data @@ -167,9 +167,9 @@ def run_makeCF(project, database, event, iplot, station=None): All1_filt = AllC[0].copy() All2_filt = AllC[1].copy() All3_filt = AllC[2].copy() - All1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) - All2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) - All3_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False) + All1_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) + All2_filt.filter('bandpass', freqmin=bph[0], freqmax=bph[1], zerophase=False) + All3_filt.filter('bandpass', freqmin=bpz[0], freqmax=bpz[1], zerophase=False) All1_filt.taper(max_percentage=0.05, type='hann') All2_filt.taper(max_percentage=0.05, type='hann') All3_filt.taper(max_percentage=0.05, type='hann') @@ -209,19 +209,19 @@ def run_makeCF(project, database, event, iplot, station=None): plt.ylim([-1.5, 1.5]) plt.xlabel('Time [s]') plt.ylabel('Normalized Counts') - plt.title('%s, %s, CF-SNR=%7.2f, CF-Slope=%12.2f' % (tr.stats.station, \ - tr.stats.channel, aicpick.getSNR(), aicpick.getSlope())) + plt.title('%s, %s, CF-SNR=%7.2f, CF-Slope=%12.2f' % (tr.stats.station, + tr.stats.channel, aicpick.getSNR(), aicpick.getSlope())) plt.suptitle(tr.stats.starttime) - plt.legend([p1, p2, p3, p4, p5], ['Data', 'HOS-CF', 'HOSAIC-CF', 'ARZ-CF', 'ARZAIC-CF']) + plt.legend([p1, p2, p3, p4, p5], ['Data', 'HOS-CF', 'HOSAIC-CF', 'ARZ-CF', 'ARZAIC-CF']) #plot horizontal traces plt.figure(2) plt.subplot(2,1,1) - tsteph = tpredh / 4 + tsteph = tpredh / 4 th1data = np.arange(0, trH1_filt.stats.npts / trH1_filt.stats.sampling_rate, trH1_filt.stats.delta) th2data = np.arange(0, trH2_filt.stats.npts / trH2_filt.stats.sampling_rate, trH2_filt.stats.delta) tarhcf = np.arange(0, len(arhcf.getCF()) * tsteph, tsteph) + cuttimes[0] + tdeth +tpredh p21, = plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k') - p22, = plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r') + p22, = plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r') p23, = plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF())) plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b') plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b') @@ -238,10 +238,10 @@ def run_makeCF(project, database, event, iplot, station=None): plt.ylabel('Normalized Counts') plt.title([trH1_filt.stats.station, trH1_filt.stats.channel]) plt.suptitle(trH1_filt.stats.starttime) - plt.legend([p21, p22, p23], ['Data', 'ARH-CF', 'ARHAIC-CF']) + plt.legend([p21, p22, p23], ['Data', 'ARH-CF', 'ARHAIC-CF']) plt.subplot(2,1,2) plt.plot(th2data, trH2_filt.data/max(trH2_filt.data), 'k') - plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r') + plt.plot(arhcf.getTimeArray(), arhcf.getCF()/max(arhcf.getCF()), 'r') plt.plot(arhaiccf.getTimeArray(), arhaiccf.getCF()/max(arhaiccf.getCF())) plt.plot([aicarhpick.getpick(), aicarhpick.getpick()], [-1, 1], 'b') plt.plot([aicarhpick.getpick()-0.5, aicarhpick.getpick()+0.5], [1, 1], 'b') @@ -271,7 +271,7 @@ def run_makeCF(project, database, event, iplot, station=None): plt.ylabel('Normalized Counts') plt.title([tr.stats.station, tr.stats.channel]) plt.suptitle(trH1_filt.stats.starttime) - plt.legend([p31, p32], ['Data', 'AR3C-CF']) + plt.legend([p31, p32], ['Data', 'AR3C-CF']) plt.subplot(3,1,2) plt.plot(th1data, trH1_filt.data/max(trH1_filt.data), 'k') plt.plot(ar3ccf.getTimeArray(), ar3ccf.getCF()/max(ar3ccf.getCF()), 'r') diff --git a/pylot/core/pick/utils.py b/pylot/core/pick/utils.py index 61387478..dd36e7da 100644 --- a/pylot/core/pick/utils.py +++ b/pylot/core/pick/utils.py @@ -110,7 +110,7 @@ def earllatepicker(X, nfac, TSNR, Pick1, iplot=None): markersize=14) plt.legend([p1, p2, p3, p4, p5], ['Data', 'Noise Window', 'Signal Window', 'Noise Level', - 'Zero Crossings'], \ + 'Zero Crossings'], loc='best') plt.plot([t[0], t[int(len(t)) - 1]], [-nlevel, -nlevel], '--k') plt.plot([Pick1, Pick1], [max(x), -max(x)], 'b', linewidth=2) @@ -183,10 +183,10 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None): i = 0 for j in range(ipick[0][1], ipick[0][len(t[ipick]) - 1]): i = i + 1 - if xraw[j - 1] <= 0 and xraw[j] >= 0: + if xraw[j - 1] <= 0 <= xraw[j]: zc1.append(t[ipick][i]) index1.append(i) - elif xraw[j - 1] > 0 and xraw[j] <= 0: + elif xraw[j - 1] > 0 >= xraw[j]: zc1.append(t[ipick][i]) index1.append(i) if len(zc1) == 3: @@ -225,10 +225,10 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None): i = 0 for j in range(ipick[0][1], ipick[0][len(t[ipick]) - 1]): i = i + 1 - if xfilt[j - 1] <= 0 and xfilt[j] >= 0: + if xfilt[j - 1] <= 0 <= xfilt[j]: zc2.append(t[ipick][i]) index2.append(i) - elif xfilt[j - 1] > 0 and xfilt[j] <= 0: + elif xfilt[j - 1] > 0 >= xfilt[j]: zc2.append(t[ipick][i]) index2.append(i) if len(zc2) == 3: @@ -263,15 +263,15 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None): if P1 is not None and P2 is not None: if P1[0] < 0 and P2[0] < 0: FM = 'D' - elif P1[0] >= 0 and P2[0] < 0: + elif P1[0] >= 0 > P2[0]: FM = '-' - elif P1[0] < 0 and P2[0] >= 0: + elif P1[0] < 0 <= P2[0]: FM = '-' elif P1[0] > 0 and P2[0] > 0: FM = 'U' - elif P1[0] <= 0 and P2[0] > 0: + elif P1[0] <= 0 < P2[0]: FM = '+' - elif P1[0] > 0 and P2[0] <= 0: + elif P1[0] > 0 >= P2[0]: FM = '+' print ("fmpicker: Found polarity %s" % FM) @@ -286,7 +286,7 @@ def fmpicker(Xraw, Xfilt, pickwin, Pick, iplot=None): p3, = plt.plot(zc1, np.zeros(len(zc1)), '*g', markersize=14) p4, = plt.plot(t[islope1], datafit1, '--g', linewidth=2) plt.legend([p1, p2, p3, p4], - ['Pick', 'Slope Window', 'Zero Crossings', 'Slope'], \ + ['Pick', 'Slope Window', 'Zero Crossings', 'Slope'], loc='best') plt.text(Pick + 0.02, max(xraw) / 2, '%s' % FM, fontsize=14) ax = plt.gca() @@ -563,8 +563,8 @@ def wadaticheck(pickdic, dttolerance, iplot): f4, = plt.plot(checkedPpicks, wdfit2, 'g') plt.title('Wadati-Diagram, %d S-P Times, Vp/Vs(raw)=%5.2f,' \ 'Vp/Vs(checked)=%5.2f' % (len(SPtimes), vpvsr, cvpvsr)) - plt.legend([f1, f2, f3, f4], ['Skipped S-Picks', 'Wadati 1', \ - 'Reliable S-Picks', 'Wadati 2'], loc='best') + plt.legend([f1, f2, f3, f4], ['Skipped S-Picks', 'Wadati 1', + 'Reliable S-Picks', 'Wadati 2'], loc='best') else: plt.title('Wadati-Diagram, %d S-P Times' % len(SPtimes)) @@ -653,12 +653,12 @@ def checksignallength(X, pick, TSNR, minsiglength, nfac, minpercent, iplot): p1, = plt.plot(t,rms, 'k') p2, = plt.plot(t[inoise], rms[inoise], 'c') p3, = plt.plot(t[isignal],rms[isignal], 'r') - p4, = plt.plot([t[isignal[0]], t[isignal[len(isignal)-1]]], \ - [minsiglevel, minsiglevel], 'g', linewidth=2) + p4, = plt.plot([t[isignal[0]], t[isignal[len(isignal)-1]]], + [minsiglevel, minsiglevel], 'g', linewidth=2) p5, = plt.plot([pick, pick], [min(rms), max(rms)], 'b', linewidth=2) - plt.legend([p1, p2, p3, p4, p5], ['RMS Data', 'RMS Noise Window', \ - 'RMS Signal Window', 'Minimum Signal Level', \ - 'Onset'], loc='best') + plt.legend([p1, p2, p3, p4, p5], ['RMS Data', 'RMS Noise Window', + 'RMS Signal Window', 'Minimum Signal Level', + 'Onset'], loc='best') plt.xlabel('Time [s] since %s' % X[0].stats.starttime) plt.ylabel('Counts') plt.title('Check for Signal Length, Station %s' % X[0].stats.station) @@ -747,15 +747,15 @@ def checkPonsets(pickdic, dttolerance, iplot): if iplot > 1: p1, = plt.plot(np.arange(0, len(Ppicks)), Ppicks, 'r+', markersize=14) p2, = plt.plot(igood, np.array(Ppicks)[igood], 'g*', markersize=14) - p3, = plt.plot([0, len(Ppicks) - 1], [pmedian, pmedian], 'g', \ - linewidth=2) + p3, = plt.plot([0, len(Ppicks) - 1], [pmedian, pmedian], 'g', + linewidth=2) for i in range(0, len(Ppicks)): plt.text(i, Ppicks[i] + 0.2, stations[i]) plt.xlabel('Number of P Picks') plt.ylabel('Onset Time [s] from 1.1.1970') - plt.legend([p1, p2, p3], ['Skipped P Picks', 'Good P Picks', 'Median'], \ - loc='best') + plt.legend([p1, p2, p3], ['Skipped P Picks', 'Good P Picks', 'Median'], + loc='best') plt.title('Check P Onsets') plt.show() raw_input() @@ -916,13 +916,13 @@ def checkZ4S(X, pick, zfac, checkwin, iplot): plt.plot(te[isignal], edat[0].data[isignal] / max(edat[0].data) + 1, 'r') plt.plot(tn, ndat[0].data / max(ndat[0].data) + 2, 'k') plt.plot(tn[isignal], ndat[0].data[isignal] / max(ndat[0].data) + 2, 'r') - plt.plot([tz[isignal[0]], tz[isignal[len(isignal) - 1]]], \ - [minsiglevel / max(z), minsiglevel / max(z)], 'g', \ - linewidth=2) + plt.plot([tz[isignal[0]], tz[isignal[len(isignal) - 1]]], + [minsiglevel / max(z), minsiglevel / max(z)], 'g', + linewidth=2) plt.xlabel('Time [s] since %s' % zdat[0].stats.starttime) plt.ylabel('Normalized Counts') - plt.yticks([0, 1, 2], [zdat[0].stats.channel, edat[0].stats.channel, \ - ndat[0].stats.channel]) + plt.yticks([0, 1, 2], [zdat[0].stats.channel, edat[0].stats.channel, + ndat[0].stats.channel]) plt.title('CheckZ4S, Station %s' % zdat[0].stats.station) plt.show() raw_input() diff --git a/pylot/core/read/io.py b/pylot/core/read/io.py index 926e3ca3..675aa150 100644 --- a/pylot/core/read/io.py +++ b/pylot/core/read/io.py @@ -73,8 +73,8 @@ def readPILOTEvent(phasfn=None, locfn=None, authority_id=None, **kwargs): stations = [stat for stat in phases['stat'][0:-1:3]] - event = createEvent(eventDate, loccinfo, None, 'earthquake', eventNum, - authority_id) + event = createEvent(eventDate, loccinfo, etype='earthquake', resID=eventNum, + authority_id=authority_id) lat = float(loc['LAT']) lon = float(loc['LON']) @@ -130,7 +130,7 @@ def readPILOTEvent(phasfn=None, locfn=None, authority_id=None, **kwargs): event.magnitudes.append(magnitude) return event - except AttributeError, e: + except AttributeError as e: raise AttributeError('{0} - Matlab LOC files {1} and {2} contains \ insufficient data!'.format(e, phasfn, locfn)) diff --git a/pylot/core/util/widgets.py b/pylot/core/util/widgets.py index 6e680d81..1a8ef94c 100644 --- a/pylot/core/util/widgets.py +++ b/pylot/core/util/widgets.py @@ -814,9 +814,10 @@ class PropertiesDlg(QDialog): if values is not None: self.setValues(values) - def setValues(self, tabValues): + @staticmethod + def setValues(tabValues): settings = QSettings() - for setting, value in tabValues.iteritems(): + for setting, value in tabValues.items(): settings.setValue(setting, value) settings.sync()