Belle II Software  release-05-01-25
SVDCoGTimeCalibrationPromptCAF.py
1 import basf2
2 from basf2 import *
3 
4 import os
5 import sys
6 import multiprocessing
7 import datetime
8 import glob
9 
10 import ROOT
11 from ROOT import Belle2, TFile
12 from ROOT.Belle2 import SVDCoGTimeCalibrationAlgorithm
13 
14 from caf.framework import Calibration, CAF, Collection, LocalDatabase, CentralDatabase
15 from prompt import CalibrationSettings
16 from caf import backends
17 from caf import strategies
18 from caf.utils import ExpRun, IoV
19 
20 import svd as svd
21 import modularAnalysis as ana
22 from caf.strategies import SequentialBoundaries
23 
24 set_log_level(LogLevel.INFO)
25 now = datetime.datetime.now()
26 
27 settings = CalibrationSettings(name="SVDCoGTimeCalibrationPrompt",
28  expert_username="gdujany",
29  description=__doc__,
30  input_data_formats=["cdst"],
31  input_data_names=["hlt_hadron"],
32  depends_on=[])
33 
34 
36 
37 
38 def remove_module(path, name):
39 
40  new_path = create_path()
41  for m in path.modules():
42  if name != m.name():
43  new_path.add_module(m)
44  return new_path
45 
47 
48 
49 def get_calibrations(input_data, **kwargs):
50 
51  # Set-up re-processing path
52  path = create_path()
53 
54  path.add_module("Gearbox")
55  path.add_module("Geometry", useDB=True)
56 
57  # unpack raw svd data and produce: SVDEventInfo and SVDShaperDigits
59 
60  # run SVD reconstruction, changing names of StoreArray
62 
63  for moda in path.modules():
64  if moda.name() == 'SVDCoGTimeEstimator':
65  moda.param("ShaperDigits", 'SVDShaperDigitsFromTracks')
66  moda.param("RecoDigits", 'SVDRecoDigitsFromTracks')
67  moda.param("CalibrationWithEventT0", False)
68  if moda.name() == 'SVDSimpleClusterizer':
69  moda.param("Clusters", 'SVDClustersFromTracks')
70  moda.param("RecoDigits", 'SVDRecoDigitsFromTracks')
71  if moda.name() == 'SVDSpacePointCreator':
72  moda.param("SVDClusters", 'SVDClustersFromTracks')
73 
74  path = remove_module(path, 'SVDMissingAPVsClusterCreator')
75 
76  file_to_iov_physics = input_data["hlt_hadron"]
77 
78  max_files_per_run = 1
79 
80  from prompt.utils import filter_by_max_files_per_run
81 
82  # reduced_file_to_iov_physics = filter_by_max_files_per_run(file_to_iov_physics, max_files_per_run)
83  reduced_file_to_iov_physics = filter_by_max_files_per_run(file_to_iov_physics, max_files_per_run, min_events_per_file=1)
84  # input_files_physics = list(reduced_file_to_iov_physics.keys())
85  good_input_files = list(reduced_file_to_iov_physics.keys())
86  basf2.B2INFO(f"Total number of files actually used as input = {len(good_input_files)}")
87 
88  exps = [i.exp_low for i in reduced_file_to_iov_physics.values()]
89  runs = sorted([i.run_low for i in reduced_file_to_iov_physics.values()])
90 
91  firstRun = runs[0]
92  lastRun = runs[-1]
93  expNum = exps[0]
94 
95  if not len(good_input_files):
96  print("No good input files found! Check that the input files have entries != 0!")
97  sys.exit(1)
98 
99  uniqueID = "SVDCoGTimeCalibrations_Prompt_" + str(now.isoformat()) + "_INFO:_3rdOrderPol_TBindep_Exp" + \
100  str(expNum) + "_runsFrom" + str(firstRun) + "to" + str(lastRun)
101  print("")
102  print("UniqueID")
103  print("")
104  print(str(uniqueID))
105  print("")
106 
107  requested_iov = kwargs.get("requested_iov", None)
108  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
109 
110  # collector setup
111  collector = register_module('SVDTimeCalibrationCollector')
112  collector.param("SVDClustersFromTracksName", "SVDClustersFromTracks")
113  collector.param("SVDEventInfoName", "SVDEventInfo")
114  collector.param("EventT0Name", "EventT0")
115  collector.param("granularity", "run")
116 
117  # algorithm setup
118  algorithm = SVDCoGTimeCalibrationAlgorithm(uniqueID)
119  algorithm.setMinEntries(10000)
120 
121  # calibration setup
122  calibration = Calibration('SVDCoGTime',
123  collector=collector,
124  algorithms=algorithm,
125  input_files=good_input_files,
126  pre_collector_path=path,
127  )
128 
129  # calibration.pre_algorithms = pre_alg
130  # calibration.strategies = strategies.SequentialRunByRun
131  # calibration.strategies = strategies.SingleIOV
132  calibration.strategies = strategies.SequentialBoundaries
133 
134  for algorithm in calibration.algorithms:
135  algorithm.params = {"iov_coverage": output_iov}
136 
137  return [calibration]
prompt.utils
Definition: utils.py:1
svd.add_svd_reconstruction
def add_svd_reconstruction(path, isROIsimulation=False, useNN=False, useCoG=True, applyMasking=False)
Definition: __init__.py:9
svd.add_svd_unpacker
def add_svd_unpacker(path)
Definition: __init__.py:198
strategies.SequentialBoundaries
Definition: strategies.py:648
Calibration
Definition: Calibration.py:1