ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigTools
TrigByteStreamTools
bin
trigbs_mergeBSfiles.py
Go to the documentation of this file.
1
#!/usr/bin/env python
2
3
# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
4
5
'''
6
Merges events from multiple raw files from one or more directories.
7
This is mainly for use on small samples
8
'''
9
10
import
eformat
11
import
libpyevent_storage
as
EventStorage
12
import
sys
13
import
os
14
import
argparse
15
import
logging
16
17
18
def
get_parser
():
19
parser = argparse.ArgumentParser(usage=
'%(prog)s [options] outBaseName dir1 [dir2 ...]'
,
20
description=__doc__,
21
formatter_class=
lambda
prog: argparse.HelpFormatter(prog, max_help_position=36, width=100))
22
parser.add_argument(
'outBaseName'
,
23
help=
'Output file name base'
)
24
parser.add_argument(
'dirs'
,
25
metavar=
'dir'
,
26
nargs=
'+'
,
27
help=
'Input directory (can be multiple)'
)
28
parser.add_argument(
'--copyFrom'
,
'-c'
,
29
metavar=
'FILE'
, action=
'store'
,
30
help=
'Copy metadata from other ByteStream file'
)
31
parser.add_argument(
'--nepfOutput'
,
'-n'
,
32
metavar=
'NUM'
, action=
'store'
, type=int, default=500,
33
help=
'Number of events per output file (default=%(default)s)'
)
34
parser.add_argument(
'--nepfInput'
,
'-N'
,
35
metavar=
'NUM'
, action=
'store'
, type=int, default=0,
36
help=
'Number of events per input file, 0 means all (default=%(default)s)'
)
37
parser.add_argument(
'--renumber'
,
'-r'
,
38
action=
'store_true'
,
39
help=
'Renumber event IDs from 1'
)
40
parser.add_argument(
'--verbose'
,
'-v'
,
41
action=
'store_true'
,
42
help=
'Increase output verbosity'
)
43
return
parser
44
45
46
def
get_filenames
(dirs):
47
filenames = []
48
for
dirname
in
sorted(dirs):
49
files = os.listdir(dirname)
50
logging.debug(
'Found %d files in %s'
, len(files), dirname)
51
for
f
in
sorted(files):
52
filenames.append(dirname +
'/'
+ f)
53
return
filenames
54
55
56
def
main
():
57
args =
get_parser
().parse_args()
58
logging.basicConfig(stream=sys.stdout,
59
format=
'%(levelname)-8s %(message)s'
,
60
level=logging.DEBUG
if
args.verbose
else
logging.INFO)
61
62
filenames =
get_filenames
(args.dirs)
63
logging.info(
'Merging %d files'
, len(filenames))
64
logging.info(
'filenames: %s'
, filenames)
65
66
ievt = 1
67
dr = EventStorage.pickDataReader(filenames[0])
68
output = eformat.ostream(core_name=args.outBaseName,
69
run_number=dr.runNumber(),
70
trigger_type=dr.triggerType(),
71
detector_mask=dr.detectorMask(),
72
beam_type=dr.beamType(),
73
beam_energy=dr.beamEnergy())
74
output.max_events_per_file(args.nepfOutput)
75
76
for
ifile, input_file
in
enumerate(filenames):
77
logging.info(
"Opening file %d: %s"
, ifile+1, input_file)
78
inputFile = eformat.istream([input_file])
79
80
for
ievt_in_file, event
in
enumerate(inputFile):
81
if
args.nepfInput > 0
and
ievt_in_file >= args.nepfInput:
82
break
83
logging.debug(
"Reading event with Lvl1 Id = %ld"
, event.lvl1_id())
84
new_event = eformat.write.FullEventFragment(event)
85
if
args.renumber:
86
logging.debug(
"Rewriting the event with Lvl1 Id = %ld"
, ievt)
87
new_event.lvl1_id(ievt)
88
new_event.global_id(ievt)
89
for
rob
in
new_event.children():
90
rob.rod_lvl1_id(ievt)
91
rob.checksum_type(0)
# remove checksum
92
rob.rod_lvl1_trigger_type(event.lvl1_trigger_type())
93
else
:
94
logging.debug(
"Rewriting the event with unchanged Lvl1 Id"
)
95
96
output.write(new_event)
97
ievt += 1
98
99
logging.info(
'Wrote %d events to %d files'
, ievt-1, 1+((ievt-2)//args.nepfOutput))
100
101
102
if
"__main__"
in
__name__:
103
sys.exit(
main
())
trigbs_mergeBSfiles.get_filenames
get_filenames(dirs)
Definition
trigbs_mergeBSfiles.py:46
trigbs_mergeBSfiles.main
main()
Definition
trigbs_mergeBSfiles.py:56
trigbs_mergeBSfiles.get_parser
get_parser()
Definition
trigbs_mergeBSfiles.py:18
Generated on
for ATLAS Offline Software by
1.17.0