Belle II Software  release-05-01-25
SVDValidationTTreeTrueHit.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 """
5 <header>
6  <contact> SVD Software Group, svd-software@belle2.org </contact>
7  <description>
8  This module is used for the SVD validation.
9  It gets information about truehits, saving in a ttree in a ROOT file.
10  </description>
11 </header>
12 """
13 from basf2 import *
14 
15 # Some ROOT tools
16 import ROOT
17 from ROOT import Belle2 # make Belle2 namespace available
18 from ROOT import gROOT, AddressOf
19 
20 # Define a ROOT struct to hold output data in the TTree
21 gROOT.ProcessLine('struct EventDataTrueHit {\
22  int sensor_id;\
23  int layer;\
24  int ladder;\
25  int sensor;\
26  int sensor_type;\
27  int strip_dir;\
28  };')
29 
30 from ROOT import EventDataTrueHit
31 
32 
34  '''class to create the true hit ttree'''
35 
36  def __init__(self):
37  """Initialize the module"""
38 
39  super(SVDValidationTTreeTrueHit, self).__init__()
40  self.file = ROOT.TFile('../SVDValidationTTreeTrueHit.root', 'recreate')
41  '''Output ROOT file'''
42  self.tree = ROOT.TTree('tree', 'Event data of SVD validation events')
43  '''TTrees for output data'''
44  self.data = EventDataTrueHit()
45  '''Instance of the EventDataTrueHit class'''
46 
47  # Declare tree branches
48  for key in EventDataTrueHit.__dict__:
49  if '__' not in key:
50  formstring = '/F'
51  if isinstance(self.data.__getattribute__(key), int):
52  formstring = '/I'
53  self.tree.Branch(key, AddressOf(self.data, key), key + formstring)
54 
55  def event(self):
56  """ Start with truehits and use the relation to get the corresponding clusters """
57  svdtruehits = Belle2.PyStoreArray('SVDTrueHits')
58  for truehit in svdtruehits:
59  clusters = truehit.getRelationsFrom('SVDClusters')
60  if len(clusters) == 0:
61  # Sensor identification
62  sensorID = truehit.getSensorID()
63  self.data.sensor_id = int(sensorID)
64  sensorNum = sensorID.getSensorNumber()
65  self.data.sensor = sensorNum
66  layerNum = sensorID.getLayerNumber()
67  self.data.layer = layerNum
68  if (layerNum == 3):
69  sensorType = 1
70  else:
71  if (sensorNum == 1):
72  sensorType = 0
73  else:
74  sensorType = 1
75  self.data.sensor_type = sensorType
76  ladderNum = sensorID.getLadderNumber()
77  self.data.ladder = ladderNum
78  self.data.strip_dir = -1
79  # Fill tree
80  self.file.cd()
81  self.tree.Fill()
82  else:
83  for cluster in clusters:
84  # Sensor identification
85  sensorID = truehit.getSensorID()
86  self.data.sensor_id = int(sensorID)
87  sensorNum = sensorID.getSensorNumber()
88  self.data.sensor = sensorNum
89  layerNum = sensorID.getLayerNumber()
90  self.data.layer = layerNum
91  if (layerNum == 3):
92  sensorType = 1
93  else:
94  if (sensorNum == 1):
95  sensorType = 0
96  else:
97  sensorType = 1
98  self.data.sensor_type = sensorType
99  ladderNum = sensorID.getLadderNumber()
100  self.data.ladder = ladderNum
101  if cluster.isUCluster():
102  self.data.strip_dir = 0
103  else:
104  self.data.strip_dir = 1
105  # Fill tree
106  self.file.cd()
107  self.tree.Fill()
108 
109  def terminate(self):
110  """Close the output file. """
111  self.file.cd()
112  self.file.Write()
113  self.file.Close()
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.__init__
def __init__(self)
Definition: SVDValidationTTreeTrueHit.py:36
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit
Definition: SVDValidationTTreeTrueHit.py:33
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.data
data
Definition: SVDValidationTTreeTrueHit.py:44
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.event
def event(self)
Definition: SVDValidationTTreeTrueHit.py:55
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.tree
tree
Definition: SVDValidationTTreeTrueHit.py:42
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.file
file
Definition: SVDValidationTTreeTrueHit.py:40
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
SVDValidationTTreeTrueHit.SVDValidationTTreeTrueHit.terminate
def terminate(self)
Definition: SVDValidationTTreeTrueHit.py:109