def evalbreaks(shuf): breaklist = {} yearlist = {} yearseglist={} # analysis=r[:-2] for bs in shuf.keys(): with open(shuf[bs][0]+'.shuffle', 'w') as outf: b=shuffler(shuf[bs][0]) for line in shuf[bs]: print >>outf, line #bs=str(shuf.data().breaks()) print >>outf,bs if not bs in breaklist: breaklist[bs]=0 breaklist[bs] += 1 bse=eval(bs) for bry in bse: if not bry in yearlist: yearlist[bry] = 0 yearlist[bry] += 1 for i in range(1,len(bs) -1): ysl=str(bse[i-1:i+2]) if not ysl in yearseglist: yearseglist[ysl] =0 yearseglist[ysl] += 1 for i in range(1,len(b.data().breaks())-1): for offset in [-2,-1,0,1,2]: st=b.shuffle(i,offset=offset) print >>outf,i, b.data().breaks()[i], offset,st[3:], histog=[(st[2][j], st[1][j]) for j in range(len(st[1]))] print >>outf, histog for i in range(1,len(b.data().breaks())-1): xs,ys,yrs=b.spanned(i) pcb=convergent_breaks.resample_break(np.array(ys), np.array(yrs), N=100,withmode=True) print >>outf,"C",pcb#, detrend=False) print >>outf,"S",b.shuffle(i, span=0)[-2]
for i in range(1,len(bs) -1): ysl=str(bse[i-1:i+2]) if not ysl in yearseglist: yearseglist[ysl] =0 yearseglist[ysl] += 1 for i in range(1,len(b.data().breaks())-1): for offset in [-2,-1,0,1,2]: st=b.shuffle(i,offset=offset) print >>outf,i, b.data().breaks()[i], offset,st[3:], histog=[(st[2][j], st[1][j]) for j in range(len(st[1]))] print >>outf, histog for i in range(1,len(b.data().breaks())-1): xs,ys,yrs=b.spanned(i) pcb=convergent_breaks.resample_break(np.array(ys), np.array(yrs), N=100,withmode=True) print >>outf,"C",pcb#, detrend=False) print >>outf,"S",b.shuffle(i, span=0)[-2] # with open(b.filename()+'.shuffle', 'r') as inf: # lines =inf.readlines() # for line in lines: # print line[:-1] outf=open(finalname,"w") print finalname for brl in breaklist: bre=eval(brl) for Y in range(len(bre[1:-1])):
bre=eval(brl) for Y in range(len(bre[1:-1])): Year=bre[1:-1][Y] if Y==0: lowyr= list(b.data().years()).index(bre[Y]) else: lowyr= list(b.data().years()).index(bre[Y])+1 highyr=list(b.data().years()).index(bre[Y+2])+1 midyr=list(b.data().years()).index(bre[Y+1])+1 print >>outf, '"'+str(brl)+'"', saveddata["breaklist"][brl], Year, bre[Y], bre[Y+2], saveddata["yearseglist"][str(bre[Y:Y+3])], #print '"'+str(brl)+'"', saveddata["breaklist"][brl], Year, bre[Y], bre[Y+2], saveddata["yearseglist"][str(bre[Y:Y+3])], segstr=str((lowyr,highyr)) if not segstr in saveddata["segs"]: saveddata["segs"][segstr]=convergent_breaks.resample_break(b.data().ys()[lowyr:highyr],b.data().years()[lowyr:highyr], N=100,withmode=True) pcb=saveddata["segs"][segstr] print >>outf,pcb[1][0], pcb[2][0], saveddata["yearlist"][Year], pcb[3][0][0], pcb[3][0][1], if pcb[3][1] == None: print >>outf,0, 0, else: print >>outf,pcb[3][1][0], pcb[3][1][1], betaseg, alphaseg=regress.regress(b.data().ys()[lowyr:highyr],b.data().years()[lowyr:highyr]) betalow, alphalow=regress.regress(b.data().ys()[lowyr:midyr],b.data().years()[lowyr:midyr]) betahigh, alphahigh=regress.regress(b.data().ys()[midyr:highyr],b.data().years()[midyr:highyr]) print >>outf,betaseg, betalow, betahigh, #now do a diagnostic on 15 year enclosed low15 = max(0, midyr-8) hi15=midyr+8
def Warming(self, mode='Anomaly', baseincludes=[1975, 2004]): if mode == 'Anomaly': lo=self.__Years.tolist().index(baseincludes[0]) hi=self.__Years.tolist().index(baseincludes[1])+1 mean=self.__Temperature[lo:hi].mean() return self.__Temperature-mean elif mode== 'Kelvin' and self.__Temperature[0] < 200: return self.__Temperatures + 273.15 elif mode=='Celcius' and self.__Temperature[0] > 200: return self.__Temperatures - 273.15 elif not mode in self.TempConversion: raise CMIP3Exception('Conversion mode must be in '+str(self.TempConversion)) else: return self.__Temperature if __name__ == "__main__": fn='C:\\\Users\\s4493222\\Documents\\ReferenceData\\CSIRO_Model_Set\\gwFiles\\csiro_mk3_0.sresa1b.run1.monthly.tas_A1_1871-2100_gw.txt' fn='C:\\\Users\\s4493222\\Documents\\ReferenceData\\CSIRO_Model_Set\\gwFiles\\csiro_mk3_5.sresa1b.run1.monthly.tas_A1_1871-2100_gw.txt' c3=CMIP3gw(fn) for i in range(c3.count()): print c3.Years()[i], c3.Temperature()[i], c3.Warming()[i] import ConvergentBreaks as convergent_breaks import random ys = c3.Warming() xs = np.array([random.random() for y in ys]) Years= c3.Years() convergent_breaks.TraceFile="" cb=convergent_breaks.convergentBreaks(ys, xs, Years, 'GWAnom', shallow=False, mode="control", guide="Stability",screenpr=0.05, pr=0.01, trace=True) print cb
if __name__ == "__main__": prewhiten=False outf=open("SHUFFLE.txt", "w") print >>outf, datetime.datetime.now() data=np.genfromtxt(STARS.fn,delimiter=",",names=True,filling_values =np.NaN) #fill with NaNs so must use their bounds for d in ["A4"]:#data.dtype.fields.keys(): ys = data[d] if prewhiten: ys=whitening.prewhiten(ys,STARS.AlphaEst(ys, 15, option="optIPN4", returnmsgs=False)) Years=data['Year'] xs= np.array([random.random() for i in ys]) for i in range(len(ys)): print >>outf, Years[i],xs[i], ys[i] cb=convergent_breaks.convergentBreaks(ys, xs, Years, d, screenpr=0.01, pr=0.01, trace=False) breaks=[0] for b in cb[2]: #print b breaks.extend([list(Years[:]).index(round(b[0][0])) +1]) breaks.append(len(Years)) #print "BREAKS",breaks for b in range(len(breaks))[1:-1]: sc=shuffle_cut(xs[breaks[b-1]:breaks[b+1]], ys[breaks[b-1]:breaks[b+1]], Years[breaks[b-1]:breaks[b+1]], breaks[b]-breaks[b-1]) #jk=jack_knife(xs[breaks[b-1]:breaks[b+1]], ys[breaks[b-1]:breaks[b+1]], Years[breaks[b-1]:breaks[b+1]], breaks[b]-breaks[b-1]) print >>outf, "CUT",d, b, breaks[b], cb[2][b-1][0], sc outf.close() #an experiment which simply quantifies the effect of a break at half trend of 0.5, 1.0, 1.5 2.0, 2.5 3.0 Std std=stats.tstd(xs)