26from extramodules.configGetter
import configGetter
27from extramodules.debugSettings
import debugSettings
29from extramodules.monitoring
import dispArgs
30from extramodules.dqTranscations
import aodFileChecker, forgettedArgsChecker, jsonTypeChecker, mainTaskChecker
31from extramodules.configSetter
import multiConfigurableSet, processDummySet
32from extramodules.pycacheRemover
import runPycacheRemover
34from dqtasks.tableReader
import TableReader
40isAnalysisEventSelected =
True
41isAnalysisTrackSelected =
True
42isAnalysisMuonSelected =
True
43isAnalysisSameEventPairingSelected =
True
44isAnalysisDileptonHadronSelected =
True
46booleanSelections = [
"true",
"false"]
53initArgs = TableReader()
57args = initArgs.parseArgs()
58configuredCommands = vars(args)
64forgettedArgsChecker(configuredCommands)
73with open(args.cfgFileName)
as configFile:
74 config = json.load(configFile)
76jsonTypeChecker(args.cfgFileName)
78taskNameInCommandLine =
"o2-analysis-dq-table-reader"
79taskNameInConfig =
"analysis-event-selection"
81mainTaskChecker(config, taskNameInConfig)
87logging.info(
"Only Select Configured as %s", args.onlySelect)
88if args.onlySelect ==
"true":
89 logging.info(
"INTERFACE MODE : JSON Overrider")
90if args.onlySelect ==
"false":
91 logging.info(
"INTERFACE MODE : JSON Additional")
93for key, value
in config.items():
94 if isinstance(value, dict):
95 for value, value2
in value.items():
98 if value ==
"aod-file" and args.aod:
99 config[key][value] = args.aod
100 logging.debug(
" - [%s] %s : %s", key, value, args.aod)
102 if value ==
"aod-reader-json" and args.reader:
103 config[key][value] = args.reader
104 logging.debug(
" - [%s] %s : %s", key, value, args.reader)
107 if value ==
"processSkimmed" and args.analysis:
109 if key ==
"analysis-event-selection":
110 if "eventSelection" in analysisCfg:
111 config[key][value] =
"true"
112 logging.debug(
" - [%s] %s : true", key, value)
113 isAnalysisEventSelected =
True
114 if "eventSelection" not in analysisCfg:
116 "YOU MUST ALWAYS CONFIGURE eventSelection value in --analysis parameter!! It is Missing and this issue will fixed by CLI"
118 config[key][value] =
"true"
119 logging.debug(
" - [%s] %s : true", key, value)
121 if key ==
"analysis-track-selection":
122 if "trackSelection" in analysisCfg:
123 config[key][value] =
"true"
124 logging.debug(
" - [%s] %s : true", key, value)
125 isAnalysisTrackSelected =
True
126 if "trackSelection" not in analysisCfg
and args.onlySelect ==
"true":
127 config[key][value] =
"false"
128 logging.debug(
" - [%s] %s : false", key, value)
130 if key ==
"analysis-muon-selection":
131 if "muonSelection" in analysisCfg:
132 config[key][value] =
"true"
133 logging.debug(
" - [%s] %s : true", key, value)
134 isAnalysisMuonSelected =
True
135 if "muonSelection" not in analysisCfg
and args.onlySelect ==
"true":
136 config[key][value] =
"false"
137 logging.debug(
" - [%s] %s : false", key, value)
138 if key ==
"analysis-dilepton-hadron":
139 if "dileptonHadron" in analysisCfg:
140 config[key][value] =
"true"
141 isAnalysisDileptonHadronSelected =
True
142 logging.debug(
" - [%s] %s : true", key, value)
143 if "dileptonHadron" not in analysisCfg
and args.onlySelect ==
"true":
144 config[key][value] =
"false"
145 logging.debug(
" - [%s] %s : false", key, value)
147 if "sameEventPairing" in analysisCfg:
148 isAnalysisSameEventPairingSelected =
True
149 if "sameEventPairing" not in analysisCfg:
150 isAnalysisSameEventPairingSelected =
False
153 if args.mixing
is None:
154 if value ==
"processBarrelSkimmed" and args.analysis:
156 if key ==
"analysis-event-mixing":
157 if "trackSelection" in analysisCfg
and "eventMixing" in analysisCfg:
158 config[key][value] =
"true"
159 logging.debug(
" - [%s] %s : true", key, value)
160 if "eventMixing" not in analysisCfg
and args.onlySelect ==
"true":
161 config[key][value] =
"false"
162 logging.debug(
" - [%s] %s : false", key, value)
163 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
165 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
169 if value ==
"processMuonSkimmed" and args.analysis:
171 if key ==
"analysis-event-mixing":
172 if "muonSelection" in analysisCfg
and "eventMixing" in analysisCfg:
173 config[key][value] =
"true"
174 logging.debug(
" - [%s] %s : true", key, value)
175 if "eventMixing" not in analysisCfg
and args.onlySelect ==
"true":
176 config[key][value] =
"false"
177 logging.debug(
" - [%s] %s : false", key, value)
178 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
180 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
184 if value ==
"processBarrelMuonSkimmed" and args.analysis:
186 if key ==
"analysis-event-mixing":
187 if (
"trackSelection" in analysisCfg
and "muonSelection" in analysisCfg
and "eventMixing" in analysisCfg):
188 config[key][value] =
"true"
189 logging.debug(
" - [%s] %s : true", key, value)
190 if "eventMixing" not in analysisCfg
and args.onlySelect ==
"true":
191 config[key][value] =
"false"
192 logging.debug(
" - [%s] %s : false", key, value)
193 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
195 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
199 if value ==
"processBarrelVnSkimmed" and args.analysis:
201 if key ==
"analysis-event-mixing":
202 if "trackSelection" in analysisCfg
and "eventMixingVn" in analysisCfg:
203 config[key][value] =
"true"
204 logging.debug(
" - [%s] %s : true", key, value)
205 if "eventMixingVn" not in analysisCfg
and args.onlySelect ==
"true":
206 config[key][value] =
"false"
207 logging.debug(
" - [%s] %s : false", key, value)
208 if "eventMixingVn" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
210 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
214 if value ==
"processMuonVnSkimmed" and args.analysis:
216 if key ==
"analysis-event-mixing":
217 if "muonSelection" in analysisCfg
and "eventMixingVn" in analysisCfg:
218 config[key][value] =
"true"
219 logging.debug(
" - [%s] %s : true", key, value)
220 if "eventMixingVn" not in analysisCfg
and args.onlySelect ==
"true":
221 config[key][value] =
"false"
222 logging.debug(
" - [%s] %s : false", key, value)
223 if "eventMixingVn" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
225 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
230 if args.mixing
is not None:
231 if value ==
"processBarrelSkimmed" and args.analysis:
233 if key ==
"analysis-event-mixing":
234 if (
"trackSelection" in analysisCfg
and "eventMixing" in analysisCfg
and "Barrel" in mixingCfg):
235 config[key][value] =
"true"
236 logging.debug(
" - [%s] %s : true", key, value)
237 if (
"trackSelection" in analysisCfg
and "Barrel" not in mixingCfg
and args.onlySelect ==
"true"):
238 config[key][value] =
"false"
239 logging.debug(
" - [%s] %s : false", key, value)
240 if "eventMixing" not in analysisCfg
and "Barrel" in mixingCfg:
242 "When configuring analysis-event-mixing for Barrel, you must configure eventMixing within the --analysis parameter!"
245 if "Barrel" in mixingCfg
and "trackSelection" not in analysisCfg:
247 "When configuring analysis-event-mixing for Barrel, you must configure trackSelection within the --analysis parameter!"
250 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
252 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
256 if value ==
"processMuonSkimmed" and args.analysis:
258 if key ==
"analysis-event-mixing":
259 if (
"muonSelection" in analysisCfg
and "eventMixing" in analysisCfg
and "Muon" in mixingCfg):
260 config[key][value] =
"true"
261 logging.debug(
" - [%s] %s : true", key, value)
262 if (
"muonSelection" in analysisCfg
and "Muon" not in mixingCfg
and args.onlySelect ==
"true"):
263 config[key][value] =
"false"
264 logging.debug(
" - [%s] %s : false", key, value)
265 if "eventMixing" not in analysisCfg
and "Muon" in mixingCfg:
267 "When configuring analysis-event-mixing for Muon, you must configure eventMixing within the --analysis parameter!"
270 if "Muon" in mixingCfg
and "muonSelection" not in analysisCfg:
272 "When configuring analysis-event-mixing for Muon, you must configure muonSelection within the --analysis parameter!"
275 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
277 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
281 if value ==
"processBarrelMuonSkimmed" and args.analysis:
283 if key ==
"analysis-event-mixing":
285 "trackSelection" in analysisCfg
and "muonSelection" in analysisCfg
and "eventMixing" in analysisCfg
and
286 "BarrelMuon" in mixingCfg
288 config[key][value] =
"true"
289 logging.debug(
" - [%s] %s : true", key, value)
291 "trackSelection" in analysisCfg
and "muonSelection" in analysisCfg
and "BarrelMuon" not in mixingCfg
and
292 args.onlySelect ==
"true"
294 config[key][value] =
"false"
295 logging.debug(
" - [%s] %s : false", key, value)
296 if "eventMixing" not in analysisCfg
and "BarrelMuon" in mixingCfg:
298 "When configuring analysis-event-mixing for BarrelMuon, you must configure eventMixing within the --analysis parameter!"
301 if "BarrelMuon" in mixingCfg
and (
"muonSelection" not in analysisCfg
or "trackSelection" not in analysisCfg):
303 "When configuring analysis-event-mixing for BarrelMuon, you must configure both of muonSelection and trackSelection within the --analysis parameter!"
306 if "eventMixing" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
308 "For Configuring eventMixing, You have to specify either trackSelection or muonSelection in --analysis parameter!"
312 if value ==
"processBarrelVnSkimmed" and args.analysis:
314 if key ==
"analysis-event-mixing":
315 if (
"trackSelection" in analysisCfg
and "eventMixingVn" in analysisCfg
and "BarrelVn" in mixingCfg):
316 config[key][value] =
"true"
317 logging.debug(
" - [%s] %s : true", key, value)
318 if (
"trackSelection" in analysisCfg
and "BarrelVn" not in mixingCfg
and args.onlySelect ==
"true"):
319 config[key][value] =
"false"
320 logging.debug(
" - [%s] %s : false", key, value)
321 if "eventMixingVn" not in analysisCfg
and "BarrelVn" in mixingCfg:
323 "When configuring analysis-event-mixing for BarrelVn, you must configure eventMixingVn within the --analysis parameter!"
326 if "BarrelVn" in mixingCfg
and "trackSelection" not in analysisCfg:
328 "When configuring analysis-event-mixing for BarrelVn, you must configure trackSelection within the --analysis parameter!"
331 if "eventMixingVn" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
333 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
337 if value ==
"processMuonVnSkimmed" and args.analysis:
339 if key ==
"analysis-event-mixing":
340 if (
"muonSelection" in analysisCfg
and "eventMixingVn" in analysisCfg
and "MuonVn" in mixingCfg):
341 config[key][value] =
"true"
342 logging.debug(
" - [%s] %s : true", key, value)
343 if (
"muonSelection" in analysisCfg
and "MuonVn" not in mixingCfg
and args.onlySelect ==
"true"):
344 config[key][value] =
"false"
345 logging.debug(
" - [%s] %s : false", key, value)
346 if "eventMixingVn" not in analysisCfg
and "MuonVn" in mixingCfg:
348 "When configuring analysis-event-mixing for MuonVn, you must configure eventMixingVn within the --analysis parameter!"
351 if "MuonVn" in mixingCfg
and "muonSelection" not in analysisCfg:
353 "When configuring analysis-event-mixing for MuonVn, you must configure muonSelection within the --analysis parameter!"
356 if "eventMixingVn" in analysisCfg
and (
"trackSelection" not in analysisCfg
and "muonSelection" not in analysisCfg):
358 "For Configuring eventMixingVn, You have to specify either trackSelection or muonSelection in --analysis parameter!"
363 if value ==
"cfgQA" and args.cfgQA:
364 config[key][value] = args.cfgQA
365 logging.debug(
" - [%s] %s : %s", key, value, args.cfgQA)
368 if value ==
"cfgMixingVars" and args.cfgMixingVars:
369 multiConfigurableSet(config, key, value, args.cfgMixingVars, args.onlySelect)
370 logging.debug(
" - [%s] %s : %s", key, value, args.cfgMixingVars)
371 if value ==
"cfgEventCuts" and args.cfgEventCuts:
372 multiConfigurableSet(config, key, value, args.cfgEventCuts, args.onlySelect)
373 logging.debug(
" - [%s] %s : %s", key, value, args.cfgEventCuts)
376 if value ==
"cfgTrackCuts" and args.cfgTrackCuts:
377 multiConfigurableSet(config, key, value, args.cfgTrackCuts, args.onlySelect)
378 logging.debug(
" - [%s] %s : %s", key, value, args.cfgTrackCuts)
381 if value ==
"cfgMuonCuts" and args.cfgMuonCuts:
382 multiConfigurableSet(config, key, value, args.cfgMuonCuts, args.onlySelect)
383 logging.debug(
" - [%s] %s : %s", key, value, args.cfgMuonCuts)
386 if value ==
"cfgLeptonCuts" and args.cfgLeptonCuts:
387 multiConfigurableSet(config, key, value, args.cfgLeptonCuts, args.onlySelect)
388 logging.debug(
" - [%s] %s : %s", key, value, args.cfgLeptonCuts)
391 if key ==
"analysis-same-event-pairing" and args.process:
393 if not isAnalysisSameEventPairingSelected:
394 logging.warning(
"You forget to add sameEventPairing option to analysis for Workflow. It Automatically added by CLI.")
395 isAnalysisSameEventPairingSelected =
True
396 if "JpsiToEE" in processCfg
and value ==
"processJpsiToEESkimmed":
397 if isAnalysisTrackSelected:
398 config[key][
"processJpsiToEESkimmed"] =
"true"
399 logging.debug(
" - [%s] %s : true", key, value)
400 if not isAnalysisTrackSelected:
401 logging.error(
"trackSelection not found in analysis for processJpsiToEESkimmed -> analysis-same-event-pairing")
403 if (
"JpsiToEE" not in processCfg
and value ==
"processJpsiToEESkimmed" and args.onlySelect ==
"true"):
404 config[key][
"processJpsiToEESkimmed"] =
"false"
405 logging.debug(
" - [%s] %s : false", key, value)
407 if "JpsiToMuMu" in processCfg
and value ==
"processJpsiToMuMuSkimmed":
408 if isAnalysisMuonSelected:
409 config[key][
"processJpsiToMuMuSkimmed"] =
"true"
410 logging.debug(
" - [%s] %s : true", key, value)
411 if not isAnalysisMuonSelected:
412 logging.error(
"muonSelection not found in analysis for processJpsiToMuMuSkimmed -> analysis-same-event-pairing")
414 if (
"JpsiToMuMu" not in processCfg
and value ==
"processJpsiToMuMuSkimmed" and args.onlySelect ==
"true"):
415 config[key][
"processJpsiToMuMuSkimmed"] =
"false"
416 logging.debug(
" - [%s] %s : false", key, value)
418 if (
"JpsiToMuMuVertexing" in processCfg
and value ==
"processJpsiToMuMuVertexingSkimmed"):
419 if isAnalysisMuonSelected:
420 config[key][
"processJpsiToMuMuVertexingSkimmed"] =
"true"
421 logging.debug(
" - [%s] %s : true", key, value)
422 if not isAnalysisMuonSelected:
424 "muonSelection not found in analysis for processJpsiToMuMuVertexingSkimmed -> analysis-same-event-pairing"
427 if (
"JpsiToMuMuVertexing" not in processCfg
and value ==
"processJpsiToMuMuVertexingSkimmed" and args.onlySelect ==
"true"):
428 config[key][
"processJpsiToMuMuVertexingSkimmed"] =
"false"
429 logging.debug(
" - [%s] %s : false", key, value)
431 if "VnJpsiToEE" in processCfg
and value ==
"processVnJpsiToEESkimmed":
432 if isAnalysisTrackSelected:
433 config[key][
"processVnJpsiToEESkimmed"] =
"true"
434 logging.debug(
" - [%s] %s : true", key, value)
435 if not isAnalysisTrackSelected:
436 logging.error(
"trackSelection not found in analysis for processVnJpsiToEESkimmed -> analysis-same-event-pairing")
438 if (
"VnJpsiToEE" not in processCfg
and value ==
"processVnJpsiToEESkimmed" and args.onlySelect ==
"true"):
439 config[key][
"processVnJpsiToEESkimmed"] =
"false"
440 logging.debug(
" - [%s] %s : false", key, value)
442 if "VnJpsiToMuMu" in processCfg
and value ==
"processVnJpsiToMuMuSkimmed":
443 if isAnalysisMuonSelected:
444 config[key][
"processVnJpsiToMuMuSkimmed"] =
"true"
445 logging.debug(
" - [%s] %s : true", key, value)
446 if not isAnalysisMuonSelected:
447 logging.error(
"muonSelection not found in analysis for processVnJpsiToMuMuSkimmed -> analysis-same-event-pairing")
449 if (
"VnJpsiToMuMu" not in processCfg
and value ==
"processVnJpsiToMuMuSkimmed" and args.onlySelect ==
"true"):
450 config[key][
"processVnJpsiToMuMuSkimmed"] =
"false"
451 logging.debug(
" - [%s] %s : false", key, value)
453 if "ElectronMuon" in processCfg
and value ==
"processElectronMuonSkimmed":
454 if isAnalysisTrackSelected
and isAnalysisMuonSelected:
455 config[key][
"processElectronMuonSkimmed"] =
"true"
456 logging.debug(
" - [%s] %s : true", key, value)
459 "trackSelection and muonSelection not found in analysis for processElectronMuonSkimmed -> analysis-same-event-pairing"
462 if (
"ElectronMuon" not in processCfg
and value ==
"processElectronMuonSkimmed" and args.onlySelect ==
"true"):
463 config[key][
"processElectronMuonSkimmed"] =
"false"
464 logging.debug(
" - [%s] %s : false", key, value)
466 if "All" in processCfg
and value ==
"processAllSkimmed":
467 if (isAnalysisEventSelected
and isAnalysisMuonSelected
and isAnalysisTrackSelected):
468 config[key][
"processAllSkimmed"] =
"true"
469 logging.debug(
" - [%s] %s : true", key, value)
472 "eventSelection, trackSelection and muonSelection not found in analysis for processAllSkimmed -> analysis-same-event-pairing"
475 if (
"All" not in processCfg
and value ==
"processAllSkimmed" and args.onlySelect ==
"true"):
476 config[key][
"processAllSkimmed"] =
"false"
477 logging.debug(
" - [%s] %s : false", key, value)
481 key ==
"analysis-same-event-pairing" and args.process
is None and not isAnalysisSameEventPairingSelected
and
482 args.onlySelect ==
"true"
484 config[key][
"processJpsiToEESkimmed"] =
"false"
485 config[key][
"processJpsiToMuMuSkimmed"] =
"false"
486 config[key][
"processJpsiToMuMuVertexingSkimmed"] =
"false"
487 config[key][
"processVnJpsiToEESkimmed"] =
"false"
488 config[key][
"processVnJpsiToMuMuSkimmed"] =
"false"
489 config[key][
"processElectronMuonSkimmed"] =
"false"
490 config[key][
"processAllSkimmed"] =
"false"
492processDummySet(config)
493aodFileChecker(args.aod)
495if args.reader
is not None:
496 if not os.path.isfile(args.reader):
497 logging.error(
"%s File not found in path!!!", args.reader)
499elif not os.path.isfile((config[
"internal-dpl-aod-reader"][
"aod-reader-json"])):
500 logging.error(
" %s File not found in path!!!", config[
"internal-dpl-aod-reader"][
"aod-reader-json"])
508updatedConfigFileName =
"tempConfigTableReader.json"
510with open(updatedConfigFileName,
"w")
as outputFile:
511 json.dump(config, outputFile, indent = 2)
514commandToRun = (taskNameInCommandLine +
" --configuration json://" + updatedConfigFileName +
" --aod-writer-json " + args.writer +
" -b")
516if args.writer ==
"false":
517 commandToRun = (taskNameInCommandLine +
" --configuration json://" + updatedConfigFileName +
" -b")
519print(
"====================================================================================================================")
520logging.info(
"Command to run:")
521logging.info(commandToRun)
522print(
"====================================================================================================================")
525dispArgs(configuredCommands)
527os.system(commandToRun)