Belle II Software  release-05-01-25
SVDParamDump.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 logging.log_level = LogLevel.WARNING
13 
14 
15 # ------------------------------------------------------------------------------
16 # Analysis module that dumps parameters of SVD sensors
17 # ------------------------------------------------------------------------------
18 
20 
21  """A module to dump sensor data of SVD sensors."""
22 
23  def __init__(self):
24  """Initialize the module"""
25 
26  super(DumpSVDSensorParameters, self).__init__()
27 
28  self.file = open('DumpSVDSensorParametersData.txt', 'w')
29 
30  def beginRun(self):
31  """ Write legend for file columns """
32 
33  self.file.write('sensor_type layer ladder sensor side pitch strip_length ')
34  self.file.write('c_backp c_inter c_coup noise\n')
35 
36  def event(self):
37  """Get values of sensor parameters from GeoCache and write them to file."""
38 
40  layer_sensors = {3: 2, 4: 3, 5: 4, 6: 5}
41  for sensorID in geoCache.getListOfSensors():
42  info = Belle2.SVD.SensorInfo(geoCache.getSensorInfo(sensorID))
43  # Now let's store some data
44  # Sesnor identification
45  layer = sensorID.getLayerNumber()
46  ladder = sensorID.getLadderNumber()
47  sensor = sensorID.getSensorNumber()
48  sensorType = 'layer3' if layer == 3 else ('slanted' if sensor == 1 else 'barrel')
49  origami = 0 if sensor == layer_sensors[layer] else 1
50  for side in ['u', 'v']:
51  s = '{sID} {orig} {layer} {ladder} {sensor} {uv} '.format(
52  sID=sensorType,
53  orig=origami,
54  layer=layer,
55  ladder=ladder,
56  sensor=sensor,
57  uv=side
58  )
59  # Parameter information
60  pitch = info.getUPitch() if side == 'u' else info.getVPitch()
61  halfCellU = info.getUCells()
62  halfCellV = info.getVCells()
63  strip_length = info.getStripLengthU(halfCellU) if side == 'u' else info.getStripLengthV(halfCellV)
64  capa_bp = info.getBackplaneCapacitanceU() if side == 'u' else info.getBackplaneCapacitanceV()
65  capa_inter = info.getInterstripCapacitanceU() if side == 'u' else info.getInterstripCapacitanceV()
66  capa_coup = info.getCouplingCapacitanceU() if side == 'u' else info.getCouplingCapacitanceV()
67  noise = info.getElectronicNoiseU() if side == 'u' else info.getElectronicNoiseV()
68  s += '{p:10.5f} {sl:10.5f} {cbp:10.5f} {cis:10.5f} {ccp:10.5f} {sig:10.5f}\n '.format(
69  p=pitch,
70  sl=strip_length,
71  cbp=capa_bp,
72  cis=capa_inter,
73  ccp=capa_coup,
74  sig=noise
75  )
76  self.file.write(s)
77 
78  def terminate(self):
79  """ Close the output file."""
80 
81  self.file.close()
82 
83 # ------------------------------------------------------------------------------
84 
85 # Particle gun module
86 particlegun = register_module('ParticleGun')
87 # Create Event information
88 eventinfosetter = register_module('EventInfoSetter')
89 # Show progress of processing
90 progress = register_module('Progress')
91 # Load parameters
92 gearbox = register_module('Gearbox')
93 # Create geometry
94 geometry = register_module('Geometry')
95 # Run simulation
96 simulation = register_module('FullSim')
97 # SVD digitization module
98 svddigi = register_module('SVDDigitizer')
99 # SVD clustering module
100 svdclust = register_module('SVDClusterizer')
101 # RootOutput
102 output = register_module('RootOutput')
103 # Analysis module
104 analyze = DumpSVDSensorParameters()
105 
106 # Specify number of events to generate
107 eventinfosetter.param('evtNumList', [1])
108 
109 # Set parameters for particlegun
110 particlegun.param({
111  'nTracks': 1,
112  'pdgCodes': [211, -211, 11, -11],
113  'momentumGeneration': 'normal',
114  'momentumParams': [3, 0.2],
115  'phiGeneration': 'uniform',
116  'phiParams': [0, 360],
117  'thetaGeneration': 'uniform',
118  'thetaParams': [89, 91],
119  'vertexGeneration': 'normal',
120  'xVertexParams': [0.0, 0.1],
121  'yVertexParams': [0.0, 0.1],
122  'zVertexParams': [0.0, 5.0]
123 })
124 
125 # Select subdetectors to be built
126 geometry.param('components', ['SVD'])
127 
128 # create processing path
129 main = create_path()
130 main.add_module(eventinfosetter)
131 main.add_module(progress)
132 main.add_module(particlegun)
133 main.add_module(gearbox)
134 main.add_module(geometry)
135 main.add_module(simulation)
136 main.add_module(svddigi)
137 main.add_module(svdclust)
138 main.add_module(analyze)
139 
140 # generate events
141 process(main)
142 
143 # show call statistics
144 print(statistics)
SVDParamDump.DumpSVDSensorParameters.file
file
Input file object.
Definition: SVDParamDump.py:28
SVDParamDump.DumpSVDSensorParameters.event
def event(self)
Definition: SVDParamDump.py:36
Belle2::SVD::SensorInfo
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
Definition: SensorInfo.h:35
SVDParamDump.DumpSVDSensorParameters.__init__
def __init__(self)
Definition: SVDParamDump.py:23
Belle2::VXD::GeoCache::getInstance
static GeoCache & getInstance()
Return a reference to the singleton instance.
Definition: GeoCache.cc:215
SVDParamDump.DumpSVDSensorParameters
Definition: SVDParamDump.py:19
SVDParamDump.DumpSVDSensorParameters.beginRun
def beginRun(self)
Definition: SVDParamDump.py:30
SVDParamDump.DumpSVDSensorParameters.terminate
def terminate(self)
Definition: SVDParamDump.py:78