from ROOT import TH1D,TH2D,TProfile2D,TCanvas,gStyle,gPad
from math import log10,atan2

infile='totalEventData_300k.dat'
nevt=300000

#sensor dimensions in micrometers
sx,sy,sz=55.0,55.0,150.0

#full anode and cathode thickness in micrometers
da=dc=5.0

#y-coordinates of anode and cathode surfaces
ycl=dc/2; yal=sy/2-da/2; yah=sy/2+da/2; ych=sy-dc/2

#electron, hole drift velocities in mum/ps
ve=0.07; vh=0.07

#track categories
cats=('xx','yy','zz','xy','xz','yz')

hxi=TH1D("hxi","x_in (mum)",55,-0.001,sx+0.001)
hyi=TH1D("hyi","y_in (mum)",55,-0.001,sy+0.001)
hzi=TH1D("hzi","z_in (mum)",75,-0.001,sz+0.001)

hxo=TH1D("hxo","x_out (mum)",55,-0.001,sx+0.001)
hyo=TH1D("hyo","y_out (mum)",55,-0.001,sy+0.001)
hzo=TH1D("hzo","z_out (mum)",75,-0.001,sz+.001)

hxixo=TH2D("hxixo","xi vs xo",55,0.001,sx-0.001,55,0.001,sx-0.001)
hyiyo=TH2D("hyiyo","yi vs yo",55,0.001,sy-0.001,55,0.001,sy-0.001)
hzizo=TH2D("hzizo","zi vs zo",50,0.001,sz-0.001,50,0.001,sz-0.001)

hdx=TH1D("hdx","x_out-x_in (mum)",55,-(sx+0.001),sx+0.001)
hdy=TH1D("hdy","y_out-y_in (mum)",55,-(sy+0.001),sy+0.001)
hdz=TH1D("hdz","z_out-z_in (mum)",75,-(sz+0.001),sz+0.001)

hmx=TH1D("hmx","(x_out+x_in)/2 (mum)",55,-0.001,sx+0.001)
hmy=TH1D("hmy","(y_out+y_in)/2 (mum)",55,-0.001,sy+0.001)
hmz=TH1D("hmz","(z_out+z_in)/2 (mum)",75,-0.001,sz+0.001)

hipart=TH1D("hpart","particle type",10,-0.5,9.5)
hEp=TH1D("hEp","log10(Ep/MeV)",100,0.0,6.0)
hEl=TH1D("hEl","Elost (e-eq)",100,0.0,2e4)
hEd=TH1D("hEd","Edelta (e-eq)",100,0.0,5e3)
hQtot=TH1D("hQtot","Qtot (fC)",100,0.0,5.0)
htavg=TH1D("htavg","tavg (ps)",70,40.0,200.0)

hlp=TH1D("hlp","path length (mum)",200,0.0,200.0)
hdEdx=TH1D("hdEdx","dEdx (e-eq/mum)",200,0.0,200.0)
hcosth=TH1D("hcost","cos(theta)",100,-1.0,1.0)
hphi=TH1D("hphi","phi (rad)",100,-3.14159265,3.14159265)
hfQ=TH1D("hfQ","fQ=Qtot/Eloss",100,0.0,2e-4)
hfa=TH1D("hfa","fa=active fraction of path",100,-0.001,1.001)
hfQfa=TH1D("hfQfa","fQ/fa",100,0.0,3.4e-4)
hQest=TH1D("hQest","Qest",100,0.0,5.0)
hQtotQest=TH1D("hQtotQest","Qtot/Qest",100,0.0,2.0)
htest=TH1D("htest","test",100,80.0,160.0)
htavgtest=TH1D("htavgtest","tavg-test",100,-60.0,100.0)

htavg_xx=TH1D("htavg_xx","tavg (ps) for xx tracks",80,40.0,200.0)
htavg_yy=TH1D("htavg_yy","tavg (ps) for yy tracks",80,40.0,200.0)
htavg_zz=TH1D("htavg_zz","tavg (ps) for zz tracks",80,40.0,200.0)
htavg_xy=TH1D("htavg_xy","tavg (ps) for xy tracks",80,40.0,200.0)
htavg_xz=TH1D("htavg_xz","tavg (ps) for xz tracks",80,40.0,200.0)
htavg_yz=TH1D("htavg_yz","tavg (ps) for yz tracks",80,40.0,200.0)

htest_xx=TH1D("htest_xx","test (ps) for xx tracks",80,40.0,200.0)
htest_yy=TH1D("htest_yy","test (ps) for yy tracks",80,40.0,200.0)
htest_zz=TH1D("htest_zz","test (ps) for zz tracks",80,40.0,200.0)
htest_xy=TH1D("htest_xy","test (ps) for xy tracks",80,40.0,200.0)
htest_xz=TH1D("htest_xz","test (ps) for xz tracks",80,40.0,200.0)
htest_yz=TH1D("htest_yz","test (ps) for yz tracks",80,40.0,200.0)

htavgtest_xx=TH1D("htavgtest_xx","tavg-test (ps) for xx tracks",80,-100.0,100.0)
htavgtest_yy=TH1D("htavgtest_yy","tavg-test (ps) for yy tracks",80,-100.0,100.0)
htavgtest_zz=TH1D("htavgtest_zz","tavg-test (ps) for zz tracks",80,-100.0,100.0)
htavgtest_xy=TH1D("htavgtest_xy","tavg-test (ps) for xy tracks",80,-100.0,100.0)
htavgtest_xz=TH1D("htavgtest_xz","tavg-test (ps) for xz tracks",80,-100.0,100.0)
htavgtest_yz=TH1D("htavgtest_yz","tavg-test (ps) for yz tracks",80,-100.0,100.0)

hfQ_xx=TH1D("hfQ_xx","fQ for xx tracks",70,0.0,2e-4)
hfQ_yy=TH1D("hfQ_yy","fQ for yy tracks",70,0.0,2e-4)
hfQ_zz=TH1D("hfQ_zz","fQ for zz tracks",70,0.0,2e-4)
hfQ_xy=TH1D("hfQ_xy","fQ for xy tracks",70,0.0,2e-4)
hfQ_xz=TH1D("hfQ_xz","fQ for xz tracks",70,0.0,2e-4)
hfQ_yz=TH1D("hfQ_yz","fQ for yz tracks",70,0.0,2e-4)

hEp_dEdx_mum=TH2D("hEp_dEdx_mum","dEdx vs log10(Ep) mu-",70,0.0,6.0,50,0.0,200)
hEp_dEdx_mup=TH2D("hEp_dEdx_mup","dEdx vs log10(Ep) mu+",70,0.0,6.0,50,0.0,200)
hEp_dEdx_em=TH2D("hEp_dEdx_em","dEdx vs log10(Ep) e-",70,0.0,6.0,50,0.0,200)
hEp_dEdx_ep=TH2D("hEp_dEdx_ep","dEdx vs log10(Ep) e+",70,0.0,6.0,50,0.0,200)
hEp_dEdx_pim=TH2D("hEp_dEdx_pim","dEdx vs log10(Ep) pi-",70,0.0,6.0,50,0.0,200)
hEp_dEdx_pip=TH2D("hEp_dEdx_pip","dEdx vs log10(Ep) pi+",70,0.0,6.0,50,0.0,200)
hEp_dEdx_Km=TH2D("hEp_dEdx_Km","dEdx vs log10(Ep) kaon-",70,0.0,6.0,50,0.0,200)
hEp_dEdx_Kp=TH2D("hEp_dEdx_Kp","dEdx vs log10(Ep) kaon+",70,0.0,6.0,50,0.0,200)
hEp_dEdx_pr=TH2D("hEp_dEdx_pr","dEdx vs log10(Ep) proton",70,0.0,6.0,50,0.0,200)
hEp_dEdx_ap=TH2D("hEp_dEdx_ap","dEdx vs log10(Ep) anti_proton",70,0.0,6.0,50,0.0,200)

hEp_El=TH2D("hEp_El","Elost vs log10(Ep)",70,0.0,6.0,50,0.0,2e4)
hEp_Ed=TH2D("hEp_Ed","Edelta vs log10(Ep)",70,0.0,6.0,50,0.0,5e3)
hEp_dEdx=TH2D("hEp_dEdx","dEdx vs log10(Ep)",70,0.0,6.0,50,0.0,200)
hEp_lp=TH2D("hEp_lp","pathlength vs log10(Ep)",70,0.0,6.0,50,0.0,200)

hip_El=TH2D("hip_El","Elost vs particle type",10,-0.5,9.5,50,0.0,2e4)
hip_Ed=TH2D("hip_Ed","Edelta vs particle type",10,-0.5,9.5,50,0.0,5e3)
hip_dEdx=TH2D("hip_dEdx","dEdx vs particle type",10,-0.5,9.5,50,0.0,200)
hip_lp=TH2D("hip_lp","pathlength vs particle type",10,-0.5,9.5,50,0.0,200)

hphi_costh=TH2D("hphi_costh","costh vs phi",50,-3.14159265,3.14159265,50,-1.0,1.0)
hEl_Qtot=TH2D("hEl_Qtot","Qtot vs Elost",100,0,2e4,100,0.0,3.4)
hEl_fQ=TH2D("hEl_fQ","fQ=Qtot/Elost vs Elost",50,0,2e4,50,0.0,2e-4)

hmx_fQ=TH2D("hmx_fQ","fQ=Qtot/Elost vs <x>",50,0.0,sx,50,0.0,2e-4)
hmy_fQ=TH2D("hmy_fQ","fQ=Qtot/Elost vs <y>",50,0.0,sy,50,0.0,2e-4)
hmz_fQ=TH2D("hmz_fQ","fQ=Qtot/Elost vs <z>",50,0.0,sz,50,0.0,2e-4)

hdx_fQ=TH2D("hdx_fQ","fQ=Qtot/Elost vs dx",50,-sx,sx,50,0.0,2e-4)
hdy_fQ=TH2D("hdy_fQ","fQ=Qtot/Elost vs dy",50,-sy,sy,50,0.0,2e-4)
hdz_fQ=TH2D("hdz_fQ","fQ=Qtot/Elost vs dz",50,-sz,sz,50,0.0,2e-4)

hphi_fQ=TH2D("hphi_fQ","fQ=Qtot/Elost vs phi",50,-3.14159265,3.14159265,50,0.0,2e-4)
hfa_fQ=TH2D("hfa_fQ","fQ=Qtot/Elost vs fa=active path fraction",50,0.0,1.001,50,0.0,2e-4)
hQest_Qtot=TH2D("hQest_Qtot","Qtot vs Qest",100,0.0,4.0,100,0.0,4.0)
htest_tavg=TH2D("htest_tavg","tavg vs test",100,80.0,160.0,100,80.0,160.0)

hfQ_xi_xo=TProfile2D("hfQ_xi_xo","fQ vs xi,xo",50,0.0,sx,50,0.0,sx) 
hfQ_yi_yo=TProfile2D("hfQ_yi_yo","fQ vs yi,yo",50,0.0,sy,50,0.0,sy) 
hfQ_zi_zo=TProfile2D("hfQ_zi_zo","fQ vs zi,zo",50,0.0,sz,50,0.0,sz) 

hfa_xi_xo=TProfile2D("hfa_xi_xo","fa vs xi,xo",50,0.0,sx,50,0.0,sx) 
hfa_yi_yo=TProfile2D("hfa_yi_yo","fa vs yi,yo",50,0.0,sy,50,0.0,sy) 
hfa_zi_zo=TProfile2D("hfa_zi_zo","fa vs zi,zo",50,0.0,sz,50,0.0,sz) 

htavg_xi_xo=TProfile2D("htavg_xi_xo","tavg vs xi,xo",50,0.0,sx,50,0.0,sx) 
htavg_yi_yo=TProfile2D("htavg_yi_yo","tavg vs yi,yo",50,0.0,sy,50,0.0,sy) 
htavg_zi_zo=TProfile2D("htavg_zi_zo","tavg vs zi,zo",50,0.0,sz,50,0.0,sz) 

htest_xi_xo=TProfile2D("htest_xi_xo","test vs xi,xo",50,0.0,sx,50,0.0,sx) 
htest_yi_yo=TProfile2D("htest_yi_yo","test vs yi,yo",50,0.0,sy,50,0.0,sy) 
htest_zi_zo=TProfile2D("htest_zi_zo","test vs zi,zo",50,0.0,sz,50,0.0,sz) 

hmy_tavg_cleanxx=TH2D("hmy_tavg_cleanxx","tavg vs <y> cleaned up xx",50,0.0,sy,50,75.0,170.0)
hmy_tavg_cleanzz=TH2D("hmy_tavg_cleanzz","tavg vs <y> cleaned up zz",50,0.0,sy,50,75.0,170.0)
hmy_tavg_cleanxz=TH2D("hmy_tavg_cleanxz","tavg vs <y> cleaned up xz",50,0.0,sy,50,75.0,170.0)
hmy_test_cleanxx=TH2D("hmy_test_cleanxx","test vs <y> cleaned up xx",50,0.0,sy,50,75.0,170.0)
hmy_test_cleanzz=TH2D("hmy_test_cleanzz","test vs <y> cleaned up zz",50,0.0,sy,50,75.0,170.0)
hmy_test_cleanxz=TH2D("hmy_test_cleanxz","test vs <y> cleaned up xz",50,0.0,sy,50,75.0,170.0)


parts=["mu-","mu+","e-","e+","pi-","pi+","kaon-","kaon+","proton","anti_proton"]

print('reading',infile)
f=open(infile)
for ievt in range(nevt):

    #read data from one line
    line=f.readline()
    words=line.split()
    part=words[1]
    ipart=parts.index(part)
    xi=float(words[2])
    yi=float(words[3])
    zi=float(words[4])
    xo=float(words[5])
    yo=float(words[6])
    zo=float(words[7])
    Ep=float(words[8])
    El=float(words[9])
    Ed=float(words[10])
    Qtot=float(words[11])*1e15
    tavg=float(words[12])

    #calculate path length
    dx=xo-xi; dy=yo-yi;dz=zo-zi;
    lp=(dx**2+dy**2+dz**2)**0.5
    
    #calculate angles
    costh=dz/lp
    phi=atan2(dy,dx)

    #calculate more auxiliary variables
    mx=(xo+xi)/2; my=(yo+yi)/2; mz=(zo+zi)/2; 
    dEdx=El/lp
    fQ=Qtot/max(El,1.0)

    #split into lo-y and hi-y segment
    yl1=yl2=yh1=yh2=-999.0
    if min(yi,yo)<yal and max(yi,yo)>ycl: # lo-y segment exists
        yl1=max(ycl,min(yi,yo))
        yl2=min(yal,max(yi,yo))
    if max(yi,yo)>yah and min(yi,yo)<ych: # hi-y segment exists
        yh1=max(yah,min(yi,yo))
        yh2=min(ych,max(yi,yo))
    #print(yi,yo,yl1,yl2,yh1,yh2)
    
    #determine active fraction of the path
    fa=0.0
    if abs(dy)>0.0: fa=((yl2-yl1)+(yh2-yh1))/abs(dy)
    if fa<0.0: print(fa,yi,yo,yl1,yl2,yh1,yh2)

    #estimate the charge deposition
    Qest=El*fa*1.7e-4

    #estimate average time
    test=0; testl=0; testh=0
    if abs(yl2-yl1)>0.0:
        testl=( ((yal-yl1)**3-(yal-yl2)**3)/ve+((yl2-ycl)**3-(yl1-ycl)**3)/vh )/(6*(yl2-yl1)*(yal-ycl))
    if abs(yh2-yh1)>0.0:
        testh=( ((yh2-yah)**3-(yh1-yah)**3)/ve+((ych-yh1)**3-(ych-yh2)**3)/vh )/(6*(yh2-yh1)*(ych-yah))
    if abs(yl2-yl1)>0.0 or abs(yh2-yh1)>0.0: 
        test= ( (yl2-yl1)*testl + (yh2-yh1)*testh ) / ( (yl2-yl1)+(yh2-yh1) )
    #print (test,testl,testh,yl1,yl2,yh1,yh2)

    #identify the cathegory
    if abs(xi-0.0)<0.001 or abs(xi-sx)<0.001 :axi='x'
    if abs(yi-0.0)<0.001 or abs(yi-sy)<0.001 :axi='y'
    if abs(zi-0.0)<0.001 or abs(zi-sz)<0.001 :axi='z'
    if abs(xo-0.0)<0.001 or abs(xo-sx)<0.001 :axo='x'
    if abs(yo-0.0)<0.001 or abs(yo-sy)<0.001 :axo='y'
    if abs(zo-0.0)<0.001 or abs(zo-sz)<0.001 :axo='z'
    if axi+axo in ('xx'): cat='xx'
    if axi+axo in ('yy'): cat='yy'
    if axi+axo in ('zz'): cat='zz'
    if axi+axo in ('xy','yx'): cat='xy'
    if axi+axo in ('xz','zx'): cat='xz'
    if axi+axo in ('yz','zy'): cat='yz'
    
    
    #fill histograms
    hxi.Fill(xi)
    hyi.Fill(yi)
    hzi.Fill(zi)
    hxo.Fill(xo)
    hyo.Fill(yo)
    hzo.Fill(zo)
    hxixo.Fill(xi,xo)
    hyiyo.Fill(yi,yo)
    hzizo.Fill(zi,zo)
    hdx.Fill(dx)
    hdy.Fill(dy)
    hdz.Fill(dz)
    hmx.Fill(mx)
    hmy.Fill(my)
    hmz.Fill(mz)

    hipart.Fill(ipart)
    hEp.Fill(log10(Ep))
    hEl.Fill(El)
    hEd.Fill(Ed)
    hQtot.Fill(Qtot)
    if tavg>0.0: htavg.Fill(tavg)

    hlp.Fill(lp)
    hdEdx.Fill(dEdx)
    hcosth.Fill(costh)
    hphi.Fill(phi)
    hfQ.Fill(fQ)
    hfa.Fill(fa)
    if not fa==0.0: hfQfa.Fill(fQ/fa)
    if not Qest==0.0: hQtotQest.Fill(Qtot/Qest)
    hQest.Fill(Qest)
    if test>0.0: htest.Fill(test)
    if test>0.0: htavgtest.Fill(tavg-test)

    if cat=='xx' and tavg>0.0: htavg_xx.Fill(tavg)
    if cat=='yy' and tavg>0.0: htavg_yy.Fill(tavg)
    if cat=='zz' and tavg>0.0: htavg_zz.Fill(tavg)
    if cat=='xy' and tavg>0.0: htavg_xy.Fill(tavg)
    if cat=='xz' and tavg>0.0: htavg_xz.Fill(tavg)
    if cat=='yz' and tavg>0.0: htavg_yz.Fill(tavg)

    if cat=='xx' and test>0.0: htest_xx.Fill(test)
    if cat=='yy' and test>0.0: htest_yy.Fill(test)
    if cat=='zz' and test>0.0: htest_zz.Fill(test)
    if cat=='xy' and test>0.0: htest_xy.Fill(test)
    if cat=='xz' and test>0.0: htest_xz.Fill(test)
    if cat=='yz' and test>0.0: htest_yz.Fill(test)

    if cat=='xx': htavgtest_xx.Fill(tavg-test)
    if cat=='yy': htavgtest_yy.Fill(tavg-test)
    if cat=='zz': htavgtest_zz.Fill(tavg-test)
    if cat=='xy': htavgtest_xy.Fill(tavg-test)
    if cat=='xz': htavgtest_xz.Fill(tavg-test)
    if cat=='yz': htavgtest_yz.Fill(tavg-test)

    if cat=='xx': hfQ_xx.Fill(fQ)
    if cat=='yy': hfQ_yy.Fill(fQ)
    if cat=='zz': hfQ_zz.Fill(fQ)
    if cat=='xy': hfQ_xy.Fill(fQ)
    if cat=='xz': hfQ_xz.Fill(fQ)
    if cat=='yz': hfQ_yz.Fill(fQ)



    
    if part=="mu-":hEp_dEdx_mum.Fill(log10(Ep),dEdx)
    if part=="mu+":hEp_dEdx_mup.Fill(log10(Ep),dEdx)
    if part=="e-":hEp_dEdx_em.Fill(log10(Ep),dEdx)
    if part=="e+":hEp_dEdx_ep.Fill(log10(Ep),dEdx)
    if part=="pi-":hEp_dEdx_pim.Fill(log10(Ep),dEdx)
    if part=="pi+":hEp_dEdx_pip.Fill(log10(Ep),dEdx)
    if part=="kaon-":hEp_dEdx_Km.Fill(log10(Ep),dEdx)
    if part=="kaon+":hEp_dEdx_Kp.Fill(log10(Ep),dEdx)
    if part=="proton":hEp_dEdx_pr.Fill(log10(Ep),dEdx)
    if part=="anti_proton":hEp_dEdx_ap.Fill(log10(Ep),dEdx)

    hEp_El.Fill(log10(Ep),El)
    hEp_Ed.Fill(log10(Ep),Ed)
    hEp_dEdx.Fill(log10(Ep),dEdx)
    hEp_lp.Fill(log10(Ep),lp)

    hip_El.Fill(ipart,El)
    hip_Ed.Fill(ipart,Ed)
    hip_dEdx.Fill(ipart,dEdx)
    hip_lp.Fill(ipart,lp)

    hphi_costh.Fill(phi,costh)
    hEl_Qtot.Fill(El,Qtot)
    hEl_fQ.Fill(El,fQ)

    if abs(mx-sx/2)>1e-3: hmx_fQ.Fill(mx,fQ)
    if abs(my-sy/2)>1e-3: hmy_fQ.Fill(my,fQ)
    if abs(mz-sz/2)>1e-3: hmz_fQ.Fill(mz,fQ)
    
    if abs(abs(dx)-sx)>1e-3: hdx_fQ.Fill(dx,fQ)
    if abs(abs(dy)-sy)>1e-3: hdy_fQ.Fill(dy,fQ)
    if abs(abs(dz)-sz)>1e-3: hdz_fQ.Fill(dz,fQ)
    
    hphi_fQ.Fill(phi,fQ)
    hfa_fQ.Fill(fa,fQ)
    hQest_Qtot.Fill(Qest,Qtot)
    htest_tavg.Fill(test,tavg)

    hfQ_xi_xo.Fill(xi,xo,fQ)
    hfQ_yi_yo.Fill(yi,yo,fQ)
    hfQ_zi_zo.Fill(zi,zo,fQ)
    
    hfa_xi_xo.Fill(xi,xo,fa)
    hfa_yi_yo.Fill(yi,yo,fa)
    hfa_zi_zo.Fill(zi,zo,fa)
    
    if tavg>0.0: htavg_xi_xo.Fill(xi,xo,tavg)
    if tavg>0.0: htavg_yi_yo.Fill(yi,yo,tavg)
    if tavg>0.0: htavg_zi_zo.Fill(zi,zo,tavg)
    
    if test>0.0: htest_xi_xo.Fill(xi,xo,test)
    if test>0.0: htest_yi_yo.Fill(yi,yo,test)
    if test>0.0: htest_zi_zo.Fill(zi,zo,test)

    if abs(dy)<10.0 and mz>10.0:
        if cat=="xx": hmy_tavg_cleanxx.Fill(my,tavg)
        if cat=="zz": hmy_tavg_cleanzz.Fill(my,tavg)
        if cat=="xz": hmy_tavg_cleanxz.Fill(my,tavg)
        if cat=="xx": hmy_test_cleanxx.Fill(my,test)
        if cat=="zz": hmy_test_cleanzz.Fill(my,test)
        if cat=="xz": hmy_test_cleanxz.Fill(my,test)

    
f.close()


#draw histograms
c1=TCanvas("c1","",800,600)
c1.Divide(4,3)

gStyle.SetOptStat(111111)

ipad=1

c1.cd(ipad); ipad+=1;
gStyle.SetStatX(0.8)
hxi.SetMinimum(0.0)
hxi.Draw()

c1.cd(ipad); ipad+=1
hxo.SetMinimum(0.0)
hxo.Draw()

c1.cd(ipad); ipad+=1;
hxixo.Draw("COLZ")


c1.cd(ipad); ipad+=1;
hmx.SetMinimum(0.0)
hmx.Draw()

c1.cd(ipad); ipad+=1
hyi.SetMinimum(0.0)
hyi.Draw()

c1.cd(ipad); ipad+=1
hyo.SetMinimum(0.0)
hyo.Draw()

c1.cd(ipad); ipad+=1;
hyiyo.Draw("COLZ")

c1.cd(ipad); ipad+=1
hmy.SetMinimum(0.0)
hmy.Draw()

c1.cd(ipad); ipad+=1
hzi.SetMinimum(0.0)
hzi.Draw()

c1.cd(ipad); ipad+=1
hzo.SetMinimum(0.0)
hzo.Draw()

c1.cd(ipad); ipad+=1;
hzizo.Draw("COLZ")

c1.cd(ipad); ipad+=1
hmz.SetMinimum(0.0)
hmz.Draw()

c1.Print("anatcs.pdf(")

c1.Clear()
c1.Divide(4,4)
gStyle.SetOptStat(111111)
ipad=1

c1.cd(ipad); ipad+=1
hEp.SetMinimum(0.0)
gStyle.SetStatX(1.0)
hEp.Draw()

c1.cd(ipad); ipad+=1
hEl.SetMinimum(0.0)
hEl.Draw()

c1.cd(ipad); ipad+=1
hEd.SetMinimum(0.0)
hEd.Draw()

c1.cd(ipad); ipad+=1
hQtot.SetMinimum(0.0)
hQtot.Draw()

c1.cd(ipad); ipad+=1
htavg.SetMinimum(0.0)
htavg.Draw()

c1.cd(ipad); ipad+=1
hipart.SetMinimum(0.0)
hipart.Draw()

c1.cd(ipad); ipad+=1
hlp.SetMinimum(0.0)
hlp.Draw()

c1.cd(ipad); ipad+=1
hdEdx.SetMinimum(0.0)
hdEdx.Draw()

c1.cd(ipad); ipad+=1
hcosth.SetMinimum(0.0)
hcosth.Draw()

c1.cd(ipad); ipad+=1
hphi.SetMinimum(0.0)
hphi.Draw()

c1.cd(ipad); ipad+=1
hfQ.SetMinimum(0.0)
hfQ.Draw()

c1.cd(ipad); ipad+=1
hfa.SetMinimum(0.0)
hfa.Draw()

#c1.cd(ipad); ipad+=1
#hfQfa.SetMinimum(0.0)
#hfQfa.Draw()

c1.cd(ipad); ipad+=1
hQtotQest.SetMinimum(0.0)
hQtotQest.Draw()

c1.cd(ipad); ipad+=1
hQest.SetMinimum(0.0)
hQest.Draw()

c1.cd(ipad); ipad+=1
htest.SetMinimum(0.0)
htest.Draw()

c1.cd(ipad); ipad+=1
htavgtest.SetMinimum(0.0)
htavgtest.Draw()


c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(6,4)
gStyle.SetOptStat(111111)

ipad=1

c1.cd(ipad); ipad+=1
htavg_xx.SetMinimum(0.0)
htavg_xx.Draw()

c1.cd(ipad); ipad+=1
htavg_yy.SetMinimum(0.0)
htavg_yy.Draw()

c1.cd(ipad); ipad+=1
htavg_zz.SetMinimum(0.0)
htavg_zz.Draw()

c1.cd(ipad); ipad+=1
htavg_xy.SetMinimum(0.0)
htavg_xy.Draw()

c1.cd(ipad); ipad+=1
htavg_xz.SetMinimum(0.0)
htavg_xz.Draw()

c1.cd(ipad); ipad+=1
htavg_yz.SetMinimum(0.0)
htavg_yz.Draw()

c1.cd(ipad); ipad+=1
htest_xx.SetMinimum(0.0)
htest_xx.Draw()

c1.cd(ipad); ipad+=1
htest_yy.SetMinimum(0.0)
htest_yy.Draw()

c1.cd(ipad); ipad+=1
htest_zz.SetMinimum(0.0)
htest_zz.Draw()

c1.cd(ipad); ipad+=1
htest_xy.SetMinimum(0.0)
htest_xy.Draw()

c1.cd(ipad); ipad+=1
htest_xz.SetMinimum(0.0)
htest_xz.Draw()

c1.cd(ipad); ipad+=1
htest_yz.SetMinimum(0.0)
htest_yz.Draw()

c1.cd(ipad); ipad+=1
htavgtest_xx.SetMinimum(0.0)
htavgtest_xx.Draw()

c1.cd(ipad); ipad+=1
htavgtest_yy.SetMinimum(0.0)
htavgtest_yy.Draw()

c1.cd(ipad); ipad+=1
htavgtest_zz.SetMinimum(0.0)
htavgtest_zz.Draw()

c1.cd(ipad); ipad+=1
htavgtest_xy.SetMinimum(0.0)
htavgtest_xy.Draw()

c1.cd(ipad); ipad+=1
htavgtest_xz.SetMinimum(0.0)
htavgtest_xz.Draw()

c1.cd(ipad); ipad+=1
htavgtest_yz.SetMinimum(0.0)
htavgtest_yz.Draw()

c1.cd(ipad); ipad+=1
hfQ_xx.SetMinimum(0.0)
hfQ_xx.Draw()

c1.cd(ipad); ipad+=1
hfQ_yy.SetMinimum(0.0)
hfQ_yy.Draw()

c1.cd(ipad); ipad+=1
hfQ_zz.SetMinimum(0.0)
hfQ_zz.Draw()

c1.cd(ipad); ipad+=1
hfQ_xy.SetMinimum(0.0)
hfQ_xy.Draw()

c1.cd(ipad); ipad+=1
hfQ_xz.SetMinimum(0.0)
hfQ_xz.Draw()

c1.cd(ipad); ipad+=1
hfQ_yz.SetMinimum(0.0)
hfQ_yz.Draw()

c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(4,3)
gStyle.SetOptStat(0)

ipad=1

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_mum.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_mup.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_em.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_ep.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_pim.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_pip.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_Km.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_Kp.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_pr.Draw("COLZ")

c1.cd(ipad); ipad+=1; gPad.SetGrid(1,1)
hEp_dEdx_ap.Draw("COLZ")


c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(5,4)

ipad=1

c1.cd(ipad); ipad+=1;
hEp_El.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hEp_Ed.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hEp_dEdx.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hEp_lp.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hip_El.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hip_Ed.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hip_dEdx.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hip_lp.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hphi_costh.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hEl_Qtot.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hEl_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmx_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmz_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hdx_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hdy_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hdz_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hphi_fQ.Draw("COLZ")

#c1.cd(ipad); ipad+=1;
#hfa_fQ.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hQest_Qtot.Draw("COLZ")

c1.cd(ipad); ipad+=1;
gPad.SetLogz(True)
htest_tavg.Draw("COLZ")

c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(3,2)

ipad=1

c1.cd(ipad); ipad+=1;
hfQ_xi_xo.SetMinimum(0.0)
hfQ_xi_xo.SetMaximum(1.8e-4)
hfQ_xi_xo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hfQ_yi_yo.SetMinimum(0.0)
hfQ_yi_yo.SetMaximum(1.8e-4)
hfQ_yi_yo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hfQ_zi_zo.SetMinimum(0.0)
hfQ_zi_zo.SetMaximum(1.8e-4)
hfQ_zi_zo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hfa_xi_xo.SetMinimum(0.0)
hfa_xi_xo.SetMaximum(1.0)
hfa_xi_xo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hfa_yi_yo.SetMinimum(0.0)
hfa_yi_yo.SetMaximum(1.0)
hfa_yi_yo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hfa_zi_zo.SetMinimum(0.0)
hfa_zi_zo.SetMaximum(1.0)
hfa_zi_zo.Draw("COLZ")

c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(3,2)

ipad=1

c1.cd(ipad); ipad+=1;
htavg_xi_xo.SetMinimum(80.0)
htavg_xi_xo.SetMaximum(130.0)
htavg_xi_xo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
htavg_yi_yo.SetMinimum(80.0)
htavg_yi_yo.SetMaximum(130.0)
htavg_yi_yo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
htavg_zi_zo.SetMinimum(80.0)
htavg_zi_zo.SetMaximum(130.0)
htavg_zi_zo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
htest_xi_xo.SetMinimum(80.0)
htest_xi_xo.SetMaximum(130.0)
htest_xi_xo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
htest_yi_yo.SetMinimum(80.0)
htest_yi_yo.SetMaximum(130.0)
htest_yi_yo.Draw("COLZ")

c1.cd(ipad); ipad+=1;
htest_zi_zo.SetMinimum(80.0)
htest_zi_zo.SetMaximum(130.0)
htest_zi_zo.Draw("COLZ")

c1.Print("anatcs.pdf")

c1.Clear()
c1.Divide(3,2)

ipad=1

c1.cd(ipad); ipad+=1;
hmy_tavg_cleanxx.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_tavg_cleanzz.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_tavg_cleanxz.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_test_cleanxx.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_test_cleanzz.Draw("COLZ")

c1.cd(ipad); ipad+=1;
hmy_test_cleanxz.Draw("COLZ")


c1.Print("anatcs.pdf)")
