#!/usr/bin/python import datetime,os,sys sys.path.append('./pylib/') from lib_scores import * import Ngl Obs_dataroot="../Observations_filled" experiments={'Convection':['Eman','Kuo','GAS','GFC'], 'Datatype':['ERA40','NNRP1','NNRP2'], 'SSTtype':['wkmean']} experiments={'Dattype':['CAM']} thresholds=[10.,20.,30.,50.,100.,200.,300.,500.,1000.] tempthresholds=[8.,10.,12.,14.,16.,18.,20.,22.,24.,26.,28.,30.] #experiments={'SSTtype':['wkmean']} # Test data #model_data=[101.,500.,50.,640.,120.,260.,170.,1000.,230.,50.] #obs_data=[20.,900.,305.,340.,190.,210.,120.,1500.,220.,40.] #thres=[150.] #result=multi_cat_scores(model_data,obs_data,thres) #print result # Step 1: get station list ifile=open(Obs_dataroot+'/kvrain.txt', 'r') lines=ifile.readlines() ifile.close() rain_stations=[] for line in lines: items=line.split(' ') k = items.count('') for j in range(0, k): items.remove('') station={'lon':float(items[0]),'lat':float(items[1])} rain_stations.append(station) for exp, cases in experiments.iteritems(): for case in cases: obs_all=[] models_all=[] Out_dataroot="../Model_obs/"+exp+"/"+case print "Processing in: "+Out_dataroot+'...' score_cressman_file=Out_dataroot+'/all_station_rain_cressman.txt' crainfile=open(score_cressman_file, 'w') crainfile.write("%(lon)7s %(lat)7s " % {'lon':'lon','lat':'lat'}) crainfile.write("%(meanFct)11s %(meanObs)11s %(ME)11s %(bias)11s" % {'meanFct':'meanFct','meanObs':'meanObs', 'ME':'ME','bias':'bias'}) crainfile.write("%(MAE)11s %(RMSE)11s %(MSE)11s %(correl)11s \n" % {'MAE':'MAE','RMSE':'RMSE','MSE':'MSE','correl':'correl'}) for istation,station in enumerate(rain_stations): rain_file=Out_dataroot+'/rain_station.%(s)03d.txt' % {'s':istation } exists=os.path.isfile(rain_file) if (not exists): print "not exist: "+rain_file else: score_file=Out_dataroot+'/rain_score.%(s)03d.txt' % {'s':istation } scatt_file=Out_dataroot+'/scatt_rain.%(s)03d.ps' % {'s':istation } #-- Read rain_file print "reading: "+ rain_file+'...' ifile=open(rain_file, 'r') lines=ifile.readlines() ifile.close() models=[] obs=[] i=0 for line in lines: if (i<2): i+=1 ; continue items=line.split(' ') for j in range(0, items.count('')): items.remove('') obs.append(float(items[1])) models.append(float(items[2])) obs_all.append(float(items[1])) models_all.append(float(items[2])) print "writing: "+ score_file+'...' ofile=open(score_file, 'w') ofile.write("Verification Scores for Station#%(sta)03i - lon: %(lon)7.3f lat:%(lat)7.3f \n" % {'sta':istation,'lon':station['lon'],'lat':station['lat']}) calc_scores_n_ouput(ofile,models,obs,thresholds) cscores = continuous_scores(ofile,models,obs) ofile.close() crainfile.write("%(lon)7.3f %(lat)7.3f " % {'lon':station['lon'],'lat':station['lat']}) crainfile.write("%(meanFct)11.2f %(meanObs)11.2f %(ME)11.2f %(bias)11.2f" % {'meanFct':cscores['meanFct'],'meanObs':cscores['meanObs'], 'ME':cscores['ME'],'bias':cscores['bias']}) crainfile.write("%(MAE)11.2f %(RMSE)11.2f %(MSE)11.2f %(correl)11.2f \n" % {'MAE':cscores['MAE'],'RMSE':cscores['RMSE'], 'MSE':cscores['MSE'],'correl':cscores['correl']}) crainfile.close() print "all station" score_file=Out_dataroot+'/all_station_rain_score.txt' scatt_file=Out_dataroot+'/all_station_rain_scatter' ofile=open(score_file, 'w') ofile.write("Verification Scores for all Station") calc_scores_n_ouput(ofile,models_all,obs_all,thresholds) continuous_scores(ofile,models_all,obs_all) ofile.close() rvalues=[] plot_scatter(scatt_file,models_all,obs_all,rvalues) #plot_scatter("test",models_all,obs_all) # Writing scatter data to plot in excel ofile=open(Out_dataroot+'/all_station_rain_scatter.txt', 'w') ofile.write("%11s %11s "%('Model','Obs')) for i in range(len(models_all)): ofile.write("\n%11.2f %11.2f"%(models_all[i],obs_all[i]) ) ##- For temperature # Step 1: get station list ifile=open(Obs_dataroot+'/kvtmp.txt', 'r') lines=ifile.readlines() ifile.close() temp_stations=[] for line in lines: items=line.split(' ') k = items.count('') for j in range(0, k): items.remove('') station={'lon':float(items[0]),'lat':float(items[1])} temp_stations.append(station) for exp, cases in experiments.iteritems(): for case in cases: obs_all=[] models_all=[] Out_dataroot="../Model_obs/"+exp+"/"+case print "Processing in: "+Out_dataroot+'...' score_cressman_file=Out_dataroot+'/all_station_temp_cressman.txt' crainfile=open(score_cressman_file, 'w') crainfile.write("%(lon)7s %(lat)7s " % {'lon':'lon','lat':'lat'}) crainfile.write("%(meanFct)11s %(meanObs)11s %(ME)11s %(bias)11s" % {'meanFct':'meanFct','meanObs':'meanObs', 'ME':'ME','bias':'bias'}) crainfile.write("%(MAE)11s %(RMSE)11s %(MSE)11s %(correl)11s \n" % {'MAE':'MAE','RMSE':'RMSE','MSE':'MSE','correl':'correl'}) for istation,station in enumerate(temp_stations): temp_file=Out_dataroot+'/temp_station.%(s)03d.txt' % {'s':istation } exists=os.path.isfile(temp_file) if (not exists): print "not exist: "+temp_file else: score_file=Out_dataroot+'/temp_score.%(s)03d.txt' % {'s':istation } print "writing: "+ score_file+'...' #-- Read temp_file ifile=open(temp_file, 'r') lines=ifile.readlines() ifile.close() models=[] obs=[] i=0 for line in lines: if (i<2): i+=1 ; continue items=line.split(' ') for j in range(0, items.count('')): items.remove('') obs.append(float(items[1])) models.append(float(items[2])) obs_all.append(float(items[1])) models_all.append(float(items[2])) ofile=open(score_file, 'w') ofile.write("Verification Scores for Station#%(sta)03i - lon: %(lon)7.3f lat:%(lat)7.3f \n" % {'sta':istation,'lon':station['lon'],'lat':station['lat']}) cscores = continuous_scores(ofile,models,obs) ofile.close() crainfile.write("%(lon)7.3f %(lat)7.3f " % {'lon':station['lon'],'lat':station['lat']}) crainfile.write("%(meanFct)11.2f %(meanObs)11.2f %(ME)11.2f %(bias)11.2f" % {'meanFct':cscores['meanFct'],'meanObs':cscores['meanObs'], 'ME':cscores['ME'],'bias':cscores['bias']}) crainfile.write("%(MAE)11.2f %(RMSE)11.2f %(MSE)11.2f %(correl)11.2f \n" % {'MAE':cscores['MAE'],'RMSE':cscores['RMSE'], 'MSE':cscores['MSE'],'correl':cscores['correl']}) crainfile.close() print "all station" score_file=Out_dataroot+'/all_station_temp_score.txt' scatt_file=Out_dataroot+'/all_station_temp_scatter' ofile=open(score_file, 'w') ofile.write("Verification Scores for all Station") continuous_scores(ofile,models_all,obs_all) calc_scores_n_ouput(ofile,models_all,obs_all,tempthresholds) ofile.close() tvalues=[] plot_scatter(scatt_file,models_all,obs_all,tvalues) # Writing scatter data to plot in excel ofile=open(Out_dataroot+'/all_station_temp_scatter.txt', 'w') ofile.write("%11s %11s "%('Model','Obs')) for i in range(len(models_all)): ofile.write("\n%11.2f %11.2f"%(models_all[i],obs_all[i]) ) ofile.close()