8"""CDC badwire calibration."""
10from prompt
import CalibrationSettings, INPUT_DATA_FILTERS
11from prompt.calibrations.caf_cdc
import settings
as cdc_tracking_calibration
12from ROOT
import Belle2
14settings = CalibrationSettings(name=
"CDC badwire",
15 expert_username=
"manhtt",
17 input_data_formats=[
"raw"],
18 input_data_names=[
"mumu_tight_or_highm_calib"],
19 input_data_filters={
"mumu_tight_or_highm_calib":
20 [INPUT_DATA_FILTERS[
"Data Tag"][
"mumu_tight_or_highm_calib"],
21 INPUT_DATA_FILTERS[
"Data Quality Tag"][
"Good"],
22 INPUT_DATA_FILTERS[
"Magnet"][
"On"]]},
23 depends_on=[cdc_tracking_calibration],
25 "min_events_per_file": 500,
26 "max_events_per_file": 10000,
27 "components": [
"CDC",
"ECL",
"KLM"],
28 "payload_boundaries": [],
29 "backend_args": {
"request_memory":
"4 GB"}
34def get_calibrations(input_data, **kwargs):
35 expert_config = kwargs.get(
"expert_config")
36 min_events_per_file = expert_config[
"min_events_per_file"]
37 max_events_per_file = expert_config[
"max_events_per_file"]
38 components = expert_config[
"components"]
42 file_to_iov_mumu = input_data[
"mumu_tight_or_highm_calib"]
44 reduced_file_to_iov_mumu = filter_by_max_files_per_run(file_to_iov_mumu, 100, min_events_per_file)
45 input_files_mumu = list(reduced_file_to_iov_mumu.keys())
46 basf2.B2INFO(
"Complete input data selection.")
47 basf2.B2INFO(f
"Total number of files actually used as input = {len(input_files_mumu)}")
50 from caf.utils
import IoV
51 from caf
import strategies
52 payload_boundaries = []
53 payload_boundaries.extend([ExpRun(*boundary)
for boundary
in expert_config[
"payload_boundaries"]])
54 basf2.B2INFO(f
"Payload boundaries from expert_config: {payload_boundaries}")
57 requested_iov = kwargs.get(
"requested_iov",
None)
58 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
61 if payload_boundaries:
62 basf2.B2INFO(
'Found payload_boundaries: set collector granularity to run')
64 col = basf2.register_module(
"CDCBadWireCollector")
68 algo.setInputFileNames(
"histo_badwire.root")
70 from caf.framework
import Calibration
71 badwire_calib = Calibration(
"CDC_Badwire",
74 input_files=input_files_mumu,
75 pre_collector_path=pre_collector(max_events_per_file,
76 components=components))
79 if payload_boundaries:
80 basf2.B2INFO(
"Found payload_boundaries: calibration strategies set to SequentialBoundaries.")
81 badwire_calib.strategies = strategies.SequentialBoundaries
82 for alg
in badwire_calib.algorithms:
83 alg.params = {
"iov_coverage": output_iov,
"payload_boundaries": payload_boundaries}
85 for alg
in badwire_calib.algorithms:
86 alg.params = {
"apply_iov": output_iov}
88 return [badwire_calib]
91def pre_collector(max_events=None, components=["CDC", "ECL", "KLM"]):
92 from rawdata
import add_unpackers
94 path = basf2.create_path()
95 branches = [
'EventMetaData',
'RawCDCs',
'RawFTSWs']
97 path.add_module(
"RootInput", branchNames=branches)
98 path.add_module(
"Gearbox")
99 path.add_module(
"Geometry", useDB=
True)
100 path.add_module(
"SetupGenfitExtrapolation",
101 energyLossBrems=
False, noiseBrems=
False)
102 add_unpackers(path, components=unpackers)
105 path.add_module(
"Progress")
107 from reconstruction
import default_event_abort, add_prefilter_pretracking_reconstruction
108 from tracking
import add_prefilter_tracking_reconstruction
111 doom = path.add_module(
"EventsOfDoomBuster")
112 default_event_abort(doom,
">=1", Belle2.EventMetaData.c_ReconstructionAbort)
113 path.add_module(
'StatisticsSummary').set_name(
'Sum_EventsofDoomBuster')
117 add_prefilter_pretracking_reconstruction(path, components=Components)
120 add_prefilter_tracking_reconstruction(path=path,
121 components=Components,
122 trackFitHypotheses=[211],
123 prune_temporary_tracks=
False,
125 append_full_grid_cdc_eventt0=
True,
126 skip_full_grid_cdc_eventt0_if_svd_time_present=
False)
127 path.add_module(
'StatisticsSummary').set_name(
'Sum_Tracking')
130 for module
in path.modules():
131 if module.name() ==
'CDCUnpacker':
132 print(
'Enabling Raw CDC hits')
133 module.param({
'enableStoreCDCRawHit':
True})
134 if module.name() ==
'TFCDC_WireHitPreparer':
135 print(
'Enabling bad wires')
136 module.param({
'useBadWires':
True})
139 basf2.print_path(path)
Class for Wire Efficiency estimation.