Belle II Software  release-05-01-25
BhabhaMC.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 from basf2 import *
5 from simulation import *
6 from optparse import OptionParser
7 from tracking import add_tracking_reconstruction
8 from L1trigger import add_tsim
9 from ROOT import Belle2
10 from reconstruction import *
11 import glob
12 
13 background_files = glob.glob('/group/belle2/BGFile/OfficialBKG/phase2/pseudorandom/BGOverlay.physics.0003.*.root')
14 # --------------------------------------------------------------------
15 # Example of using ARICH reconstruction
16 # needs reconstructed tracks (Tracks), extrapolated to ARICH (ExtHits)
17 # --------------------------------------------------------------------
18 parser = OptionParser()
19 parser.add_option('-n', '--nevents', dest='nevents', default=200000,
20  help='Number of events to process')
21 parser.add_option('-f', '--file', dest='filename',
22  default='Bhabha_Prod5_MC.root')
23 parser.add_option('-o', '--output', dest='cdstname',
24  default='Bhabha_Prod5_MC_cdst.root')
25 (options, args) = parser.parse_args()
26 
27 home = os.environ['BELLE2_LOCAL_DIR']
28 
29 # Suppress messages and warnings during processing:
30 set_log_level(LogLevel.ERROR)
31 
32 # reset_database()
33 use_database_chain()
34 use_central_database("data_reprocessing_prod5", LogLevel.WARNING)
35 
36 # Create path
37 main = create_path()
38 empty = create_path()
39 
40 # Set number of events to generate
41 eventinfosetter = register_module('EventInfoSetter')
42 eventinfosetter.param({'evtNumList': [int(options.nevents)], 'runList': [1]})
43 main.add_module(eventinfosetter)
44 
45 # Histogram manager immediately after master module
46 histo = register_module('HistoManager')
47 histo.param('histoFileName', 'DQMhistograms.root') # File to save histograms
48 main.add_module(histo)
49 
50 # Gearbox: access to database (xml files)
51 gearbox = register_module('Gearbox', fileName="geometry/Beast2_phase2.xml")
52 main.add_module(gearbox)
53 
54 # Geometry
55 geometry = register_module('Geometry')
56 # geometry.param('components', [
57 # 'MagneticField',
58 # 'BeamPipe',
59 # 'PXD',
60 # 'SVD',
61 # 'CDC',
62 # 'ARICH'])
63 main.add_module(geometry)
64 
65 # to run the framework the used modules need to be registered
66 generator = register_module('BabayagaNLOInput')
67 generator.param('FinalState', 'ee')
68 generator.param('MaxAcollinearity', 180.0)
69 generator.param('ScatteringAngleRange', [15., 165.])
70 generator.param('FMax', 75000)
71 generator.param('MinEnergy', 0.01)
72 generator.param('Order', 'exp')
73 generator.param('DebugEnergySpread', 0.01)
74 generator.param('Epsilon', 0.00005)
75 generatorpreselection = register_module('GeneratorPreselection')
76 generatorpreselection.param('nChargedMin', 1)
77 generatorpreselection.param('nChargedMax', 999)
78 generatorpreselection.param('MinChargedP', 4.)
79 # generatorpreselection.param('MinChargedTheta', 20.)
80 generatorpreselection.param('MinChargedTheta', 17.)
81 generatorpreselection.param('MaxChargedTheta', 36.)
82 generatorpreselection.param('applyInCMS', False)
83 main.add_module(generator)
84 main.add_module(generatorpreselection)
85 generatorpreselection.if_value('!=11', empty)
86 
87 # components = ['PXD', 'SVD', 'CDC']
88 
89 # detector simulation (still use background mixing)
90 # add_simulation(main, components=components, bkgfiles=background_files, bkgOverlay=True)
91 # add_simulation(main, components=components)
92 add_simulation(main, None, bkgfiles=background_files, bkgOverlay=True)
93 
94 # ARICH digitization
95 arich_digitizer = register_module('ARICHDigitizer')
96 arich_digitizer.param('MagneticFieldDistorsion', 1)
97 main.add_module(arich_digitizer)
98 
99 # add_tsim(main)
100 add_tsim(main, shortTracks=True, Belle2Phase="Phase2")
101 
102 # tracking
103 # add_tracking_reconstruction(main)
104 add_reconstruction(main)
105 
106 # convert ARICHDigits to ARICHHits
107 arichHits = register_module('ARICHFillHits')
108 arichHits.param('MagFieldCorrection', 1)
109 main.add_module(arichHits)
110 
111 # ARICH reconstruction
112 # calculate PID likelihoods for all tracks
113 arichreco = register_module('ARICHReconstructor')
114 # store cherenkov angle information
115 arichreco.param('storePhotons', 1)
116 arichreco.param('useAlignment', 0)
117 main.add_module(arichreco)
118 
119 # ARICH Ntuple
120 # create flat ntuple for performance analysis
121 arichNtuple = register_module('ARICHNtuple')
122 arichNtuple.param('outputFile', options.filename)
123 main.add_module(arichNtuple)
124 
125 # ARICH DQM
126 # create DQM occupancy plots
127 arichdqm = register_module('ARICHDQM')
128 main.add_module(arichdqm)
129 
130 add_cdst_output(main, True, '/ghi/fs01/belle2/bdata/users/sachit/' + options.cdstname)
131 
132 # Uncomment to store DataStore content to root file
133 # output = register_module('RootOutput')
134 # output.param('outputFileName', 'DataStore.root')
135 # main.add_module(output)
136 
137 # Uncomment to show event display
138 # display = register_module('Display')
139 # display.param('showARICHHits', True)
140 # display.param('fullGeometry', True)
141 # main.add_module(display)
142 
143 # Show progress of processing
144 progress = register_module('Progress')
145 main.add_module(progress)
146 # main.add_module("PrintMCParticles", logLevel=LogLevel.INFO, onlyPrimaries=False)
147 # Process events
148 process(main)
149 
150 # Print call statistics
151 print(statistics)
152 
153 # Make basic performance plots
154 # com = 'root -l ' + options.filename + ' ' + home + '/arich/utility/scripts/plotEfficiency.C'
155 # os.system(com)