Belle II Software  release-05-01-25
dump_clusters.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import sys
5 import math
6 from basf2 import *
7 
8 # Some ROOT tools
9 import ROOT
10 from ROOT import Belle2
11 
12 
13 class dump_clusters(Module):
14 
15  """A simple module to timing of SVD clusters.
16  Intended for use with the RandomizeEventTimes feature of SVDDigitizer,
17  which stores (randomized) event times in EventMetaData.
18  For background studies, it distinguishes signal and background clusters..
19  """
20 
21  def __init__(self, filename='dump_clusters.txt', collection='SVDClusters'):
22  """Initialize the module"""
23 
24  super(dump_clusters, self).__init__()
25 
26  self.file = open(filename, 'w')
27 
28  self.collection = collection
29 
30  self.vxdid_factors = (8192, 256, 32)
31 
32  def beginRun(self):
33  """ Write legend for file columns """
34 
35  self.file.write(
36  'EventNo Layer Ladder Sensor Side Position Bg Time_event' +
37  'Time_cluster Charge_cluster Size_cluster Chi2_cluster\n'
38  )
39 
40  def event(self):
41  """Save information on all clusters together with event time data. """
42 
43  eventData = Belle2.PyStoreObj('EventMetaData')
44  eventNo = eventData.getEvent()
45  svd_evt_info = Belle2.PyStoreObj('SVDEventInfo')
46  mode_byte = svd_evt_info.getModeByte()
47  clusters = Belle2.PyStoreArray(self.collection)
48 
49  for cluster in clusters:
50 
51  bg_label = 's'
52  reco_digit = cluster.getRelatedTo('SVDRecoDigits')
53  triggerTime = 0.0
54  if reco_digit:
55  # Trigger bin from SVDModeByte
56  triggerBin = ord(mode_byte.getTriggerBin())
57  triggerTime = 0.25 * 31.44 * (-4 + triggerBin + 0.5)
58 
59  sensorID = cluster.getRawSensorID()
60 
61  uSide = cluster.isUCluster()
62 
63  # Sesnor identification
64  [layer, ladder, sensor] = self.decode(sensorID)
65  side_str = 'u' if uSide else 'v'
66 
67  s = '{event} {layer} {ladder} {sensor} {side} {strip} {bg} {etime}'.format(
68  event=eventNo,
69  layer=layer,
70  ladder=ladder,
71  sensor=sensor,
72  side=side_str,
73  strip=cluster.getPosition(),
74  bg=bg_label,
75  etime=triggerTime
76  )
77  # Cluster information
78  s += ' {clstime} {clscharge} {clssize} {clschi}\n'.format(
79  clstime=cluster.getClsTime(),
80  clscharge=cluster.getCharge(),
81  clssize=cluster.getSize(),
82  clschi=cluster.getChi2()
83  )
84  self.file.write(s)
85 
86  def terminate(self):
87  """ Close the output file."""
88 
89  self.file.close()
90 
91  def decode(self, vxdid):
92  """ Utility to decode sensor IDs """
93 
94  result = []
95  for f in self.vxdid_factors:
96  result.append(vxdid // f)
97  vxdid = vxdid % f
98 
99  return result
svd.dump_clusters.dump_clusters.__init__
def __init__(self, filename='dump_clusters.txt', collection='SVDClusters')
Definition: dump_clusters.py:21
svd.dump_clusters.dump_clusters
Definition: dump_clusters.py:13
Belle2::PyStoreObj
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:69
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
svd.dump_clusters.dump_clusters.file
file
Input file object.
Definition: dump_clusters.py:26