Belle II Software  release-05-01-25
SVDCoGTimeCalibrationCAF.py
1 from basf2 import *
2 set_log_level(LogLevel.INFO)
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 caf import backends
16 from caf import strategies
17 from caf.utils import ExpRun, IoV
18 
19 import reconstruction as reco
20 import modularAnalysis as ana
21 from caf.strategies import SequentialBoundaries
22 import svd as svd
23 
24 input_branches = [
25  'SVDShaperDigitsFromTracks',
26  'EventT0',
27  'RawSVDs'
28  # 'SVDShaperDigits',
29  # 'SVDEventInfo'
30 ]
31 
32 now = datetime.datetime.now()
33 
34 
35 def remove_module(path, name):
36 
37  new_path = create_path()
38  for m in path.modules():
39  if name != m.name():
40  new_path.add_module(m)
41  return new_path
42 
43 # pre_collector
44 
45 
46 def pre_collector():
47 
48  B2INFO("Pre-collector")
49  pre_path = create_path()
50  pre_path.add_module('RootInput', branchNames=input_branches)
51 
52  pre_path.add_module("Gearbox")
53  pre_path.add_module("Geometry", useDB=True)
54 
55  # run SVD unpacker
56  svd.add_svd_unpacker(pre_path)
57 
58  # run SVD reconstruction, changing names of StoreArray
59  reco.add_svd_reconstruction(pre_path)
60 
61  for moda in pre_path.modules():
62  if moda.name() == 'SVDCoGTimeEstimator':
63  moda.param("ShaperDigits", 'SVDShaperDigitsFromTracks')
64  moda.param("RecoDigits", 'SVDRecoDigitsFromTracks')
65  moda.param("CalibrationWithEventT0", False)
66  if moda.name() == 'SVDSimpleClusterizer':
67  moda.param("Clusters", 'SVDClustersFromTracks')
68  moda.param("RecoDigits", 'SVDRecoDigitsFromTracks')
69  moda.param("timeAlgorithm", 0)
70  if moda.name() == 'SVDSpacePointCreator':
71  moda.param("SVDClusters", 'SVDClustersFromTracks')
72 
73  pre_path = remove_module(pre_path, 'SVDMissingAPVsClusterCreator')
74 
75  print_path(pre_path)
76 
77  return pre_path
78 
79 
80 def SVDCoGTimeCalibration(files, tags, uniqueID):
81 
82  # Set-up re-processing path
83  path = create_path()
84 
85  path.add_module('Progress')
86 
87  # collector setup
88  collector = register_module('SVDTimeCalibrationCollector')
89  collector.param("SVDClustersFromTracksName", "SVDClustersFromTracks")
90  collector.param("SVDEventInfoName", "SVDEventInfo")
91  collector.param("EventT0Name", "EventT0")
92  collector.param("granularity", "run")
93 
94  # algorithm setup
95  algorithm = SVDCoGTimeCalibrationAlgorithm(uniqueID)
96  algorithm.setMinEntries(100)
97  algorithm.setAllowedTimeShift(2.)
98 
99  # calibration setup
100  calibration = Calibration('SVDCoGTime',
101  collector=collector,
102  algorithms=algorithm,
103  input_files=files,
104  pre_collector_path=pre_collector(),
105  database_chain=[CentralDatabase(tag) for tag in tags],
106  output_patterns=None,
107  max_files_per_collector_job=1,
108  backend_args=None
109  )
110 
111  calibration.strategies = strategies.SequentialBoundaries
112 
113  return calibration
114 
115 if __name__ == "__main__":
116 
117  input_files = [os.path.abspath(file) for file in Belle2.Environment.Instance().getInputFilesOverride()]
118 
119  print(" ")
120  print("INPUT FILES")
121  print(" ")
122  print(input_files)
123  print(" ")
124 
125  good_input_files = []
126  runs = []
127  expNum = int()
128  for i in input_files:
129  file_list = glob.glob(i)
130  for f in file_list:
131  tf = TFile.Open(f)
132  tree = tf.Get("tree")
133  if tree.GetEntries() != 0:
134  good_input_files.append(f)
135  print(str(f))
136  inputStringSplit = f.split("/")
137  for string in inputStringSplit:
138  if string.startswith('r0'):
139  s_run = str(string)
140  runNum = runs.append(int(s_run[1:6]))
141  if string.startswith('e0'):
142  s_exp = str(string)
143  expNum = int(s_exp[1:5])
144 
145  runs.sort()
146 
147  firstRun = runs[0]
148  lastRun = runs[-1]
149 
150  if not len(good_input_files):
151  print("You have to specify some input file(s)\n"
152  "using the standard basf2 command line option - i")
153  print("See: basf2 -h")
154  sys.exit(1)
155 
156  # print(good_input_files)
157 
158  uniqueID = "SVDCoGTimeCalibrations_" + str(now.isoformat()) + "_INFO:_3rdOrderPol_TBindep_Exp" + \
159  str(expNum) + "_runsFrom" + str(firstRun) + "to" + str(lastRun)
160  print("")
161  print("UniqueID")
162  print("")
163  print(str(uniqueID))
164  print("")
165  conditions.override_globaltags()
166  svdCoGCAF = SVDCoGTimeCalibration(good_input_files,
167  ["online_proc11",
168  "data_reprocessing_proc11_baseline",
169  "staging_data_reprocessing_proc11",
170  "svd_NOCoGCorrections"],
171  uniqueID)
172 
173  cal_fw = CAF()
174  cal_fw.add_calibration(svdCoGCAF)
175  cal_fw.backend = backends.LSF()
176  cal_fw.run()
svd.add_svd_unpacker
def add_svd_unpacker(path)
Definition: __init__.py:198
strategies.SequentialBoundaries
Definition: strategies.py:648
backends.LSF
Definition: backends.py:1567
Belle2::Environment::Instance
static Environment & Instance()
Static method to get a reference to the Environment instance.
Definition: Environment.cc:31
Calibration
Definition: Calibration.py:1