File indexing completed on 2024-10-08 05:11:32
0001
0002
0003 import os
0004 import sys
0005 import errno
0006
0007
0008 def help_message():
0009 print("Usage:\n\
0010 compare [folder_name] [options] -v versions_to_compare -f files_to_compare\n\
0011 Versions and files must be whitespace separated.\n\
0012 If no folder is specified the pwd will be used.\n\
0013 folder_name, if specified, must be the first argument.\n\
0014 Options:\n\
0015 -h prints this message.\n\
0016 --no_exec does not show graphs (batch mode).\n\
0017 --outfile filename.root writes the root output in the specified file.\n\
0018 --html produce html output\n\
0019 --canvas with --html option and without --no_exec option produces output directly in png, if not specified output is produced in eps and then converted in png format with an external program (but can be used in batch mode).\n\
0020 Example:\n\
0021 ./compare.py myDir -v CMSSW_X_Y_Z CMSSW_J_K_W -f file1.root file2.root --no_exec --outfile out.root")
0022 sys.exit()
0023
0024
0025 def runcmd(envir,program,*args):
0026 pid=os.fork()
0027 if not pid:
0028 os.execvpe(program,(program,)+args,envir)
0029 return os.wait()[0]
0030
0031 def runcmd2(envir,program,args):
0032 pid=os.fork()
0033 if not pid:
0034 os.execvpe(program,(program,)+args,envir)
0035 return os.wait()[0]
0036
0037
0038
0039 wdir=0
0040 ptf=""
0041 def srcpath(fldr):
0042 tmp=[]
0043 wdir.cd(fldr)
0044 for key in wdir.GetListOfKeys():
0045 if key.IsFolder():
0046 tmp=srcpath(key.GetName())
0047 if tmp[0]:
0048 return [True,key.GetName()+"/"+tmp[1]]
0049 else:
0050 if key.GetName()=="eventEnergyEB":
0051 pth=wdir.pwd()
0052 return [True,""]
0053 wdir.cd("../")
0054 return [False,""]
0055
0056
0057 if "-h" in sys.argv or "-help" in sys.argv or "--help" in sys.argv:
0058 help_message()
0059
0060
0061 cwd=""
0062 if len(sys.argv)>1:
0063 if not sys.argv[1][0]=="-":
0064 name=sys.argv[1]
0065 try:
0066 cwd=os.getcwd()
0067 os.chdir(name)
0068 except OSError as inst:
0069 if inst.errno==errno.ENOENT:
0070 print("Error: the specified working folder does not exist")
0071 help_message()
0072 else: help_message()
0073
0074
0075 state="n"
0076 root_out="compare_out.root"
0077 execute=True
0078 html=False
0079 cnv=False
0080
0081 ver=[]
0082 fil=[]
0083 for arg in sys.argv:
0084 if arg=="-v" or arg=="-V":
0085 state="v"
0086 elif arg=="-f" or arg=="-F":
0087 state="f"
0088 elif arg=="--no_exec":
0089 execute=False
0090 elif arg=="--outfile":
0091 state="r"
0092 elif arg=="--html":
0093 html=True
0094 elif arg=="--canvas":
0095 cnv=True
0096 elif state=="v":
0097 ver.append(arg)
0098 elif state=="f":
0099 fil.append(arg)
0100 elif state=="r":
0101 root_out=arg
0102
0103
0104 if not execute:
0105 sys.argv.append("-b")
0106
0107
0108
0109 try:
0110 from ROOT import gSystem, TFile, TLegend, TCanvas, gDirectory
0111 except ImportError:
0112 print("Warning: environment variables not set, proceeding anyway running this script with the environment variables of the higher version of CMSSW specified in -v")
0113
0114 os.chdir(max(ver))
0115 env=os.popen("scramv1 runtime -sh","r")
0116 environment=os.environ
0117 for l in env.readlines():
0118 variable,value=l[7:len(l)-3].strip().split("=",1)
0119 environment[variable]=value[1:]
0120 env.close()
0121 if cwd=="":
0122 os.chdir("../")
0123 else:
0124 os.chdir("../../")
0125
0126 if execute:
0127 runcmd2(environment,"./compare.py",tuple(sys.argv[1:]))
0128 else:
0129 runcmd2(environment,"./compare.py",tuple(sys.argv[1:-1]))
0130 else:
0131 gSystem.Load("libFWCoreFWLite.so")
0132 ROOT.FWLiteEnabler.enable()
0133 outfile=TFile(root_out,"recreate")
0134 histo=[]
0135 canvas=[]
0136 legend=TLegend(.89,0.8,1,.2)
0137 histonames=["eventEnergyEB","eventEnergyEE","iEtaDistributionEB","iphiDistributionEB","meanEnergyEB","meanEnergyEE","nRechitsEB","nRechitsEE","rhEnergyEB","rhEnergyEE","iEtaDistributionEE"]
0138 colornames=[kRed,kBlue,kGreen,kCyan,kMagenta,kYellow,kOrange,kPink,kViolet,kAzure,kTeal,kSpring]
0139
0140 for nv,v in enumerate(ver):
0141 histo.append([])
0142 for nf,f in enumerate(fil):
0143 if not nv:
0144 canvas.append(TCanvas(f[:len(f)-5],f[:len(f)-5]))
0145 canvas[nf].Divide(2,6)
0146 histo[nv].append([])
0147 histo[nv][nf].append(TFile(v+"/"+f))
0148 histo[nv][nf].append([])
0149 histo[nv][nf][0].cd()
0150 wdir=gDirectory
0151 pth=srcpath("")[1]
0152 for nh,h in enumerate(histonames):
0153 histo[nv][nf][1].append(histo[nv][nf][0].Get(pth+h))
0154 canvas[nf].cd(nh+1)
0155 histo[nv][nf][1][nh].SetLineColor(colornames[nv%len(colornames)])
0156 if nv:
0157 histo[nv][nf][1][nh].Draw("same")
0158 else:
0159 histo[nv][nf][1][nh].Draw()
0160 if nf==0 and nh==0:
0161 legend.AddEntry(histo[nv][nf][1][nh],v[6:],"l")
0162 if nv==(len(ver)-1):
0163 legend.Draw()
0164 if nv==(len(ver)-1):
0165 outfile.cd()
0166 canvas[nf].Write()
0167 if execute:
0168 print("Press enter to end the program")
0169 os.system("read")
0170 if html:
0171 if cnv:
0172 if execute:
0173 for nf,f in enumerate(fil):
0174 try:
0175 os.mkdir(f[:len(f)-5])
0176 except OSError as inst:
0177 if inst.errno==errno.EEXIST:
0178 print("Possibly overwriting images")
0179 os.system("cp "+cwd+"/temp.html "+f[:len(f)-5]+"/index.html")
0180 os.chdir(f[:len(f)-5])
0181 canvas[nf].cd()
0182 canvas[nf].SetWindowSize(1050,780)
0183
0184 for nh,h in enumerate(histonames):
0185 canvas[nf].cd(nh+1).SetPad(0,0,1,1)
0186 canvas[nf].cd(nh+1).Print(h+".png","png")
0187
0188 canvas[nf].SetWindowSize(500,375)
0189
0190 for nh,h in enumerate(histonames):
0191 canvas[nf].cd(nh+1).SetPad(0,0,1,1)
0192 canvas[nf].cd(nh+1).Print(h+"_s.png","png")
0193
0194 os.chdir("../")
0195 else:
0196 print("Warning:to use --canvas option do not use --no_exec option. Rerun without --canvas option.")
0197 else:
0198 for nf,f in enumerate(fil):
0199 try:
0200 os.mkdir(f[:len(f)-5])
0201 except OSError as inst:
0202 if inst.errno==errno.EEXIST:
0203 print("Possibly overwriting images")
0204 os.system("cp "+cwd+"temp.html "+f[:len(f)-5]+"/index.html")
0205 os.chdir(f[:len(f)-5])
0206 canvas[nf].cd()
0207 canvas[nf].SetWindowSize(1050,780)
0208 for nh,h in enumerate(histonames):
0209 canvas[nf].cd(nh+1).SetPad(0,0,1,1)
0210 canvas[nf].cd(nh+1).Print(h+".eps")
0211 gSystem.Exec("pstopnm -ppm -xborder 0 -yborder 0 -xsize 1050 -portrait "+h+".eps");
0212 gSystem.Exec("pnmtopng "+h+".eps001.ppm > "+h+".png")
0213 try:
0214 os.remove(h+".eps")
0215 except OSError:
0216 pass
0217 try:
0218 os.remove(h+".eps001.ppm")
0219 except OSError:
0220 pass
0221 canvas[nf].SetWindowSize(500,375)
0222 for nh,h in enumerate(histonames):
0223 canvas[nf].cd(nh+1).SetPad(0,0,1,1)
0224 canvas[nf].cd(nh+1).Print(h+"_s.eps")
0225 gSystem.Exec("pstopnm -ppm -xborder 0 -yborder 0 -xsize 500 -portrait "+h+"_s.eps");
0226 gSystem.Exec("pnmtopng "+h+"_s.eps001.ppm > "+h+"_s.png")
0227 try:
0228 os.remove(h+"_s.eps")
0229 except OSError:
0230 pass
0231 try:
0232 os.remove(h+"_s.eps001.ppm")
0233 except OSError:
0234 pass
0235 os.chdir("../")