ATLAS Offline Software
CscPostProcessing.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 #
4 
5 from ROOT import TH1F, TF1
6 from .CscMonUtils import getCSCLabelx, getCSCEfficiency
7 
8 
9 def 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]
CscPostProcessing.CSCLandauFit
def CSCLandauFit(inputs)
Definition: CscPostProcessing.py:9
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
CscPostProcessing.CscChamberEfficiency
def CscChamberEfficiency(inputs)
Definition: CscPostProcessing.py:47
if
if(febId1==febId2)
Definition: LArRodBlockPhysicsV0.cxx:569
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
CscMonUtils.getCSCEfficiency
def getCSCEfficiency(num, num_err, den, den_err)
Definition: CscMonUtils.py:12
CscMonUtils.getCSCLabelx
def getCSCLabelx(x)
Definition: CscMonUtils.py:8