9 from AnalysisAlgorithmsConfig.ConfigAccumulator
import DataType
12 parser = optparse.OptionParser()
13 parser.add_option(
'-d',
'--data-type', dest =
'data_type',
14 action =
'store', type =
'string', default =
'data',
15 help=
"Type of input to run over. Valid options are 'data', 'fullsim', 'fastsim'")
16 parser.add_option(
'-s',
'--submission-dir', dest =
'submission_dir',
17 action =
'store', type =
'string', default =
'submitDir',
18 help =
'Submission directory for EventLoop' )
19 parser.add_option(
"--input-file", action =
"append", dest =
"input_file",
21 help =
"Specify the input file")
22 parser.add_option(
'-u',
'--unit-test', dest=
'unit_test',
23 action =
'store_true', default =
False,
24 help =
'Run the job in "unit test mode"' )
25 parser.add_option(
'--direct-driver', dest=
'direct_driver',
26 action =
'store_true', default =
False,
27 help =
'Run the job with the direct driver' )
28 parser.add_option(
'--exec-driver', dest=
'exec_driver',
29 action =
'store_true', default =
False,
30 help =
'Run the job with the exec driver' )
31 parser.add_option(
'--max-events', dest =
'max_events',
32 action =
'store', type =
'int', default = 500,
33 help =
'Number of events to run' )
34 parser.add_option(
'--algorithm-timer', dest=
'algorithm_timer',
35 action =
'store_true', default =
False,
36 help =
'Run the job with a timer for each algorithm' )
37 parser.add_option(
'--algorithm-memory', dest=
'algorithm_memory',
38 action =
'store_true', default =
False,
39 help =
'Run the job with a memory monitor for each algorithm' )
40 parser.add_option(
'--factory-preload', dest=
'factory_preload',
41 action =
'store', type =
'str', default =
'',
42 help =
'Factory preloader(s) to run at the beginning of the job' )
43 parser.add_option(
'--no-systematics', dest=
'no_systematics',
44 action =
'store_true', default =
False,
45 help =
'Configure the job to with no systematics' )
46 parser.add_option(
'--block-config', dest=
'block_config',
47 action =
'store_true', default =
False,
48 help =
'Configure the job with block configuration' )
49 parser.add_option(
'--text-config', dest=
'text_config',
50 action =
'store', default =
'',
51 help =
'Configure the job with the provided text configuration' )
52 parser.add_option(
'--physlite', dest=
'physlite',
53 action =
'store_true', default =
False,
54 help =
'Configure the job for physlite' )
55 parser.add_option(
'--run', action=
'store', dest=
'run',
57 help=
'Run number for the inputs')
58 parser.add_option(
'--force-mc', dest=
'forceMC',
59 action =
'store_true', default =
False,
60 help =
'Force the job to treat input as MC' )
61 parser.add_option(
'--only-nominal-or', dest=
'onlyNominalOR',
62 action =
'store_true', default =
False,
63 help =
'Only run overlap removal for nominal (skip systematics)')
64 parser.add_option(
'--seq-output-file', dest=
'seq_out_filename',
65 action=
'store',type=
'str',default=
'',
66 help =
'Save the sequence configuration output to the provided file')
67 ( options, args ) = parser.parse_args()
74 ROOT.xAOD.TauJetContainer()
80 blockConfig = options.block_config
81 textConfig = options.text_config
84 from PathResolver
import PathResolver
87 print(f
"Running on data type: {dataType.value}")
91 inputfile = {DataType.Data:
'ASG_TEST_FILE_LITE_RUN3_DATA',
92 DataType.FullSim:
'ASG_TEST_FILE_LITE_RUN3_MC',
93 DataType.FastSim:
'ASG_TEST_FILE_LITE_RUN3_MC_FASTSIM'}
95 inputfile = {DataType.Data:
'ASG_TEST_FILE_LITE_DATA',
96 DataType.FullSim:
'ASG_TEST_FILE_LITE_MC',
97 DataType.FastSim:
'ASG_TEST_FILE_LITE_MC_FASTSIM'}
100 inputfile = {DataType.Data:
'ASG_TEST_FILE_RUN3_DATA',
101 DataType.FullSim:
'ASG_TEST_FILE_RUN3_MC',
102 DataType.FastSim:
'ASG_TEST_FILE_RUN3_MC_FASTSIM'}
104 inputfile = {DataType.Data:
'ASG_TEST_FILE_DATA',
105 DataType.FullSim:
'ASG_TEST_FILE_MC',
106 DataType.FastSim:
'ASG_TEST_FILE_MC_FASTSIM'}
109 forceEGammaFullSimConfig =
True
114 sh = ROOT.SH.SampleHandler()
115 sh.setMetaString(
'nc_tree',
'CollectionTree' )
116 sample = ROOT.SH.SampleLocal (dataType.value)
117 if options.input_file:
118 for file_idx
in range(len(options.input_file)):
119 testFile = options.input_file[file_idx]
120 sample.add (testFile)
122 testFile = os.getenv (inputfile[dataType])
127 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
129 if options.input_file:
130 flags.Input.Files = options.input_file[:]
132 flags.Input.Files = [testFile]
134 flags.Input.isMC =
True
139 job.sampleHandler( sh )
140 if options.max_events > 0:
141 job.options().setDouble( ROOT.EL.Job.optMaxEvents, options.max_events )
142 if options.algorithm_timer :
143 job.options().setBool( ROOT.EL.Job.optAlgorithmTimer,
True )
144 if options.algorithm_memory :
145 job.options().setBool( ROOT.EL.Job.optAlgorithmMemoryMonitor,
True )
146 if options.factory_preload !=
'' :
147 job.options().setString( ROOT.EL.Job.optFactoryPreload, options.factory_preload )
150 from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest
import makeSequence, printSequenceAlgs
151 algSeq = makeSequence (dataType, yamlPath=textConfig,
152 noSystematics = options.no_systematics,
153 isPhyslite=options.physlite,
154 autoconfigFromFlags=flags, onlyNominalOR=options.onlyNominalOR,
155 forceEGammaFullSimConfig=forceEGammaFullSimConfig)
157 if options.seq_out_filename:
158 from AnalysisAlgorithmsConfig.SaveConfigUtils
import save_algs_from_sequence_ELjob
159 with(
open(options.seq_out_filename,
'w', encoding=
'utf-8'))
as seq_out_file:
162 json.dump(output_dict, seq_out_file, ensure_ascii=
False, indent=4)
166 algSeq.addSelfToJob( job )
169 job.outputAdd( ROOT.EL.OutputStream(
'ANALYSIS' ) )
172 submitDir = options.submission_dir
173 if options.unit_test:
174 job.options().setString (ROOT.EL.Job.optSubmitDirMode,
'unique')
176 job.options().setString (ROOT.EL.Job.optSubmitDirMode,
'unique-link')
183 driver = ROOT.EL.LocalDriver()
185 if options.direct_driver :
188 driver = ROOT.EL.DirectDriver()
189 if options.exec_driver :
192 driver = ROOT.EL.ExecDriver()
194 print (
"submitting job now", flush=
True)
195 driver.submit( job, submitDir )
197 if options.seq_out_filename:
198 from AnalysisAlgorithmsConfig.SaveConfigUtils
import combine_tools_and_algorithms_ELjob
200 alg_file = options.seq_out_filename,
201 output_file =
'my_analysis_config.json')