Page MenuHomec4science

graphhelper.py
No OneTemporary

File Metadata

Created
Thu, Sep 26, 20:59

graphhelper.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# -*- py-which-shell: "python"; -*-
import base
import run
import job
import runselector
import jobselector
import matplotlib.pyplot as plt
import re
class GraphHelper(object):
"""
"""
def getMeasures(self,run_list):
myresults = {}
for r in run_list:
print ("retreive data from run " + r["run_name"])
res = self.base.getScalarQuantities(self.quantities,r.id)
myresults[r.id] = {}
for key , value in res.iteritems():
if (not value == None):
myresults[r.id][key] = value
return myresults
def makeGraphs(self,**kwargs):
run_list = self.runSelector.selectRuns(self.run_constraints,self.job_constraints)
results = self.getMeasures(run_list)
fig = plt.figure()
for rid, data in results.iteritems():
myrun = run.Run()
myrun.prepare(self.base)
myrun["id"] = rid
myrun = self.base.getMatchedObjectList(myrun)[0]
myjob = job.Job()
myjob.prepare(self.base)
myjob["id"] = myrun["job_id"]
myjob = self.base.getMatchedObjectList(myjob)[0]
self.makeCurve(data,fig=fig,fileout=None,myrun=myrun,myjob=myjob,**kwargs)
def makeCurve(self,results,quantity=None,myrun=None,myjob=None,\
legend=None,legend_alias=None,fig=None,xrange=None,yrange=None,\
xlabel=None,ylabel=None,fileout=None,title=None,**kwargs):
if (not fig):
fig = plt.figure()
axe=fig.add_subplot(1,1,1)
head_legend=""
if (legend):
for i in range(0,len(legend)):
mykey = legend[i].lower()
if (mykey in myrun.entries):
myval = myrun[mykey]
else:
myval = myjob[mykey]
if (legend_alias and legend_alias[i]):
head_legend += "$" + legend_alias[i] + " = " + str(myval) + "$"
else:
head_legend += legend[i] + " = " + str(myval)
if (i < len(legend)-1):
head_legend += ","
if xrange:
axe.set_xlim(xrange)
if yrange:
axe.set_ylim(yrange)
if (xlabel):
axe.set_xlabel(xlabel,fontsize=20)
if (ylabel):
axe.set_ylabel(ylabel,fontsize=20)
if (title):
fig.suptitle(title)
axe.grid(True,linewidth=0.1)
for name in results.keys():
vec = results[name]
match = re.match(quantity,name)
if (match):
if (len(match.groups()) > 0):
name = "$" + match.group(1) + "$"
if (head_legend):
label = head_legend+","+name
else:
label = name
axe.plot(vec[:,0], vec[:,1],label=label)
axe.legend(loc='best')
if (fileout):
fig.savefig(fileout)
return fig
def setJobConstraint(self,**params):
self.job_constraints = []
if ("job_constraints" in params):
self.job_constraints = params["job_constraints"]
def setRunConstraint(self,**params):
self.run_constraints = []
if ("run_constraints" in params):
self.run_constraints = params["run_constraints"]
def setQuantity(self,**params):
if ("quantity" in params):
self.quantities = params["quantity"]
else:
print ("quantity should be provided using option --quantity")
self.quantities = "__BLACKDYNAMITE_ERROR__"
def __init__ (self,base,**params):
self.setJobConstraint(**params)
self.setRunConstraint(**params)
self.setQuantity(**params)
self.base = base
self.runSelector = runselector.RunSelector(self.base)
################################################################
graph_params = {}
graph_params["quantity"] = str
graph_params["xrange"] = [float]
graph_params["yrange"] = [float]
graph_params["run_constraints"] = [str]
graph_params["job_constraints"] = [str]
graph_params["xlabel"] = str
graph_params["ylabel"] = str
graph_params["title"] = str
graph_params["legend"] = [str]
graph_params["legend_alias"] = [str]
################################################################
def parseBDParameters(additional_params=None,default_additional_params=None):
tmp_params = graph_params
if (additional_params):
tmp_params.update(additional_params)
params = base.parseBDParameters(tmp_params,default_additional_params)
return params

Event Timeline