Belle II Software  release-05-01-25
background_bhabha_generation.py
1 import sys
2 import basf2
3 
4 if len(sys.argv) != 2:
5  print("Usage: {} [bbbrem|bhwide|bhwide_largeangle]".format(sys.argv[0]), file=sys.stderr)
6  sys.exit(1)
7 
8 generator = sys.argv[1].lower()
9 
10 kill = basf2.create_path()
11 main = basf2.create_path()
12 main.add_module("EventInfoSetter", expList=0, runList=1, evtNumList=1000000)
13 main.add_module("EventInfoPrinter")
14 
15 basf2.set_log_level(basf2.LogLevel.DEBUG)
16 basf2.set_debug_level(250)
17 basf2.logging.package("framework").log_level = basf2.LogLevel.WARNING
18 
19 
20 def add_cut(name, minParticles, maxParticles, minTheta, maxTheta=None):
21  """Add a generator level cut and kill the event if the cut is not passed. In
22  this case the cut is on the min/max charged particles which have a
23  center-of-mass theta angle between minTheta and maxTheta. If maxTheta is not
24  given assume it to be 180-minTheta for a symmetric window"""
25 
26  # if only one angle make it symmetric
27  if maxTheta is None:
28  maxTheta = 180 - minTheta
29  selection = main.add_module("GeneratorPreselection", applyInCMS=True, nChargedMin=minParticles, nChargedMax=maxParticles,
30  MinChargedTheta=minTheta, MaxChargedTheta=maxTheta, MinChargedP=0., MinChargedPt=0.)
31  selection.if_value("!=11", kill)
32  selection.set_name("generator cut: " + name)
33 
34 
35 if generator == "bbbrem":
36  main.add_module("BBBremInput", MinPhotonEnergyFraction=0.000001, Unweighted=True, MaxWeight=1.57001e+07)
37  # at least one track below 0.5 degree means maximum one particle in 0.5-179.5
38  add_cut("at least one track below 0.5 degree", 0, 1, 0.5)
39 elif generator == "bhwide":
40  main.add_module("BHWideInput", ScatteringAngleRangeElectron=[0.5, 179.5], ScatteringAngleRangePositron=[0.5, 179.5])
41  add_cut("both tracks at least 0.5 degree", 2, 2, 0.5)
42  # but if one is above 1 and the other above 10 degree so we in 1-170 and
43  # 10-179
44  add_cut("max one track in 1-170", 0, 1, 1, 170)
45  add_cut("max one track in 10-179", 0, 1, 10, 179)
46 elif generator == "bhwide_largeangle":
47  main.add_module("BHWideInput", ScatteringAngleRangeElectron=[0.5, 179.5], ScatteringAngleRangePositron=[0.5, 179.5])
48  add_cut("both tracks at least 1 degree", 2, 2, 1)
49  add_cut("at least one 10 degree", 1, 2, 10)
50 else:
51  print("unknown generation setting: {}".format(generator))
52 
53 main.add_module("Progress")
54 main.add_module("RootOutput", outputFileName="%s.root" % generator)
55 basf2.process(main)
56 print(basf2.statistics)
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25