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=
"ttmanh",
18 input_data_formats=[
"raw"],
19 input_data_names=[
"mumu_tight_or_highm_calib"],
20 input_data_filters={
"mumu_tight_or_highm_calib":
21 [INPUT_DATA_FILTERS[
"Data Tag"][
"mumu_tight_or_highm_calib"],
22 INPUT_DATA_FILTERS[
"Data Quality Tag"][
"Good"],
23 INPUT_DATA_FILTERS[
"Magnet"][
"On"]]},
24 depends_on=[cdc_tracking_calibration],
26 "min_events_per_file": 500,
27 "components": [
"CDC",
"ECL",
"KLM"],
28 "payload_boundaries": [],
29 "backend_args": {
"request_memory":
"4 GB"},
30 "average_occupancy_threshold": 4000.0
32 produced_payloads=[
"CDCBadWires"])
36def get_calibrations(input_data, **kwargs):
37 expert_config = kwargs.get(
"expert_config")
38 min_events_per_file = expert_config[
"min_events_per_file"]
39 components = expert_config[
"components"]
40 average_occupancy_threshold = expert_config[
"average_occupancy_threshold"]
44 file_to_iov_mumu = input_data[
"mumu_tight_or_highm_calib"]
46 reduced_file_to_iov_mumu = filter_by_max_files_per_run(file_to_iov_mumu, 100, min_events_per_file)
47 input_files_mumu = list(reduced_file_to_iov_mumu.keys())
48 basf2.B2INFO(
"Complete input data selection.")
49 basf2.B2INFO(f
"Total number of files actually used as input = {len(input_files_mumu)}")
52 from caf.utils
import IoV
53 from caf
import strategies
54 payload_boundaries = []
55 payload_boundaries.extend([ExpRun(*boundary)
for boundary
in expert_config[
"payload_boundaries"]])
56 basf2.B2INFO(f
"Payload boundaries from expert_config: {payload_boundaries}")
59 requested_iov = kwargs.get(
"requested_iov",
None)
60 output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
63 if payload_boundaries:
64 basf2.B2INFO(
'Found payload_boundaries: set collector granularity to run')
66 col = basf2.register_module(
"CDCBadWireCollector")
70 algo.setInputFileNames(
"histo_badwire.root")
71 algo.setAverageOccupancyThreshold(average_occupancy_threshold)
73 from caf.framework
import Calibration
74 badwire_calib = Calibration(
"CDC_Badwire",
77 input_files=input_files_mumu,
78 pre_collector_path=pre_collector(components=components))
81 if payload_boundaries:
82 basf2.B2INFO(
"Found payload_boundaries: calibration strategies set to SequentialBoundaries.")
84 for alg
in badwire_calib.algorithms:
85 alg.params = {
"iov_coverage": output_iov,
"payload_boundaries": payload_boundaries}
88 for alg
in badwire_calib.algorithms:
89 alg.params = {
"iov_coverage": output_iov}
91 return [badwire_calib]
94def pre_collector(components=["CDC", "ECL", "KLM"]):
95 from rawdata
import add_unpackers
97 path = basf2.create_path()
98 branches = [
'EventMetaData',
'RawCDCs',
'RawFTSWs']
100 path.add_module(
"RootInput", branchNames=branches)
101 path.add_module(
"Gearbox")
102 path.add_module(
"Geometry", useDB=
True)
103 path.add_module(
"SetupGenfitExtrapolation",
104 energyLossBrems=
False, noiseBrems=
False)
105 add_unpackers(path, components=unpackers)
108 path.add_module(
"Progress")
110 from reconstruction
import default_event_abort, add_prefilter_pretracking_reconstruction
111 from tracking
import add_prefilter_tracking_reconstruction
114 doom = path.add_module(
"EventsOfDoomBuster")
115 default_event_abort(doom,
">=1", Belle2.EventMetaData.c_ReconstructionAbort)
116 path.add_module(
'StatisticsSummary').set_name(
'Sum_EventsofDoomBuster')
120 add_prefilter_pretracking_reconstruction(path, components=Components)
123 add_prefilter_tracking_reconstruction(path=path,
124 components=Components,
125 trackFitHypotheses=[211],
126 prune_temporary_tracks=
False,
128 append_full_grid_cdc_eventt0=
True,
129 skip_full_grid_cdc_eventt0_if_svd_time_present=
False)
130 path.add_module(
'StatisticsSummary').set_name(
'Sum_Tracking')
133 for module
in path.modules():
134 if module.name() ==
'CDCUnpacker':
135 print(
'Enabling Raw CDC hits')
136 module.param({
'enableStoreCDCRawHit':
True})
137 if module.name() ==
'TFCDC_WireHitPreparer':
138 print(
'Enabling bad wires')
139 module.param({
'useBadWires':
True})
142 basf2.print_path(path)
Class for Wire Efficiency estimation.