ATLAS Offline Software
Functions | Variables
plotting.python_tools Namespace Reference

Functions

def get_grl (year, verbose=True)
 
def setAtlasStyle ()
 
def drawAtlasLabel (x, y, text="", color=R.kBlack)
 
def drawText (x, y, text, size=27, color=R.kBlack)
 
def make_bands (vec_in, stdev, yval)
 
def get_year (run)
 
def get_dfz (basedir, year, run, channel, standardcuts=True)
 
def local_fit (tg, start, end, year)
 

Variables

dictionary plotlabel = {}
 
int runlivetimecut = 10*60
 
int lblivetimecut = 9
 

Function Documentation

◆ drawAtlasLabel()

def plotting.python_tools.drawAtlasLabel (   x,
  y,
  text = "",
  color = R.kBlack 
)

Definition at line 107 of file python_tools.py.

107 def drawAtlasLabel(x, y, text = "", color = R.kBlack):
108  l = R.TLatex()
109  l.SetNDC()
110  l.SetTextFont(72)
111  l.SetTextColor(color)
112 
113  delx = 0.115*696*R.gPad.GetWh()/(472*R.gPad.GetWw())
114 
115  l.DrawLatex(x,y,"ATLAS")
116  if len(text) > 0:
117  p = R.TLatex()
118  p.SetNDC()
119  p.SetTextFont(42)
120  p.SetTextColor(color)
121  p.DrawLatex(x+delx,y,text)
122 

◆ drawText()

def plotting.python_tools.drawText (   x,
  y,
  text,
  size = 27,
  color = R.kBlack 
)

Definition at line 123 of file python_tools.py.

123 def drawText(x, y, text, size=27, color = R.kBlack):
124  l = R.TLatex()
125  l.SetNDC()
126  if size > 0:
127  l.SetTextSize(size)
128  l.SetTextFont(43)
129  l.SetTextColor(color)
130  l.DrawLatex(x,y,text)
131 

◆ get_dfz()

def plotting.python_tools.get_dfz (   basedir,
  year,
  run,
  channel,
  standardcuts = True 
)
Standard retrieval of Z counting Panda dataframe from CSV

Definition at line 159 of file python_tools.py.

159 def get_dfz(basedir, year, run, channel, standardcuts = True):
160  '''
161  Standard retrieval of Z counting Panda dataframe from CSV
162  '''
163  if year=="run3":
164  mydir = basedir + "data"+get_year(run)+"_13p6TeV/physics_Main/"
165  elif year=="run2":
166  mydir = basedir + "data"+get_year(run)+"_13TeV/physics_Main/"
167  elif int(year) >= 22:
168  mydir = basedir + "data" + year + "_13p6TeV/physics_Main/"
169  else:
170  mydir = basedir + "data" + year + "_13TeV/physics_Main/" # untested
171 
172  try:
173  dfz = pd.read_csv(mydir + "run_" + run + ".csv")
174  except FileNotFoundError:
175  print("WARNING: CVS for run", run, "not found, will skip.")
176  return -1., 0., 0., 0., 0., None
177 
178  dfz_small = dfz
179 
180  if channel is not None:
181  # reading a specific channel and calculating some integrated quantities
182  dfz_small['ZLumi'] = dfz_small[channel + 'Lumi']
183  dfz_small['ZLumiErr'] = dfz_small[channel + 'LumiErr']
184  if standardcuts:
185  dfz_small = dfz_small.drop(dfz_small[dfz_small.ZLumi == 0].index)
186  dfz_small = dfz_small.drop(dfz_small[(dfz_small['LBLive']<lblivetimecut) | (dfz_small['PassGRL']==0)].index)
187 
188  dfz_small['ZLumi'] *= dfz_small['LBLive']
189  dfz_small['ZLumiErr'] *= dfz_small['LBLive']
190  zlumi = dfz_small['ZLumi'].sum()
191 
192  dfz_small['ZLumiErr'] *= dfz_small['ZLumiErr']
193  zerr = math.sqrt(dfz_small['ZLumiErr'].sum())
194  else:
195  # reading both Zee and Zll, some preparatory calculations, but nothing final
196  if standardcuts:
197  dfz_small = dfz_small.drop(dfz_small[(dfz_small.ZeeLumi == 0) | (dfz_small.ZmumuLumi == 0)].index)
198  dfz_small = dfz_small.drop(dfz_small[(dfz_small['LBLive']<lblivetimecut) | (dfz_small['PassGRL']==0)].index)
199  dfz_small['ZeeLumi'] *= dfz_small['LBLive']
200  dfz_small['ZeeLumiErr'] *= dfz_small['LBLive']
201  dfz_small['ZeeLumiErr'] *= dfz_small['ZeeLumiErr']
202  dfz_small['ZmumuLumi'] *= dfz_small['LBLive']
203  dfz_small['ZmumuLumiErr'] *= dfz_small['LBLive']
204  dfz_small['ZmumuLumiErr'] *= dfz_small['ZmumuLumiErr']
205  zlumi, zerr = 0., 0.
206 
207  livetime = dfz_small['LBLive'].sum()
208 
209  # Calculate integrated ATLAS luminosity
210  dfz_small['OffLumi'] *= dfz_small['LBLive']
211  olumi = dfz_small['OffLumi'].sum()
212 
213  # Grab start of the run for plotting later on
214  try:
215  run_start = dfz_small['LBStart'].iloc[0]
216  timestamp = time.gmtime(run_start)
217  timestamp = R.TDatime(timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4], timestamp[5])
218  timestamp = timestamp.Convert()
219  except IndexError:
220  timestamp = 0
221 
222  return livetime, zlumi, zerr, olumi, timestamp, dfz_small
223 
224 

◆ get_grl()

def plotting.python_tools.get_grl (   year,
  verbose = True 
)
Get a list of runs for a year from the baseline GRL

Definition at line 23 of file python_tools.py.

23 def get_grl(year, verbose=True):
24  '''
25  Get a list of runs for a year from the baseline GRL
26  '''
27  CVMFS = "/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/GoodRunsLists"
28  grl = {}
29  grl["15"] = CVMFS + "/data15_13TeV/20190708/data15_13TeV.periodAllYear_DetStatus-v105-pro22-13_Unknown_PHYS_StandardGRL_All_Good_25ns.xml"
30  grl["16"] = CVMFS + "/data16_13TeV/20190708/data16_13TeV.periodAllYear_DetStatus-v105-pro22-13_Unknown_PHYS_StandardGRL_All_Good_25ns_WITH_IGNORES.xml"
31  grl["17"] = CVMFS + "/data17_13TeV/20190708/data17_13TeV.periodAllYear_DetStatus-v105-pro22-13_Unknown_PHYS_StandardGRL_All_Good_25ns_Triggerno17e33prim.xml"
32  grl["18"] = CVMFS + "/data18_13TeV/20190708/data18_13TeV.periodAllYear_DetStatus-v105-pro22-13_Unknown_PHYS_StandardGRL_All_Good_25ns_Triggerno17e33prim.xml"
33  grl["22"] = CVMFS + "/data22_13p6TeV/20230207/data22_13p6TeV.periodAllYear_DetStatus-v109-pro28-04_MERGED_PHYS_StandardGRL_All_Good_25ns.xml"
34  grl["23"] = CVMFS + "/data23_13p6TeV/20230828/data23_13p6TeV.periodAllYear_DetStatus-v110-pro31-06_MERGED_PHYS_StandardGRL_All_Good_25ns.xml"
35  grl["24"] = CVMFS + "/data24_13p6TeV/20241118/data24_13p6TeV.periodsEtoO_DetStatus-v130-pro36-08_MERGED_PHYS_StandardGRL_All_Good_25ns.xml"
36  grl["25"] = "/eos/atlas/atlascerngroupdisk/perf-lumi/Zcounting/Run3/MergedOutputs/data25_13p6TeV/latest_GRL.xml"
37 
38  if year != "25":
39  pipe = Popen(["grep", "RunList", grl[year]], stdout=PIPE, stderr=PIPE)
40  runs = re.sub("[^0-9,]", "", str(pipe.communicate()[0])).split(",")
41 
42  elif year == "25":
43  # preliminary GRL does not include "RunList" field, concatenate <Run> fields
44  runs=subprocess.check_output("grep '<Run>' "+grl[year]+" | tr -dc ' [:digit:] '", shell=True).decode('ascii').split()
45  if verbose:
46  print("20"+year+": list or runs =", runs)
47 
48  return runs
49 

◆ get_year()

def plotting.python_tools.get_year (   run)

Definition at line 146 of file python_tools.py.

146 def get_year(run):
147  run=int(run)
148  if run >= 472553: return "24"
149  elif run >= 450227: return "23"
150  elif run >= 427394: return "22"
151  elif run >= 348885: return "18"
152  elif run >= 325713: return "17"
153  elif run >= 297730: return "16"
154  elif run >= 276262: return "15"
155  else:
156  print("ERROR: Cannot classify run", run)
157  exit(1)
158 

◆ local_fit()

def plotting.python_tools.local_fit (   tg,
  start,
  end,
  year 
)
Fit over a sub-range of the data and print the mean and chi^2/NDF. 
Useful to test the remaining trends after the global Run-3 normalisation.

Definition at line 225 of file python_tools.py.

225 def local_fit(tg, start, end, year):
226  """
227  Fit over a sub-range of the data and print the mean and chi^2/NDF.
228  Useful to test the remaining trends after the global Run-3 normalisation.
229  """
230 
231  tg.Fit('pol0', 'Rq0','0', start, end)
232  mean = tg.GetFunction('pol0').GetParameter(0)
233  chi2 = tg.GetFunction('pol0').GetChisquare()
234  ndf = tg.GetFunction('pol0').GetNDF()
235  print("|", year, "|", round(mean,3), "|", round(chi2/ndf, 2), "|")

◆ make_bands()

def plotting.python_tools.make_bands (   vec_in,
  stdev,
  yval 
)

Definition at line 132 of file python_tools.py.

132 def make_bands(vec_in, stdev, yval):
133  vec_y = array('d', [yval] * (len(vec_in) + 2))
134  vec_x = array('d', sorted(vec_in))
135  err_y = array('d', [stdev] * (len(vec_in) + 2))
136 
137  vec_x.insert(0, 0)
138  vec_x.append(9999999999)
139 
140  line = R.TGraphErrors(len(vec_x), vec_x, vec_y, R.nullptr, err_y)
141  line.SetFillColorAlpha(8, 0.35)
142  line.SetFillStyle(4050)
143 
144  return line
145 

◆ setAtlasStyle()

def plotting.python_tools.setAtlasStyle ( )

Definition at line 50 of file python_tools.py.

50 def setAtlasStyle():
51  R.gROOT.SetStyle("Plain")
52 
53  # use plain black on white colors
54  icol = 0
55  R.gStyle.SetFrameBorderMode(icol)
56  R.gStyle.SetFrameFillColor(icol)
57  R.gStyle.SetCanvasBorderMode(icol)
58  R.gStyle.SetCanvasColor(icol)
59  R.gStyle.SetPadBorderMode(icol)
60  R.gStyle.SetPadColor(icol)
61  R.gStyle.SetStatColor(icol)
62 
63  R.gStyle.SetLineColor(R.kBlack)
64 
65  # set the paper & margin sizes
66  R.gStyle.SetPaperSize(20,26)
67 
68  # set margin sizes
69  R.gStyle.SetPadTopMargin(0.05)
70  R.gStyle.SetPadRightMargin(0.05)
71  R.gStyle.SetPadBottomMargin(0.16)
72  R.gStyle.SetPadLeftMargin(0.16)
73 
74  # set title offsets (for axis label)
75  R.gStyle.SetTitleXOffset(1.4)
76  R.gStyle.SetTitleYOffset(1.4)
77 
78  # use large fonts
79  font=42 # Helvetica
80  tsize=0.05
81  R.gStyle.SetTextFont(font)
82  R.gStyle.SetTextSize(tsize)
83  R.gStyle.SetLegendFont(font)
84  R.gStyle.SetLabelFont(font,"xyz")
85  R.gStyle.SetTitleFont(font,"xyz")
86 
87  R.gStyle.SetLabelSize(tsize,"xyz")
88  R.gStyle.SetTitleSize(tsize,"xyz")
89 
90  # use bold lines and markers
91  R.gStyle.SetMarkerStyle(20)
92  R.gStyle.SetMarkerSize(1.2)
93  R.gStyle.SetLineStyleString(2,"[12 12]") # postscript dashes
94 
95  R.gStyle.SetEndErrorSize(0.)
96 
97  # do not display any of the standard histogram decorations
98  R.gStyle.SetOptTitle(0)
99  R.gStyle.SetOptStat(0)
100  R.gStyle.SetOptFit(0)
101 
102  # put tick marks on top and RHS of plots
103  R.gStyle.SetPadTickX(1)
104  R.gStyle.SetPadTickY(1)
105  R.gROOT.ForceStyle()
106 

Variable Documentation

◆ lblivetimecut

int plotting.python_tools.lblivetimecut = 9

Definition at line 21 of file python_tools.py.

◆ plotlabel

dictionary plotting.python_tools.plotlabel = {}

Definition at line 13 of file python_tools.py.

◆ runlivetimecut

int plotting.python_tools.runlivetimecut = 10*60

Definition at line 19 of file python_tools.py.

AtlasMcWeight::decode
double decode(number_type binnedWeight)
Convert weight from unsigned to double.
Definition: AtlasMcWeight.cxx:32
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
MuonGM::round
float round(const float toRound, const unsigned int decimals)
Definition: Mdt.cxx:27
plotting.python_tools.get_dfz
def get_dfz(basedir, year, run, channel, standardcuts=True)
Definition: python_tools.py:159
plotting.python_tools.drawAtlasLabel
def drawAtlasLabel(x, y, text="", color=R.kBlack)
Definition: python_tools.py:107
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
plotting.python_tools.get_year
def get_year(run)
Definition: python_tools.py:146
calibdata.exit
exit
Definition: calibdata.py:236
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
plotting.python_tools.drawText
def drawText(x, y, text, size=27, color=R.kBlack)
Definition: python_tools.py:123
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
array
plotting.python_tools.setAtlasStyle
def setAtlasStyle()
Definition: python_tools.py:50
plotting.python_tools.local_fit
def local_fit(tg, start, end, year)
Definition: python_tools.py:225
plotting.python_tools.make_bands
def make_bands(vec_in, stdev, yval)
Definition: python_tools.py:132
plotting.python_tools.get_grl
def get_grl(year, verbose=True)
Definition: python_tools.py:23
str
Definition: BTagTrackIpAccessor.cxx:11
Trk::split
@ split
Definition: LayerMaterialProperties.h:38