10Airflow script for TOP post-tracking calibration:
11 BS13d carrier shifts, module T0 and common T0.
12 Histograms for validation are also prepared here.
15from prompt
import CalibrationSettings, INPUT_DATA_FILTERS
16from caf.utils
import IoV
17from caf.strategies
import SequentialBoundaries
18from top_calibration
import BS13d_calibration_cdst
19from top_calibration
import moduleT0_calibration_DeltaT, moduleT0_calibration_LL
20from top_calibration
import commonT0_calibration_BF
21from top_calibration
import offset_calibration
22from top_calibration
import photonYields_calibration
23from top_calibration
import calibration_validation
24from prompt.calibrations.caf_top_pre
import settings
as top_pretracking
28settings = CalibrationSettings(
29 name=
"TOP post-tracking calibration",
30 expert_username=
"kohani",
33 input_data_formats=[
"cdst"],
34 input_data_names=[
"mumu_tight_or_highm_calib"],
36 "mumu_tight_or_highm_calib": [
37 INPUT_DATA_FILTERS[
"Data Tag"][
"mumu_tight_or_highm_calib"],
38 INPUT_DATA_FILTERS[
"Run Type"][
"physics"],
39 INPUT_DATA_FILTERS[
"Data Quality Tag"][
"Good Or Recoverable"]]},
40 depends_on=[top_pretracking],
42 "max_files_per_run": 20,
43 "payload_boundaries":
None,
44 "request_memory":
"8 GB"
46 produced_payloads=[
"TOPCalModuleT0",
"TOPCalCommonT0",
"TOPCalEventT0Offset"])
50def get_calibrations(input_data, **kwargs):
52 Returns a list of calibration objects.
53 :input_data (dict): Contains every file name from the 'input_data_names' as a key.
54 :**kwargs: Configuration options to be sent in.
57 file_to_iov = input_data[
"mumu_tight_or_highm_calib"]
59 expert_config = kwargs.get(
"expert_config")
60 max_files_per_run = expert_config[
"max_files_per_run"]
61 min_events_per_file = 1
63 reduced_file_to_iov = filter_by_max_files_per_run(file_to_iov, max_files_per_run, min_events_per_file, random_select=
True)
64 inputFiles = list(reduced_file_to_iov.keys())
65 basf2.B2INFO(f
"Total number of files actually used as input = {len(inputFiles)}")
66 requested_iov = kwargs.get(
"requested_iov",
None)
67 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
70 if requested_iov.exp_low > 26
or requested_iov.exp_low <= 0:
71 basf2.B2INFO(
"Running Run 2 calibration chain for TOP")
72 cal = [moduleT0_calibration_DeltaT(inputFiles),
73 moduleT0_calibration_LL(inputFiles, sample),
74 commonT0_calibration_BF(inputFiles),
75 offset_calibration(inputFiles),
76 photonYields_calibration(inputFiles, sample),
77 calibration_validation(inputFiles, sample)]
78 cal[0].save_payloads =
False
79 cal[5].save_payloads =
False
81 basf2.B2INFO(
"Running Run 1 calibration chain for TOP")
82 cal = [BS13d_calibration_cdst(inputFiles),
83 moduleT0_calibration_DeltaT(inputFiles),
84 moduleT0_calibration_LL(inputFiles, sample),
85 commonT0_calibration_BF(inputFiles),
86 offset_calibration(inputFiles),
87 photonYields_calibration(inputFiles, sample),
88 calibration_validation(inputFiles, sample)]
89 cal[1].save_payloads =
False
90 cal[6].save_payloads =
False
94 if c.strategies[0] == SequentialBoundaries:
97 payload_boundaries = [[output_iov.exp_low, output_iov.run_low]]
100 if expert_config[
"payload_boundaries"]
is not None:
101 payload_boundaries = expert_config[
"payload_boundaries"]
104 for alg
in c.algorithms:
105 alg.params = {
"iov_coverage": output_iov,
"payload_boundaries": payload_boundaries}
109 for alg
in c.algorithms:
110 alg.params = {
"iov_coverage": output_iov}
112 for i
in range(1, len(cal)):
113 cal[i].depends_on(cal[i - 1])