Belle II Software  release-08-00-10
caf_top.py
1 
8 
9 """
10 Airflow script for TOP post-tracking calibration:
11  BS13d carrier shifts, module T0 and common T0.
12  Histograms for validation are also prepared here.
13 """
14 import basf2
15 from prompt import CalibrationSettings, INPUT_DATA_FILTERS
16 from caf.utils import IoV
17 from caf.strategies import SequentialBoundaries
18 from top_calibration import BS13d_calibration_cdst
19 from top_calibration import moduleT0_calibration_DeltaT, moduleT0_calibration_LL
20 from top_calibration import commonT0_calibration_BF
21 from top_calibration import offset_calibration
22 from top_calibration import calibration_validation
23 from prompt.calibrations.caf_top_pre import settings as top_pretracking
24 from prompt.utils import filter_by_max_files_per_run
25 
26 
27 settings = CalibrationSettings(
28  name="TOP post-tracking calibration",
29  expert_username="skohani",
30  description=__doc__,
31  input_data_formats=["cdst"],
32  input_data_names=["mumu_tight_or_highm_calib"],
33  input_data_filters={
34  "mumu_tight_or_highm_calib": [
35  INPUT_DATA_FILTERS["Data Tag"]["mumu_tight_or_highm_calib"],
36  INPUT_DATA_FILTERS["Run Type"]["physics"],
37  INPUT_DATA_FILTERS["Data Quality Tag"]["Good Or Recoverable"]]},
38  depends_on=[top_pretracking],
39  expert_config={
40  "max_files_per_run": 20,
41  "payload_boundaries": None,
42  "request_memory": "8 GB"
43  })
44 
45 
46 # Required function
47 def get_calibrations(input_data, **kwargs):
48  '''
49  Returns a list of calibration objects.
50  :input_data (dict): Contains every file name from the 'input_data_names' as a key.
51  :**kwargs: Configuration options to be sent in.
52  '''
53 
54  file_to_iov = input_data["mumu_tight_or_highm_calib"]
55  sample = 'dimuon'
56  requested_iov = kwargs.get("requested_iov", None)
57  expert_config = kwargs.get("expert_config")
58  max_files_per_run = expert_config["max_files_per_run"]
59  min_events_per_file = 1
60  # Applying the min event per file to remove empty root files
61  reduced_file_to_iov = filter_by_max_files_per_run(file_to_iov, max_files_per_run, min_events_per_file, random_select=True)
62  inputFiles = list(reduced_file_to_iov.keys())
63  basf2.B2INFO(f"Total number of files actually used as input = {len(inputFiles)}")
64  requested_iov = kwargs.get("requested_iov", None)
65  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
66 
67  cal = [BS13d_calibration_cdst(inputFiles), # this is run-dep
68  moduleT0_calibration_DeltaT(inputFiles), # this cal cannot span across experiments
69  moduleT0_calibration_LL(inputFiles, sample), # this cal cannot span across experiments
70  commonT0_calibration_BF(inputFiles), # this is run-dep
71  offset_calibration(inputFiles), # this is run-dep
72  calibration_validation(inputFiles, sample)] # this is run-dep
73 
74  for c in cal:
75  # If it's a SequentialBoundary calibration, check if there is any boundary in the config file
76  if c.strategies[0] == SequentialBoundaries:
77 
78  # Default boundaries. If there are no boundaries in the config file, this calibration will give a single IoV
79  payload_boundaries = [[output_iov.exp_low, output_iov.run_low]]
80 
81  # user-defined boundaries are set here.
82  if expert_config["payload_boundaries"] is not None:
83  payload_boundaries = expert_config["payload_boundaries"]
84 
85  # Set the actual boundaries.
86  for alg in c.algorithms:
87  alg.params = {"iov_coverage": output_iov, "payload_boundaries": payload_boundaries}
88 
89  # If it's not a SequentialBoundary calbration, just set the IoV coverage
90  else:
91  for alg in c.algorithms:
92  alg.params = {"iov_coverage": output_iov}
93 
94  # Don't save the rough moduleT0 result
95  cal[1].save_payloads = False
96  # Just to make it sure ...
97  cal[5].save_payloads = False # in fact it does not make any payloads, but produces histograms for validation
98 
99  cal[1].depends_on(cal[0])
100  cal[2].depends_on(cal[1])
101  cal[3].depends_on(cal[2])
102  cal[4].depends_on(cal[3])
103  cal[5].depends_on(cal[4])
104 
105  return cal