ATLAS Offline Software
Loading...
Searching...
No Matches
EventGUIDLookup_tf.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"""
4EventGUIDLookup_tf.py
5
6Given an ATLAS data type (RAW, ESD, AOD, DAOD_PHYS, DAOD_PHYSLITE, RDO,
7HITS, EVNT) and a text file listing (run number, event number) pairs
8-- one pair per line, space separated -- resolve, for every requested
9event actually present in the input file(s), the provenance GUID for
10that data type by decoding the "Stream references" POOL writes into the
11CollectionTree, exactly as
12 Database/EventIndex/EventIndexProducer/python/POOL2EI_Lib.py
13does when building the full Event Index -- except here only the
14requested (run,event,dataType) GUIDs are resolved and written out as
15plain text, one "runNumber eventNumber GUID" triplet per line.
16"""
17
18import sys
19
20from PyJobTransforms.trfLogger import msg
21from PyJobTransforms.transform import transform
22from PyJobTransforms.trfExe import athenaExecutor
23from PyJobTransforms.trfArgs import addAthenaArguments
24from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
25import PyJobTransforms.trfArgClasses as trfArgClasses
26from EventGUIDLookup.EventGUIDLookupArgClasses import argEventGUIDFile
27
28SUPPORTED_TYPES = ('RAW', 'ESD', 'AOD', 'DAOD', 'RDO', 'HITS', 'EVNT')
29
30
32 parser.defineArgGroup('EventGUIDLookup', 'EventGUIDLookup Options')
33
34 parser.add_argument('--dataType',
35 type=trfArgClasses.argFactory(trfArgClasses.argString,
36 runarg=True),
37 required=True,
38 group='EventGUIDLookup',
39 help='Data type whose provenance GUID to resolve: '
40 'one of %s' % ', '.join(SUPPORTED_TYPES))
41
42 parser.add_argument('--inputFile', nargs='+', required=True,
43 type=trfArgClasses.argFactory(
44 trfArgClasses.argAthenaFile, io='input',
45 runarg=True, type='input'),
46 group='EventGUIDLookup',
47 help='Input file(s) to search (any POOL format)')
48
49 parser.add_argument('--inputDataType',
50 type=trfArgClasses.argFactory(trfArgClasses.argString,
51 runarg=True),
52 required=True,
53 group='EventGUIDLookup',
54 help='Actual data type of --inputFile (always a '
55 'POOL format): one of %s'
56 % ', '.join(SUPPORTED_TYPES[1:]))
57
58 parser.add_argument('--eventList', required=True,
59 type=trfArgClasses.argFactory(trfArgClasses.argString,
60 runarg=True),
61 group='EventGUIDLookup',
62 help='Text file, one "runNumber eventNumber" pair '
63 'per line (space separated)')
64
65 parser.add_argument('--outputTXTFile', required=True,
66 type=trfArgClasses.argFactory(argEventGUIDFile,
67 io='output', runarg=True,
68 type='eventGUIDOutput'),
69 group='EventGUIDLookup',
70 help='Output text file: "runNumber eventNumber GUID" '
71 'triplets, one per line')
72
74 executorSet = {athenaExecutor(
75 name='EventGUIDLookup',
76 skeletonCA='EventGUIDLookup.EventGUIDLookup_Skeleton',
77 substep='eglkp',
78 inData=set(),
79 outData=set())}
80
81 trf = transform(executor=executorSet,
82 description='Resolve provenance GUIDs, for a given '
83 'data type, of a list of (run,event) '
84 'pairs -- via the same Stream-references '
85 'mechanism used by POOL2EI_Lib.py.')
86 addAthenaArguments(trf.parser)
87 addEventGUIDLookupArgs(trf.parser)
88 return trf
89
91 fileArg = trf.argdict.get('outputTXTFile')
92 if fileArg is None:
93 return
94
95 total = fileArg.getnentries()
96
97 if total:
98 msg.info('Total events across output files: %s', total)
99 exe = trf._executorDictionary.get('EventGUIDLookup')
100 if exe is not None:
101 exe._eventCount = total
102
103@stdTrfExceptionHandler
104@sigUsrStackTrace
105
106def main():
107 msg.info('This is %s', sys.argv[0])
108
109 trf = getTransform()
110 trf.parseCmdLineArgs(sys.argv[1:])
111
112 dataType = trf.argdict['dataType'].value
113 if dataType[:4] not in SUPPORTED_TYPES:
114 msg.error('Unsupported --dataType %r (must be one of: %s)',
115 dataType, ', '.join(SUPPORTED_TYPES))
116 sys.exit(1)
117
118 trf.execute()
119
120 # --- set nentries / nevents from the line count ---
121 setLineCounts(trf)
122
123 trf.generateReport()
124
125 msg.info('%s stopped gracefully', sys.argv[0])
126 sys.exit(0)
127
128if __name__ == '__main__':
129 main()
STL class.
Main package for new style ATLAS job transforms.
Transform argument class definitions.
Transform execution functions.
Logging configuration for ATLAS job transforms.