Belle II Software  release-06-02-00
Ntuple Class Reference
Inheritance diagram for Ntuple:
Collaboration diagram for Ntuple:

Public Member Functions

def initialize (self)
 
def sortPeaks (self, unsortedPeaks)
 
def pdfHistogram (self, pdf)
 
def getEcms (self, tfit, chargedStable)
 
def trackSelected (self)
 
def getTOF (self, track, pdg, slot)
 
def event (self)
 
def terminate (self)
 

Public Attributes

 file
 file object
 
 bunchOffset
 histogram of bunch offset
 
 h_cth_vs_p
 histogram cos(theta) vs, momentum
 
 h_momentum
 histogram of momentum
 
 h_cth
 histogram of cos(theta)
 
 h_phi
 histogram of local phi
 
 h_z
 histogram of local z
 
 h_x
 histogram of local x
 
 h_charge
 histogram of charge
 
 h_poca_xy
 histogram of POCA x-y
 
 h_poca_z
 histogram of POCA z
 
 h_hitsCDC
 histogram of number of hits in CDC
 
 h_Ecms
 histogram of Ecms
 
 tree
 tree object
 
 data
 data structure
 

Static Public Attributes

int nhisto = 0
 histogram counter
 

Detailed Description

 Makes a flat ntuple 

Definition at line 94 of file cdst_timeResoNtuple.py.

Member Function Documentation

◆ event()

def event (   self)
 event processing 

Definition at line 239 of file cdst_timeResoNtuple.py.

239  def event(self):
240  ''' event processing '''
241 
242  recBunch = Belle2.PyStoreObj('TOPRecBunch')
243  if not recBunch:
244  b2.B2ERROR('no TOPRecBunch')
245  return
246  if not recBunch.isReconstructed():
247  return
248  self.bunchOffset.Fill(recBunch.getCurrentOffset())
249 
250  evtMetaData = Belle2.PyStoreObj('EventMetaData')
251  self.data.run = evtMetaData.getRun()
252  self.data.offset = recBunch.getCurrentOffset()
253  self.data.usedTrk = recBunch.getUsedTracks()
254 
255  for track in Belle2.PyStoreArray('Tracks'):
256  pdfs = track.getRelated('TOPPDFCollections')
257  if not pdfs:
258  continue
259  self.data.slot = pdfs.getModuleID()
260  momentum = pdfs.getAssociatedLocalMomentum()
261  position = pdfs.getAssociatedLocalHit()
262  self.data.p = momentum.Mag()
263  self.data.cth = momentum.CosTheta()
264  self.data.phi = momentum.Phi()
265  self.data.z = position.Z()
266  self.data.x = position.X()
267  self.data.tof = self.getTOF(track, 13, self.data.slot)
268  try:
269  tfit = track.getTrackFitResultWithClosestMass(Belle2.Const.muon)
270  except BaseException:
271  b2.B2ERROR("No trackFitResult available")
272  continue
273  self.data.charge = tfit.getChargeSign()
274  pocaPosition = tfit.getPosition()
275  self.data.poca_x = pocaPosition.X()
276  self.data.poca_y = pocaPosition.Y()
277  self.data.poca_z = pocaPosition.Z()
278  self.data.hitsCDC = tfit.getHitPatternCDC().getNHits()
279  Ecms = self.getEcms(tfit, Belle2.Const.muon)
280  self.data.dEcms = Ecms[0] - Ecms[1]
281  if not self.trackSelected():
282  continue
283  try:
284  topll = track.getRelated('TOPLikelihoods')
285  extHit = topll.getRelated('ExtHits')
286  timeZero = extHit.getRelated('TOPTimeZeros')
287  self.data.rec_t0 = timeZero.getTime()
288  self.data.valid_t0 = timeZero.isValid()
289  except BaseException:
290  self.data.rec_t0 = 0
291  self.data.valid_t0 = 0
292 
293  self.h_cth_vs_p.Fill(self.data.p, self.data.cth)
294  self.h_momentum.Fill(self.data.p)
295  self.h_cth.Fill(self.data.cth)
296  self.h_phi.Fill(self.data.phi)
297  self.h_z.Fill(self.data.z)
298  self.h_x.Fill(self.data.x)
299  self.h_charge.Fill(self.data.charge)
300  self.h_poca_xy.Fill(self.data.poca_x, self.data.poca_y)
301  self.h_poca_z.Fill(self.data.poca_z)
302  self.h_hitsCDC.Fill(self.data.hitsCDC)
303  self.h_Ecms.Fill(Ecms[0])
304  try:
305  pdf = pdfs.getHypothesisPDF(13)
306  except BaseException:
307  b2.B2ERROR("No PDF available for PDG = 13")
308  continue
309  self.data.itrk += 1
310  self.pdfHistogram(pdf)
311  x0 = position.X() - momentum.X() / momentum.Y() * position.Y() # emission
312  z0 = position.Z() - momentum.Z() / momentum.Y() * position.Y() # emission
313  self.data.nfot = 0
314  for digit in Belle2.PyStoreArray('TOPDigits'):
315  if digit.getModuleID() == self.data.slot and digit.getHitQuality() == 1:
316  k = self.data.nfot
317  if k >= 1000:
318  continue
319  self.data.nfot += 1
320  self.data.channel[k] = digit.getChannel()
321  self.data.pixel[k] = digit.getPixelID()
322  self.data.time[k] = digit.getTime()
323  self.data.timeErr[k] = digit.getTimeError()
324  self.data.pulseHeight[k] = digit.getPulseHeight()
325  self.data.pulseWidth[k] = digit.getPulseWidth()
326  self.data.sample[k] = digit.getModulo256Sample()
327  self.data.status[k] = digit.getStatus()
328  peaks = pdf[digit.getPixelID() - 1]
329  if peaks.empty():
330  self.data.t0[k] = 0
331  self.data.wid0[k] = 0
332  self.data.t1[k] = 0
333  else:
334  sorted_peaks = self.sortPeaks(peaks)
335  self.data.t0[k] = sorted_peaks[0].mean
336  self.data.wid0[k] = sorted_peaks[0].width
337  self.data.t1[k] = self.data.t0[k] + 100
338  if peaks.size() > 1:
339  self.data.t1[k] = sorted_peaks[1].mean
340  self.data.t_pdf[k] = 0
341  self.data.type[k] = 0
342  self.data.nx[k] = 0
343  self.data.ny[k] = 0
344  self.data.nxm[k] = 0
345  self.data.nym[k] = 0
346  self.data.nxe[k] = 0
347  self.data.nye[k] = 0
348  self.data.nys[k] = 0
349  self.data.xd[k] = 0
350  self.data.yd[k] = 0
351  self.data.xm[k] = 0
352  self.data.kx[k] = 0
353  self.data.ky[k] = 0
354  self.data.alpha[k] = 0
355  assocPDF = digit.getRelated('TOPAssociatedPDFs')
356  if assocPDF:
357  pik = assocPDF.getSinglePeak()
358  if pik:
359  self.data.t_pdf[k] = pik.position
360  self.data.type[k] = pik.type
361  self.data.nx[k] = pik.nx
362  self.data.ny[k] = pik.ny
363  self.data.nxm[k] = pik.nxm
364  self.data.nym[k] = pik.nym
365  self.data.nxe[k] = pik.nxe
366  self.data.nye[k] = pik.nye
367  if pik.kyd > 0:
368  self.data.nys[k] = int(pik.nye / 2)
369  else:
370  self.data.nys[k] = int((pik.nye + 1) / 2)
371  self.data.xd[k] = pik.xd
372  self.data.yd[k] = pik.yd
373  if pik.kze > 0:
374  self.data.xm[k] = x0 + pik.kxe / pik.kze * (130.0 - z0)
375  self.data.kx[k] = pik.kxe
376  self.data.ky[k] = pik.kye
377  self.data.alpha[k] = math.degrees(math.acos(abs(pik.kzd)))
378 
379  self.tree.Fill()
380 
a (simplified) python wrapper for StoreArray.
Definition: PyStoreArray.h:56
a (simplified) python wrapper for StoreObjPtr.
Definition: PyStoreObj.h:67

◆ getEcms()

def getEcms (   self,
  tfit,
  chargedStable 
)
 returns c.m.s. energy of a particle 

Definition at line 195 of file cdst_timeResoNtuple.py.

◆ getTOF()

def getTOF (   self,
  track,
  pdg,
  slot 
)
 returns timo-of-flight of extrapolated track 

Definition at line 218 of file cdst_timeResoNtuple.py.

◆ initialize()

def initialize (   self)
 initialize: open root file, construct ntuple 

Definition at line 100 of file cdst_timeResoNtuple.py.

◆ pdfHistogram()

def pdfHistogram (   self,
  pdf 
)
 make histogram of PDF peak positions for the first 20 tracks 

Definition at line 179 of file cdst_timeResoNtuple.py.

◆ sortPeaks()

def sortPeaks (   self,
  unsortedPeaks 
)
 sort PDF peaks according to their positions 

Definition at line 173 of file cdst_timeResoNtuple.py.

◆ terminate()

def terminate (   self)
 terminate: close root file 

Definition at line 381 of file cdst_timeResoNtuple.py.

◆ trackSelected()

def trackSelected (   self)
 returns true if track fulfills selection criteria  

Definition at line 205 of file cdst_timeResoNtuple.py.


The documentation for this class was generated from the following file: