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