ATLAS Offline Software
extractSporadic.py
Go to the documentation of this file.
1 #!/usr/bin env python
2 
3 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4 
5 
6 # ======================================================================
7 def printProperties(h,q,hLB):
8 
9  print ("=======================Harware coordinates :",h.GetName()[0:h.GetName().find("Phi")-1])
10  print ("Coordinates : Eta = ",h.GetName()[h.GetName().find("Eta")+3:h.GetName().find("Eta")+7]," Phi = ",h.GetName()[h.GetName().find("Phi")+3:h.GetName().find("Phi")+7])
11 
12 
13  # Nb of events with E>20GeV and mean energy
14  nbEvts20GeV = 0
15  meanE = 0
16  for ix in range(61,h.GetNbinsX()+2):# Bin 61 = 20GeV
17  nbEvts20GeV = nbEvts20GeV+h.GetBinContent(ix)
18  meanE = meanE + h.GetBinContent(ix)*h.GetBinCenter(ix)
19  meanE = meanE / nbEvts20GeV/ 1000
20 
21  # Nb of events with q factor > 4000
22  nbEvts4000 = 0
23  for ix in range(11,q.GetNbinsX()+2):# Bin 11 = 4000
24  nbEvts4000 = nbEvts4000 + q.GetBinContent(ix)
25 
26  # Nb of LBs where at least one event with E>20GeV is found
27  nbLB20GeV = 0
28  allLBs = ""
29  for ix in range(1,hLB.GetNbinsX()+1):
30  lbAff = False
31  for iy in range(61,hLB.GetNbinsY()+2):# Bin 61 = 20GeV
32  if hLB.GetBinContent(ix,iy) != 0:
33  lbAff = True
34  if lbAff:
35  nbLB20GeV = nbLB20GeV+1
36  allLBs = allLBs + " %d"%ix
37 
38  print ("# of events: E>20GeV / E>20GeV && q>4000 : %d / %d"%(nbEvts4000,nbEvts20GeV))
39  print ("Mean energy above 20geV: %.2f GeV"%meanE)
40  print (nbLB20GeV," LBs contains energetic events: ", allLBs )
41  return
42 
43 # ======================================================================
44 def displayHistos(h,q,hLB,canvas):
45  canvas.Divide(1,2)
46  canvas.cd(1)
47  ROOT.gPad.Divide(2,1)
48  ROOT.gPad.cd(1)
49  ROOT.gPad.SetLogy()
50  gStyle.SetOptStat(100110)
51  h.Draw()
52 
53  canvas.cd(1)
54  ROOT.gPad.cd(2)
55  q.Draw()
56 
57  canvas.cd(2)
58  hLB.SetStats(0)
59  hLB.Draw("COLZ")
60 
61  canvas.cd()
62  return
63 
64 
65 # Main =================================================================
66 import sys
67 
68 if len(sys.argv)<4:
69  print ("python -i extractSporadic.py 159041 x29_m545 EMBA [FT29Sl2Ch68]")
70  print ("If no channel is specified, displays all with more than 20 events above 20 GeV")
71  sys.exit()
72 
73 #os.system("nsls /castor/cern.ch/grid/atlas/tzero/prod1/perm/data10_7TeV/physics_CosmicCalo/0"+sys.argv[1])
74 
75 import ROOT
76 from ROOT import gROOT, gDirectory
77 from ROOT import gStyle, TCanvas
78 from ROOT import TRFIOFile
79 
80 gROOT.Reset()
81 gStyle.SetPalette(1)
82 
83 nameFile = "/castor/cern.ch/grid/atlas/tzero/prod1/perm/data10_7TeV/physics_CosmicCalo/0"+sys.argv[1]+"/data10_7TeV.00"+sys.argv[1]+".physics_CosmicCalo.merge.HIST."+sys.argv[2]+"/data10_7TeV.00"+sys.argv[1]+".physics_CosmicCalo.merge.HIST."+sys.argv[2]+"._0001.1"
84 nameDir = "run_"+sys.argv[1]+"/CaloMonitoring/LArCellMon_NoTrigSel/Sporadic20GeV/"+sys.argv[3]
85 
86 myFile = TRFIOFile(nameFile)
87 
88 # General numbers
89 hNbEvts = myFile.Get("run_"+sys.argv[1]+"/LAr/FEBMon/perPartitionData/Eventtype")
90 print ("This stream contains %d events"%hNbEvts.GetEntries())
91 
92 myFile.cd(nameDir)
93 
94 # Compile all channels
95 if len(sys.argv) == 4:
96  h=[]
97  q=[]
98  hLB=[]
99  listOfKeys = gDirectory.GetListOfKeys()
100  for key in listOfKeys:
101  name = key.GetName()
102  type = key.GetClassName()
103  if type == "TH1F" and name.find("EN") != -1 :
104  h.append(myFile.Get(nameDir+"/"+name))
105  if type == "TH1F" and name.find("Quality") != -1 :
106  q.append(myFile.Get(nameDir+"/"+name))
107  if type == "TH2F" and name.find("ENLB") != -1 :
108  hLB.append(myFile.Get(nameDir+"/"+name))
109 
110  nhists = len(h)
111  print ("retrieved %i histos"%nhists)
112 
113  for i in range(0, nhists):
114  if h[i].Integral(61,h[i].GetNbinsX()+1) >= 20:
115  printProperties(h[i],q[i],hLB[i])
116 
117 # Extract the corresponding channel
118 if len(sys.argv) == 5:
119  nameHisto = sys.argv[4]
120  listOfKeys = gDirectory.GetListOfKeys()
121  for key in listOfKeys:
122  name = key.GetName()
123  type = key.GetClassName()
124  if type == "TH1F" and name.find("EN") != -1 and name.find(nameHisto) != -1:
125  h = myFile.Get(nameDir+"/"+name)
126  if type == "TH2F" and name.find("ENLB") != -1 and name.find(nameHisto) != -1:
127  hLB = myFile.Get(nameDir+"/"+name)
128  if type == "TH1F" and name.find("Quality") != -1 and name.find(nameHisto) != -1:
129  q = myFile.Get(nameDir+"/"+name)
130 
131  if (h != 0):
132  printProperties(h,q,hLB)
133  c1 = TCanvas('c1','c1',1000,600)
134  displayHistos(h,q,hLB,c1)
135 
136 
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
extractSporadic.printProperties
def printProperties(h, q, hLB)
Definition: extractSporadic.py:7
extractSporadic.displayHistos
def displayHistos(h, q, hLB, canvas)
Definition: extractSporadic.py:44