import sys, os, copy from math import sqrt,cos,sin pandapath = os.environ.get('PANDAPATH') sys.path.append(pandapath + '/macro/tpc/FOPI/python/argparse-1.2.1') sys.path.append(pandapath + '/macro/tpc/FOPI/mberger') import argparse, ROOT from functions import set_palette, openTree, thisIsTheEnd, getSlices import random parser=argparse.ArgumentParser(description="plot the error as function of z and theta") parser.add_argument('paramFile',help='the error parameter file',type=str) args=parser.parse_args() ROOT.gROOT.ProcessLine(".x rootlogon.C") ROOT.gROOT.ProcessLine('gROOT->SetStyle("Plain")') ROOT.gROOT.LoadMacro("stlPYROOT.h+") set_palette("palette",99) c1=ROOT.TCanvas("cerrXYZ","Error XYZ",1500,1000) c2=ROOT.TCanvas("cerrA","Error A",1000,1000) ROOT.TpcClusterErrorScaler.getInstance().SetNoFairRun() ROOT.TpcClusterErrorScaler.getInstance().init(args.paramFile,61) ROOT.TpcClusterErrorScaler.getInstance().SetManualDiffusion(0.0259142983065,0.0197879445656) #ROOT.TpcClusterErrorScaler.getInstance().SetManualDiffusion(1,1) gerrX=ROOT.TGraph2D() gerrY=ROOT.TGraph2D() gerrZ=ROOT.TGraph2D() gerrA1=ROOT.TGraph2D() gerrA2=ROOT.TGraph2D() for iz in range(0,73,2): for it in range(0,181,10): dir=ROOT.TVector3(0,1,0) dir.SetTheta(it*ROOT.TMath.DegToRad()) dir.SetMag(1) cov=ROOT.TpcClusterErrorScaler.getInstance().getErrorCov(iz,dir) #cov.Print() errX=(cov[0][0]) errY=(cov[1][1]) errZ=(cov[2][2]) #errX=sqrt(cov[0][0]) #errY=sqrt(cov[1][1]) #errZ=sqrt(cov[2][2]) gerrX.SetPoint(gerrX.GetN(),iz,it,errX) gerrY.SetPoint(gerrY.GetN(),iz,it,errY) gerrZ.SetPoint(gerrZ.GetN(),iz,it,errZ) planeU=dir.Orthogonal() planeV=dir.Cross(planeU) planeU.SetMag(1) planeV.SetMag(1) plane=ROOT.TMatrixD(3,2) for i in range(3): plane[i][0]=planeU[i] plane[i][1]=planeV[i] plane.Print() #cov.Invert() covPlane=cov.SimilarityT(plane) #covPlane.Invert() eigenprob=ROOT.TMatrixDSymEigen(covPlane) eigenval=eigenprob.GetEigenValues() #errA1=sqrt(eigenval[0]) #errA2=sqrt(eigenval[1]) errA1=(eigenval[0]) errA2=(eigenval[1]) #print gerrA1.GetN(),errA1,errA2 gerrA1.SetPoint(gerrA1.GetN(),iz,it,errA1) gerrA2.SetPoint(gerrA2.GetN(),iz,it,errA2) c1.Divide(3,1) c1.cd(1) gerrX.Draw('surf1') c1.cd(2) gerrY.Draw('surf1') c1.cd(3) gerrZ.Draw('surf1') c1.Update() c2.Divide(2) c2.cd(1) gerrA1.Draw('surf1') c2.cd(2) gerrA2.Draw('surf1') c2.Update() thisIsTheEnd()