 |
Show a summary of experimental data
Source code name: "real_life_glueballs.py"
Programming language: Python
Topic: Physics/HEP
DMelt Version 1. Last modified: 05/09/2015. License: Pro
https://datamelt.org/code/cache/real_life_glueballs_4741.py
To run this script using the DMelt IDE,
copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.
from java.awt import Font,Color
from java.util import Random
from jhplot import HPlot,P1D,HLabel,HKey
from jhplot.shapes import Line,Arrow,Rectan
massAverage=1525
massError=5
widthAverage=73
widthError=6
# class to keep a single measurement
class Measurement:
def __init__(self, ref, mass, mass_err_left, mass_err_right,
width, width_err_left, width_err_right):
"Class representing a single measurement"
self.r_ref = ref
self.r_mass = mass
self.r_mass_err_left = mass_err_left
self.r_mass_err_right = mass_err_right
self.r_width = width
self.r_width_err_left = width_err_left
self.r_width_err_right = width_err_right
self.r_y=10
# keep mass
self.p1=P1D(self.r_ref)
self.p1.setErrSysX(0)
self.p1.setSymbolSize(8)
self.p1.setSymbol(4)
self.p1.setPenWidthErr(2)
# p1.setPenWidthErrSys(2)
self.p1.add(self.r_mass,self.r_y,self.r_mass_err_left,self.r_mass_err_right,0,0,0,0,0,0)
self.p1.setLegend(0)
# keep width
self.p2=P1D(self.r_ref)
self.p2.setErrSysX(0)
self.p2.setSymbolSize(8)
self.p2.setSymbol(4)
self.p2.setPenWidthErr(2)
# p2.setPenWidthErrSys(2)
self.p2.add(self.r_width,self.r_y,self.r_width_err_left,self.r_width_err_right,0,0,0,0,0,0)
self.p2.setLegend(0)
# define interactive label
self.lab=HLabel(self.r_ref,20,10)
self.lab.setColor(Color.blue)
def printMass(self):
print self.r_ref, self.r_mass, self.r_mass_err_left, self.r_mass_err_right
def printWidth(self):
print self.r_ref, self.r_width, self.r_width_err_left, self.r_width_err_right
def getMass(self):
return self.r_mass;
def getY(self):
return self.r_y;
def setY(self, y):
self.r_y=y
self.p1.clear()
self.p2.clear()
self.p1.add(self.r_mass,self.r_y,self.r_mass_err_left,self.r_mass_err_right,0,0,0,0,0,0)
self.p2.add(self.r_width,self.r_y,self.r_width_err_left,self.r_width_err_right,0,0,0,0,0,0)
self.lab.setLocation(20, self.r_y)
def getMass(self):
return self.p1
def getWidth(self):
return self.p2
def getLabel(self):
return self.lab
# fill world's measurements
all=[]
all.append( Measurement('K-meson beams', 1523.4 ,1.3,1.3, 80.2,2.6,2.6) )
all.append( Measurement('e^{+}e^{-} annihilation', 1520.7, 2, 2, 79.9,3.3,3.3) )
all.append( Measurement('e p DIS', 1520.7, 2, 2, 79.9,3.3,3.3) )
all.append( Measurement('e p collisions', 1520.7, 2, 2, 79.9,3.3,3.3))
c1 = HPlot("Canvas",800,600,3, 1)
c1.setGTitle("World's summary f_{2}^{'} (1525)")
c1.setGridAll(0,0)
c1.setGridAll(1,0)
c1.visible(1)
# plot masses
c1.cd(1,1)
c1.removeAxes()
c1.setRange(1510,1540,0,100)
c1.setAxisX()
c1.setNameX("mass")
c1.setAxisPenTicWidth(3)
c1.setPenWidthAxis(3)
# show PDG masses
line = Line(massAverage,0.0, massAverage, 100)
line.setColor(Color.red)
line.setTransparency(0.99)
c1.add(line)
rec = Rectan(massAverage,50, massError, 100)
rec.setColor(Color.yellow)
rec.setTransparency(0.5)
rec.setFill(1)
c1.add(rec)
tot=len(all)
delta=100/(tot+1)
for i in range(len(all)):
m=all[i]
m.printMass()
m.setY(delta+i*delta)
c1.draw(m.getMass())
# -------- citation
c1.cd(2,1)
c1.setRange(0,100,0,100)
c1.removeAxes()
# put key
key=HKey("PDG",20,10)
key.setKey(20,7,Color.yellow)
key.setKeySpace(2)
c1.add(key)
for i in range(len(all)):
m=all[i]
print "Labels=", m.printMass()
m.setY(1.4*delta+i*delta)
c1.add(m.getLabel())
c1.update()
# -------- plot widthes --------------------------------
c1.cd(3,1)
c1.removeAxes()
c1.setRange(50,100,0,100)
c1.setAxisX()
c1.setNameX("width (GeV)")
c1.setAxisPenTicWidth(3)
c1.setPenWidthAxis(3)
line = Line(widthAverage,0.0, widthAverage, 100)
line.setColor(Color.red)
line.setTransparency(0.99)
c1.add(line)
rec = Rectan(widthAverage,50, widthError, 100)
rec.setColor(Color.yellow)
rec.setTransparency(0.5)
rec.setFill(1)
c1.add(rec)
for i in range(len(all)):
m=all[i]
m.printWidth()
m.setY(delta+i*delta)
c1.draw(m.getWidth())
You see the box below because you did not login.