17def fromRunArgs(runArgs):
18
19 from AthenaCommon.Logging import logging
20 log = logging.getLogger('POOLtoHEPMC')
21 log.info('*** Starting POOLtoHEPMC translation ***')
22
23
24 log.info('*** Transformation run arguments ***')
25 log.info(str(runArgs))
26
27
28 log.info('*** Setting-up configuration flags ***')
29 from AthenaConfiguration.AllConfigFlags import initConfigFlags
30 flags = initConfigFlags()
31 commonRunArgsToFlags(runArgs, flags)
32
33
34 from AthenaConfiguration.Enums import ProductionStep
35 flags.Common.ProductionStep = ProductionStep.Derivation
36
37
38 if hasattr(runArgs, 'inputEVNTFile'):
39 flags.Input.Files = runArgs.inputEVNTFile
40 McEventKey = 'GEN_EVENT'
41 elif hasattr(runArgs, 'inputHITSFile'):
42 flags.Input.Files = runArgs.inputHITSFile
43 McEventKey = 'TruthEvent'
44 elif hasattr(runArgs, 'inputRDOFile'):
45 flags.Input.Files = runArgs.inputRDOFile
46 McEventKey = 'TruthEvent'
47 else:
48 log.error('Input EVNT, HITS, or RDO file required for POOLtoHEPMC')
49
50
51 if hasattr(runArgs, 'outputHEPMCFile'):
52 if '.tar' in runArgs.outputHEPMCFile or '.tgz' in runArgs.outputHEPMCFile or '.gz' in runArgs.outputHEPMCFile:
53 log.info('Output will be compressed')
54 if '.tar' in runArgs.outputHEPMCFile:
55 index = runArgs.outputHEPMCFile.find('.tar')
56 elif '.tgz' in runArgs.outputHEPMCFile:
57 index = runArgs.outputHEPMCFile.find('.tgz')
58 elif '.gz' in runArgs.outputHEPMCFile:
59 index = runArgs.outputHEPMCFile.find('.gz')
60 if hasattr(runArgs, 'extension') and 'events' in runArgs.extension:
61 my_output_HepMCFile = runArgs.outputHEPMCFile[:index]+'.events'
62 else:
63 my_output_HepMCFile = runArgs.outputHEPMCFile[:index]+'.hepmc'
64 else:
65 log.info('Output will not be compressed')
66 my_output_HepMCFile = runArgs.outputHEPMCFile
67 else:
68 log.error('OutputHEPMCFile required for POOLtoHEPMC')
69 raise RuntimeError('OutputHEPMCFile required for POOLtoHEPMC')
70
71 hepMCFormat = 'hepmc2'
72 if hasattr(runArgs, 'hepmcFormat'):
73 hepMCFormat = runArgs.hepmcFormat
74
75 hepMCUnits = 'GEVMM'
76 if hasattr(runArgs, 'hepmcUnits'):
77 hepMCUnits = runArgs.hepmcUnits
78
79
80 from PerfMonComps.PerfMonConfigHelpers import setPerfmonFlagsFromRunArgs
81 setPerfmonFlagsFromRunArgs(flags, runArgs)
82
83
84 processPreInclude(runArgs, flags)
85
86
87 processPreExec(runArgs, flags)
88
89
90 flags.fillFromArgs()
91
92
93 flags.lock()
94
95
96 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
97 cfg = MainServicesCfg(flags)
98
99
100 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
101 cfg.merge(PoolReadCfg(flags))
102
103
104 from AthenaConfiguration.ComponentFactory import CompFactory
105
106
107
108 cfg.addEventAlgo(CompFactory.FixHepMC("FixHepMC"))
109
110
111 cfg.addEventAlgo( CompFactory.WriteHepMC( 'WriteHepMC',
112 OutputFile = my_output_HepMCFile,
113 Format = hepMCFormat,
114 Units = hepMCUnits,
115 McEventKey = McEventKey ) )
116
117
118 processPostInclude(runArgs, flags, cfg)
119
120
121 processPostExec(runArgs, flags, cfg)
122
123 import time
124 tic = time.time()
125
126
127 sc = cfg.run()
128
129
130 if '.tgz' in runArgs.outputHEPMCFile or '.tar.gz' in runArgs.outputHEPMCFile:
131 log.info('Compressing output into tar+gz format (this may take a moment)')
132 import tarfile
133 with tarfile.open(runArgs.outputHEPMCFile,'w:gz') as out_tar:
134 out_tar.add(my_output_HepMCFile)
135
136 log.debug(f'Deleting original (uncompressed) file {my_output_HepMCFile}')
137 import os
138 os.remove(my_output_HepMCFile)
139 elif '.gz' in runArgs.outputHEPMCFile:
140 log.info('Compressing output into gz format (this may take a moment)')
141 import gzip
142 import shutil
143 with open(my_output_HepMCFile,'rb') as in_file, gzip.open(runArgs.outputHEPMCFile,'wb') as out_file:
144 shutil.copyfileobj(in_file,out_file)
145
146 log.debug(f'Deleting original (uncompressed) file {my_output_HepMCFile}')
147 import os
148 os.remove(my_output_HepMCFile)
149
150
151 log.info("Ran POOLtoHEPMC in " + str(time.time()-tic) + " seconds")
152
153 sys.exit(not sc.isSuccess())
154