Belle II Software  release-05-01-25
SVD3SampleCoGTimeCalibrationPromptCAF.py
1 import basf2
2 from basf2 import *
3 set_log_level(LogLevel.INFO)
4 
5 import os
6 import sys
7 import multiprocessing
8 import datetime
9 import glob
10 
11 import ROOT
12 from ROOT import Belle2, TFile
13 from ROOT.Belle2 import SVD3SampleCoGTimeCalibrationAlgorithm
14 
15 from caf.framework import Calibration, CAF, Collection, LocalDatabase, CentralDatabase
16 from prompt import CalibrationSettings
17 from caf import backends
18 from caf import strategies
19 from caf.utils import ExpRun, IoV
20 
21 import svd as svd
22 import modularAnalysis as ana
23 from caf.strategies import SequentialBoundaries
24 
25 now = datetime.datetime.now()
26 
27 settings = CalibrationSettings(name="SVD3SampleCoGTimeCalibrationPrompt",
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  moda.param("ShaperDigits", 'SVDShaperDigitsFromTracks') # for 3TA
72  moda.param("timeAlgorithm", 1) # 1:CoG3, 2:ELS3
73  if moda.name() == 'SVDSpacePointCreator':
74  moda.param("SVDClusters", 'SVDClustersFromTracks')
75 
76  path = remove_module(path, 'SVDMissingAPVsClusterCreator')
77 
78  file_to_iov_physics = input_data["hlt_hadron"]
79 
80  max_files_per_run = 1
81 
82  from prompt.utils import filter_by_max_files_per_run
83 
84  # reduced_file_to_iov_physics = filter_by_max_files_per_run(file_to_iov_physics, max_files_per_run)
85  reduced_file_to_iov_physics = filter_by_max_files_per_run(file_to_iov_physics, max_files_per_run, min_events_per_file=1)
86  # input_files_physics = list(reduced_file_to_iov_physics.keys())
87  good_input_files = list(reduced_file_to_iov_physics.keys())
88  basf2.B2INFO(f"Total number of files actually used as input = {len(good_input_files)}")
89 
90  exps = [i.exp_low for i in reduced_file_to_iov_physics.values()]
91  runs = sorted([i.run_low for i in reduced_file_to_iov_physics.values()])
92 
93  firstRun = runs[0]
94  lastRun = runs[-1]
95  expNum = exps[0]
96 
97  if not len(good_input_files):
98  print("No good input files found! Check that the input files have entries != 0!")
99  sys.exit(1)
100 
101  uniqueID = "SVD3SampleCoGTimeCalibrations_Test_" + str(now.isoformat()) + "_INFO:_3rdOrderPol_TBindep_Exp" + \
102  str(expNum) + "_runsFrom" + str(firstRun) + "to" + str(lastRun)
103  print("")
104  print("UniqueID")
105  print("")
106  print(str(uniqueID))
107  print("")
108 
109  requested_iov = kwargs.get("requested_iov", None)
110  output_iov = IoV(requested_iov.exp_low, requested_iov.run_low, -1, -1)
111 
112  # collector setup
113  collector = register_module('SVDTimeCalibrationCollector')
114  collector.param("SVDClustersFromTracksName", "SVDClustersFromTracks")
115  collector.param("SVDEventInfoName", "SVDEventInfo")
116  collector.param("EventT0Name", "EventT0")
117  collector.param("granularity", "run")
118 
119  # algorithm setup
120  algorithm = SVD3SampleCoGTimeCalibrationAlgorithm(uniqueID)
121  algorithm.setMinEntries(10000)
122 
123  # calibration setup
124  calibration = Calibration('SVD3SampleCoGTime',
125  collector=collector,
126  algorithms=algorithm,
127  input_files=good_input_files,
128  pre_collector_path=path,
129  )
130 
131  # calibration.pre_algorithms = pre_alg
132  # calibration.strategies = strategies.SequentialRunByRun
133  # calibration.strategies = strategies.SingleIOV
134  calibration.strategies = strategies.SequentialBoundaries
135 
136  for algorithm in calibration.algorithms:
137  algorithm.params = {"iov_coverage": output_iov}
138 
139  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