73 args = get_parser().parse_args()
74 logging.basicConfig(stream=sys.stdout,
75 format='%(levelname)-8s %(message)s',
76 level=logging.DEBUG if args.verbose else logging.INFO)
77
78 if args.copyFrom:
79 logging.info('Reading events from %s and metadata from %s', args.file, args.copyFrom)
80 else:
81 logging.info('Reading events and metadata from %s', args.file)
82 meta_input = args.copyFrom if args.copyFrom else args.file
83 reader = EventStorage.pickDataReader(meta_input)
84 input_stream = eformat.istream(args.file)
85
86
87 metadata_basic = {}
88 metadata_extra = {}
89 metadata_basic['runNumber'] = reader.runNumber()
90 metadata_basic['triggerType'] = reader.triggerType()
91 metadata_basic['detectorMask'] = reader.detectorMask()
92 metadata_basic['beamType'] = reader.beamType()
93 metadata_basic['beamEnergy'] = reader.beamEnergy()
94 metadata_extra['Stream'] = reader.stream()
95 metadata_extra['Project'] = reader.projectTag()
96 metadata_extra['LumiBlock'] = reader.lumiblockNumber()
97
98 logging.debug('Input metadata_basic = %s', metadata_basic)
99 logging.debug('Input metadata_extra = %s', metadata_extra)
100
101
102 if args.runNumber:
103 metadata_basic['runNumber'] = args.runNumber
104 if args.triggerType:
105 metadata_basic['triggerType'] = args.triggerType
106 if args.detectorMask:
107 metadata_basic['detectorMask'] = args.detectorMask
108 if args.beamType:
109 metadata_basic['beamType'] = beam_type_dict[args.beamType]
110 if args.beamEnergy:
111 metadata_basic['beamEnergy'] = args.beamEnergy
112 if args.stream:
113 metadata_extra['Stream'] = args.stream
114 if args.projectTag:
115 metadata_extra['Project'] = args.projectTag
116 if args.lumiBlock:
117 metadata_extra['LumiBlock'] = args.lumiBlock
118
119 logging.debug('Updated metadata_basic = %s', metadata_basic)
120 logging.debug('Updated metadata_extra = %s', metadata_extra)
121
122
123 file_name_base = args.outputName
124 if not file_name_base:
125
126 ptag = metadata_extra['Project']
127 runno = metadata_basic['runNumber']
128 stream = metadata_extra['Stream']
129 lbn = metadata_extra['LumiBlock']
130
131 file_name_list = []
132 file_name_list.append(ptag if ptag else 'data')
133 file_name_list.append('{:08d}'.format(runno if runno else 0))
134 file_name_list.append(stream if stream else 'unknown_stream')
135 file_name_list.append('lb{:04d}'.format(lbn if lbn else 0))
136 file_name_base = '.'.join(file_name_list)
137
138
139 metadata_extra_strings = ['{:s}={:s}'.format(k, str(v)) for k, v in metadata_extra.items()]
140 output_stream = eformat.ostream(
141 core_name = file_name_base,
142 run_number = metadata_basic['runNumber'],
143 trigger_type = metadata_basic['triggerType'],
144 detector_mask = metadata_basic['detectorMask'],
145 beam_type = metadata_basic['beamType'],
146 beam_energy = metadata_basic['beamEnergy'],
147 meta_data_strings = metadata_extra_strings)
148
149 logging.info(
'Writing file %s', output_stream.current_filename().
replace(
'.writing',
'.data'))
150
151 ievt = 0
152 nmax = args.numEvents or -1
153 for event in input_stream:
154 ievt+=1
155 if nmax >= 0 and ievt > nmax:
156 break
157 logging.debug('Writing event %d', ievt)
158 output_stream.write(event)
159
160
std::string replace(std::string s, const std::string &s2, const std::string &s3)