11def test_trigP1_preload(menu):
12 """Fully configured _preload test for given menu"""
13
14 # Get run/LB number from input file
15 input_file = Input.get_input('data').paths[0]
16 first_event = eformat.istream(input_file)[0]
17 run = first_event.run_no()
18 lb = first_event.lumi_block()
19
20 # 1) Delete any previous bytestream file
21 def cleanup():
22 with suppress(FileNotFoundError):
23 os.remove('raw._0001.data')
24
25 ex_rm = PyStep.PyStep(cleanup)
26
27 # 2) Create new bytestream file with future run number and renumber LBs
28 ex_bs = ExecStep.ExecStep('create_bs')
29 ex_bs.type = 'other'
30 ex_bs.input = ''
31 ex_bs.executable = 'trigbs_modifyEvent.py'
32 ex_bs.args = '-n 50 --runNumber 999999 --incLB 6 --firstLB 4 --eventsPerLB=3 -o raw %s' % input_file
33
34 # 3) Create configuration JSON based on original data file
35 ex_dump = ExecStep.ExecStep('dump-config')
36 ex_dump.type = 'athenaHLT'
37 ex_dump.job_options = 'TriggerJobOpts.runHLT'
38 ex_dump.input = 'data'
39 ex_dump.args = '-M --dump-config-exit'
40 ex_dump.args += f' -C "from TriggerJobOpts import PostExec; PostExec.forceConditions({run},{lb})"'
41 ex_dump.flags = [f'Trigger.triggerMenuSetup="{menu}"',
42 'Trigger.doLVL1=True']
43 ex_dump.perfmon = False
44
45 # 4) Fix the Json produced in the previous step
46 def fix_json():
47 # We do not load the PSK from COOL but the folder needs to at least hold some
48 # valid data, which is not the case for run 999999. Force it to an arbitrary old run.
49 with open('HLTJobOptions.json') as f:
50 cfg = json.load(f)
51
52 cfg['properties']['IOVDbSvc']['Folders'] = cfg['properties']['IOVDbSvc']['Folders'].replace(
53 '/TRIGGER/HLT/PrescaleKey',f'/TRIGGER/HLT/PrescaleKey<forceRunNumber>{run}</forceRunNumber>')
54
55 with open('HLTJobOptions.fixPS.json','w') as f:
56 json.dump(cfg, f)
57
58 ex_fix = PyStep.PyStep(fix_json)
59
60 # 5) Run athenaHLT from JSON on renumbered file
61 ex = ExecStep.ExecStep('athenaHLT')
62 ex.type = 'other'
63 ex.executable = 'athenaHLT.py'
64 ex.input = ''
65 ex.explicit_input = True
66 ex.args = '-M -f ./raw._0001.data'
67 ex.args += ' -R 999999 -L 999 --sor-time=now --detector-mask=all' # to avoid COOL lookup of non-existent run
68 ex.args += ' --imf --threads=1 --concurrent-events=1 --nprocs=1'
69 ex.args += ' HLTJobOptions.fixPS.json'
70 ex.perfmon = False # Cannot use PerfMon with -M
71
72 # Checks
73 test = Test.Test()
74 test.art_type = 'build'
75 test.exec_steps = [ex_rm, ex_bs, ex_dump, ex_fix, ex]
76 test.check_steps = TrigP1TestSteps.default_check_steps_OHMon(test, 'r0000999999_athenaHLT_HLT-Histogramming.root:run_999999/lb_-1')
77
78 return test