Belle II Software  release-05-02-19
quadTreePlotter.py
1 import basf2
2 import ROOT
3 from ROOT import Belle2
4 
5 from ROOT import gSystem
6 gSystem.Load('libtracking')
7 gSystem.Load('libtracking_trackFindingCDC')
8 
9 import matplotlib.pyplot as plt
10 import matplotlib.patches as patches
11 import matplotlib.colors as colors
12 import matplotlib.cm as cmx
13 import numpy as np
14 import subprocess
15 from datetime import datetime
16 import bisect
17 
18 from trackfindingcdc.cdcdisplay.svgdrawing import attributemaps
19 
20 
21 class QuadTreePlotter(basf2.Module):
22  """
23  This Module is able to draw the content coming from a QuadTreeImplementation with debugOutput = True.
24  """
25 
26  def __init__(self, queue):
27  """
28  Do not forget to set the ranges! Otherwise you will end up with an empty plot..
29  """
30  basf2.Module.__init__(self)
31 
32  self.file_name_of_quad_tree_content = "output.root"
33 
35 
36  self.range_x_min = 0
37 
38  self.range_x_max = 0
39 
40  self.range_y_min = 0
41 
42  self.range_y_max = 0
43 
44 
45  self.queue = queue
46 
47  self.file_names = []
48 
50  """
51  Draw the quad tree content coming from the root file if enabled.
52  """
53 
54  import seaborn as sb
55 
56  if not self.draw_quad_tree_content:
57  return
58 
59  input_file = ROOT.TFile(self.file_name_of_quad_tree_content)
60 
61  hist = input_file.Get("histUsed")
62 
63  xAxis = hist.GetXaxis()
64  yAxis = hist.GetYaxis()
65 
66  x_edges = np.array([xAxis.GetBinLowEdge(iX) for iX in range(1, xAxis.GetNbins() + 2)])
67  y_edges = np.array([yAxis.GetBinLowEdge(iY) for iY in range(1, yAxis.GetNbins() + 2)])
68 
69  l = np.array([[hist.GetBinContent(iX, iY) for iY in range(1, yAxis.GetNbins() + 1)]
70  for iX in range(1, xAxis.GetNbins() + 1)])
71 
72  hist = input_file.Get("histUnused")
73 
74  xAxis = hist.GetXaxis()
75  yAxis = hist.GetYaxis()
76 
77  x_edges = np.array([xAxis.GetBinLowEdge(iX) for iX in xrange(1, xAxis.GetNbins() + 2)])
78  y_edges = np.array([yAxis.GetBinLowEdge(iY) for iY in xrange(1, yAxis.GetNbins() + 2)])
79 
80  l2 = np.array([[hist.GetBinContent(iX, iY) for iY in xrange(1, yAxis.GetNbins() + 1)]
81  for iX in xrange(1, xAxis.GetNbins() + 1)])
82 
83  cmap = sb.cubehelix_palette(8, start=2, rot=0, dark=0, light=1, reverse=False, as_cmap=True)
84 
85  plt.gca().pcolorfast(x_edges, y_edges, (l + l2).T, cmap=cmap)
86 
87  x_labels = ["{1:0.{0}f}".format(int(not float(x).is_integer()), x) if i % 4 == 0 else "" for i, x in enumerate(x_edges)]
88  plt.xticks(x_edges, x_labels)
89  y_labels = ["{1:0.{0}f}".format(int(not float(y).is_integer()), y) if i % 4 == 0 else "" for i, y in enumerate(y_edges)]
90  plt.yticks(y_edges, y_labels)
91 
92  def save_and_show_file(self):
93  """
94  Save the plot to a svg and show it (maybe a png would be better?)
95  """
96  fileName = "/tmp/" + datetime.now().isoformat() + '.svg'
97  plt.savefig(fileName)
98  self.file_names.append(fileName)
99 
100  def init_plotting(self):
101  """
102  Initialize the figure with the plot ranges
103  We need to implement axes labels later!
104  """
105  plt.clf()
106  plt.xlim(self.range_x_min, self.range_x_max)
107  plt.ylim(self.range_y_min, self.range_y_max)
108 
109  def event(self):
110  """
111  Draw everything
112  """
113  self.init_plotting()
115  self.save_and_show_file()
116 
117  def terminate(self):
118  """Termination signal at the end of the event processing"""
119  self.queue.put("quadTree", self.file_names)
120 
121 
123 
124  """
125  Implementation of a quad tree plotter for SegmentQuadTrees
126  """
127 
128 
129  draw_segment_intersection = True and False
130 
131  draw_segment = True and False
132 
133  draw_segment_averaged = True and False
134 
135  draw_segment_fitted = True and False
136 
137  draw_mc_information = True and False
138 
139  draw_mc_hits = True and False
140 
141 
142  theta_shifted = False
143 
144  maximum_theta = np.pi
145 
146  def calculateIntersectionInQuadTreePicture(self, first, second):
147  """
148  Calculate the point where the two given hits intersect
149 
150  params
151  ------
152  first: hit
153  second: hit
154  """
155  positionFront = first.getRecoPos2D().conformalTransformed()
156  positionBack = second.getRecoPos2D().conformalTransformed()
157 
158  theta_cut = np.arctan2((positionBack - positionFront).x(), (positionFront - positionBack).y())
159 
160  if self.theta_shifted:
161  while theta_cut < - self.maximum_theta / 2:
162  theta_cut += self.maximum_theta
163  else:
164  while theta_cut < 0:
165  theta_cut += self.maximum_theta
166 
167  r_cut = positionFront.x() * np.cos(theta_cut) + positionFront.y() * np.sin(theta_cut)
168 
169  return theta_cut, r_cut
170 
172  """
173  Transform a given normal coordinate position to a legendre position (conformal transformed)
174 
175  params
176  ------
177  position: TrackFindingCDC.Vector2D
178  """
179  position = position.conformalTransformed()
180 
181  theta = np.linspace(self.range_x_min, self.range_x_max, 100)
182  r = position.x() * np.cos(theta) + position.y() * np.sin(theta)
183 
184  return theta, r
185 
186  def forAllAxialSegments(self, f):
187  """
188  Loop over all segments and execute a function
189 
190  params
191  ------
192  f: function
193  """
194  items = Belle2.PyStoreObj("CDCSegment2DVector")
195  wrapped_vector = items.obj()
196  vector = wrapped_vector.get()
197 
198  for quad_tree_item in vector:
199  if quad_tree_item.getStereoType() == 0:
200  f(quad_tree_item)
201 
202  def convertToQuadTreePicture(self, phi, mag, charge):
203  """
204  Convert given track parameters into a point in the legendre space
205 
206  params
207  ------
208  phi: phi of the track
209  mag: magnitude of pt
210  charge: charge of the track
211  """
212  theta = phi + np.pi / 2
213  r = 1 / mag * 1.5 * 0.00299792458 * charge
214  if self.theta_shifted:
215  if theta > self.maximum_theta / 2 or theta < -self.maximum_theta / 2:
216  theta = theta % self.maximum_theta - self.maximum_theta / 2
217  else:
218  r *= -1
219  else:
220  if theta > self.maximum_theta or theta < 0:
221  theta = theta % self.maximum_theta
222  else:
223  r *= -1
224  return theta, r
225 
226  def event(self):
227  """
228  Draw everything according to the given options
229 
230  Attributes
231  ----------
232  draw_segment_intersection
233  draw_segment
234  draw_segment_averaged
235  draw_segment_fitted
236  draw_mc_information
237  draw_mc_hits
238  """
239  if self.theta_shifted:
240 
241  self.range_x_min = -self.maximum_theta / 2
242 
243  self.range_x_max = self.maximum_theta / 2
244  else:
245  self.range_x_min = 0
246  self.range_x_max = self.maximum_theta
247 
248 
249  self.range_y_min = -0.08
250 
251  self.range_y_max = 0.08
252 
253  self.init_plotting()
254  # self.plotQuadTreeContent()
255 
257  map = attributemaps.SegmentMCTrackIdColorMap()
258 
259  def f(segment):
260  theta, r = self.calculateIntersectionInQuadTreePicture(segment.front(), segment.back())
261  plt.plot(theta, r, color=list(map(0, segment)), marker="o")
262 
263  self.forAllAxialSegments(f)
264 
265  if self.draw_segment:
266  map = attributemaps.SegmentMCTrackIdColorMap()
267 
268  def f(segment):
269  theta, r = self.calculatePositionInQuadTreePicture(segment.front().getRecoPos2D())
270  plt.plot(theta, r, color=list(map(0, segment)), marker="", ls="-")
271 
272  self.forAllAxialSegments(f)
273 
274  if self.draw_segment_averaged:
275  map = attributemaps.SegmentMCTrackIdColorMap()
276 
277  def f(segment):
278  middle_index = int(np.round(segment.size() / 2.0))
279  middle_point = list(segment.items())[middle_index]
280  theta_front, r_front = self.calculateIntersectionInQuadTreePicture(segment.front(), middle_point)
281  theta_back, r_back = self.calculateIntersectionInQuadTreePicture(middle_point, segment.back())
282 
283  plt.plot([theta_front, theta_back], [r_front, r_back], color=list(map(0, segment)), marker="o", ls="-")
284 
285  self.forAllAxialSegments(f)
286 
287  if self.draw_segment_fitted:
288  map = attributemaps.SegmentMCTrackIdColorMap()
290 
291  def f(segment):
292  trajectory = fitter.fit(segment)
293  momentum = trajectory.getUnitMom2D(Belle2.TrackFindingCDC.Vector2D(0, 0)).scale(trajectory.getAbsMom2D())
294  theta, r = self.convertToQuadTreePicture(momentum.phi(), momentum.norm(), trajectory.getChargeSign())
295  plt.plot(theta, r, color=list(map(0, segment)), marker="o")
296 
297  self.forAllAxialSegments(f)
298 
299  if self.draw_hits:
300  cdcHits = Belle2.PyStoreArray("CDCHits")
301  storedWireHits = Belle2.PyStoreObj('CDCWireHitVector')
302  wireHits = storedWireHits.obj().get()
303 
304  array = Belle2.PyStoreArray("MCTrackCands")
305  cdc_hits = [cdcHits[i] for track in array for i in track.getHitIDs()]
306 
307  for cdcHit in cdcHits:
308  if cdcHit in cdc_hits:
309  continue
310  wireHit = wireHits.at(bisect.bisect_left(wireHits, cdcHit))
311  theta, r = self.calculatePositionInQuadTreePicture(wireHit.getRefPos2D())
312 
313  plt.plot(theta, r, marker="", color="black", ls="-", alpha=0.8)
314 
315  if self.draw_mc_hits:
316  storedWireHits = Belle2.PyStoreObj('CDCWireHitVector')
317  wireHits = storedWireHits.obj().get()
318 
319  map = attributemaps.listColors
320  array = Belle2.PyStoreArray("MCTrackCands")
321  cdcHits = Belle2.PyStoreArray("CDCHits")
322 
323  for track in array:
324  mcTrackID = track.getMcTrackId()
325 
326  for cdcHitID in track.getHitIDs(Belle2.Const.CDC):
327  cdcHit = cdcHits[cdcHitID]
328  wireHit = wireHits.at(bisect.bisect_left(wireHits, cdcHit))
329 
330  theta, r = self.calculatePositionInQuadTreePicture(wireHit.getRefPos2D())
331 
332  plt.plot(theta, r, marker="", color=map[mcTrackID % len(map)], ls="-", alpha=0.2)
333 
334  if self.draw_mc_information:
335  map = attributemaps.listColors
336  array = Belle2.PyStoreArray("MCTrackCands")
337 
338  for track in array:
339  momentum = track.getMomSeed()
340 
341  # HARDCODED!!! Temporary solution
342  theta, r = self.convertToQuadTreePicture(momentum.Phi(), momentum.Mag(), track.getChargeSeed())
343  mcTrackID = track.getMcTrackId()
344 
345  plt.plot(theta, r, marker="o", color="black", ms=10)
346  plt.plot(theta, r, marker="o", color=map[mcTrackID % len(map)], ms=5)
347 
348  self.save_and_show_file()
349 
350 
352 
353  """
354  Implementation of a quad tree plotter for StereoHitAssignment
355  """
356 
357 
358  draw_mc_hits = False
359 
360  draw_mc_tracks = False
361 
362  draw_track_hits = False
363 
364  draw_last_track = True
365 
366  delete_bad_hits = False
367 
369  """
370  Convert a genfit::TrackCand into a TrackFindingCDC.CDCTrajectory3D
371 
372  params
373  ------
374  track: genfit::TrackCand
375  """
378 
379  position = Vector3D(track.getPosSeed())
380  momentum = Vector3D(track.getMomSeed())
381  charge = track.getChargeSeed()
382 
383  return Trajectory3D(position, momentum, charge)
384 
385  def create_reco_hit3D(self, cdcHit, trajectory3D, rlInfo):
386  """
387  Use a cdc hit and a trajectory to reconstruct a CDCRecoHit3D
388 
389  params
390  ------
391  cdcHit: CDCHit
392  trajectory3D: TrackFindingCDC.CDCTrajectory3D
393  rlInfo: RightLeftInfo ( = short)
394  """
395  storedWireHits = Belle2.PyStoreObj('CDCWireHitVector')
396  wireHits = storedWireHits.obj().get()
397 
399  wireHit = wireHits.at(bisect.bisect_left(wireHits, cdcHit))
400  rightLeftWireHit = Belle2.TrackFindingCDC.CDCRLWireHit(wireHit, rlInfo)
401  if rightLeftWireHit.getStereoType() != 0:
402  recoHit3D = CDCRecoHit3D.reconstruct(rightLeftWireHit, trajectory3D.getTrajectory2D())
403  return recoHit3D
404  else:
405  return None
406 
407  def get_plottable_line(self, recoHit3D):
408  """
409  Minim the task of the StereoQuadTree by showing the line of quadtree nodes
410  a hit belongs to
411  """
412  z0 = [self.range_y_min, self.range_y_max]
413  l = np.array((np.array(recoHit3D.getRecoPos3D().z()) - z0) / recoHit3D.getArcLength2D())
414  return l, z0
415 
416  def plot_hit_line(self, recoHit3D, color):
417  """
418  Draw one recoHit3D
419  """
420  if recoHit3D:
421  if recoHit3D.getStereoType() == 0:
422  return
423 
424  l, z0 = self.get_plottable_line(recoHit3D)
425  plt.plot(l, z0, marker="", ls="-", alpha=0.4, color=color)
426 
427  def event(self):
428  """
429  Draw the hit content according to the attributes
430 
431  Attributes
432  ----------
433  draw_mc_hits
434  draw_mc_tracks
435  draw_track_hits
436  draw_last_track
437  delete_bad_hits
438  """
439 
441 
442 
443  self.range_x_min = -2 - np.sqrt(3)
444 
445  self.range_x_max = 2 + np.sqrt(3)
446 
447 
448  self.range_y_min = -100
449 
451 
452  self.init_plotting()
454 
455  map = attributemaps.listColors
456  cdcHits = Belle2.PyStoreArray("CDCHits")
457 
458  items = Belle2.PyStoreObj("CDCTrackVector")
459  wrapped_vector = items.obj()
460  track_vector = wrapped_vector.get()
461 
462  mcHitLookUp = Belle2.TrackFindingCDC.CDCMCHitLookUp().getInstance()
463  mcHitLookUp.fill()
464 
465  storedWireHits = Belle2.PyStoreObj('CDCWireHitVector')
466  wireHits = storedWireHits.obj().get()
467 
468  if self.draw_mc_hits:
469  mc_track_cands = Belle2.PyStoreArray("MCTrackCands")
470 
471  for track in mc_track_cands:
472  mcTrackID = track.getMcTrackId()
473  trajectory = self.create_trajectory_from_track(track)
474 
475  for cdcHitID in track.getHitIDs(Belle2.Const.CDC):
476  cdcHit = cdcHits[cdcHitID]
477 
478  leftRecoHit3D = self.create_reco_hit3D(cdcHit, trajectory, -1)
479  rightRecoHit3D = self.create_reco_hit3D(cdcHit, trajectory, 1)
480 
481  self.plot_hit_line(leftRecoHit3D, color=map[mcTrackID % len(map)])
482  self.plot_hit_line(rightRecoHit3D, color=map[mcTrackID % len(map)])
483 
484  if self.draw_mc_tracks:
485  mc_track_cands = Belle2.PyStoreArray("MCTrackCands")
486 
487  for track in mc_track_cands:
488  mcTrackID = track.getMcTrackId()
489  trajectory = self.create_trajectory_from_track(track)
490  z0 = trajectory.getTrajectorySZ().getZ0()
491 
492  for cdcHitID in track.getHitIDs(Belle2.Const.CDC):
493  cdcHit = cdcHits[cdcHitID]
494  recoHit3D = self.create_reco_hit3D(cdcHit, trajectory, mcHitLookUp.getRLInfo(cdcHit))
495 
496  if recoHit3D:
497  l = (recoHit3D.getRecoPos3D().z() - z0) / recoHit3D.getArcLength2D()
498  plt.plot(l, z0, marker="o", color=map[mcTrackID % len(map)], ls="", alpha=0.2)
499 
500  if self.draw_track_hits:
501  for id, track in enumerate(track_vector):
502  for recoHit3D in list(track.items()):
503  self.plot_hit_line(recoHit3D, color=map[id % len(map)])
504 
505  if self.draw_last_track and len(track_vector) != 0:
506 
507  last_track = track_vector[-1]
508  trajectory = last_track.getStartTrajectory3D().getTrajectory2D()
509 
510  for wireHit in wireHits:
511  for rlInfo in (-1, 1):
512  recoHit3D = Belle2.TrackFindingCDC.CDCRecoHit3D.reconstruct(wireHit, rlInfo, trajectory)
513 
514  if (self.delete_bad_hits and
515  (rlWireHit.getRLInfo() != mcHitLookUp.getRLInfo(rlWireHit.getWireHit().getHit()) or
516  not recoHit3D.isInCellZBounds())):
517  continue
518 
519  if recoHit3D in list(last_track.items()):
520  color = map[len(track_vector) % len(map)]
521  else:
522  if rlWireHit.getRLInfo() == 1:
523  color = "black"
524  else:
525  color = "gray"
526  self.plot_hit_line(recoHit3D, color)
527 
528  plt.xlabel(r"$\tan \ \lambda$")
529  plt.ylabel(r"$z_0$")
530  self.save_and_show_file()
531 
532 
534 
535  """
536  A wrapper around the svg drawer in the tracking package that
537  writes its output files as a list to the queue
538  """
539 
540  def __init__(self, queue, label, *args, **kwargs):
541  """ The same as the base class, except:
542 
543  Arguments
544  ---------
545 
546  queue: The queue to write to
547  label: The key name in the queue
548  """
549 
550  self.queue = queue
551 
552  self.label = label
553  StereoQuadTreePlotter.__init__(self, *args, **kwargs)
554 
555 
556  self.file_list = []
557 
558  def terminate(self):
559  """ Overwrite the terminate to put the list to the queue"""
560  StereoQuadTreePlotter.terminate(self)
561  self.queue.put(self.label, self.file_list)
562 
564  """ Overwrite the function to listen for every new filename """
565 
566  from datetime import datetime
567  from matplotlib import pyplot as plt
568 
569  fileName = "/tmp/" + datetime.now().isoformat() + '.svg'
570  plt.savefig(fileName)
571  self.file_list.append(fileName)
trackfindingcdc.cdcdisplay.svgdrawing
Definition: __init__.py:1
quadTreePlotter.QuadTreePlotter.range_y_min
range_y_min
cached minimum y value
Definition: quadTreePlotter.py:40
Belle2::Vector3D
HepGeom::Vector3D< double > Vector3D
3D Vector
Definition: Cell.h:35
Belle2::TrackFindingCDC::CDCRecoHit3D
Class representing a three dimensional reconstructed hit.
Definition: CDCRecoHit3D.h:62
quadTreePlotter.QuadTreePlotter.file_names
file_names
cached array of output filenames (one file per image)
Definition: quadTreePlotter.py:47
Belle2::TrackFindingCDC::CDCRiemannFitter::getOriginCircleFitter
static const CDCRiemannFitter & getOriginCircleFitter()
Static getter for an origin circle fitter.
Definition: CDCRiemannFitter.cc:43
quadTreePlotter.StereoQuadTreePlotter.create_trajectory_from_track
def create_trajectory_from_track(self, track)
Definition: quadTreePlotter.py:368
quadTreePlotter.StereoQuadTreePlotter
Definition: quadTreePlotter.py:351
Belle2::TrackFindingCDC::Vector2D
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:37
quadTreePlotter.QuadTreePlotter.plot_quad_tree_content
def plot_quad_tree_content(self)
Definition: quadTreePlotter.py:49
quadTreePlotter.QueueStereoQuadTreePlotter.terminate
def terminate(self)
Definition: quadTreePlotter.py:558
quadTreePlotter.QuadTreePlotter.terminate
def terminate(self)
Definition: quadTreePlotter.py:117
quadTreePlotter.SegmentQuadTreePlotter.forAllAxialSegments
def forAllAxialSegments(self, f)
Definition: quadTreePlotter.py:186
quadTreePlotter.SegmentQuadTreePlotter.draw_mc_hits
bool draw_mc_hits
by default, do not draw the MC hits
Definition: quadTreePlotter.py:139
quadTreePlotter.QuadTreePlotter.range_x_max
range_x_max
cached maximum x value
Definition: quadTreePlotter.py:38
quadTreePlotter.StereoQuadTreePlotter.event
def event(self)
Definition: quadTreePlotter.py:427
quadTreePlotter.SegmentQuadTreePlotter.draw_segment_fitted
bool draw_segment_fitted
by default, do not draw a fitted segment
Definition: quadTreePlotter.py:135
quadTreePlotter.SegmentQuadTreePlotter.draw_segment_averaged
bool draw_segment_averaged
by default, do not draw an averaged segment
Definition: quadTreePlotter.py:133
quadTreePlotter.QuadTreePlotter.range_x_min
range_x_min
cached minimum x value
Definition: quadTreePlotter.py:36
quadTreePlotter.QueueStereoQuadTreePlotter
Definition: quadTreePlotter.py:533
quadTreePlotter.QuadTreePlotter.draw_quad_tree_content
draw_quad_tree_content
cached flag to draw QuadTree
Definition: quadTreePlotter.py:34
Belle2::PyStoreObj
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:69
quadTreePlotter.QueueStereoQuadTreePlotter.label
label
The label for writing to the queue.
Definition: quadTreePlotter.py:552
quadTreePlotter.SegmentQuadTreePlotter.event
def event(self)
Definition: quadTreePlotter.py:226
quadTreePlotter.StereoQuadTreePlotter.draw_mc_hits
bool draw_mc_hits
by default, do not draw the MC hits
Definition: quadTreePlotter.py:358
quadTreePlotter.SegmentQuadTreePlotter.draw_mc_information
bool draw_mc_information
by default, do not draw the MC information
Definition: quadTreePlotter.py:137
quadTreePlotter.QuadTreePlotter.init_plotting
def init_plotting(self)
Definition: quadTreePlotter.py:100
quadTreePlotter.SegmentQuadTreePlotter.draw_segment_intersection
bool draw_segment_intersection
by default, do not draw a segment intersection
Definition: quadTreePlotter.py:129
quadTreePlotter.SegmentQuadTreePlotter.theta_shifted
bool theta_shifted
by default, polar angles and cuts are in the range (0,pi) rather than (-pi/2,+pi/2)
Definition: quadTreePlotter.py:142
quadTreePlotter.SegmentQuadTreePlotter.calculatePositionInQuadTreePicture
def calculatePositionInQuadTreePicture(self, position)
Definition: quadTreePlotter.py:171
quadTreePlotter.StereoQuadTreePlotter.draw_last_track
bool draw_last_track
by default, draw the last track
Definition: quadTreePlotter.py:364
Belle2::TrackFindingCDC::CDCRLWireHit
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
Definition: CDCRLWireHit.h:51
quadTreePlotter.StereoQuadTreePlotter.delete_bad_hits
bool delete_bad_hits
by default, do not delete the bad track hits
Definition: quadTreePlotter.py:366
Belle2::TrackFindingCDC::CDCMCHitLookUp
Interface class to the Monte Carlo information for individual hits.
Definition: CDCMCHitLookUp.h:41
quadTreePlotter.QuadTreePlotter.save_and_show_file
def save_and_show_file(self)
Definition: quadTreePlotter.py:92
Belle2::TrackFindingCDC::Vector3D
A three dimensional vector.
Definition: Vector3D.h:34
quadTreePlotter.QueueStereoQuadTreePlotter.save_and_show_file
def save_and_show_file(self)
Definition: quadTreePlotter.py:563
quadTreePlotter.QueueStereoQuadTreePlotter.file_list
file_list
The list of created paths.
Definition: quadTreePlotter.py:556
quadTreePlotter.QuadTreePlotter.queue
queue
cached value of the queue input parameter
Definition: quadTreePlotter.py:45
quadTreePlotter.StereoQuadTreePlotter.get_plottable_line
def get_plottable_line(self, recoHit3D)
Definition: quadTreePlotter.py:407
quadTreePlotter.StereoQuadTreePlotter.create_reco_hit3D
def create_reco_hit3D(self, cdcHit, trajectory3D, rlInfo)
Definition: quadTreePlotter.py:385
quadTreePlotter.QuadTreePlotter.event
def event(self)
Definition: quadTreePlotter.py:109
Belle2::PyStoreArray
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:58
quadTreePlotter.QuadTreePlotter.range_y_max
range_y_max
cached maximum y value
Definition: quadTreePlotter.py:42
quadTreePlotter.StereoQuadTreePlotter.plot_hit_line
def plot_hit_line(self, recoHit3D, color)
Definition: quadTreePlotter.py:416
quadTreePlotter.StereoQuadTreePlotter.draw_track_hits
bool draw_track_hits
by default, do not draw the track hits
Definition: quadTreePlotter.py:362
quadTreePlotter.SegmentQuadTreePlotter.draw_segment
bool draw_segment
by default, do not draw a segment
Definition: quadTreePlotter.py:131
quadTreePlotter.StereoQuadTreePlotter.draw_mc_tracks
bool draw_mc_tracks
by default, do not draw the MC tracks
Definition: quadTreePlotter.py:360
Belle2::TrackFindingCDC::CDCRecoHit3D::reconstruct
static CDCRecoHit3D reconstruct(const CDCRecoHit2D &recoHit2D, const CDCTrajectory2D &trajectory2D)
Reconstructs the three dimensional hit from the two dimensional and the two dimensional trajectory.
Definition: CDCRecoHit3D.cc:58
quadTreePlotter.SegmentQuadTreePlotter.maximum_theta
maximum_theta
an alias for the maximum value of the polar angle
Definition: quadTreePlotter.py:144
quadTreePlotter.QueueStereoQuadTreePlotter.__init__
def __init__(self, queue, label, *args, **kwargs)
Definition: quadTreePlotter.py:540
Belle2::TrackFindingCDC::CDCTrajectory3D
Particle full three dimensional trajectory.
Definition: CDCTrajectory3D.h:47
quadTreePlotter.QuadTreePlotter.__init__
def __init__(self, queue)
Definition: quadTreePlotter.py:26
quadTreePlotter.QuadTreePlotter
Definition: quadTreePlotter.py:21
quadTreePlotter.SegmentQuadTreePlotter.calculateIntersectionInQuadTreePicture
def calculateIntersectionInQuadTreePicture(self, first, second)
Definition: quadTreePlotter.py:146
quadTreePlotter.QuadTreePlotter.file_name_of_quad_tree_content
file_name_of_quad_tree_content
cached output filename
Definition: quadTreePlotter.py:32
quadTreePlotter.SegmentQuadTreePlotter
Definition: quadTreePlotter.py:122
quadTreePlotter.SegmentQuadTreePlotter.convertToQuadTreePicture
def convertToQuadTreePicture(self, phi, mag, charge)
Definition: quadTreePlotter.py:202