11 from time
import strftime,localtime
13 from ROOT
import TFile
14 from ROOT
import TH1F,TProfile
15 from ROOT
import TCanvas
16 from ROOT
import kTeal
17 from ROOT
import gStyle,gROOT,gPad
18 from ROOT
import kYellow,kOrange,kRed,kBlue,kPink,kMagenta,kGreen,kSpring,kViolet,kAzure,kCyan,kTeal,kBlack,kWhite,kGray
21 sys.path.append(
"/afs/cern.ch/user/l/larmon/public/prod/Misc")
22 from LArMonCoolLib
import GetLBTimeStamps,GetOfflineLumiFromCOOL,GetReadyFlag
23 from DeMoLib
import retrieveYearTagProperties,returnPeriod,plotStack,MakeTH1,MakeLegend,strLumi
25 from DQUtils
import fetch_iovs
27 from argparse
import RawTextHelpFormatter,ArgumentParser
36 from DQDefects
import DefectsDB
38 parser = ArgumentParser(description=
'',formatter_class=RawTextHelpFormatter)
39 parser.add_argument(
'-y',
'--year',dest=
'parser_year',default =
"2022",help=
'Year [Default: 2022]',action=
'store')
40 parser.add_argument(
'-t',
'--tag',dest=
'parser_tag',default =
"AtlasReady",help=
'Defect tag [Default: "AtlasReady"]',action=
'store')
41 parser.add_argument(
'-b',
'--batch',dest=
'parser_batchMode',help=
'Batch mode',action=
'store_true')
43 args = parser.parse_args()
44 year = args.parser_year
49 if args.parser_batchMode:
54 systemList = [
"LAr",
"Pixel",
"SCT",
"TRT",
"Tile",
"MDT",
"TGC",
"RPC",
"Trig_L1",
"Trig_HLT",
"Lumi",
"Global",
"ALFA",
"LUCID",
"ZDC",
"IDGlobal",
"BTag",
"CaloCP",
"MuonCP"]
55 systemList2 = systemList + [
"All"]
57 for iSyst
in systemList2:
58 affectedLBs[iSyst] = {}
61 for iSyst
in systemList:
62 recapDefectsFile =
open(
"YearStats-%s/%s/%s/recapDefects.txt"%(iSyst,year,tag))
65 for iline
in recapDefectsFile:
66 ilineSplit = iline.split(
"|")
68 if (len(ilineSplit) == 8)
and (
"Run" not in ilineSplit[0]):
69 runNumber = ilineSplit[0]
70 lbRange = ilineSplit[5]
71 if (len(ilineSplit) == 4):
72 lbRange = ilineSplit[1]
76 if (runNumber
not in affectedLBs[iSyst].
keys()):
77 affectedLBs[iSyst][runNumber] = []
79 if (runNumber
not in affectedLBs[
"All"].
keys()):
80 affectedLBs[
"All"][runNumber] = []
82 lbRangeSplit = lbRange.split(
"->")
83 if len(lbRangeSplit) == 1:
84 lbAffInt =
int(lbRange)
85 if (lbAffInt
not in affectedLBs[iSyst][runNumber]):
86 affectedLBs[iSyst][runNumber].
append(lbAffInt)
87 if (lbAffInt
not in affectedLBs[
"All"][runNumber]):
88 affectedLBs[
"All"][runNumber].
append(lbAffInt)
90 if len(lbRangeSplit) == 2:
91 for iLB
in range(
int(lbRangeSplit[0]),
int(lbRangeSplit[1])+1):
92 if (iLB
not in affectedLBs[iSyst][runNumber]):
93 affectedLBs[iSyst][runNumber].
append(iLB)
94 if (iLB
not in affectedLBs[
"All"][runNumber]):
95 affectedLBs[
"All"][runNumber].
append(iLB)
97 if (
"Tolerable defect" in iline):
104 for iRun
in affectedLBs[
"All"].
keys():
105 instOfflLumi = GetOfflineLumiFromCOOL(
int(iRun),0,DeMoConfig[
"OflLumi tag"])
106 atlasready=GetReadyFlag(
int(iRun))
109 v_lbTimeSt = GetLBTimeStamps(
int(iRun))
111 lumiacct=
fetch_iovs(
'COOLOFL_TRIGGER::/TRIGGER/OFLLUMI/LumiAccounting', tag=DeMoConfig[
"OflLumiAcct tag"], since=v_lbTimeSt[1][0]*1000000000, until=v_lbTimeSt[len(v_lbTimeSt)][1]*1000000000)
113 for iLumiAcct
in range(len(lumiacct)):
114 if (lumiacct[iLumiAcct].LumiBlock
in affectedLBs[
"All"][iRun]):
115 if (atlasready[lumiacct[iLumiAcct].LumiBlock]):
116 lbLumi[iRun][lumiacct[iLumiAcct].LumiBlock] = lumiacct[iLumiAcct].LBTime*lumiacct[iLumiAcct].LiveFraction*lumiacct[iLumiAcct].InstLumiAll
117 lbLumi[iRun][lumiacct[iLumiAcct].LumiBlock] = lumiacct[iLumiAcct].LBTime*lumiacct[iLumiAcct].LiveFraction*instOfflLumi[lumiacct[iLumiAcct].LumiBlock]
119 affectedLBs[
"All"][iRun].
remove(lumiacct[iLumiAcct].LumiBlock)
120 for iSyst
in systemList:
121 if (iRun
in affectedLBs[iSyst].
keys()
and lumiacct[iLumiAcct].LumiBlock
in affectedLBs[iSyst][iRun]):
122 affectedLBs[iSyst][iRun].
remove(lumiacct[iLumiAcct].LumiBlock)
125 periodFile = TFile(
"YearStats-Global/%s/%s/TProfiles.root"%(year,tag))
127 h1_lumi = periodFile.Get(
"h1Period_IntLuminosity_archive")
128 periodListHash = h1_lumi.GetXaxis().GetLabels()
132 dataLossPerPeriod = {}
133 for iSyst
in systemList2:
134 dataLossPerPeriod[iSyst]={}
136 for i
in range(len(periodListHash)):
137 periodName.append(
str(periodListHash[i]))
138 periodLumi[periodName[i]] = h1_lumi.GetBinContent(i+1)
139 for iSyst
in systemList2:
140 dataLossPerPeriod[iSyst][periodName[i]] = 0.
142 hprof_dataLossPerSystem = {}
143 for iSyst
in systemList2:
144 hprof_dataLossPerSystem[iSyst] =
MakeTH1(
"dataLoss_%s"%iSyst,
"Period",
"dataLoss_%s"%iSyst,-0.5,-0.5+len(periodName),len(periodName),kBlack)
145 for i
in range(len(periodName)):
146 hprof_dataLossPerSystem[iSyst].GetXaxis().SetBinLabel(i+1,periodName[i])
149 colorPalette = {
"Pixel":kViolet-4,
161 "IDGlobal":kMagenta+2,
167 for iSyst
in systemList2:
168 for iAffRun
in affectedLBs[iSyst].
keys():
170 for iAffLB
in affectedLBs[iSyst][iAffRun]:
171 dataLossPerPeriod[iSyst][period] = dataLossPerPeriod[iSyst][period] + lbLumi[iAffRun][iAffLB]
172 dataLossPerPeriod[iSyst][
"All"] = dataLossPerPeriod[iSyst][
"All"] + lbLumi[iAffRun][iAffLB]
174 print(
"==== %s"%iSyst)
175 if (len(affectedLBs[iSyst])):
176 for i
in range(len(periodName)):
177 if (periodLumi[periodName[i]] != 0.):
178 percentLoss = dataLossPerPeriod[iSyst][periodName[i]]/periodLumi[periodName[i]]/10000
181 if percentLoss != 0.:
182 print(
"Period %s -> %.4f percent"%(periodName[i],percentLoss))
183 hprof_dataLossPerSystem[iSyst].Fill(i,percentLoss)
184 hprof_dataLossPerSystem[iSyst].SetBinError(i+1,0.)
185 hprof_dataLossPerSystem[iSyst].SetFillColor(colorPalette[iSyst])
191 for iSyst
in systemList:
192 systemDict[iSyst] = iSyst
194 plotStack(
"Defects--Periods--%s"%DeMoConfig[
"Description"],hprof_dataLossPerSystem,systemList,systemDict,h1_lumi,
False,stacks,canvas,legends,
False)
195 hprof_dataLossPerSystem[
"All"].SetMarkerColor(kOrange+7)
196 hprof_dataLossPerSystem[
"All"].SetMarkerStyle(20)
197 hprof_dataLossPerSystem[
"All"].Draw(
"PSAME")
200 ATLASLegend.AddEntry(hprof_dataLossPerSystem[
"All"],
"#splitline{ATLAS inefficiency}{All periods: %.2f%% / %s (%s OK)}"%(dataLossPerPeriod[
"All"][
"All"]/periodLumi[
"All"]/10000,
strLumi(dataLossPerPeriod[
"All"][
"All"]),
strLumi(periodLumi[
"All"]-dataLossPerPeriod[
"All"][
"All"]/1000000,
"pb",
True,
True)),
"P")
201 ATLASLegend.SetFillColor(kWhite)
204 canvas[
"Defects--Periods--%s"%DeMoConfig[
"Description"]].SaveAs(
"YearStats-Global/%s/%s/DataLoss.png"%(year,tag))