 |
ATLAS Offline Software
|
|
def | checkURL (url) |
|
def | runsOnServer () |
|
def | importroot (batch=True) |
|
def | prettyNumber (n, width=-1, delim=',', decimal='.') |
|
def | durationInSeconds (duration_string) |
|
def | addKommaToNumber (no) |
|
def | filesize (no) |
|
def | MergeRanges (listOfRanges) |
|
def | MergeLBRanges (listOfRanges) |
|
def | stringToIntOrTime (s) |
|
def | timeStringToSecondsUTC (t) |
|
def | timeStringToSecondsLocalTime (t) |
|
def | secondsToTimeStringUTC (s) |
|
def | secondsToTimeStringLocaltime (s) |
|
def | GetRanges (rangestr, intRepFnc=stringToIntOrTime, maxval=1<< 30) |
|
def | full_time_string (s, startofday) |
|
def | GetTimeRanges (timeranges, intRepFnc=timeStringToSecondsUTC, maxval=1<< 30) |
|
def | SmartRangeCalulator (runlist, singleRuns=True) |
|
def | bConvertList (b, nbyte=1, nval=1) |
|
def | unpackRun1BCIDMask (blob, nb1, nb2, nbc) |
|
def | unpackRun2BCIDMask (blob) |
|
def | Poisson (n, mu) |
|
def | ComputePileup (lumi_mb, sigma, nbunch, fOrbit) |
|
def | Pileup (args) |
|
def | get_run_range (start, end=None) |
|
def | get_runs_last_dt (last) |
|
def | get_runs (start, end=None) |
|
def | get_run_range2 (start, end=None) |
|
◆ addKommaToNumber()
def python.utils.AtlRunQueryUtils.addKommaToNumber |
( |
|
no | ) |
|
Definition at line 190 of file AtlRunQueryUtils.py.
192 if not gr[0].isdigit():
195 gr[0:1]=[gr[0][:-3],gr[0][-3:]]
196 return ','.
join(gr[1:])
◆ bConvertList()
def python.utils.AtlRunQueryUtils.bConvertList |
( |
|
b, |
|
|
|
nbyte = 1 , |
|
|
|
nval = 1 |
|
) |
| |
Definition at line 419 of file AtlRunQueryUtils.py.
421 packopt=dict([[1,
'B'],[2,
'H'],[4,
'f'],[8,
'd']])
424 fmt =
'%d%s' % (nval, packopt[nbyte])
425 ival=struct.unpack(fmt, b[0:nval*nbyte])
427 print (
'bConvertList: Unrecognized pack option')
◆ checkURL()
def python.utils.AtlRunQueryUtils.checkURL |
( |
|
url | ) |
|
Definition at line 28 of file AtlRunQueryUtils.py.
30 h = http.client.HTTP(p[1])
31 h.putrequest(
'HEAD', p[2])
33 if h.getreply()[0] == 200:
◆ ComputePileup()
def python.utils.AtlRunQueryUtils.ComputePileup |
( |
|
lumi_mb, |
|
|
|
sigma, |
|
|
|
nbunch, |
|
|
|
fOrbit |
|
) |
| |
Definition at line 477 of file AtlRunQueryUtils.py.
478 print(
"Calling compute pileup with")
479 print(
" lumi_mb :", lumi_mb)
480 print(
" sigma :", sigma)
481 print(
" # bunches:", nbunch)
482 print(
" # fOrbit :", fOrbit)
489 nint = lumi_mb * sigma / fOrbit / nbunch
498 if n > 20
and p[-1] < 1e40:
◆ durationInSeconds()
def python.utils.AtlRunQueryUtils.durationInSeconds |
( |
|
duration_string | ) |
|
Definition at line 88 of file AtlRunQueryUtils.py.
89 lst = duration_string.split()
93 sec +=
int(entry.replace(
's',
''))
95 sec +=
int(entry.replace(
'm',
''))*60
97 sec +=
int(entry.replace(
'h',
''))*3600
99 sec +=
int(entry.replace(
'd',
''))*3600*24
101 sec +=
int(entry.replace(
'w',
''))*3600*24*7
103 sec +=
int(entry.replace(
'y',
''))*3600*24*365
105 print (
'Big troubles... in function "AtlRunQueryUtils::durationInSeconds": cannot decode string "%s"' % entry)
◆ filesize()
def python.utils.AtlRunQueryUtils.filesize |
( |
|
no | ) |
|
Definition at line 198 of file AtlRunQueryUtils.py.
201 if no > 0x4000000000000:
202 return "%1.1f PB" % (no*1.0/0x4000000000000)
203 if no > 0x10000000000:
204 return "%1.1f TB" % (no*1.0/0x10000000000)
206 return "%1.1f GB" % (no*1.0/0x40000000)
208 return "%1.1f MB" % (no*1.0/0x100000)
210 return "%1.1f kB" % (no*1.0/0x400)
212 return "%i B" % no
◆ full_time_string()
def python.utils.AtlRunQueryUtils.full_time_string |
( |
|
s, |
|
|
|
startofday |
|
) |
| |
Definition at line 357 of file AtlRunQueryUtils.py.
359 time.strptime(s,
"%d.%m.")
360 year=
str(time.gmtime().tm_year)
361 return s+year+
"_00:00:00" if startofday
else s+year+
"_23:59:59"
364 time.strptime(s,
"%d.%m.%Y")
365 return s+
"_00:00:00" if startofday
else s+
"_23:59:59"
◆ get_run_range()
def python.utils.AtlRunQueryUtils.get_run_range |
( |
|
start, |
|
|
|
end = None |
|
) |
| |
Definition at line 582 of file AtlRunQueryUtils.py.
587 return (runs[0],runs[0])
588 return (runs[0],runs[-1])
◆ get_run_range2()
def python.utils.AtlRunQueryUtils.get_run_range2 |
( |
|
start, |
|
|
|
end = None |
|
) |
| |
find all runs between two timestamps
start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
Definition at line 623 of file AtlRunQueryUtils.py.
625 find all runs between two timestamps
626 start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
635 co = coolDbConn.GetAtlasRunDBConnection()
642 start_gmtime = time.gmtime( start_seconds_utc )
643 start_fstring = time.strftime(
"%Y%m%dT%H%M%S", start_gmtime)
646 subq =
"SELECT MAX(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT<'%s' AND PARTITIONNAME='ATLAS'" % start_fstring
647 q =
"select RUNNUMBER,STARTAT,DURATION from ATLAS_RUN_NUMBER.RUNNUMBER where RUNNUMBER=(%s)" % subq
650 run1,startat,duration = cu.fetchone()
652 startAtGmtime = time.strptime( startat,
"%Y%m%dT%H%M%S" )
653 startAtUtcSecond = calendar.timegm( startAtGmtime )
656 endAtUtcSecond = startAtUtcSecond + duration
673 if endAtUtcSecond < start_seconds_utc:
674 print(
"Run started and ended before the specified start time, so need to take the first one that started of the specified start time")
675 q =
"SELECT MIN(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT>'%s' AND PARTITIONNAME='ATLAS'" % start_fstring
678 run1 = cu.fetchone()[0]
679 except cx_Oracle.Error:
681 except cx_Oracle.Error:
688 endtime = time.strftime(
"%Y%m%dT%H%M%S",start_gmtime)
689 q =
"SELECT MAX(RUNNUMBER) FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT<'%s'" % endtime
691 run2 = cu.fetchone()[0]
◆ get_runs()
def python.utils.AtlRunQueryUtils.get_runs |
( |
|
start, |
|
|
|
end = None |
|
) |
| |
start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
Definition at line 596 of file AtlRunQueryUtils.py.
597 """start and end are given in the format '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'"""
599 co = coolDbConn.GetAtlasRunDBConnection()
604 records =
'RUNNUMBER'
607 starttime = time.strftime(
"%Y%m%dT%H%M%S",t)
610 q =
"SELECT %s FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT>'%s' ORDER BY RUNNUMBER desc" % (records,starttime)
613 endtime = time.strftime(
"%Y%m%dT%H%M%S",t)
614 q =
"SELECT %s FROM ATLAS_RUN_NUMBER.RUNNUMBER WHERE STARTAT>'%s' and STARTAT<'%s' ORDER BY RUNNUMBER" % (records,starttime,endtime)
620 return [r[0]
for r
in res]
◆ get_runs_last_dt()
def python.utils.AtlRunQueryUtils.get_runs_last_dt |
( |
|
last | ) |
|
Definition at line 590 of file AtlRunQueryUtils.py.
591 lt = last.replace(
'last',
'').strip()
593 start = time.gmtime( time.mktime(time.gmtime()) - nsec )
594 return get_runs(time.strftime(
"%d.%m.%Y_%H:%M:%S",start))
◆ GetRanges()
def python.utils.AtlRunQueryUtils.GetRanges |
( |
|
rangestr, |
|
|
|
intRepFnc = stringToIntOrTime , |
|
|
|
maxval = 1<<30 |
|
) |
| |
Definition at line 328 of file AtlRunQueryUtils.py.
328 def GetRanges(rangestr, intRepFnc=stringToIntOrTime, maxval=1<<30):
329 if type(rangestr)==list:
332 if rangestr[:4]==
'STR:':
333 return [ [rangestr[4:], rangestr[4:]] ]
334 ranges = rangestr.split(
',')
338 listOfRanges += [[0,maxval]]
339 elif not (
'-' in r
or '+' in r):
342 listOfRanges += [[x,x]]
344 listOfRanges += [[intRepFnc(r[:-1]),maxval]]
346 listOfRanges += [[0,intRepFnc(r[:-1])]]
348 startend = r.split(
'-')
350 raise RuntimeError (
"Range format error '%s'" % r)
351 listOfRanges += [[intRepFnc(x)
for x
in startend]]
◆ GetTimeRanges()
def python.utils.AtlRunQueryUtils.GetTimeRanges |
( |
|
timeranges, |
|
|
|
intRepFnc = timeStringToSecondsUTC , |
|
|
|
maxval = 1<<30 |
|
) |
| |
Definition at line 369 of file AtlRunQueryUtils.py.
369 def GetTimeRanges(timeranges, intRepFnc=timeStringToSecondsUTC, maxval=1<<30):
370 if type(timeranges)==list:
371 timeranges =
','.
join(timeranges)
373 timeranges = timeranges.split(
',')
381 listOfRangesHR += [[
'0',
'inf']]
382 elif not (
'-' in r
or '+' in r):
392 start,end = r.split(
'-')
394 raise RuntimeError (
"Time format '%s' wrong, should be 'from-until'" % r)
398 listOfRangesHR += [[start,end]]
399 start = 0
if start==0
else intRepFnc(start)
400 end = maxval
if end==
'inf' else intRepFnc(end)
401 listOfRanges += [[start,end]]
◆ importroot()
def python.utils.AtlRunQueryUtils.importroot |
( |
|
batch = True | ) |
|
Definition at line 58 of file AtlRunQueryUtils.py.
60 cmdline_args = sys.argv
65 ROOT.gROOT.SetBatch(batch)
68 ROOT.gErrorIgnoreLevel = 2000
◆ MergeLBRanges()
def python.utils.AtlRunQueryUtils.MergeLBRanges |
( |
|
listOfRanges | ) |
|
Definition at line 229 of file AtlRunQueryUtils.py.
232 for rr
in listOfRanges:
233 if len(newRR)==0
or rr[0]>newRR[-1][1]:
234 newRR.append(
copy(rr))
236 newRR[-1] = (newRR[-1][0],
max(rr[1],newRR[-1][1]) )
◆ MergeRanges()
def python.utils.AtlRunQueryUtils.MergeRanges |
( |
|
listOfRanges | ) |
|
Definition at line 217 of file AtlRunQueryUtils.py.
220 for rr
in listOfRanges:
221 if len(newRR)==0
or rr[0]-1>newRR[-1][1]:
222 newRR.append(
copy(rr))
224 newRR[-1] = [newRR[-1][0],
max(rr[1],newRR[-1][1]) ]
◆ Pileup()
def python.utils.AtlRunQueryUtils.Pileup |
( |
|
args | ) |
|
Definition at line 502 of file AtlRunQueryUtils.py.
507 return '<font color="red">ERROR: need at least 3 arguments for pileup calculation: inst.-lumi cross-section-in-mb nbunch [nevents]</font>'
509 fstarg =
float(args[0])
513 sigtrans =
float(args[1])
516 sigma =
float(args[2])
517 nbunch =
float(args[3])
518 lumi = nprotons**2 * fOrbit * nbunch / (4.0 * pi * sigtrans**2)
521 nevents =
float(args[4])
524 lumi =
float(args[0])
525 sigma =
float(args[1])
526 nbunch =
int(args[2])
529 nevents =
int(args[3])
533 nint, plist =
ComputePileup( lumi_mb, sigma, nbunch, fOrbit )
536 print(
" plist ",plist)
537 referenceInfo =
'7TeV: 60.3±2.1 mb'
538 referenceInfo +=
' [<a href="https://arxiv.org/abs/1104.0326" target="_blank" title="Measurement of the Inelastic Proton-Proton Cross Section at &sqrt;s=7 TeV with the ATLAS Detector at the LHC">arXiv:1104.0326</a>], '
539 referenceInfo +=
'13TeV: 78.1±2.9mb'
540 referenceInfo +=
' [<a href="https://arxiv.org/abs/1606.02625" target="_blank" title="Measurement of the Inelastic Proton-Proton Cross Section at &sqrt;s=13 TeV with the ATLAS Detector at the LHC">arXiv:1606.02625</a>]'
543 s +=
'<table class="datasettable" style="font-size: 140%">'
544 s +=
'<tr><td>Instantaneous luminosity :</td><td> %g cm−2s−1 (= %g mb−1s−1)</td></tr>' % (lumi, lumi_mb)
545 s +=
'<tr><td>Inelastic cross section :</td><td> %g mb (%s)</td></tr>' % (sigma, referenceInfo)
546 s +=
'<tr><td>Number of colliding bunches :</td><td> %g</td></tr>' % nbunch
547 s +=
'<tr><td colspan="2"><hr style="width:100%; #999999; background-color: #999999; height:1px; margin-left:0px; border:0"></td></tr>'
548 s +=
'<tr><td>Inelastic interaction rate:</td><td>%g Hz</td></tr>' % (lumi_mb*sigma)
549 s +=
'<tr><td>Average number of interactions per crossing: </td><td> %g</td></tr>' % nint
551 s +=
'<hr style="width:100%; #999999; background-color: #999999; height:0px; border:0">\n<p>\n'
553 s +=
'Very large pileup probability (assume Gaussian distribution): %g +- %g' % (nint, sqrt(nint))
555 s +=
'<table class="pileuptable">'
556 s +=
'<tr><th>Num. of interactions per filled bunch crossing</th><th>Probability per filled bunch crossing</th><th>Probability per triggered minimum bias event*</th>'
558 s +=
'<th>Expected number of events in sample*</th>'
563 for i,p
in enumerate(plist):
565 s +=
'<tr><td>>= %i</td><td>%g</td><td>%g</td>' % (i,1.0-psum,(1.0-psum)/pref)
567 nevexp = (1.0-psum)/pref*nevents
568 s +=
'<td> %g</td>' % (nevexp)
573 s +=
'</table><p></p>'
574 s +=
'<font size=-2>*assuming 100% trigger efficiency for inelastic events</font><br>'
579 return '<font color="red">ERROR: only numerical arguments allowed</font>'
◆ Poisson()
def python.utils.AtlRunQueryUtils.Poisson |
( |
|
n, |
|
|
|
mu |
|
) |
| |
◆ prettyNumber()
def python.utils.AtlRunQueryUtils.prettyNumber |
( |
|
n, |
|
|
|
width = -1 , |
|
|
|
delim = ',' , |
|
|
|
decimal = '.' |
|
) |
| |
Converts a float to a string with appropriately placed commas
Definition at line 73 of file AtlRunQueryUtils.py.
74 """Converts a float to a string with appropriately placed commas"""
76 s =
"%.*f" % (width, n)
82 threes =
int((dec-1)/3)
83 for i
in range(threes):
85 s = s[:loc] + delim + s[loc:]
◆ runsOnServer()
def python.utils.AtlRunQueryUtils.runsOnServer |
( |
| ) |
|
Definition at line 48 of file AtlRunQueryUtils.py.
49 hostname = os.getenv(
'HOSTNAME')
50 print (
"Execution on host: %r" % hostname )
54 onserver = ( re.match(
r'aiatlas.*\.cern\.ch',hostname)
is not None )
55 print (
"Execution on server: %r" % onserver)
◆ secondsToTimeStringLocaltime()
def python.utils.AtlRunQueryUtils.secondsToTimeStringLocaltime |
( |
|
s | ) |
|
Definition at line 322 of file AtlRunQueryUtils.py.
324 return time.strftime(
"%d.%m.%Y %H:%M:%S",time.localtime(s))
◆ secondsToTimeStringUTC()
def python.utils.AtlRunQueryUtils.secondsToTimeStringUTC |
( |
|
s | ) |
|
Definition at line 317 of file AtlRunQueryUtils.py.
319 return time.strftime(
"%d.%m.%Y %H:%M:%S",time.gmtime(s))
◆ SmartRangeCalulator()
def python.utils.AtlRunQueryUtils.SmartRangeCalulator |
( |
|
runlist, |
|
|
|
singleRuns = True |
|
) |
| |
Definition at line 406 of file AtlRunQueryUtils.py.
407 if len(runlist) == 0:
409 if isinstance(runlist[0], list):
412 rr = [[r.runNr,r.runNr]
for r
in runlist]
414 rr = [[runlist[0].runNr,runlist[-1].runNr]]
◆ stringToIntOrTime()
def python.utils.AtlRunQueryUtils.stringToIntOrTime |
( |
|
s | ) |
|
Definition at line 269 of file AtlRunQueryUtils.py.
270 if re.match(
r"^\d+$",s):
276 t =
int(1E9*calendar.timegm(time.strptime(s,
"%d.%m.%Y")))
◆ timeStringToSecondsLocalTime()
def python.utils.AtlRunQueryUtils.timeStringToSecondsLocalTime |
( |
|
t | ) |
|
convert string into seconds since epoch
string is meant to be in local time (hence we use time.mktime
and not calender.timegm to convert the tuple into seconds)
format can be '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
Definition at line 299 of file AtlRunQueryUtils.py.
300 """ convert string into seconds since epoch
302 string is meant to be in local time (hence we use time.mktime
303 and not calender.timegm to convert the tuple into seconds)
305 format can be '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
308 t = time.strptime(t,
"%d.%m.%Y")
311 t = time.strptime(t,
"%d.%m.%Y %H:%M:%S")
313 t = time.strptime(t,
"%d.%m.%Y_%H:%M:%S")
315 return int(time.mktime(t))
◆ timeStringToSecondsUTC()
def python.utils.AtlRunQueryUtils.timeStringToSecondsUTC |
( |
|
t | ) |
|
convert string into seconds since epoch
string is meant to be UTC time (hence we need calendar.timegm
and not time.mktime to convert the tuple into seconds)
format can be '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
Definition at line 281 of file AtlRunQueryUtils.py.
282 """ convert string into seconds since epoch
284 string is meant to be UTC time (hence we need calendar.timegm
285 and not time.mktime to convert the tuple into seconds)
287 format can be '1.5.2010_14:23:10', '1.5.2010 14:23:10', or '1.5.2010'
290 t = time.strptime(t,
"%d.%m.%Y")
293 t = time.strptime(t,
"%d.%m.%Y %H:%M:%S")
295 t = time.strptime(t,
"%d.%m.%Y_%H:%M:%S")
297 return int(calendar.timegm(t))
◆ unpackRun1BCIDMask()
def python.utils.AtlRunQueryUtils.unpackRun1BCIDMask |
( |
|
blob, |
|
|
|
nb1, |
|
|
|
nb2, |
|
|
|
nbc |
|
) |
| |
◆ unpackRun2BCIDMask()
def python.utils.AtlRunQueryUtils.unpackRun2BCIDMask |
( |
|
blob | ) |
|
Definition at line 445 of file AtlRunQueryUtils.py.
450 for i
in range(3564):
456 if (val & 0x03) == 0x03:
462 return beam1, beam2, coll
◆ coolDbConn
def unpackRun2BCIDMask(blob)
def unpackRun1BCIDMask(blob, nb1, nb2, nbc)
def get_runs_last_dt(last)
def prettyNumber(n, width=-1, delim=',', decimal='.')
def get_run_range(start, end=None)
def importroot(batch=True)
def GetTimeRanges(timeranges, intRepFnc=timeStringToSecondsUTC, maxval=1<< 30)
def get_run_range2(start, end=None)
def durationInSeconds(duration_string)
def bConvertList(b, nbyte=1, nval=1)
def MergeRanges(listOfRanges)
def MergeLBRanges(listOfRanges)
def secondsToTimeStringLocaltime(s)
def get_runs(start, end=None)
def secondsToTimeStringUTC(s)
void print(char *figname, TCanvas *c1)
std::string join(const std::vector< std::string > &v, const char c=',')
def GetRanges(rangestr, intRepFnc=stringToIntOrTime, maxval=1<< 30)
def ComputePileup(lumi_mb, sigma, nbunch, fOrbit)
def timeStringToSecondsLocalTime(t)
def timeStringToSecondsUTC(t)
def full_time_string(s, startofday)
def SmartRangeCalulator(runlist, singleRuns=True)