Belle II Software  release-08-00-10
runTBC.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 #
13 # Steering file to produce the Time Base calibration out of a pulser run
14 # Called by the wrapper scripts runTBCpocket.sh and runTBClocal.sh, which
15 # sets the proper directories for the output.
16 #
17 # Note: check the global tag!
18 #
19 
20 import basf2 as b2
21 import sys
22 
23 # read parameters
24 
25 argvs = sys.argv
26 if len(argvs) != 5:
27  print('usage: basf2', argvs[0],
28  '-i <file_sroot> (pocket|local) <slot> <channel> <output_dir>')
29  sys.exit()
30 
31 datatype = argvs[1] # data type (pocket, local)
32 slot = int(argvs[2]) # slot number (1-16)
33 channel = int(argvs[3]) # calibration channel (0-7)
34 outdir = argvs[4] # output directory path
35 
36 print('data type:', datatype, ' slot:', slot, ' calibration channel:', channel,
37  ' output to:', outdir)
38 
39 # Database
40 b2.conditions.override_globaltags()
41 b2.conditions.append_globaltag('online')
42 # b2.conditions.append_testing_payloads('localDB-FEMaps/localDB.txt') # SCROD mapping from local database
43 
44 # Suppress messages and warnings during processing
45 b2.set_log_level(b2.LogLevel.ERROR)
46 
47 # Create path
48 main = b2.create_path()
49 
50 # input
51 roinput = b2.register_module('SeqRootInput')
52 main.add_module(roinput)
53 
54 # conversion from RawCOPPER or RawDataBlock to RawDetector objects
55 if datatype == 'pocket':
56  print('pocket DAQ data assumed')
57  converter = b2.register_module('Convert2RawDet')
58  main.add_module(converter)
59 
60 # Initialize TOP geometry parameters (creation of Geant geometry is not needed)
61 main.add_module('TOPGeometryParInitializer')
62 
63 # Unpacking (format auto detection works now)
64 unpack = b2.register_module('TOPUnpacker')
65 main.add_module(unpack)
66 
67 # Add multiple hits by running feature extraction offline
68 featureExtractor = b2.register_module('TOPWaveformFeatureExtractor')
69 main.add_module(featureExtractor)
70 
71 # Convert to TOPDigits
72 converter = b2.register_module('TOPRawDigitConverter')
73 converter.param('useSampleTimeCalibration', False)
74 converter.param('useChannelT0Calibration', False)
75 converter.param('useModuleT0Calibration', False)
76 converter.param('useCommonT0Calibration', False)
77 converter.param('calibrationChannel', channel) # if set, cal pulses will be flagged
78 converter.param('calpulseHeightMin', 450) # in [ADC counts]
79 converter.param('calpulseHeightMax', 900) # in [ADC counts]
80 converter.param('calpulseWidthMin', 2.0) # in [ns]
81 converter.param('calpulseWidthMax', 8.0) # in [ns]
82 converter.param('lookBackWindows', 29) # in number of windows
83 main.add_module(converter)
84 
85 # TB calibrator
86 calib = b2.register_module('TOPTimeBaseCalibrator')
87 calib.param('moduleID', slot)
88 calib.param('method', 1) # Matrix inversion or iterative
89 calib.param('directoryName', outdir)
90 calib.logging.log_level = b2.LogLevel.INFO
91 main.add_module(calib)
92 
93 # Show progress of processing
94 progress = b2.register_module('Progress')
95 main.add_module(progress)
96 
97 # Process events
98 b2.process(main)
99 
100 # Print call statistics
101 print(b2.statistics)
102 print(b2.statistics(b2.statistics.TERM))