Belle II Software  release-05-01-25
z0_with_clone_suppression.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import basf2
5 from basf2 import *
6 from ROOT import Belle2
7 from cdctrigger import add_cdc_trigger
8 from math import pi, tan
9 from interactive import embed
10 
11 """
12 generate tracks with particle gun, simulate CDC and CDC trigger, save the output.
13 """
14 
15 # ------------ #
16 # user options #
17 # ------------ #
18 
19 # general options
20 seed = 10000
21 evtnum = 600
22 particlegun_params = {
23  'pdgCodes': [-13, 13],
24  'nTracks': 1,
25  'momentumGeneration': 'inversePt',
26  'momentumParams': [0.3, 10.],
27  'thetaGeneration': 'uniform',
28  'thetaParams': [35, 145],
29  'phiGeneration': 'uniform',
30  'phiParams': [0, 360],
31  'vertexGeneration': 'uniform',
32  'xVertexParams': [0, 0.0],
33  'yVertexParams': [0, 0.0],
34  'zVertexParams': [-50.0, 50.0]}
35 
36 # ------------------------- #
37 # create path up to trigger #
38 # ------------------------- #
39 
40 # set random seed
41 basf2.set_random_seed(seed)
42 # suppress messages and warnings during processing:
43 # basf2.set_log_level(basf2.LogLevel.ERROR)
44 
45 main = basf2.create_path()
46 
47 empty_path = basf2.create_path()
48 
49 main.add_module('EventInfoSetter', evtNumList=evtnum)
50 main.add_module('Progress')
51 main.add_module('Gearbox')
52 main.add_module('Geometry', components=['BeamPipe',
53  'PXD', 'SVD', 'CDC',
54  'MagneticFieldConstant4LimitedRCDC'])
55 particlegun = basf2.register_module('ParticleGun')
56 particlegun.param(particlegun_params)
57 main.add_module(particlegun)
58 
59 # z position of the two ends of the first layer used by trigger
60 z_SL0 = [-31 - 1.5 / tan(30 / 180. * pi), 57 + 1.5 / tan(17 / 180. * pi)]
61 # radius of the first layer used by trigger
62 r_SL0 = 18.3
63 
64 
65 class Skim(Module):
66  """Reject tracks with bad combination of z0 and theta"""
67 
68  def initialize(self):
69  """Initialization of Skim"""
70 
71  self.mc = Belle2.PyStoreArray('MCParticles')
72 
73  def event(self):
74  """event function of Skim"""
75  self.return_value(0)
76 
77  z0 = self.mc[0].getVertex().Z()
78 
79  vec = self.mc[0].getMomentum()
80  # skip the event if the track didn't reach SL0
81  if z_SL0[0] < z0 + r_SL0 / vec.Pt() * vec.Z() < z_SL0[1]:
82  self.return_value(1)
83 
84 
85 skim = Skim()
86 main.add_module(skim)
87 skim.if_false(empty_path)
88 
89 main.add_module('FullSim')
90 main.add_module('CDCDigitizer')
91 
92 # ---------------------- #
93 # CDC trigger and output #
94 # ---------------------- #
95 
96 SimulationMode = 1
97 minHits = 4
98 trueEventTime = False
99 # TSF
100 main.add_module('CDCTriggerTSF',
101  InnerTSLUTFile=Belle2.FileSystem.findFile("data/trg/cdc/innerLUT_Bkg_p0.70_b0.80.coe"),
102  OuterTSLUTFile=Belle2.FileSystem.findFile("data/trg/cdc/outerLUT_Bkg_p0.70_b0.80.coe"))
103 # 2D finder
104 original2d = register_module('CDCTrigger2DFinder')
105 # original2d.logging.log_level = basf2.LogLevel.DEBUG
106 # original2d.logging.debug_level = 20
107 # original2d.logging.set_info(basf2.LogLevel.DEBUG, basf2.LogInfo.LEVEL | basf2.LogInfo.MESSAGE)
108 original2d.param('testFilename', 'tracks.txt')
109 
110 fast2d = register_module('CDCTrigger2DFinder')
111 # fast2d.logging.log_level = basf2.LogLevel.DEBUG
112 # fast2d.logging.debug_level = 20
113 # fast2d.logging.set_info(basf2.LogLevel.DEBUG, basf2.LogInfo.LEVEL | basf2.LogInfo.MESSAGE)
114 fast2d.param('testFilename', 'fasttracks.txt')
115 fast2d.param('suppressClone', True)
116 fast2d.param('outputCollectionName', "TRGCDC2DFinderFastTracks")
117 main.add_module(original2d)
118 main.add_module(fast2d)
119 
120 
121 # ETF
122 main.add_module('CDCTriggerETF', trueEventTime=trueEventTime)
123 # fitters
124 main.add_module('CDCTrigger2DFitter')
125 main.add_module('CDCTrigger2DFitter',
126  inputCollectionName="TRGCDC2DFinderFastTracks",
127  outputCollectionName="TRGCDC2DFitterFastTracks")
128 main.add_module('CDCTrigger3DFitter')
129 main.add_module('CDCTrigger3DFitter',
130  inputCollectionName="TRGCDC2DFitterFastTracks",
131  outputCollectionName="TRGCDC3DFitterFastTracks")
132 # neurotrigger
133 main.add_module('CDCTriggerNeuro',
134  filename=Belle2.FileSystem.findFile("data/trg/cdc/Neuro20170405_LUTBkg.root"))
135 main.add_module('CDCTriggerNeuro',
136  filename=Belle2.FileSystem.findFile("data/trg/cdc/Neuro20170405_LUTBkg.root"),
137  inputCollectionName="TRGCDC2DFinderFastTracks",
138  outputCollectionName="TRGCDCNeuroFastTracks")
139 
140 
141 class Ana(Module):
142  """analyze the difference between 2D with and without clone suppression"""
143 
144  def initialize(self):
145  """Initilization of Ana"""
146 
147  self.event_info = Belle2.PyStoreObj('EventMetaData')
148 
149  self.mc = Belle2.PyStoreArray('MCParticles')
150 
151  self.finder_trk2d = Belle2.PyStoreArray('TRGCDC2DFinderTracks')
152 
153  self.fast_finder_trk2d = Belle2.PyStoreArray('TRGCDC2DFinderFastTracks')
154 
155  self.trk2d = Belle2.PyStoreArray('TRGCDC2DFitterTracks')
156 
157  self.fast_trk2d = Belle2.PyStoreArray('TRGCDC2DFitterFastTracks')
158 
159  self.trk3d = Belle2.PyStoreArray('TRGCDC3DFitterTracks')
160 
161  self.fast_trk3d = Belle2.PyStoreArray('TRGCDC3DFitterFastTracks')
162 
163  self.trknt = Belle2.PyStoreArray('TRGCDCNeuroTracks')
164 
165  self.fast_trknt = Belle2.PyStoreArray('TRGCDCNeuroFastTracks')
166 
167 
168  self.n2d_finder = 0
169 
171 
172  self.n2d_fitter = 0
173 
175 
176  self.n3d_fitter = 0
177 
179 
180  self.n3d_neuro = 0
181 
182  self.n3d_fast_neuro = 0
183 
184  def event(self):
185  """event function of Ana"""
186  self.n2d_finder += any(self.finder_trk2d)
187  self.n2d_fitter += any(self.trk2d)
188  self.n3d_fitter += any(self.trk3d)
189  self.n3d_neuro += any(self.trknt)
190  self.n2d_fast_finder += any(self.fast_finder_trk2d)
191  self.n2d_fast_fitter += any(self.fast_trk2d)
192  self.n3d_fast_fitter += any(self.fast_trk3d)
193  self.n3d_fast_neuro += any(self.fast_trknt)
194 
195  if len(self.trk2d) == 0 or len(self.fast_trk2d) == 0:
196  return
197  ts_hits = self.trk2d[0].getRelationsTo('CDCTriggerSegmentHits')
198  B2DEBUG(10, 'TS size: {}'.format(ts_hits.size()))
199  fast_ts_hits = self.fast_trk2d[0].getRelationsTo('CDCTriggerSegmentHits')
200  B2DEBUG(10, 'fast TS size: {}'.format(fast_ts_hits.size()))
201 
202  def terminate(self):
203  """Terminate Ana"""
204  total = self.n2d_finder
205  fast_total = self.n2d_fast_finder
206  all_numbers = ','.join(['{}'] * 8)
207 
208  B2INFO(all_numbers.format(self.n2d_finder, self.n2d_fitter, self.n3d_fitter, self.n3d_neuro,
210 
211  B2INFO('2D fitter retention rate: {:.2%} (original)/ {:.2%} (fast)'.format(
212  self.n2d_fitter / total, self.n2d_fast_fitter / fast_total))
213  B2INFO('3D fitter retention rate: {:.2%} (original)/ {:.2%} (fast)'.format(
214  self.n3d_fitter / self.n2d_fitter, self.n3d_fast_fitter / self.n2d_fast_fitter))
215  B2INFO('3D neuro retention rate: {:.2%} (original)/ {:.2%} (fast)'.format(
216  self.n3d_neuro / total, self.n3d_fast_neuro / fast_total))
217 
218 
219 main.add_module(Ana())
220 main.add_module('RootOutput', outputFileName='cdctrigger.root')
221 
222 # input('paused')
223 # Process events
224 basf2.process(main)
225 
226 # Print call statistics
227 print(basf2.statistics)
z0_with_clone_suppression.Ana.n2d_fitter
n2d_fitter
number of TRGCDC2DFitterTracks
Definition: z0_with_clone_suppression.py:172
z0_with_clone_suppression.Ana.n2d_fast_finder
n2d_fast_finder
number of TRGCDC2DFinderFastTracks
Definition: z0_with_clone_suppression.py:170
z0_with_clone_suppression.Skim.mc
mc
set MCParticles
Definition: z0_with_clone_suppression.py:71
z0_with_clone_suppression.Ana.n3d_fitter
n3d_fitter
number of TRGCDC3DFitterTracks
Definition: z0_with_clone_suppression.py:176
z0_with_clone_suppression.Skim.event
def event(self)
Definition: z0_with_clone_suppression.py:73
z0_with_clone_suppression.Ana.trknt
trknt
TRGCDCNeuroTracks.
Definition: z0_with_clone_suppression.py:163
z0_with_clone_suppression.Ana.fast_trk2d
fast_trk2d
TRGCDC2DFitterFastTracks.
Definition: z0_with_clone_suppression.py:157
z0_with_clone_suppression.Ana.event_info
event_info
EventMetaData.
Definition: z0_with_clone_suppression.py:147
Belle2::PyStoreObj
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:69
z0_with_clone_suppression.Ana.n2d_fast_fitter
n2d_fast_fitter
number of TRGCDC2DFitterFastTracks
Definition: z0_with_clone_suppression.py:174
z0_with_clone_suppression.Ana.finder_trk2d
finder_trk2d
TRGCDC2DFinderTracks.
Definition: z0_with_clone_suppression.py:151
basf2.process
def process(path, max_event=0)
Definition: __init__.py:25
z0_with_clone_suppression.Ana.event
def event(self)
Definition: z0_with_clone_suppression.py:184
z0_with_clone_suppression.Ana
Definition: z0_with_clone_suppression.py:141
z0_with_clone_suppression.Ana.fast_trknt
fast_trknt
TRGCDCNeuroFastTracks.
Definition: z0_with_clone_suppression.py:165
z0_with_clone_suppression.Ana.n3d_fast_fitter
n3d_fast_fitter
number of TRGCDC3DFitterFastTracks
Definition: z0_with_clone_suppression.py:178
z0_with_clone_suppression.Ana.n3d_neuro
n3d_neuro
number of TRGCDCNeuroTracks
Definition: z0_with_clone_suppression.py:180
z0_with_clone_suppression.Ana.n3d_fast_neuro
n3d_fast_neuro
number of TRGCDCNeuroFastTracks
Definition: z0_with_clone_suppression.py:182
z0_with_clone_suppression.Skim
Definition: z0_with_clone_suppression.py:65
z0_with_clone_suppression.Ana.initialize
def initialize(self)
Definition: z0_with_clone_suppression.py:144
z0_with_clone_suppression.Ana.fast_finder_trk2d
fast_finder_trk2d
TRGCDC2DFinderFastTracks.
Definition: z0_with_clone_suppression.py:153
z0_with_clone_suppression.Skim.initialize
def initialize(self)
Definition: z0_with_clone_suppression.py:68
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
z0_with_clone_suppression.Ana.trk3d
trk3d
TRGCDC3DFitterTracks.
Definition: z0_with_clone_suppression.py:159
z0_with_clone_suppression.Ana.terminate
def terminate(self)
Definition: z0_with_clone_suppression.py:202
z0_with_clone_suppression.Ana.fast_trk3d
fast_trk3d
TRGCDC3DFitterFastTracks.
Definition: z0_with_clone_suppression.py:161
z0_with_clone_suppression.Ana.n2d_finder
n2d_finder
number of TRGCDC2DFinderTracks
Definition: z0_with_clone_suppression.py:168
Belle2::FileSystem::findFile
static std::string findFile(const std::string &path, bool silent=false)
Search for given file or directory in local or central release directory, and return absolute path if...
Definition: FileSystem.cc:147
z0_with_clone_suppression.Ana.trk2d
trk2d
TRGCDC2DFitterTracks.
Definition: z0_with_clone_suppression.py:155
z0_with_clone_suppression.Ana.mc
mc
MCParticles.
Definition: z0_with_clone_suppression.py:149