Belle II Software development
LegendreBinningValidationModule Class Reference
Inheritance diagram for LegendreBinningValidationModule:

Public Member Functions

def __init__ (self, output_file_name)
 
def initialize (self)
 
def prepare (self)
 
def pick (self, track)
 
def peel (self, track)
 

Public Attributes

 mc_track_lookup
 by default, there is no method to find matching MC tracks
 
 track_fitter
 Use the CDCReimannFitter with a constrained origin for track fitting.
 
 lower_curv_bounds
 cached copy of lower bounds
 
 upper_curv_bounds
 cached copy of upper bounds
 
 mc_hit_lookup
 Method to find matching MC hits.
 

Static Public Attributes

refiners save_tree = refiners.save_tree()
 Save a tree of all collected variables in a sub folder.
 
refiners save_histograms = refiners.save_histograms(outlier_z_score=5.0, allow_discrete=True)
 Save histograms in a sub folder.
 
refiners save_profiles
 Save profile histograms in a sub folder.
 
refiners save_cross_curv_profile
 Save cross-curvature profile histograms in a sub folder.
 
refiners save_scatter = refiners.save_scatters(x=['curvature_estimate'], y='n_hits')
 Save scatterplots in a sub folder.
 

Detailed Description

Module to collect information about the generated segments and
compose validation plots on terminate.

Definition at line 79 of file record.py.

Constructor & Destructor Documentation

◆ __init__()

def __init__ (   self,
  output_file_name 
)
Constructor

Definition at line 84 of file record.py.

84 def __init__(self, output_file_name):
85 """Constructor"""
86 super().__init__(foreach='CDCTrackVector',
87 output_file_name=output_file_name)
88
89
90 self.mc_track_lookup = None
91
92 origin_track_fitter = TFCDC.CDCRiemannFitter()
93 origin_track_fitter.setOriginConstrained()
94
95 self.track_fitter = origin_track_fitter
96
97 curv_bounds = []
98 with open('fine_curv_bounds.txt') as curv_bounds_file:
99 for curv_bound_line in curv_bounds_file:
100 curv_bounds.append(float(curv_bound_line))
101
102 bin_bounds = list(zip(curv_bounds[0::2], curv_bounds[1::2]))
103 bin_bounds = sorted(bin_bounds)
104
105
106 self.lower_curv_bounds = np.array([bin[0] for bin in bin_bounds])
107
108 self.upper_curv_bounds = np.array([bin[1] for bin in bin_bounds])
109
110 assert (len(self.lower_curv_bounds) == len(self.upper_curv_bounds))
111

Member Function Documentation

◆ initialize()

def initialize (   self)
Receive signal at the start of event processing

Definition at line 112 of file record.py.

112 def initialize(self):
113 """Receive signal at the start of event processing"""
114 super().initialize()
115
116 self.mc_track_lookup = TFCDC.CDCMCTrackLookUp.getInstance()
117
118 self.mc_hit_lookup = TFCDC.CDCMCHitLookUp.getInstance()
119

◆ peel()

def peel (   self,
  track 
)
Aggregate the track and MC information for track-segment analysis

Definition at line 132 of file record.py.

132 def peel(self, track):
133 """Aggregate the track and MC information for track-segment analysis"""
134 track_fitter = self.track_fitter
135
136 rl_drift_circle = 1
137 unit_variance = 0
138 observations2D = TFCDC.CDCObservations2D(rl_drift_circle, unit_variance)
139
140 for recoHit3D in track:
141 observations2D.append(recoHit3D)
142
143 trajectory2D = track_fitter.fit(observations2D)
144 trajectory2D.setLocalOrigin(TFCDC.Vector2D(0, 0))
145
146 n_hits = track.size()
147 pt = trajectory2D.getAbsMom2D()
148 curv = trajectory2D.getCurvature()
149 curl_curv = abs(self.lower_curv_bounds[0])
150 bin_curv = curv if abs(curv) < curl_curv else abs(curv)
151 curv_var = trajectory2D.getLocalVariance(0)
152 impact = trajectory2D.getGlobalImpact()
153 phi0 = trajectory2D.getLocalCircle().phi0()
154
155 circle = trajectory2D.getLocalCircle()
156 n12 = circle.n12()
157
158 cross_curvs = []
159 for recoHit3D in track:
160 wire_ref_pos = recoHit3D.getRefPos2D()
161 drift_length = recoHit3D.getSignedRecoDriftLength()
162 r = wire_ref_pos.norm()
163 cross_curv = -2 * (n12.dot(wire_ref_pos) - drift_length) / (r * r - drift_length * drift_length)
164 cross_curvs.append(cross_curv)
165
166 cross_curvs = np.array(cross_curvs)
167 cross_curv = np.median(cross_curvs)
168 cross_curv_var = np.median(np.abs(cross_curvs - cross_curv))
169
170 basic_curv_precision = TFCDC.PrecisionUtil.getBasicCurvPrecision(cross_curv)
171 origin_curv_precision = TFCDC.PrecisionUtil.getOriginCurvPrecision(cross_curv)
172 non_origin_curv_precision = TFCDC.PrecisionUtil.getNonOriginCurvPrecision(cross_curv)
173
174 bin_id = np.digitize([abs(cross_curv)], self.lower_curv_bounds)
175 if bin_id == 0:
176 max_curv_precision = 0.00007
177 else:
178 max_curv_precision = self.upper_curv_bounds[bin_id - 1] - self.lower_curv_bounds[bin_id - 1]
179
180 random_bin_id = random.randrange(len(self.upper_curv_bounds))
181 random_lower_curv_bound = self.lower_curv_bounds[random_bin_id]
182 random_upper_curv_bound = self.upper_curv_bounds[random_bin_id]
183 curv_dense = random.uniform(random_lower_curv_bound, random_upper_curv_bound)
184 curv_width = random_upper_curv_bound - random_lower_curv_bound
185
186 return dict(
187 n_hits=n_hits,
188 curvature_estimate=curv,
189 curvature_variance=curv_var,
190 abs_curvature_estimate=abs(curv),
191 inv_curv=1.0 / abs(curv),
192 cross_curv=cross_curv,
193 cross_curv_var=cross_curv_var,
194 basic_curv_precision=basic_curv_precision,
195 origin_curv_precision=origin_curv_precision,
196 non_origin_curv_precision=non_origin_curv_precision,
197 max_curv_precision=max_curv_precision,
198 pt=pt,
199 curv_bin=bin_curv,
200 curv_dense=curv_dense,
201 curv_width=curv_width,
202 impact_estimate=impact,
203 phi0=phi0,
204 )
205

◆ pick()

def pick (   self,
  track 
)
Select tracks with at least 4 segments and associated primary MC particle

Definition at line 124 of file record.py.

124 def pick(self, track):
125 """Select tracks with at least 4 segments and associated primary MC particle"""
126 mc_track_lookup = self.mc_track_lookup
127 mc_particle = mc_track_lookup.getMCParticle(track)
128
129 # Check that mc_particle is not a nullptr
130 return mc_particle and is_primary(mc_particle) and track.size() > 3
131

◆ prepare()

def prepare (   self)
Initialize the MC-hit lookup method

Definition at line 120 of file record.py.

120 def prepare(self):
121 """Initialize the MC-hit lookup method"""
122 TFCDC.CDCMCHitLookUp.getInstance().fill()
123

Member Data Documentation

◆ lower_curv_bounds

lower_curv_bounds

cached copy of lower bounds

Definition at line 106 of file record.py.

◆ mc_hit_lookup

mc_hit_lookup

Method to find matching MC hits.

Definition at line 118 of file record.py.

◆ mc_track_lookup

mc_track_lookup

by default, there is no method to find matching MC tracks

Method to find matching MC tracks.

Definition at line 90 of file record.py.

◆ save_cross_curv_profile

refiners save_cross_curv_profile
static
Initial value:
= refiners.save_profiles(x=['cross_curv'],
y=['cross_curv_var',
'curvature_estimate',
'basic_curv_precision',
'origin_curv_precision',
'non_origin_curv_precision',
'max_curv_precision',
],
outlier_z_score=5.0)

Save cross-curvature profile histograms in a sub folder.

Definition at line 218 of file record.py.

◆ save_histograms

refiners save_histograms = refiners.save_histograms(outlier_z_score=5.0, allow_discrete=True)
static

Save histograms in a sub folder.

Definition at line 210 of file record.py.

◆ save_profiles

refiners save_profiles
static
Initial value:
= refiners.save_profiles(x=['curvature_estimate', 'phi0'],
y='curvature_variance',
outlier_z_score=5.0)

Save profile histograms in a sub folder.

Definition at line 213 of file record.py.

◆ save_scatter

refiners save_scatter = refiners.save_scatters(x=['curvature_estimate'], y='n_hits')
static

Save scatterplots in a sub folder.

Definition at line 229 of file record.py.

◆ save_tree

refiners save_tree = refiners.save_tree()
static

Save a tree of all collected variables in a sub folder.

Definition at line 208 of file record.py.

◆ track_fitter

track_fitter

Use the CDCReimannFitter with a constrained origin for track fitting.

Definition at line 95 of file record.py.

◆ upper_curv_bounds

upper_curv_bounds

cached copy of upper bounds

Definition at line 108 of file record.py.


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