Belle II Software  release-05-01-25
SVD3SampleCoGTimeCalibrationCAF.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 SVD3SampleCoGTimeCalibrationAlgorithm # changed
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  if moda.name() == 'SVDSimpleClusterizer':
66  moda.param("Clusters", 'SVDClustersFromTracks')
67  moda.param("RecoDigits", 'SVDRecoDigitsFromTracks')
68  moda.param("ShaperDigits", 'SVDShaperDigitsFromTracks')
69  moda.param("timeAlgorithm", 1) # changed
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  collector.param("RawCoGBinWidth", 0.5)
94 
95  # algorithm setup
96  algorithm = SVD3SampleCoGTimeCalibrationAlgorithm(uniqueID) # changed
97  algorithm.setMinEntries(100)
98  algorithm.setAllowedTimeShift(2.)
99 
100  # calibration setup
101  calibration = Calibration('SVD3SampleCoGTime', # changed
102  collector=collector,
103  algorithms=algorithm,
104  input_files=files,
105  pre_collector_path=pre_collector(),
106  database_chain=[CentralDatabase(tag) for tag in tags],
107  output_patterns=None,
108  max_files_per_collector_job=1,
109  backend_args=None
110  )
111 
112  calibration.strategies = strategies.SequentialBoundaries
113 
114  return calibration
115 
116 if __name__ == "__main__":
117 
118  input_files = [os.path.abspath(file) for file in Belle2.Environment.Instance().getInputFilesOverride()]
119 
120  print(" ")
121  print("INPUT FILES")
122  print(" ")
123  print(input_files)
124  print(" ")
125 
126  good_input_files = []
127  runs = []
128  expNum = int()
129  for i in input_files:
130  file_list = glob.glob(i)
131  for f in file_list:
132  tf = TFile.Open(f)
133  tree = tf.Get("tree")
134  if tree.GetEntries() != 0:
135  good_input_files.append(f)
136  print(str(f))
137  inputStringSplit = f.split("/")
138  for string in inputStringSplit:
139  if string.startswith('r0'):
140  s_run = str(string)
141  runNum = runs.append(int(s_run[1:6]))
142  if string.startswith('e0'):
143  s_exp = str(string)
144  expNum = int(s_exp[1:5])
145 
146  runs.sort()
147 
148  firstRun = runs[0]
149  lastRun = runs[-1]
150 
151  if not len(good_input_files):
152  print("You have to specify some input file(s)\n"
153  "using the standard basf2 command line option - i")
154  print("See: basf2 -h")
155  sys.exit(1)
156 
157  # print(good_input_files)
158 
159  uniqueID = "SVD3SampleCoGTimeCalibrations_" + str(now.isoformat()) + "_INFO:_3rdOrderPol_TBindep_Exp" + \
160  str(expNum) + "_runsFrom" + str(firstRun) + "to" + str(lastRun) # changed
161  print("")
162  print("UniqueID")
163  print("")
164  print(str(uniqueID))
165  print("")
166  conditions.override_globaltags()
167  svdCoGCAF = SVDCoGTimeCalibration(good_input_files,
168  [ # "online_proc11",
169  "online", "Reco_master_patch_rel5"],
170  # "data_reprocessing_proc11_baseline",
171  # "staging_data_reprocessing_proc11",
172  # "data_reprocessing_proc10",
173  # "svd_NOCoGCorrections"],
174  uniqueID)
175 
176  cal_fw = CAF()
177  cal_fw.add_calibration(svdCoGCAF)
178  cal_fw.backend = backends.LSF()
179  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