higgs_higgs_tautaubbar_mcfm.py (raw text file)
from java.lang import *
from java.awt import Color,Font
from jhplot import HPlot,P1D,HLabel,H1D
from jhplot.io import HBook
from proto import FileNLO
from jhplot.utils import FileList
from hephysics.particle import LParticle
from hepsim import HepSim
import sys,os,math
TotalFiles=-1
url="";
default_www="http://mc.hep.anl.gov/asc/hepsim/events/pp/100tev/hh_tautaubbar/"
if len(sys.argv)>1:
if sys.argv[1].startswith("http"):
flist=HepSim.getList(sys.argv[1])
url=sys.argv[1]
else: flist=FileList.get(sys.argv[1],"promc")
if (len(sys.argv)>2): TotalEvents=int(sys.argv[2])
else:
url=default_www; flist=HepSim.getList(url)
if len(flist)==0: print "Error: No input file!"; sys.exit(0)
else: print "Reading "+str(len(flist))+" files. Nr files= ",TotalFiles
bins=[0,40,80,120,160,200,240,280,320,360,400]
nPDF=52
histo=[]
for i in range(nPDF):
h1=H1D("PT(H0) pdf="+str(i),bins)
histo.append(h1)
nev=0; Nfiles=len(flist)
if TotalFiles>-1 and TotalFiles5): break
file=FileNLO(url+flist[m])
header = file.getHeader()
un=float(header.getMomentumUnit())
lunit=float(header.getLengthUnit())
nIterations=header.getWeight()
NXF=nIterations*Nfiles
if m==0:
print "ProMC v=",file.getVersion(), "M unit=",un,"L unit=",lunit
for i in range(file.size()):
nev=nev+1
if (nev%20000==0):
if (Nfiles==1): print "Event=",nev
else: print "Event=",nev," done=",int((100.0*m)/Nfiles),"%"
eve = file.read(i)
pa = eve.getParticles()
ve = eve.getEvent()
weight=ve.getFdata(0)
for j in range(ve.getIdataCount()):
pdferrors= ve.getIdata(j)
weight=weight/NXF
taus=[]
bquarks=[]
for j in range(pa.getPxCount()):
if (math.fabs(pa.getPdgId(j))==15):
p=LParticle(pa.getPx(j)/un,pa.getPy(j)/un,pa.getPz(j)/un,pa.getEnergy(j)/un)
taus.append(p)
if (math.fabs(pa.getPdgId(j))==5):
p=LParticle(pa.getPx(j)/un,pa.getPy(j)/un,pa.getPz(j)/un,pa.getEnergy(j)/un)
bquarks.append(p)
higgses=[]
if (len(taus)>1):
higgs=taus[0]
higgs.add(taus[1])
higgses.append(higgs)
if (len(bquarks)>1):
higgs=bquarks[0]
higgs.add(bquarks[1])
higgses.append(higgs)
for h in higgses:
mass=h.calcMass()
if (mass>120 and mass<130):
for k in range(nPDF):
piDIVp0 = 1.0-(ve.getIdata(k)/1000.)
histo[k].fill(higgs.perp(),weight*piDIVp0)
file.close()
cross=histo[0].sumAllBinHeights()/1000
print "Total cross section (pb)=",cross
data=[]
for k in range(nPDF):
newD=histo[k].getDividedByBinWidth()
newD.scale(1.0/1000)
data.append(P1D(newD))
xsec=P1D("MCFM CT10")
for j in range(data[0].size()):
x=data[0].getX(j)
y=data[0].getY(j)
errX=0.5*(bins[j+1]-bins[j])
up=0; dw=0;
for n in range(1,nPDF):
d=data[n].getY(j)-y
if (d>0): up=up+d*d
if (d<0): dw=dw+d*d
xsec.add(x,y,errX,errX,Math.sqrt(up),Math.sqrt(dw))
xsec.setErr(1)
xsec.setColor(Color.blue)
errors=P1D("Relative errors")
for j in range(xsec.size()):
y=xsec.getY(j)
if y !=0:
errors.add(xsec.getX(j),1,xsec.getXleft(j),xsec.getXright(j),xsec.getYupper(j)/y,xsec.getYlower(j)/y)
errors.setErr(1)
c1 =HPlot("=HepSim=",400,600, 1,2)
c1.visible(True)
c1.resizePad(0,0,1.0, 1.5)
c1.resizePad(0,1,1.0, 0.5)
xmin=0
xmax=500
c1.cd(1,1)
c1.setNameY("d σ / d p_{T}(H0+H0) [pb/GeV]")
c1.setNameYpos(-0.01, 0.93)
c1.setMarginLeft(55)
c1.setMarginBottom(0.0)
c1.setTicLabels(0, False)
c1.setRange(xmin,xmax,0.0000011,0.1)
c1.setLogScale(1,1)
tot=0
for i in range(xsec.size()):
tot=tot+xsec.getY(i)*(bins[i+1]-bins[i])
l1=HLabel("σ(H0+H0(τ τ b #bar{b}))=%.3e pb"%cross, 0.15, 0.7, "NDC")
l1.setFont(Font("Helvetica", Font.PLAIN, 14))
c1.add(l1)
l2=HLabel("=HepSim=",0.6,0.84, "NDC")
l2.setFont(Font("Helvetica", Font.PLAIN, 14))
c1.add(l2)
c1.draw(xsec)
c1.cd(1,2)
c1.setRange(xmin,xmax,0.7,1.3)
c1.setLegend(False)
c1.setNameY("Ratio")
c1.setNameYpos(-0.015, 0.9)
c1.setMarginTop(0.0)
c1.setMarginLeft(55)
c1.setNameX("p_{T}(H0+H0) [GeV]")
c1.setNameXpos(0.55, 0.1)
from jhplot.shapes import Line
line = Line(xmin,1.0, xmax, 1.0)
line.setPosCoord("USER")
line.setTransparency(0.5)
c1.add(line)
c1.draw(errors)
name="output"
if len(sys.argv[0])>0: name=sys.argv[0].replace(".py","")
file=HBook(name+".jdat","w"); print name+".jdat created"
file.write(xsec)
file.write(errors)
file.close()
c1.export(name+".svg"); print name+".svg created"