Belle II Software  release-08-01-10
run_commonT0_calibration.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 # ---------------------------------------------------------------------------------------
13 # CAF calibration script: common T0
14 # data type: cdst (bhabha or dimuon)
15 #
16 # usage: basf2 run_commonT0_calibration.py expNo runFirst runLast [sample method]
17 # sample = bhabha/dimuon (D = bhabha)
18 # method = BF/LL (D = BF)
19 # ---------------------------------------------------------------------------------------
20 
21 import sys
22 import glob
23 from caf import backends
24 from caf.framework import CAF
25 from basf2 import B2ERROR
26 from top_calibration import commonT0_calibration_BF, commonT0_calibration_LL
27 
28 # ----- those parameters need to be adjusted before running -----------------------------
29 #
30 globalTags = ['Reco_master_patch', 'data_reprocessing_proc10'] # highest priority first
31 localDBs = [] # highest priority first, local DB's have higher priority than global tags
32 data_dir = '/group/belle2/dataprod/Data/OfficialReco/proc10/'
33 bhabha_skim_dir = 'skim/hlt_bhabha/cdst/sub00'
34 dimuon_skim_dir = 'offskim/offskim_mumutop/cdst/sub00'
35 main_output_dir = 'top_calibration'
36 default_sample = 'bhabha'
37 default_method = 'BF'
38 new_cdst_format = False # set to True for input in new cdst format
39 #
40 # ---------------------------------------------------------------------------------------
41 
42 # Argument parsing
43 argvs = sys.argv
44 if len(argvs) < 4:
45  print("usage: basf2", argvs[0], "experiment runFirst runLast [sample method]")
46  print(" sample = bhabha/dimuon (D = bhabha)")
47  print(" method = BF/LL (D = BF)")
48  sys.exit()
49 experiment = int(argvs[1])
50 run_first = int(argvs[2])
51 run_last = int(argvs[3])
52 sample = default_sample
53 method = default_method
54 
55 if len(argvs) == 5:
56  sample = argvs[4]
57 elif len(argvs) > 5:
58  sample = argvs[4]
59  method = argvs[5]
60 
61 if sample == 'bhabha':
62  skim_dir = bhabha_skim_dir
63 elif sample == 'dimuon':
64  skim_dir = dimuon_skim_dir
65 else:
66  B2ERROR("Invalid sample name: " + sample)
67  sys.exit()
68 
69 # Make list of files
70 inputFiles = []
71 expNo = 'e' + '{:0=4d}'.format(experiment)
72 for run in range(run_first, run_last + 1):
73  runNo = 'r' + '{:0=5d}'.format(run)
74  filename = f"{data_dir}/{expNo}/*/{runNo}/{skim_dir}/cdst*.root"
75  inputFiles += glob.glob(filename)
76 
77 if len(inputFiles) == 0:
78  B2ERROR('No cdst files found in ' + data_dir + ' for exp=' + str(experiment) +
79  ' runFirst=' + str(run_first) + ' runLast=' + str(run_last) +
80  ' (skim_dir=' + skim_dir + ')')
81  sys.exit()
82 
83 # Output folder name
84 run_range = 'r' + '{:0=5d}'.format(run_first) + '-' + '{:0=5d}'.format(run_last)
85 output_dir = f"{main_output_dir}/commonT0-{sample}-{method}-{expNo}-{run_range}"
86 
87 # Define calibration
88 if method == 'BF':
89  cal = commonT0_calibration_BF(inputFiles, globalTags, localDBs, new_cdst_format)
90 elif method == 'LL':
91  cal = commonT0_calibration_LL(inputFiles, sample, globalTags, localDBs, new_cdst_format)
92 else:
93  B2ERROR('Invalid method name: ' + method)
94  sys.exit()
95 cal.backend_args = {"queue": "s"}
96 
97 # Add calibration to CAF
98 cal_fw = CAF()
99 cal_fw.add_calibration(cal)
100 cal_fw.output_dir = output_dir
101 cal_fw.backend = backends.LSF()
102 
103 # Run calibration
104 cal_fw.run()