ATLAS Offline Software
Loading...
Searching...
No Matches
CscPostProcessing.py
Go to the documentation of this file.
2# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3#
4
5from ROOT import TH1F, TF1
6from .CscMonUtils import getCSCLabelx, getCSCEfficiency
7
8
9def CSCLandauFit(inputs):
10 h_etaClusQSumHist = inputs[0][1][0].Clone()
11 side = 'A'
12 nbins = 90
13 minbin = 0
14 maxbin = 18
15 if '_EA' not in h_etaClusQSumHist.GetName():
16 side = 'C'
17 nbins = 85
18 minbin = -17
19 maxbin = 0
20 h_lfit = TH1F("h1csc_clus_qsum_signal_E"+side+"_lfitmean","EndCap"+side+": MPV of Landau Fit to Cluster charge (Qsum)", nbins, minbin, maxbin)
21 xlabels = getCSCLabelx("labels_occupancy_signal_E"+side)
22 for ibin in range(len(xlabels)):
23 h_lfit.GetXaxis().SetBinLabel(ibin+1, xlabels[ibin])
24 h_lfit.GetYaxis().SetTitle("counts / layer")
25
26 for j in range(5, 86):
27 if( j % 5 != 0):
28 mpv = 0
29 mpv_err = 0
30 h_proj = h_etaClusQSumHist.ProjectionX("_px", j, j)
31 if h_proj:
32 fit_status = 0
33 flmin = 50
34 flmax = 700
35 entries = h_proj.GetEntries()
36 if(entries > 10):
37 flandau = TF1("fland", "landau", flmin, flmax)
38 fit_status = h_proj.Fit(flandau, "LQRN", "goff")
39 if(fit_status == 0):
40 mpv = flandau.GetParameter(1)
41 mpv_err = flandau.GetParError(1)
42 h_lfit.SetBinContent(j, mpv)
43 h_lfit.SetBinError(j, mpv_err)
44
45 return[h_lfit]
46
48 h_NumNClusSegm = inputs[0][1][0].Clone()
49 side = 'A'
50 nbins = 90
51 minbin = 0
52 maxbin = 18
53 if '_EA' not in h_NumNClusSegm.GetName():
54 side = 'C'
55 nbins = 85
56 minbin = -17
57 maxbin = 0
58 h_eff = TH1F("Muon_Segm_Efficiency_E"+side,"EndCap"+side+": #eta-segment efficiency per sector", nbins, minbin, maxbin)
59 xlabels = getCSCLabelx("labels_occupancy_signal_E"+side)
60
61 for ibin in range(len(xlabels)):
62 h_eff.GetXaxis().SetBinLabel(ibin+1, xlabels[ibin])
63 h_eff.GetYaxis().SetTitle("efficiency")
64
65 for layer in range(1,5):
66 if(side == 'A'):
67 for ichamber in range(1,17): #to-do: check how the histograms are filled. https://gitlab.cern.ch/atlas/athena/-/blob/master/DataQuality/DataQualityUtils/src/MonitoringFile_CSCChamberEfficiency.cxx
68 num = h_NumNClusSegm.GetBinContent(46,1+5*ichamber)
69 num_err = h_NumNClusSegm.GetBinError(46,1+5*ichamber)
70 den = h_NumNClusSegm.GetBinContent(10*layer-4,1+5*ichamber)
71 den_err = h_NumNClusSegm.GetBinError(10*layer-4,1+5*ichamber)
72 eff, err = getCSCEfficiency(num, num_err, den, den_err)
73 h_eff.SetBinContent(5*ichamber+1+(layer-1),eff)
74 h_eff.SetBinError(5*ichamber+1+(layer-1),err)
75
76 elif(side == 'C'):
77 for ichamber in range(1,17):
78 num = h_NumNClusSegm.GetBinContent(46, 86-5*ichamber)
79 num_err = h_NumNClusSegm.GetBinError(46, 86-5*ichamber)
80 den = h_NumNClusSegm.GetBinContent(10*layer-4, 86-5*ichamber)
81 den_err = h_NumNClusSegm.GetBinError(10*layer-4, 86-5*ichamber)
82 eff, err = getCSCEfficiency(num, num_err, den, den_err)
83 h_eff.SetBinContent(90-layer-5*ichamber,eff)
84 h_eff.SetBinError(90-layer-5*ichamber,err)
85
86 return [h_eff]
if(febId1==febId2)