Belle II Software  release-06-02-00
AafhGenerationWithPreselection.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 
11 
12 
18 
19 from basf2 import set_log_level, LogLevel, create_path, process, register_module, statistics
20 import os
21 import sys
22 
23 # suppress messages and during processing:
24 set_log_level(LogLevel.INFO)
25 
26 main = create_path()
27 
28 # event info setter
29 main.add_module("EventInfoSetter", expList=0, runList=1, evtNumList=100)
30 
31 # generator
32 aafh = register_module('AafhInput')
33 aafh.param({
34  # decay mode to generate.
35  # 1: e+e- -> mu+mu-L+L- where L is a user defined particle (default: tau)
36  # 2: e+e- -> mu+mu-mu+mu-
37  # 3: e+e- -> e+e-mu+mu-
38  # 4: e+e- -> e+e-L+L- where L is a user defined particle (default: tau)
39  # 5: e+e- -> e+e-e+e-
40  'mode': 5,
41  # to set the particle for modes 1 and 4 use set parameter "particle"
42  # rejection scheme to generate unweighted events
43  # 1: use rejection once for the final event weight
44  # 2: use rejection per sub generator and then for the final event
45  'rejection': 2,
46  # max subgenerator event weight, only used if rejection is set to 2
47  # (default). If this value is to low the generation will produce errors. If
48  # it is to high generation runs slower.
49  'maxSubgeneratorWeight': 1.0,
50  # max final event weight which is always used. If this value is to low the
51  # generation will produce errors. If it is to high generation runs slower.
52  # ==> should be around 2-4
53  'maxFinalWeight': 3.0,
54  # adjust subgenerator weights so that each sub generator has same
55  # probability to be called and the maximum weight is equal as well. These
56  # values are printed at the end of generation when output level is set to
57  # INFO. These weights strongly depend on the mode
58  'subgeneratorWeights': [
59  1.0,
60  7.986e+01,
61  5.798e+04,
62  3.898e+05,
63  1.0,
64  1.664e+00,
65  2.812e+00,
66  7.321e-01,
67  ],
68  # set to awfully precise
69  'suppressionLimits': [1e100] * 4,
70  # minimum invariant mass of the secondary pair
71  'minMass': 0.50,
72 })
73 aafh.logging.log_level = LogLevel.INFO
74 
75 # preselection to reject no tag events
76 generatorpreselection = register_module('GeneratorPreselection')
77 generatorpreselection.param('nChargedMin', 1)
78 # generatorpreselection.param('nChargedMax', 999)
79 generatorpreselection.param('MinChargedP', 0.25)
80 generatorpreselection.param('MinChargedPt', 0.1)
81 generatorpreselection.param('MinChargedTheta', 17.)
82 generatorpreselection.param('MaxChargedTheta', 150.)
83 generatorpreselection.param('nPhotonMin', 1)
84 # generatorpreselection.param('nPhotonMax', 999)
85 generatorpreselection.param('MinPhotonEnergy', 0.50)
86 generatorpreselection.param('MinPhotonTheta', 15.)
87 generatorpreselection.param('MaxPhotonTheta', 170.)
88 
89 # print generated particles
90 mcparticleprinter = register_module('PrintMCParticles')
91 mcparticleprinter.logging.log_level = LogLevel.INFO
92 
93 output = register_module('RootOutput')
94 output.param('outputFileName', './aafh_out.root')
95 
96 # creating the path for the processing
97 main.add_module(aafh)
98 main.add_module(generatorpreselection)
99 # create an empty path and check the return value of the the preselection
100 emptypath = create_path()
101 generatorpreselection.if_value('<1', emptypath)
102 # continue the main path otherwise (e.g. call detector simulation)
103 main.add_module(mcparticleprinter)
104 main.add_module(output)
105 
106 # process the events
107 process(main)
108 
109 # show call statistics
110 print(statistics)