ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Database
EventIndex
EventGUIDLookup
python
EventGUIDLookupAlgConfig.py
Go to the documentation of this file.
1
#!/usr/bin/env python
2
# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
"""Algorithm + CA config for EventGUIDLookup_Skeleton.py."""
4
5
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
6
from
AthenaPython
import
PyAthena
7
from
AthenaPython.PyAthena
import
StatusCode
8
from
GaudiKernel.Constants
import
INFO
9
10
11
class
EventGUIDLookupAlg
(
PyAthena.Alg
):
12
13
def
__init__
(self, name='EventGUIDLookupAlg', **kwargs):
14
self.
dataType
= kwargs.pop(
'dataType'
)
15
self.
inputDataType
= kwargs.pop(
'inputDataType'
)
16
self.
requestedEvents
= kwargs.pop(
'requestedEvents'
,
set
())
17
self.
outputFile
= kwargs.pop(
'outputFile'
,
'eventGUIDLookup.txt'
)
18
super(EventGUIDLookupAlg, self).
__init__
(name=name, **kwargs)
19
self.
_found
=
set
()
20
self.
_outFH
=
None
21
22
def
initialize
(self):
23
self.
_outFH
= open(self.
outputFile
,
'w'
)
24
return
StatusCode.Success
25
26
def
_matchRun
(self, ctx_run, evt):
27
"""Return the run-like number used for matching and output:
28
the MC channel number (DSID) for simulation, the run number for data.
29
"""
30
try
:
31
ei = self.
evtStore
[
'EventInfo'
]
32
if
ei.eventType(ei.IS_SIMULATION):
# isMC
33
dsid = ei.mcChannelNumber()
34
if
dsid != 0:
35
return
dsid
36
# Some old/private productions have no channel number set
37
self.
msg
.
debug
(
'run=%d event=%d: MC with mcChannelNumber=0; '
38
'using run number'
, ctx_run, evt)
39
except
Exception
as
e:
40
self.
msg
.warning(
'run=%d event=%d: cannot read EventInfo (%s); '
41
'using run number'
, ctx_run, evt, e)
42
return
ctx_run
43
44
def
execute
(self):
45
from
EventGUIDLookup.EventGUIDLookupLib
import
resolveProvenanceGuid
46
47
# Event number and (data) run number come from the EventContext,
48
# which is format-agnostic. For MC the run number is replaced by
49
# the MC channel number (DSID) read from EventInfo.
50
51
eid = self.getContext().eventID()
52
ctx_run, evt = eid.run_number(), eid.event_number()
53
54
run = self.
_matchRun
(ctx_run, evt)
# DSID for MC, run number for data
55
key = (run, evt)
56
57
if
key
in
self.
requestedEvents
and
key
not
in
self.
_found
:
58
guid = resolveProvenanceGuid(self.
evtStore
, self.
dataType
,
59
self.
inputDataType
)
60
if
guid
is
not
None
:
61
self.
_outFH
.write(
'%d %d %s\n'
% (run, evt, guid))
62
self.
_outFH
.flush()
63
self.
_found
.
add
(key)
64
else
:
65
self.
msg
.warning(
'run/dsid=%d event=%d has no %s provenance '
66
'reference'
, run, evt, self.
dataType
)
67
return
StatusCode.Success
68
def
finalize
(self):
69
if
self.
_outFH
:
70
self.
_outFH
.close()
71
missing = self.
requestedEvents
- self.
_found
72
if
missing:
73
self.
msg
.warning(
'%d of %d requested events had no %s GUID'
,
74
len(missing), len(self.
requestedEvents
),
75
self.
dataType
)
76
for
run, evt
in
sorted(missing):
77
self.
msg
.warning(
' missing: run=%d event=%d'
, run, evt)
78
else
:
79
self.
msg
.info(
'Resolved GUIDs for all %d requested events'
,
80
len(self.
requestedEvents
))
81
return
StatusCode.Success
82
83
84
def
EventGUIDLookupAlgCfg
(flags, dataType, inputDataType, requestedEvents,
85
outputFile, name='EventGUIDLookupAlg', **kwargs):
86
acc = ComponentAccumulator()
87
acc.addEventAlgo(
EventGUIDLookupAlg
(
88
name=name,
89
dataType=dataType,
90
inputDataType=inputDataType,
91
requestedEvents=requestedEvents,
92
outputFile=outputFile,
93
OutputLevel=kwargs.pop(
'OutputLevel'
, INFO)))
94
return
acc
debug
const bool debug
Definition
MakeUncertaintyPlots.cxx:53
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition
AthCommonMsg.h:24
EventGUIDLookupAlgConfig.EventGUIDLookupAlg
Definition
EventGUIDLookupAlgConfig.py:11
EventGUIDLookupAlgConfig.EventGUIDLookupAlg._outFH
_outFH
Definition
EventGUIDLookupAlgConfig.py:20
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.inputDataType
inputDataType
Definition
EventGUIDLookupAlgConfig.py:15
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.execute
execute(self)
Definition
EventGUIDLookupAlgConfig.py:44
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.__init__
__init__(self, name='EventGUIDLookupAlg', **kwargs)
Definition
EventGUIDLookupAlgConfig.py:13
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.outputFile
outputFile
Definition
EventGUIDLookupAlgConfig.py:17
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.dataType
dataType
Definition
EventGUIDLookupAlgConfig.py:14
EventGUIDLookupAlgConfig.EventGUIDLookupAlg.requestedEvents
requestedEvents
Definition
EventGUIDLookupAlgConfig.py:16
EventGUIDLookupAlgConfig.EventGUIDLookupAlg._found
_found
Definition
EventGUIDLookupAlgConfig.py:19
EventGUIDLookupAlgConfig.EventGUIDLookupAlg._matchRun
_matchRun(self, ctx_run, evt)
Definition
EventGUIDLookupAlgConfig.py:26
PyAthena::Alg
Definition
PyAthenaAlg.h:33
PyAthena::Alg::finalize
virtual StatusCode finalize() override
Definition
PyAthenaAlg.cxx:86
PyAthena::Alg::initialize
virtual StatusCode initialize() override
Definition
PyAthenaAlg.cxx:60
set
STL class.
add
bool add(const std::string &hname, TKey *tobj)
Definition
fastadd.cxx:55
EventGUIDLookupAlgConfig.EventGUIDLookupAlgCfg
EventGUIDLookupAlgCfg(flags, dataType, inputDataType, requestedEvents, outputFile, name='EventGUIDLookupAlg', **kwargs)
Definition
EventGUIDLookupAlgConfig.py:85
Generated on
for ATLAS Offline Software by
1.17.0