From: Aaron A. <aa...@us...> - 2007-10-23 22:50:47
|
Update of /cvsroot/jboost/jboost/scripts In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv6911 Modified Files: error.py margin.py surfing.py Log Message: New output format Index: margin.py =================================================================== RCS file: /cvsroot/jboost/jboost/scripts/margin.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** margin.py 13 Jun 2007 16:09:14 -0000 1.7 --- margin.py 23 Oct 2007 22:50:42 -0000 1.8 *************** *** 8,20 **** import re def usage(): print 'Usage: margin.py ' ! print '\t--margins=filename margins file as output by jboost (-a -2 switch)' ! print '\t--scores=filename scores file as output by jboost (-a -2 switch)' ! print '\t--data=filename train/test filename' ! print '\t--spec=filename spec filename' ! print '\t--iteration=NUMBER the iteration number to inspect' ! print '\t--sample are we interested in a sample of false pos/neg' ! print '\t--labels=filename labels file (if unspecified then created from data file)' def sortByColumns(list2d, column_indices, in_place=False): --- 8,21 ---- import re + + SEPARATOR = ':' + def usage(): print 'Usage: margin.py ' ! print '\t--boost-info=filename margins file as output by jboost (-a -2 switch)' ! print '\t--data=filename train/test filename' ! print '\t--spec=filename spec filename' ! print '\t--iteration=i,j,k,... the iterations to inspect, no spaces between commas' ! print '\t--sample are we interested in a sample of false pos/neg' def sortByColumns(list2d, column_indices, in_place=False): *************** *** 45,52 **** '\n' ) ! f.write('Sensitivity: ' + str(float(len(truepos))/(len(truepos)+len(falseneg))) + '\n'); ! f.write('False Pos Rate: ' + str(float(len(falsepos))/(len(trueneg)+len(falsepos))) + '\n'); list= [[margins[w],examples[w]] for w in falseneg.keys()] sortByColumns(list, [0], True) --- 46,58 ---- '\n' ) ! f.write('Sensitivity: ' + str(1-float(len(falseneg))/(len(truepos)+len(falseneg))) + '\n') ! f.write('False Pos Rate: ' + str(float(len(falsepos))/(len(trueneg)+len(falsepos))) + '\n') + f.write('True pos: ' + str(len(truepos)) + '\n') + f.write('False pos: ' + str(len(falsepos)) + '\n') + f.write('True neg: ' + str(len(trueneg)) + '\n') + f.write('False neg: ' + str(len(falseneg)) + '\n') + list= [[margins[w],examples[w]] for w in falseneg.keys()] sortByColumns(list, [0], True) *************** *** 77,86 **** ! def write_gnuplot(scores_list, iters, datafile): margin_list = [] for i in range(len(iters)): ! scores = scores_list[i] ! margins = scores_list[i] #get_margins(labels, scores); margins.sort() margin_list.append(margins) --- 83,93 ---- ! def write_gnuplot(m_list, iters, datafile): margin_list = [] for i in range(len(iters)): ! scores = m_list[i] ! m = m_list[i] ! margins = m[:] margins.sort() margin_list.append(margins) *************** *** 131,144 **** ! f = open('margin.png.gnuplot', 'w') f.writelines(pngoutlines) f.close() ! f = open('margin.eps.gnuplot', 'w') f.writelines(epsoutlines) f.close() ! --- 138,155 ---- + pngfilename = 'margin.png.gnuplot' + epsfilename = 'margin.eps.gnuplot' ! f = open(pngfilename, 'w') f.writelines(pngoutlines) f.close() ! f = open(epsfilename, 'w') f.writelines(epsoutlines) f.close() ! os.system('gnuplot ' + pngfilename) ! os.system('gnuplot ' + epsfilename) ! os.system('epstopdf margin.eps') *************** *** 164,180 **** ! def get_margins(labels, scores): ! def computeMargin(score, label): ! return score*int(label) ! ! margins= map(computeMargin, scores, labels) ! return margins ! ! ! ! def process_data(examples, labels, margins, scores, datafile, sample): print 'Examples ' + str(len(examples)) - print 'Scores ' + str(len(scores)) print 'Margins ' + str(len(margins)) print 'Generating margins' --- 175,181 ---- ! def process_data(examples, labels, margins, datafile, sample): print 'Examples ' + str(len(examples)) print 'Margins ' + str(len(margins)) print 'Generating margins' *************** *** 182,187 **** print 'Matching margins with data' - #pos_label, neg_label = getLabels(specfile) - falsepos = dict([(w,[margins[w],examples[w],labels[w]]) for w in range(len(margins)) --- 183,186 ---- *************** *** 200,203 **** --- 199,205 ---- + # for i in range(len(margins)): + # print '%d\t %s\t %.2f\t %.2f' % (i, labels[i].strip(), margins[i]) + write_files(examples, datafile, sample, margins, falsepos, truepos, falseneg, trueneg) *************** *** 213,217 **** try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['margins=', 'scores=','data=','spec=','labels=', 'iteration=', 'sample']) except getopt.GetoptError, inst: print 'Received an illegal argument:', inst --- 215,219 ---- try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['boost-info=', 'data=', 'spec=', 'iteration=', 'sample']) except getopt.GetoptError, inst: print 'Received an illegal argument:', inst *************** *** 219,228 **** sys.exit(2) ! marginsfile = scoresfile = datafile = specfile = labelsfile = sample = iteration = None for opt,arg in opts: ! if (opt == '--margins'): ! marginsfile = arg ! if (opt == '--scores'): ! scoresfile = arg if (opt == '--spec'): specfile = arg --- 221,228 ---- sys.exit(2) ! boostfile = datafile = specfile = labelsfile = sample = iteration = None for opt,arg in opts: ! if (opt == '--boost-info'): ! boostfile = arg if (opt == '--spec'): specfile = arg *************** *** 237,258 **** ! if(marginsfile == None or scoresfile == None or datafile == None or specfile == None): print 'Need score, data, and spec file.' usage() sys.exit(2) - if(labelsfile == None): - labelsfile = datafile + '.labels' - #if os.path.exists(labelsfile): - # print 'Using label file:', labelsfile - # # do nothing - #else: - command = 'cat ' + datafile + ' | sed \'s/.*\(.1\);/\\1/g\' > ' + labelsfile - print command - os.system(command) - command = 'sed -i \'s/ 1/+1/g\' ' + labelsfile - print command - os.system(command) - print 'Reading data' f= open(datafile,'r') --- 237,245 ---- ! if(boostfile == None or datafile == None or specfile == None): print 'Need score, data, and spec file.' usage() sys.exit(2) print 'Reading data' f= open(datafile,'r') *************** *** 260,301 **** f.close() ! print 'Reading score values' ! f= open(scoresfile,'r') ! data= f.readlines() ! f.close() ! score_elements= int((string.split(data[0],'='))[2]) ! ! print 'Reading margin values' ! f= open(marginsfile,'r') data= f.readlines() f.close() ! margin_elements= int((string.split(data[0],'='))[2]) ! print 'Reading labels' ! f= open(labelsfile,'r') ! labels= f.readlines()[-score_elements:] ! f.close() ! scores = [] ! margin_list = [] iters = [1] iters[0] = len(data) / (margin_elements+1) if (iteration != None): ! iters = map(int, iteration.split(',')) for iter in iters: ! margins = [float(x) for x in data[iter*(margin_elements+1)+1:(iter+1)*(margin_elements+1)]] ! scores = [float(x) for x in data[iter*(score_elements+1)+1:(iter+1)*(score_elements+1)]] margin_list.append(margins) else: ! margins = [float(x) for x in data[-margin_elements:]] ! scores = [float(x) for x in data[-score_elements:]] margin_list.append(margins) ! write_gnuplot(margin_list, iters, datafile) ! ! process_data(examples, labels, margin_list[len(margin_list)-1], scores, datafile, sample) ! --- 247,294 ---- f.close() ! print 'Reading boosting info' ! f= open(boostfile,'r') data= f.readlines() f.close() ! margin_elements= int((string.split(data[0],SEPARATOR))[1].split('=')[1]) ! def get_margin(line): ! m = line.split(SEPARATOR)[1] ! m.replace(']','') ! m.replace(';','') ! m.replace(SEPARATOR,'') ! m.replace(' ','') ! m.replace('\t','') ! return float(m) ! def get_label(line): ! m = line.split(SEPARATOR)[-2] ! m.replace(']','') ! m.replace(';','') ! m.replace(SEPARATOR,'') ! m.replace(' ','') ! m.replace('\t','') ! return m + # if iterations are not specified on command line, we do the last iteration iters = [1] iters[0] = len(data) / (margin_elements+1) + + margin_list = [] if (iteration != None): ! iters = map(int, [x.strip() for x in iteration.split(',')]) for iter in iters: ! lines = [x for x in data[iter*(margin_elements+1)+1:(iter+1)*(margin_elements+1)]] ! margins = map(get_margin, lines) margin_list.append(margins) else: ! lines = [x for x in data[-margin_elements:]] ! margins = map(get_margin, lines) margin_list.append(margins) ! labels = map(get_label, [x for x in data[-margin_elements:]]) ! process_data(examples, labels, margin_list[len(margin_list)-1], datafile, sample) + write_gnuplot(margin_list, iters, datafile) Index: surfing.py =================================================================== RCS file: /cvsroot/jboost/jboost/scripts/surfing.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** surfing.py 12 Jul 2007 16:07:26 -0000 1.2 --- surfing.py 23 Oct 2007 22:50:42 -0000 1.3 *************** *** 9,20 **** import math def usage(): print 'Usage: margin.py ' ! print '\t--surfing=filename surfing file as output by jboost (-a -2 switch)' ! print '\t--scores=filename scores file as output by jboost (-a -2 switch)' ! print '\t--data=filename train/test filename' ! print '\t--spec=filename spec filename' ! print '\t--booster=type type={normal, brown}' ! print '\t--framerate=num an integer specifying framerate' --- 9,22 ---- import math + SEPARATOR=':' + def usage(): print 'Usage: margin.py ' ! print '\t--surfing=filename surfing file as output by jboost (-a -2 switch)' ! print '\t--boost-info=filename file as output by jboost (-a -2 switch)' ! print '\t--data=filename train/test filename' ! print '\t--spec=filename spec filename' ! print '\t--booster=type type={AdaBoost, LogLossBoost, NormalBoost, BrownBoost}' ! print '\t--framerate=num an integer specifying framerate' *************** *** 39,46 **** weights = [] s = c= c1 = c2 = theta = 0 ! if(params[0] == 'brown'): c = float(params[1]) s = float(params[2]) #time remaining ! elif(params[0] == 'normal'): c = float(params[1]) s = c-float(params[2]) #time played --- 41,49 ---- weights = [] s = c= c1 = c2 = theta = 0 ! confidence = False ! if(params[0] == 'BrownBoost'): c = float(params[1]) s = float(params[2]) #time remaining ! elif(params[0] == 'NormalBoost'): c = float(params[1]) s = c-float(params[2]) #time played *************** *** 50,53 **** --- 53,57 ---- c2 = float(params[4]) theta = float(params[5]) + confidence = params[6] *************** *** 57,64 **** for i in range(0,num_steps): mu = var = 0 ! if params[0] == 'brown': mu = -s var = c ! elif params[0] == 'normal': mu = theta - c1 * (math.exp(-s) - math.exp(-c)) var = c2 * (math.exp(-2*s) - math.exp(-2*c)) + 0.05 --- 61,68 ---- for i in range(0,num_steps): mu = var = 0 ! if params[0] == 'BrownBoost': mu = -s var = c ! elif params[0] == 'NormalBoost': mu = theta - c1 * (math.exp(-s) - math.exp(-c)) var = c2 * (math.exp(-2*s) - math.exp(-2*c)) + 0.05 *************** *** 67,71 **** y = math.exp(-math.pow(x-mu,2)/(var)) * max_bin p = (1 - erf((x-mu)/math.sqrt(var)))/2 ! p = min(2*p, 1) weights.append((x,y,p)) x += step --- 71,76 ---- y = math.exp(-math.pow(x-mu,2)/(var)) * max_bin p = (1 - erf((x-mu)/math.sqrt(var)))/2 ! if (confidence): ! p = min(2*p, 1) weights.append((x,y,p)) x += step *************** *** 115,132 **** def paste_gnuplot(num_iterations, framerate): print 'Starting animated gif creation' ! os.system('convert -rotate 90 -delay 5 -loop 0 surfing*.eps surfing.gif') print 'Finished gif creation' print 'See surfing.gif for animation' ! line_compare = lambda x,y : cmp(float(string.split(x,'\t')[0]), float(string.split(y,'\t')[0])) def write_gnuplot(lines, iter, datafile, params): lines.sort(line_compare); ! ! ! margins = [ float(string.split(x,'\t')[0]) for x in lines] ! weights = [ float(string.split(x,'\t')[1]) for x in lines] ! potentials = [ float(string.split(x,'\t')[2]) for x in lines] --- 120,136 ---- def paste_gnuplot(num_iterations, framerate): print 'Starting animated gif creation' ! os.system('convert -rotate 90 -delay 5 -loop 2 surfing*.eps surfing.gif') print 'Finished gif creation' print 'See surfing.gif for animation' ! def write_gnuplot(lines, iter, datafile, params): + line_compare = lambda x,y : cmp(float(string.split(x,SEPARATOR)[1]), float(string.split(y,SEPARATOR)[1])) lines.sort(line_compare); ! margins = [ float(string.split(x,SEPARATOR)[1]) for x in lines] ! weights = [ float(string.split(x,SEPARATOR)[2]) for x in lines] ! potentials = [ float(string.split(x,SEPARATOR)[3]) for x in lines] *************** *** 155,162 **** epsoutlines.append('set terminal post\n') epsoutlines.append('set output \'surfing%05d.eps\'\n' % (iter)) ! epsoutlines.append('set title "'+ params[0] + 'boost ' + datafile + ' Surfing: Time Remaining ' + str(params[2]) + '" font "Times,20"\n') epsoutlines.append('set key left top\n') epsoutlines.append('set yzeroaxis lt -1\n') ! if params[0]=='normal': epsoutlines.append('set xrange [-1:1]\n') epsoutlines.append('set yrange [0:1]\n') --- 159,166 ---- epsoutlines.append('set terminal post\n') epsoutlines.append('set output \'surfing%05d.eps\'\n' % (iter)) ! epsoutlines.append('set title "'+ params[0] + ' ' + datafile + ' Surfing: Time Remaining ' + str(params[2]) + '" font "Times,20"\n') epsoutlines.append('set key left top\n') epsoutlines.append('set yzeroaxis lt -1\n') ! if params[0]=='NormalBoost': epsoutlines.append('set xrange [-1:1]\n') epsoutlines.append('set yrange [0:1]\n') *************** *** 173,177 **** '"surfing_weight.dat" using 1:2 title "Potential" with lines \n') # 'delta(t) with lines \n') ! # if params[0]=='normal': # epsoutlines.append('set parametric\n') # epsoutlines.append('set trange [0:1]\n') --- 177,181 ---- '"surfing_weight.dat" using 1:2 title "Potential" with lines \n') # 'delta(t) with lines \n') ! # if params[0]=='NormalBoost': # epsoutlines.append('set parametric\n') # epsoutlines.append('set trange [0:1]\n') *************** *** 212,216 **** try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['surfing=', 'scores=','data=','spec=','labels=', 'iteration=', 'framerate=', 'booster=', 'sample']) except getopt.GetoptError, inst: print 'Received an illegal argument:', inst --- 216,220 ---- try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['surfing=', 'boost-info=','data=','spec=','labels=', 'iteration=', 'framerate=', 'booster=', 'sample']) except getopt.GetoptError, inst: print 'Received an illegal argument:', inst *************** *** 218,231 **** sys.exit(2) ! surffile = scoresfile = datafile = framerate = specfile = labelsfile = sample = iteration = booster = None for opt,arg in opts: - if (opt == '--surfing'): - surffile = arg if (opt == '--booster'): booster = arg if (opt == '--framerate'): framerate = int(arg) ! if (opt == '--scores'): ! scoresfile = arg if (opt == '--spec'): specfile = arg --- 222,233 ---- sys.exit(2) ! boostfile = datafile = framerate = specfile = labelsfile = sample = iteration = booster = None for opt,arg in opts: if (opt == '--booster'): booster = arg if (opt == '--framerate'): framerate = int(arg) ! if (opt == '--boost-info'): ! boostfile = arg if (opt == '--spec'): specfile = arg *************** *** 236,241 **** ! if(surffile == None or scoresfile == None or datafile == None or specfile == None): ! print 'Need score, data, and spec file.' usage() sys.exit(2) --- 238,243 ---- ! if(boostfile == None or datafile == None or specfile == None): ! print 'Need boosting.info, data, and spec file.' usage() sys.exit(2) *************** *** 244,277 **** usage() sys.exit(2) ! if(booster==None or (booster!='normal' and booster!='brown')): ! print 'Only accepts `normal` and `brown` boost.' usage() sys.exit(2) ! print 'Reading surfing file' ! f= open(surffile,'r') data= f.readlines() f.close() ! num_elements= int((string.split(data[0],'='))[2]) ! num_iterations = int(string.split(string.split(data[-num_elements-2], ',')[0], '=')[1]) ! os.system('rm surfing*.eps surfing*.png') for iter in range(0, num_iterations+1, framerate): ! if (booster=='brown'): ! total_time = string.split(data[iter*(num_elements+2)+1], ' ')[2] ! time_left = string.split(data[iter*(num_elements+2)+1], ' ')[3] ! params = ('brown', total_time, time_left) ! if (booster=='normal'): ! total_time = string.split(data[iter*(num_elements+2)+1], ' ')[2] ! time_left = string.split(data[iter*(num_elements+2)+1], ' ')[3] ! c1 = 1.818 ! c2 = 1 ! theta = 0.1 ! #c1 = string.split(data[iter*(num_elements+2)+1], ' ')[4] ! #c2 = string.split(data[iter*(num_elements+2)+1], ' ')[5] ! #theta = string.split(data[iter*(num_elements+2)+1], ' ')[6] ! params = ('normal', total_time, time_left, c1, c2, theta) ! lines = [x for x in data[iter*(num_elements+2)+2:(iter+1)*(num_elements+2)]] write_gnuplot(lines, iter, datafile, params) --- 246,289 ---- usage() sys.exit(2) ! if(booster==None or (booster!='NormalBoost' and booster!='BrownBoost')): ! print 'Only accepts `NormalBoost` and `BrownBoost` boost.' usage() sys.exit(2) ! print 'Reading boosting.info file' ! f= open(boostfile,'r') data= f.readlines() f.close() ! num_elements= int((string.split(data[0],SEPARATOR)[1].split('=')[1])) ! num_iterations = int(string.split(string.split(data[-num_elements-1], SEPARATOR)[0], '=')[1]) ! #os.system('rm surfing*.eps surfing*.png') for iter in range(0, num_iterations+1, framerate): ! boost_params_str = string.split(data[iter*(num_elements+1)], SEPARATOR)[2].split('boosting_params=')[1] ! if (booster=='BrownBoost'): ! search_str = 'r=' ! total_time = boost_params_str[boost_params_str.index(search_str)+2 :].split(' ')[0] ! search_str = 's=' ! time_left = boost_params_str[boost_params_str.index(search_str)+2 :].split(' ')[0] ! params = ('BrownBoost', total_time, time_left) ! if (booster=='NormalBoost'): ! search_str = 'c=' ! total_time = boost_params_str[boost_params_str.index(search_str)+2 :].split(' ')[0] ! search_str = 's=' ! time_left = boost_params_str[boost_params_str.index(search_str)+2 :].split(' ')[0] ! search_str = 'c1=' ! c1 = boost_params_str[boost_params_str.index(search_str)+len(search_str) :].split(' ')[0] ! search_str = 'c2=' ! c2 = boost_params_str[boost_params_str.index(search_str)+len(search_str) :].split(' ')[0] ! search_str = 'theta=' ! theta = boost_params_str[boost_params_str.index(search_str)+len(search_str) :].split(' ')[0] ! search_str = 'confidence=' ! confidence = boost_params_str[boost_params_str.index(search_str)+len(search_str) :].split(' ')[0] ! use_conf = False ! if confidence == 'true' or confidence == 'True' or confidence == '1': ! use_conf = True ! params = ('NormalBoost', total_time, time_left, c1, c2, theta, use_conf) ! lines = [x for x in data[iter*(num_elements+1)+1:(iter+1)*(num_elements+1)]] write_gnuplot(lines, iter, datafile, params) Index: error.py =================================================================== RCS file: /cvsroot/jboost/jboost/scripts/error.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** error.py 19 May 2007 01:57:56 -0000 1.3 --- error.py 23 Oct 2007 22:50:42 -0000 1.4 *************** *** 11,14 **** --- 11,37 ---- print '\t--logaxis should the axis be log-scaled (default: false)' print '\t--bound show the bound on training error' + print '\t--separate separate the positive and negative examples' + print '\t--scores=score_file the score file (only needed if --separate used)' + print '\t--margins=marg_file the margin file (only needed if --separate used)' + + def do_separate(score_filename, margin_filename): + print 'Parsing scores file' + f = open(score_filename,'r') + lines = f.readlines() + f.close() + + read_iter = False + data = [] + for line in lines: + line = line.strip() + if (line[:8] =='End time'): + break + if (read_iter): + data.append(get_score(line)) + + + + + def main(): *************** *** 16,29 **** try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['info=','logaxis','bound']) except getopt.GetoptError: usage() sys.exit(2) ! infofilename = logaxis = showbound = None for opt,arg in opts: if (opt == '--info'): ! infofilename = arg ! elif (opt == '--logaxis'): logaxis = True elif (opt == '--bound'): --- 39,58 ---- try: ! opts, args= getopt.getopt(sys.argv[1:], '', ['info=','logaxis','bound','separate','scores=','margins=']) except getopt.GetoptError: usage() sys.exit(2) ! info_filename = logaxis = showbound = show_separate = margin_filename = score_filename = None for opt,arg in opts: if (opt == '--info'): ! info_filename = arg ! if (opt == '--margins'): ! margin_filename = arg ! if (opt == '--info'): ! score_filename = arg ! if (opt == '--separate'): ! show_separate = True ! if (opt == '--logaxis'): logaxis = True elif (opt == '--bound'): *************** *** 31,44 **** ! if(infofilename == None): ! usage() ! sys.exit(2) ! print 'Reading info file' ! f = open(infofilename,'r') lines = f.readlines() f.close() ! def get_data(line): list = line.split('\t') ret = {} --- 60,80 ---- ! if (show_separate and (margin_filename==None or score_filename==None)): ! print 'ERROR: Need to specify score and margin file if showing positive and negative elements separately' ! usage() ! sys.exit(2) ! ! if(info_filename == None): ! print 'ERROR: Need to specify info file' ! usage() ! sys.exit(2) ! print 'Parsing info file' ! f = open(info_filename,'r') lines = f.readlines() f.close() ! ! def get_info_data(line): list = line.split('\t') ret = {} *************** *** 49,52 **** --- 85,89 ---- return ret + read_iter = False data = [] *************** *** 57,61 **** break if (read_iter): ! data.append(get_data(line)) if (line=='iter \tbound \ttrain \ttest'): read_iter = True --- 94,98 ---- break if (read_iter): ! data.append(get_info_data(line)) if (line=='iter \tbound \ttrain \ttest'): read_iter = True *************** *** 81,85 **** outlines.append('set xlabel "Iteration"\n') outlines.append('set ylabel "Error"\n') ! outlines.append('set title "' + infofilename + ' Error"\n') if (logaxis): outlines.append('set logscale x 10\n') --- 118,122 ---- outlines.append('set xlabel "Iteration"\n') outlines.append('set ylabel "Error"\n') ! outlines.append('set title "' + info_filename + ' Error"\n') if (logaxis): outlines.append('set logscale x 10\n') *************** *** 92,100 **** outlines.append(out) ! ! f = open('error.gnuplot', 'w') f.writelines(outlines) f.close() if __name__ == "__main__": main() --- 129,149 ---- outlines.append(out) ! pngfilename = 'error.gnuplot' ! f = open(pngfilename, 'w') f.writelines(outlines) f.close() + os.system('gnuplot ' + pngfilename) + + ##################################### + # Now do scores file for separate option + ##################################### + + if show_separate: + do_separate() + + + + if __name__ == "__main__": main() |