- import pickle
- from ROOT import gStyle
- from ROOT import TColor
- from ROOT import gROOT
- import ROOT as R
- #import statistics
- from ITMapping import ITMapping
- from ITMapping import PlotITBoxes
- from ITMapping import PlotITLabels
- from Create_Maps import IT_Map as IT_Map_func
- from config import ITMeanRange
- from config import ITWidthRange
- from config import ITEffRange
- from config import UsePredefinedRanges
- from config import UsePredefinedTitles
- from config import ITMeanTitle
- from config import ITWidthTitle
- from config import ITEffTitle
- from config import IncudeMissingSectorsToSummary
- from array import array
-
-
- def CreateITHist(data,variable, mode, suffix, address="Plots/", test_mode=False):
- """
- This finction creates map of the IT from given dictionary.
- Dictionary whould have a form:
- data = {<st_id1>:{
- <variable>:<number or TH1>
- },
- <st_id2>:{},
- ...}
- depending on mode, the function will create a map according to the:
- - Number ("Value" mode)
- - Mean of the histogram ("Mean" mode)
- - R.M.S. of the histogram ("Sigma" mode)
-
- st_id is a 3-digit ID of a sector, which is defined in STTrackTuple algorithm.
- The map between st_id and sector name can be found it Create_Maps.py file (or be obtained with IT_Map_func())
- """
-
-
- global ITMeanRange
- global ITWidthRange
- global ITEffRange
- global UsePredefinedRanges
- global UsePredefinedTitles
- global ITMeanTitle
- global ITWidthTitle
- global ITEffTitle
- global IncudeMissingSectorsToSummary
- #Check if requested variable is in collection.
- variable_in_collection = False
- for st_id in data:
- if variable in data[st_id]:
- variable_in_collection = True
- break
- if not variable_in_collection:
- return False
- first_lower = lambda s: s[:1].lower() + s[1:] if s else ''
- stats = ["1","2","3"]
- boxes = ["ASide","CSide","Top","Bottom"]
- layers = ["X1", "U", "V", "X2"]
- sectors = ["1","2","3","4","5","6","7"]
-
- IT_Map = IT_Map_func()
- gROOT.SetStyle("Modern")
- gROOT.ForceStyle()
- gStyle.SetOptStat(0)
- gStyle.SetOptFit(0)
- gStyle.SetPadRightMargin(0.2)
- gStyle.SetTitleX(0.5)
- gStyle.SetTitleAlign(23)
- gStyle.SetTitleBorderSize(0)
- gStyle.SetPaintTextFormat("5.1f")
- gStyle.SetStatFormat("5.5f")
- gStyle.SetTitleFontSize(0.07)
- gStyle.SetPadTickY(1)
- gStyle.SetPadTickX(1)
- nColors=52
- MyPalette = [0]*nColors
- stops = [0.00, 0.50, 1.00]
- red = [0.80, 1.00, 0.00]
- green = [0.00, 1.00, 0.00]
- blue = [0.00, 1.00, 0.80]
-
- s = array('d', stops)
- r = array('d', red)
- g = array('d', green)
- b = array('d', blue)
-
- FI = TColor.CreateGradientColorTable(3, s, r, g, b, nColors);
- for k in range(0, nColors):
- MyPalette[k] = FI+k
-
- gStyle.SetNumberContours(nColors)
- gStyle.SetPalette(nColors, array('i',MyPalette))
- gROOT.ForceStyle()
-
- m_mapping={}
- m_nSensors={}
-
- for st_id in IT_Map:
- m_mapping[st_id]=ITMapping(IT_Map[st_id])
-
- if (mode =="Mean") or (variable == "mean"):
- maximum = ITMeanRange[1]
- minimum = ITMeanRange[0]
- if UsePredefinedTitles:
- title = ITMeanTitle
- else:
- title = "Bias distribution, [mm]"
- elif (mode =="Sigma") or (variable == "width"):
- maximum = ITWidthRange[1]
- minimum = ITWidthRange[0]
- if UsePredefinedTitles:
- title = ITWidthTitle
- else:
- title = "Resolution, [mm]"
- elif variable == "efficiency":
- maximum = ITEffRange[1]
- minimum = ITEffRange[0]
- if UsePredefinedTitles:
- title = ITEffTitle
- else:
- title = "Hit efficiency"
-
- nBinsX = 25
- nBinsY = 52
- lowX = -12.5
- upX = 12.5
- lowY = -13
- upY = 13
- hist = R.TH2D("hist", title, nBinsX, lowX, upX, nBinsY, lowY, upY)
- masked_sectors = []
- vals = []
- if not test_mode:
- for st_id in data:
- if mode =="Mean":
- hist.Fill(m_mapping[st_id][0], m_mapping[st_id][1], data[st_id][variable].GetMean())
- if IncudeMissingSectorsToSummary:
- vals.append(data[st_id][variable].GetMean())
- else:
- if (data[st_id][variable].GetMean()<maximum) and (data[st_id][variable].GetMean()>minimum):
- vals.append(data[st_id][variable].GetMean())
- if (maximum<data[st_id][variable].GetMean()) or (minimum>data[st_id][variable].GetMean()):
- masked_sectors.append(IT_Map[st_id])
- print "Atention, hit bias of sector "+IT_Map[st_id]+" is out of hist range. The value is "+str(data[st_id][variable].GetMean())
- elif mode =="Sigma":
- hist.Fill(m_mapping[st_id][0], m_mapping[st_id][1], data[st_id][variable].GetRMS())
- if IncudeMissingSectorsToSummary:
- vals.append(data[st_id][variable].GetRMS())
- else:
- if (data[st_id][variable].GetRMS()<maximum) and (data[st_id][variable].GetRMS()>minimum):
- vals.append(data[st_id][variable].GetRMS())
- if (maximum<data[st_id][variable].GetRMS()) or (minimum>data[st_id][variable].GetRMS()):
- masked_sectors.append(IT_Map[st_id])
- print "Atention, resolution of sector "+IT_Map[st_id]+" is out of hist range. The value is "+str(data[st_id][variable].GetRMS())
- elif mode =="Value":
- hist.Fill(m_mapping[st_id][0], m_mapping[st_id][1], data[st_id][variable])
- if IncudeMissingSectorsToSummary:
- vals.append(data[st_id][variable])
- else:
- if (data[st_id][variable]<maximum) and (data[st_id][variable]>minimum):
- vals.append(data[st_id][variable])
- if (maximum<data[st_id][variable]) or (minimum>data[st_id][variable]):
- masked_sectors.append(IT_Map[st_id])
- if variable == "efficiency":
- try:
- print "Hit efficiency of sector "+IT_Map[st_id]+" is not shown since it is out of range ($\epsilon = "+str(data[st_id]["efficiency"]) + " \pm "+str(data[st_id]["err_efficiency"])+"$)."
- except:
- print "Atention, "+variable+" of sector "+IT_Map[st_id]+" is out of hist range. The value is "+str(data[st_id][variable])
- else:
- print "Atention, "+variable+" of sector "+IT_Map[st_id]+" is out of hist range. The value is "+str(data[st_id][variable])
- else:
- print "Please use one of the following modes: Mean, Sigma, Value"
-
- c = R.TCanvas("c","c",600,600)
-
- if UsePredefinedRanges:
- hist.SetMaximum( maximum)
- hist.SetMinimum( minimum)
- hist.Draw("COLZ")
-
- #if test_mode:
-
- PlotITBoxes(hist, nBinsX, lowX, upX, nBinsY, lowY, upY, masked_sectors)
- PlotITLabels(hist)
-
- gStyle.SetOptStat(1111110)
- gStyle.SetOptFit(1111110)
- gROOT.ForceStyle()
- if not test_mode:
- c.SaveAs(address+variable+"_"+mode+"_IT_"+suffix+".pdf")
- c.SaveAs(address+variable+"_"+mode+"_IT_"+suffix+".C")
-
-
- gROOT.ProcessLine(".x lhcbStyle.C")
- gStyle.SetOptStat('erm')
- gROOT.ForceStyle()
-
- try:
- from config import nBins_in_summary
- nBins = nBins_in_summary
- except:
- nBins = 50
-
- if (mode =="Mean") or (variable == "mean"):
- hist_summary = R.TH1D("hist_summary", "IT "+first_lower(title)+"; Bias [mm];Number of sectors", nBins, min(vals), max(vals))
- elif (mode =="Sigma") or (variable == "width"):
- hist_summary = R.TH1D("hist_summary", "IT "+first_lower(title)+"; Resolution [mm];Number of sectors", nBins, min(vals), max(vals))
- elif variable == "efficiency":
- hist_summary = R.TH1D("hist_summary", "IT "+first_lower(title)+";Hit detection efficiency;Number of sectors", nBins, min(vals), max(vals))
- else:
- hist_summary = R.TH1D("hist_summary", title, nBins, min(vals), max(vals))
-
- #hist_summary.GetYaxis().SetTitleOffset(1.2)
- #hist_summary.GetYaxis().SetLabelSize(0.03)
- #hist_summary.GetXaxis().SetLabelSize(0.03)
- for v in vals:
- hist_summary.Fill(v)
-
-
- c_s = R.TCanvas("c_s","c_s",800,800)
-
- hist_summary.Draw()
-
- R.gPad.Update()
-
- if variable == "efficiency":
- st = hist_summary.FindObject("stats")
- st.SetX1NDC(0.15)
- st.SetX2NDC(0.35)
- st.SetY1NDC(0.65)
- st.SetY2NDC(0.85)
- elif variable == "mean":
- st = hist_summary.FindObject("stats")
- st.SetX1NDC(0.65)
- st.SetX2NDC(0.85)
- st.SetY1NDC(0.65)
- st.SetY2NDC(0.85)
- elif variable == "width":
- st = hist_summary.FindObject("stats")
- st.SetX1NDC(0.78)
- st.SetX2NDC(0.98)
- st.SetY1NDC(0.65)
- st.SetY2NDC(0.85)
-
-
- R.gPad.Update()
-
- if not test_mode:
- c_s.SaveAs(address+"Summary_"+variable+"_"+mode+"_IT_"+suffix+".pdf")
- c_s.SaveAs(address+"Summary_"+variable+"_"+mode+"_IT_"+suffix+".C")
- # print "Mean : "+str(statistics.mean(vals))+" +/- "+str(statistics.stdev(vals))
- # print "Median : "+str(statistics.median(vals))
- gROOT.SetStyle("Modern")
- gROOT.ForceStyle()
- return c
-
- if __name__ == "__main__":
- c = CreateITHist(True, "Mean", "suffix","Plots/",True)
-