pythia8_qcdpt1000.py (raw text file)
from java.awt import Color,Font
from java.lang import *
from proto import FileMC
from jhplot import HPlot,H1D,P1D,HLabel
from jhplot.utils import FileList
from hephysics.particle import LParticle
from hephysics.hepsim import PromcUtil
from hephysics.jet import JetN2
from hepsim import HepSim
import sys
ktjet=JetN2(0.5,"antikt",100)
print ktjet.info()
url=""; TotalEvents=60000
default_www="http://mc.hep.anl.gov/asc/hepsim/events/pp/13tev/qcd/pythia13tev_pp_qcdpt1000/"
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 events= ",TotalEvents
h1= H1D("PT(lead antiKT)",50,1000,6000)
h1.setFill(True)
c1 = HPlot("=HepSim=",500,500)
c1.visible(True)
c1.setAutoRange(True)
c1.setMarginLeft(90)
c1.setLegend(0)
cross=0; nev=0; Nfiles=len(flist)
for m in range(Nfiles):
file=FileMC(url+flist[m])
header = file.getHeader()
un=float(header.getMomentumUnit())
lunit=float(header.getLengthUnit())
if m==0:
print "ProMC v=",file.getVersion(), "M unit=",un,"L unit=",lunit
if (nev>TotalEvents): print "Max Nr of events are done"; break
for i in range(file.size()):
if (nev>TotalEvents): break
nev=nev+1
if (nev%500==0):
if (Nfiles==1): print "Event=",nev
else:
print "Event=",nev," done=",int((100.0*m)/Nfiles),"%"
if (nev%1000==0):
c1.clearData()
c1.setNameX("p_{T}(lead. jet) [GeV]")
c1.setNameY("Entries")
c1.draw(h1)
print "Update canvas"
eve = file.read(i)
pa = eve.getParticles()
particles=PromcUtil.getParticleDList(file.getHeader(), pa, 1, -1, 1000);
ktjet.buildJets(particles);
jets=ktjet.getJetsSorted()
if (len(jets)>0):
h1.fill(jets[0].perp())
stat = file.getStat()
cross=stat.getCrossSectionAccumulated()
erro=stat.getCrossSectionErrorAccumulated();
file.close()
lumi=nev/cross;
print "Lumi=%.3e pb"%lumi
print "Total cross section (pb)=",cross
hNew=h1.getDividedByBinWidth()
hNew.scale(1.0/lumi)
xsec=P1D(hNew)
xsec.setErr(1)
xsec.setColor(Color.blue)
c1.clearData()
c1.clear()
c1.setLogScale(1,1)
c1.setRange(1000,4000,0.00000011,10.0)
c1.setMarginLeft(100)
c1.setNameX("p_{T}(lead. jet) [GeV]")
c1.setNameY("d σ / d p_{T} [pb/GeV]")
c1.draw(xsec)
l1=HLabel("QCD dijet σ=%.3e pb"%cross, 0.4, 0.75, "NDC")
l1.setFont(Font("Helvetica", Font.PLAIN, 15))
c1.add(l1)
l2=HLabel("=HepSim=",0.6,0.85, "NDC")
l2.setColor(Color.gray)
l2.setFont(Font("Helvetica", Font.PLAIN, 14))
c1.add(l2)
name="output"
if len(sys.argv[0])>0: name=sys.argv[0].replace(".py","")
from jhplot.io import HBook
file=HBook(name+".jdat","w"); print name+".jdat created"
file.write(xsec)
file.close()
c1.export(name+".svg"); print name+".svg created"