9from AnalysisAlgorithmsConfig.ConfigAccumulator
import DataType
12parser = optparse.OptionParser()
13parser.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'")
16parser.add_option(
'-s',
'--submission-dir', dest =
'submission_dir',
17 action =
'store', type =
'string', default =
'submitDir',
18 help =
'Submission directory for EventLoop' )
19parser.add_option(
"--input-file", action =
"append", dest =
"input_file",
21 help =
"Specify the input file")
22parser.add_option(
'-u',
'--unit-test', dest=
'unit_test',
23 action =
'store_true', default =
False,
24 help =
'Run the job in "unit test mode"' )
25parser.add_option(
'--direct-driver', dest=
'direct_driver',
26 action =
'store_true', default =
False,
27 help =
'Run the job with the direct driver' )
28parser.add_option(
'--exec-driver', dest=
'exec_driver',
29 action =
'store_true', default =
False,
30 help =
'Run the job with the exec driver' )
31parser.add_option(
'--max-events', dest =
'max_events',
32 action =
'store', type =
'int', default = 500,
33 help =
'Number of events to run' )
34parser.add_option(
'--algorithm-timer', dest=
'algorithm_timer',
35 action =
'store_true', default =
False,
36 help =
'Run the job with a timer for each algorithm' )
37parser.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' )
40parser.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' )
43parser.add_option(
'--no-systematics', dest=
'no_systematics',
44 action =
'store_true', default =
False,
45 help =
'Configure the job to with no systematics' )
46parser.add_option(
'--block-config', dest=
'block_config',
47 action =
'store_true', default =
False,
48 help =
'Configure the job with block configuration' )
49parser.add_option(
'--text-config', dest=
'text_config',
50 action =
'store', default =
'',
51 help =
'Configure the job with the provided text configuration' )
52parser.add_option(
'--physlite', dest=
'physlite',
53 action =
'store_true', default =
False,
54 help =
'Configure the job for physlite' )
55parser.add_option(
'--run', action=
'store', dest=
'run',
57 help=
'Run number for the inputs')
58parser.add_option(
'--force-mc', dest=
'forceMC',
59 action =
'store_true', default =
False,
60 help =
'Force the job to treat input as MC' )
61parser.add_option(
'--only-nominal-or', dest=
'onlyNominalOR',
62 action =
'store_true', default =
False,
63 help =
'Only run overlap removal for nominal (skip systematics)')
64parser.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()
71ROOT.xAOD.Init().ignore()
74ROOT.xAOD.TauJetContainer()
79dataType = DataType(options.data_type)
80blockConfig = options.block_config
81textConfig = options.text_config
84 from PathResolver
import PathResolver
87print(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'}
109forceEGammaFullSimConfig =
True
114sh = ROOT.SH.SampleHandler()
115sh.setMetaString(
'nc_tree',
'CollectionTree' )
116sample = ROOT.SH.SampleLocal (dataType.value)
117if 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])
127from AthenaConfiguration.AllConfigFlags
import initConfigFlags
128flags = initConfigFlags()
129if options.input_file:
130 flags.Input.Files = options.input_file[:]
132 flags.Input.Files = [testFile]
134 flags.Input.isMC =
True
139job.sampleHandler( sh )
140if options.max_events > 0:
141 job.options().setDouble( ROOT.EL.Job.optMaxEvents, options.max_events )
142if options.algorithm_timer :
143 job.options().setBool( ROOT.EL.Job.optAlgorithmTimer,
True )
144if options.algorithm_memory :
145 job.options().setBool( ROOT.EL.Job.optAlgorithmMemoryMonitor,
True )
146if options.factory_preload !=
'' :
147 job.options().setString( ROOT.EL.Job.optFactoryPreload, options.factory_preload )
150from AnalysisAlgorithmsConfig.FullCPAlgorithmsTest
import makeSequence, printSequenceAlgs
151algSeq = makeSequence (dataType, yamlPath=textConfig,
152 noSystematics = options.no_systematics,
153 isPhyslite=options.physlite,
154 autoconfigFromFlags=flags, onlyNominalOR=options.onlyNominalOR,
155 forceEGammaFullSimConfig=forceEGammaFullSimConfig)
157if 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:
161 save_algs_from_sequence_ELjob(algSeq, output_dict)
162 json.dump(output_dict, seq_out_file, ensure_ascii=
False, indent=4)
164 printSequenceAlgs( algSeq )
166algSeq.addSelfToJob( job )
169job.outputAdd( ROOT.EL.OutputStream(
'ANALYSIS' ) )
172submitDir = options.submission_dir
174 job.options().setString (ROOT.EL.Job.optSubmitDirMode,
'unique')
176 job.options().setString (ROOT.EL.Job.optSubmitDirMode,
'unique-link')
183driver = ROOT.EL.LocalDriver()
185if options.direct_driver :
188 driver = ROOT.EL.DirectDriver()
189if options.exec_driver :
192 driver = ROOT.EL.ExecDriver()
194print (
"submitting job now", flush=
True)
195driver.submit( job, submitDir )
197if options.seq_out_filename:
198 from AnalysisAlgorithmsConfig.SaveConfigUtils
import combine_tools_and_algorithms_ELjob
199 _ = combine_tools_and_algorithms_ELjob(
True, text_file =
'tool_config.txt',
200 alg_file = options.seq_out_filename,
201 output_file =
'my_analysis_config.json')
void print(char *figname, TCanvas *c1)
static std::string FindCalibFile(const std::string &logical_file_name)