Burg jeff E1 E2.py

From New IAC Wiki
Revision as of 05:15, 20 February 2018 by Burgjeff (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
import mytools2 as mt2
import mytools as mt
import ROOT
import numpy as np
from TH1Wrapper import TH2F,TH3F

target = "D2O"
forward = 1
particle = "neutrons"
binwidth=1.25
delta_thetaperp = 45
cutmode = 0



if forward:
    treeSP, n_pulses_SP = getattr(mt2.NCorrRun("SP",target,Forward = forward),"{}_doubles_tree".format(particle))
    treeDP,n_pulses_DP = getattr(mt2.NCorrRun("DP",target, Forward = forward),"{}_doubles_tree".format(particle))
else:
    treeSP, n_pulses_SP = getattr(mt2.NCorrRun("SP", target), "{}_doubles_tree".format(particle))
    treeDP, n_pulses_DP = getattr(mt2.NCorrRun("DP", target), "{}_doubles_tree".format(particle))


delta_thetapar= 90- delta_thetaperp
cutPerp = mt.cut_rangeAND([(3.1415/180)*(90-delta_thetaperp), (3.1415/180)*(90+delta_thetaperp)],"neutrons.coinc_hits.theta_abs[0][1]")
cutPar = mt.cut_range_outer([(3.1415/180)*(delta_thetapar), (3.1415/180)*(180-delta_thetapar)],"neutrons.coinc_hits.theta_abs[0][1]")


histSP = TH2F(mins=0,maxs=6,binwidths=1.5)
histDP = TH2F(mins=0,maxs=6,binwidths=1.5)


if forward:
    # cut = "{0}.coinc_hits[].ForwardDet[0]==0 && {0}.coinc_hits[].ForwardDet[1]==0 ".format(particle)
    cut = ["",cutPar,cutPerp][cutmode]
    drw_str = "neutrons.coinc_hits[0].erg[0]:neutrons.coinc_hits[0].erg[1]"
else:
    drw_str = "neutrons.hits[0].erg:neutrons.hits[1].erg"
    cut = ""


histSP.Project(treeSP,drw_str, cut, weight=1.0/n_pulses_SP)
histDP.Project(treeDP,drw_str, cut, weight=1.0/n_pulses_DP)

c1 = ROOT.TCanvas()

c1.Divide(2)
c1.cd(1)




histSP -= 0.5*histDP

histSP.normalize()
histDP.normalize()

histSP /= histDP

histSP.GetXaxis().SetTitle("E1 [MeV]")
histSP.GetYaxis().SetTitle("E2 [MeV]")
histSP.GetZaxis().SetTitle("normalized correlation [arb. units]")

histSP.GetYaxis().SetTitleOffset(1.75)
histSP.GetXaxis().SetTitleOffset(1.75)
histSP.GetZaxis().SetTitleOffset(1.4)
# print histSP.GetTitleOffset(0)
# print histSP.GetTitleOffset(1)

histSPTr = histSP.__copy__()
histSPTr.transpose()
histSP += histSPTr
histSP *=0.5

histSP.SetName("E1vsE2")
histSP.SetTitle(["No #theta_{{abs}} cut", "parallel to beam  (#parallel #pm {par}#circ) ", "perpendicular to beam (#perp #pm {perp})"][cutmode].format(par=delta_thetapar, perp = delta_thetaperp))
histSP.SetStats(0)

histSP.Draw("Lego2 E",False)

c1.cd(2)
ROOT.TGaxis.SetMaxDigits(2)

_ = histSP.__copy__()
_.SetTitle("same data")
_.SetStats(0)
# _.Draw("colz",False)

errors = histSP.getErrorsHistogram(relative_error=False if target=="D2O" else False)
errors.SetStats(0)
errors.GetZaxis().SetTitleOffset(1.65)

t = "relative error" if target!="D2O" else "Absolute error"

errors.GetZaxis().SetTitle(t)

errors.SetTitle(t)
errors.Draw("Lego",False)




if __name__ == "__main__":
    import ROOT as ROOT
    from multiprocessing import Process, Queue
    import time, sys, os


    def input_thread(q, stdin):
        while True:
            print 'ROOT: '
            cmd = stdin.readline()
            q.put(cmd)


    def root(char):
        assert isinstance(char, str), "Argument must be string!"
        ROOT.gROOT.ProcessLine(char)


    if __name__ == '__main__':
        ___queue___ = Queue()
        ___newstdin___ = os.fdopen(os.dup(sys.stdin.fileno()))
        ___input_p___ = Process(target=input_thread,
                                args=(___queue___, ___newstdin___))
        ___input_p___.daemon = True
        ___input_p___.start()
        ___g___ = ROOT.gSystem.ProcessEvents
        try:
            while 1:
                if not ___queue___.empty():
                    ___cmd___ = ___queue___.get()
                    try:
                        exec (___cmd___, globals())
                    except:
                        print sys.exc_info()
                time.sleep(0.01)
                ___g___()
        except(KeyboardInterrupt, SystemExit):
            ___input_p___.terminate()