def calcphierr(mom,momerr): phierrY=( 1. / (1+mom.X()/mom.Y()) ) * (1. / mom.X() ) phierrY*=momerr.Y() phierrX=( 1. / (1+mom.X()/mom.Y()) ) * (1. / mom.Y() ) phierrX*=momerr.X() phierr= math.sqrt(phierrY**2+phierrX**2) return phierr def calcthetaerr(mom,momerr): beta=mom.Perp()/mom.Z() thetaerrX=( 1. / (1+beta) ) * 1./mom.Perp() * mom.X()/mom.Z() thetaerrX*=momerr.X() thetaerrY=( 1. / (1+beta) ) * 1./mom.Perp() * mom.Y()/mom.Z() thetaerrY*=momerr.Y() thetaerrZ=( 1. / (1+beta) ) * mom.Perp()/(mom.Z()**2) * (-1) thetaerrZ*=momerr.Z() thetaerr=math.sqrt(thetaerrX**2+thetaerrY**2+thetaerrZ**2) return thetaerr def calcmomerr(mom,momerr): momerrX=mom.X()/mom.Mag() * momerr.X() momerrY=mom.Y()/mom.Mag() * momerr.Y() momerrZ=mom.Z()/mom.Mag() * momerr.Z() return math.sqrt( momerrX**2 + momerrY**2 + momerrZ**2 ) def fillHists(tree,hdict,hdict2=None,hdict3=None): event=0 for e in tree: event+=1 if args.nevts!=-1 and event>args.nevts: break if event%100==0: print event for tr in e.CutCosmics: theta=tr.GetTheta() phi=tr.GetPhi() if phiargs.phicut[1]: continue if tr.GetMeanZ()args.zcut[1]: continue mom=tr.GetMom() mcmom=tr.GetMCmom() mctheta=mcmom.Theta()*ROOT.TMath.RadToDeg() mcphi=mcmom.Phi()*ROOT.TMath.RadToDeg() mz=tr.GetMeanZ() momerr=tr.GetMomErr() thetasign=1 if abs(phi)<90: thetasign=-1 res_phi=phi-mcphi res_theta=((theta-mctheta) % 180 ) * thetasign res_mom=mom.Mag()-mcmom.Mag() hdict['theta'].Fill(res_theta) hdict['mom'].Fill(res_mom) hdict['phi'].Fill(res_phi) hdict['phi2'].Fill(phi) hdict['phi z'].Fill(mz,res_phi) hdict['pull_phi'].Fill( res_phi/calcphierr(mom,momerr) ) hdict['pull_theta'].Fill( res_theta/calcthetaerr(mom,momerr) ) hdict['pull_mom'].Fill( res_mom/calcmomerr(mom,momerr) ) hdict['pull_phi_z'].Fill(mz , res_phi/calcphierr(mom,momerr) ) hdict['pull_theta_z'].Fill(mz , res_theta/calcthetaerr(mom,momerr) ) hdict['pull_mom_z'].Fill(mz , res_mom/calcmomerr(mom,momerr) ) hdict['res_phi_z'].Fill(mz, res_phi) hdict['res_theta_z'].Fill(mz, res_theta) hdict['res_mom_z'].Fill(mz, res_mom) if hdict2!=None: theta=tr.GetzAxisDir().Theta()*ROOT.TMath.RadToDeg() phi=tr.GetzAxisDir().Phi()*ROOT.TMath.RadToDeg() hdict2['theta'].Fill(((theta-mctheta)%180) * thetasign ) hdict2['mom'].Fill(mom.Mag()-mcmom.Mag()) hdict2['phi'].Fill(phi-mcphi) hdict2['phi2'].Fill(phi) hdict2['phi z'].Fill(mz,phi-mcphi) #hdict['pull_phi'].Fill( (phi-mcphi)/calcphierr(mom,momerr) ) #hdict['pull_theta'].Fill( (theta-mctheta)/calcthetaerr(mom,momerr) ) if hdict3!=None: theta=tr.GetFirstMCDir().Theta()*ROOT.TMath.RadToDeg() phi=tr.GetFirstMCDir().Phi()*ROOT.TMath.RadToDeg() hdict3['theta'].Fill(((theta-mctheta) % 180) * thetasign) hdict3['mom'].Fill(mom.Mag()-mcmom.Mag()) hdict3['phi'].Fill(phi-mcphi) #hdict3['phi2'].Fill(phi) #hdict3['phi z'].Fill(mz,phi-mcphi) return def print_info(d1,d2,var): print args.titles[0]+' rms',var,':',d1[var].GetRMS() print args.titles[1]+' rms',var,':',d2[var].GetRMS() print 'rms diff',var,':',100*(d1[var].GetRMS()-d2[var].GetRMS())/d2[var].GetRMS(),'%' print args.titles[0]+' mean',var,':',d1[var].GetMean() print args.titles[1]+' mean',var,':',d2[var].GetMean() print 'mean diff',var,':',100*(d1[var].GetMean()-d2[var].GetMean())/d2[var].GetMean(),'%' print '' def plotHists(hists,c1,c2,c3): maxi={} for f in hists: for hn in f: h=f[hn] if type(h)==ROOT.TH1D: scale=1 if h.GetEntries()>0: scale=h.GetEntries() h.Scale(1/scale) h.SetStats(0) maxi[hn]=max(maxi.get(hn,0),h.GetMaximum()) opt='' counter=-1 legends.append(ROOT.TLegend(0,0,1,1)) for f in hists: counter+=1 c1.cd(1) f['theta'].SetMaximum(maxi['theta']*1.1) f['theta'].Draw(opt) f['theta'].GetXaxis().SetTitle('Theta Residual (#circ)') f['theta'].SetLineColor(colors[counter]) legends[-1].AddEntry(f['theta'],args.titles[counter],'l') c1.cd(2) f['phi'].SetMaximum(maxi['phi']*1.1) f['phi'].Draw(opt) f['phi'].GetXaxis().SetTitle('Phi Residual (#circ)') f['phi'].SetLineColor(colors[counter]) c1.cd(3) f['mom'].SetMaximum(maxi['mom']*1.1) f['mom'].Draw(opt) f['mom'].GetXaxis().SetTitle('Momentum Residual (GeV/c)') f['mom'].SetLineColor(colors[counter]) c1.Update() f['phi z'].GetXaxis().SetTitle('Mean Z pos of track (cm)') f['phi z'].GetYaxis().SetTitle('Phi Residual (#circ)') c3.cd(1) f['phi2'].SetLineColor(colors[counter]) f['phi2'].Draw(opt) opt='same' c1.Update() c3.Update() import ROOT,argparse,sys,math,os pandapath=os.environ.get('PANDAPATH') sys.path.append(pandapath+'/macro/tpc/FOPI/mberger/') sys.path.append(pandapath+'/macro/tpc/FOPI/') from functions import * from cosmic_histos import * from parseFiles import PyFileParser parser=argparse.ArgumentParser(description='plot differences of recl and not recl') parser.add_argument('filenames',help='the reco files; if runs is given tchains with patterns are created (path also needed then)',default=['None'],type=str,nargs='+') parser.add_argument('--runs',help='which runs to use',type=str,default="") parser.add_argument('--pattern',help='pattern to identify the files which should be used',type=str,default='') parser.add_argument('--path',help='the path to the runfolders',type=str,default='outfiles_e12/Data/Cosmics/') parser.add_argument('--titles',help='the titles',default=['1','2'],type=str,nargs='+') parser.add_argument('--nevts',help='number of events',type=int,default=-1) parser.add_argument('--pfile',help='the file to save all',type=str,default='None') parser.add_argument("--hlp",help="display help",action='store_true') parser.add_argument('--phicut',help='only tracks inside phi window are taken',type=float,default=[-190,190],nargs=2) parser.add_argument('--outfile',help='the root file to write the histos into',type=str,default='./reclcomp.root') parser.add_argument('--zcut',help='only use tracks whose mean z position is in window',type=float,default=[0,99],nargs=2) args=parser.parse_args() if args.hlp: parser.print_help() exit(0) ROOT.gROOT.ProcessLine(".x rootlogon.C") ROOT.gROOT.ProcessLine('gROOT->SetStyle("Plain")') set_palette() mcangle=90 canv=[] canv.append(ROOT.TCanvas('c1','First Point',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c2','First Point',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c3','First Point',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c4','zAxis',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c5','zAxis',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c6','zAxis',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c7','MC Point',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c8','MC Point',500,1000)) canv[-1].Divide(1,3) canv.append(ROOT.TCanvas('c9','MC Point',500,1000)) canv[-1].Divide(1,3) if len(args.titles)