52 def peel(self, legendre_track_cand):
53 """Aggregate the track and MC information for track-fit validation"""
55 cdc_hit_store_array = self.cdcHits
57 # observations_variance = Belle2.TrackFindingCDC.CDCObservations2D()
58 observations = Belle2.TrackFindingCDC.CDCObservations2D()
59 hits = ROOT.std.vector("Belle2::TrackFindingCDC::TrackHit*")()
61 cdc_hit_ids = legendre_track_cand.getHitIDs(Belle2.Const.CDC)
62 for cdc_hit_id in cdc_hit_ids:
63 cdc_hit = cdc_hit_store_array[cdc_hit_id]
65 # We will only use the axial hits here as the FastFit can only process axial hits too
66 if cdc_hit.getISuperLayer() % 2 == 0:
67 cdc_wire_hit = Belle2.TrackFindingCDC.CDCWireHit(cdc_hit)
69 wireRefPos2D = cdc_wire_hit.getRefPos2D()
70 drift_length = cdc_wire_hit.getRefDriftLength()
71 observations.append(wireRefPos2D.x(), wireRefPos2D.y(), 0, 1 / abs(drift_length))
72 hits.push_back(Belle2.TrackFindingCDC.TrackHit(cdc_wire_hit))
75 track_par = ROOT.std.pair("double, double")()
76 ref_point = ROOT.std.pair("double, double")()
77 # Careful: viktors result is a reduced chi2
78 viktor_chi2 = self.fast_fitter.fitTrackCandidateFast(hits, track_par, ref_point, False) * (hits.size() - 4)
80 # Riemann without drift variances
81 trajectory2D = Belle2.TrackFindingCDC.CDCTrajectory2D()
82 self.circle_fitter.update(trajectory2D, observations)
83 riemann_chi2 = trajectory2D.getChi2()
86 riemann_chi2=riemann_chi2,
87 viktor_chi2=viktor_chi2,