Belle II Software development
ExpertTrackingValidationModule Class Reference
Inheritance diagram for ExpertTrackingValidationModule:
TrackingValidationModule

Public Member Functions

 __init__ (self, name, contact, fit=False, pulls=False, resolution=False, output_file_name=None, track_filter_object=AlwaysPassFilter(), plot_name_postfix='', plot_title_postfix='', exclude_profile_mc_parameter='', exclude_profile_pr_parameter='', use_expert_folder=True, trackCandidatesColumnName='RecoTracks', mcTrackCandidatesColumnName='MCRecoTracks', cdcHitsColumnName='CDCHits', write_tables=False)
 
 initialize (self)
 
 event (self)
 
 examine_hits_in_event (self)
 
 terminate (self)
 
 examine_pr_tracks (self)
 
 examine_mc_tracks (self)
 
 profiles_by_mc_parameters (self, xs, quantity_name, unit=None, parameter_names=['d_0', 'p_t', 'tan_lambda', 'multiplicity', 'phi', 'ndf',], make_hist=True, weights=None, is_asymmetry=False)
 
 profiles_by_pr_parameters (self, xs, quantity_name, unit=None, parameter_names=['Seed_p_t', 'Seed tan #lambda', 'Seed #phi'], make_hist=True)
 
 profiles_by_parameters_base (self, xs, quantity_name, parameter_names, profile_parameters, unit, make_hist, weights=None, is_asymmetry=False)
 

Public Attributes

 cdcHitsColumnname = cdcHitsColumnName
 cached name of the CDCHits StoreArray
 
 write_tables = write_tables
 cached value of the flag to write the validation figures of merit
 
 number_of_total_hits = collections.deque()
 number of all hits
 
 number_of_mc_hits = collections.deque()
 number of hits on MC track
 
 number_of_pr_hits = collections.deque()
 number of hits on pattern reconstructed tracks
 
 is_hit_found = collections.deque()
 list of flags for [not-]found hits
 
 is_hit_matched = collections.deque()
 list of flags for [not-]matched hits
 
 mc_missing = collections.deque()
 list of flags where MCRecoTrack is [not] missing MCTrackCand
 
 ratio_hits_in_mc_tracks_and_not_in_pr_tracks = collections.deque()
 list of fraction of number of hits in MC track but not in PR track
 
 ratio_hits_in_mc_tracks_and_in_pr_tracks = collections.deque()
 list of fraction of number of hits in MC track and in PR track
 
 ratio_hits_in_missing_mc_tracks_and_in_pr_tracks = collections.deque()
 list of fraction of number of hits in missing MC track and in PR track
 
 ratio_hits_in_mc_tracks_and_in_fake_pr_tracks
 list of fraction of number of hits in MC track and in fake PR track
 
 ratio_hits_in_mc_tracks_and_in_good_pr_tracks
 list of fraction of number of hits in MC track and in good PR track
 
 mc_is_primary = collections.deque()
 list of flags indicating that the MC track is [not] a primary MCParticle
 
 mc_number_of_hits = collections.deque()
 list of the number of MCTrackCandHits on the MC track
 
 number_of_connected_tracks = collections.deque()
 This is the number of mcTrackCands sharing a hit with the track cand.
 
 number_of_wrong_hits = collections.deque()
 This number gives information about the "badness" of the fake.
 
 pr_number_of_hits = collections.deque()
 list of the number of pattern-reconstructed hits
 
 pr_number_of_matched_hits = collections.deque()
 list of the number of pattern-reconstructed hits matched to MC track
 
 validation_name = name
 cached value of the tracking-validation name
 
 contact = contact
 cached value of the contact person name
 
 fit = fit
 cached value of the track fit
 
 pulls = pulls
 cached values of the track-fit pulls
 
 resolution = resolution
 cached value of the resolution
 
str output_file_name
 cached value of the output ROOT TFile
 
 track_filter_object = track_filter_object
 cached value of the track-filter object
 
 plot_name_postfix = plot_name_postfix
 cached value of the suffix appended to the plot names
 
 plot_title_postfix = plot_title_postfix
 cached value of the suffix appended to the plot titles
 
 exclude_profile_pr_parameter = exclude_profile_pr_parameter
 cached list of perigee parameters excluded from PR side plots
 
 exclude_profile_mc_parameter = exclude_profile_mc_parameter
 cached list of perigee parameters excluded from MC side plots
 
 use_expert_folder = use_expert_folder
 cached flag to use the "expert" folder for the pull and residual plots
 
 trackCandidatesColumnName = trackCandidatesColumnName
 cached name of the RecoTracks StoreArray
 
 mcTrackCandidatesColumnName = mcTrackCandidatesColumName
 cached name of the MCRecoTracks StoreArray
 
 non_expert_parameters = non_expert_parameters
 list of parameters that determines which plots (all with corresponding x-axis) are marked as shifter plots
 
list resolution_pt_binning = [0.05, 0.1, 0.25, 0.4, 0.6, 1., 1.5, 2., 3., 4.]
 default binning used for resolution plots over pt
 
 referenceFileName = None
 If this variable is set the code will open the file with same name as the file created here and will read the binning from the TH1/TProfile with same name as the one created here.
 
 trackMatchLookUp = Belle2.TrackMatchLookUp(self.mcTrackCandidatesColumnName, self.trackCandidatesColumnName)
 Track-match object that examines relation information from MCMatcherTracksModule.
 
 pr_clones_and_matches = collections.deque()
 Use dequeues in favour of lists to prevent repeated memory allocation of cost O(n)
 
 pr_matches = collections.deque()
 list of PR-track matches
 
 pr_fakes = collections.deque()
 list of PR-track fakes
 
 pr_seed_pt = collections.deque()
 list of PR-track seed pt values
 
 pr_seed_tan_lambdas = collections.deque()
 list of PR-track seed tan(lambda) values
 
 pr_seed_phi = collections.deque()
 list of PR-track seed phi values
 
 pr_omega_truths = collections.deque()
 list of PR-track seed omega-truth values
 
 pr_omega_estimates = collections.deque()
 list of PR-track seed omega-estimate values
 
 pr_omega_variances = collections.deque()
 list of PR-track seed omega-variance values
 
 pr_tan_lambda_truths = collections.deque()
 list of PR-track seed tan(lambda)-truth values
 
 pr_tan_lambda_estimates = collections.deque()
 list of PR-track seed tan(lambda)-estimate values
 
 pr_tan_lambda_variances = collections.deque()
 list of PR-track seed tan(lambda)-variance values
 
 pr_d0_truths = collections.deque()
 list of PR-track seed d0-truth values
 
 pr_d0_estimates = collections.deque()
 list of PR-track seed d0-estimate values
 
 pr_d0_variances = collections.deque()
 list of PR-track seed d0-variance values
 
 pr_z0_truths = collections.deque()
 list of PR-track seed z0-truth values
 
 pr_z0_estimates = collections.deque()
 list of PR-track seed z0-estimate values
 
 pr_pt_truths = collections.deque()
 list of PR-track seed pt-truth values
 
 pr_pt_estimates = collections.deque()
 list of PR-track seed pt-estimate values
 
 pr_bining_pt = collections.deque()
 list of PR-track binning values
 
 mc_matches = collections.deque()
 list of MC-track matches
 
 mc_charge_matches = collections.deque()
 list of MC-track matches, including matched charge
 
 mc_charge_asymmetry = collections.deque()
 list of MC-track matches charge asymmetry
 
 mc_charge_asymmetry_weights = collections.deque()
 list of MC-track matches charge asymmetry weights
 
 mc_primaries = collections.deque()
 list of MC-track primaries
 
 mc_d0s = collections.deque()
 list of MC-track d0 values
 
 mc_tan_lambdas = collections.deque()
 list of MC-track tan(lambda) values
 
 mc_phi = collections.deque()
 direction of the track in phi
 
 mc_pts = collections.deque()
 list of MC-track pt values
 
 mc_hit_efficiencies = collections.deque()
 list of MC-track hit efficiencies
 
 mc_multiplicities = collections.deque()
 list of MC-track multiplicities
 
 mc_ndf = collections.deque()
 list of MC-track number of degrees of freedom
 

Detailed Description

Module to collect more matching information about the found particles and to generate validation
plots and figures of merit on the performance of track finding. This module gives information on the
number of hits etc. 

Definition at line 39 of file hit_module.py.

Constructor & Destructor Documentation

◆ __init__()

__init__ ( self,
name,
contact,
fit = False,
pulls = False,
resolution = False,
output_file_name = None,
track_filter_object = AlwaysPassFilter(),
plot_name_postfix = '',
plot_title_postfix = '',
exclude_profile_mc_parameter = '',
exclude_profile_pr_parameter = '',
use_expert_folder = True,
trackCandidatesColumnName = 'RecoTracks',
mcTrackCandidatesColumnName = 'MCRecoTracks',
cdcHitsColumnName = 'CDCHits',
write_tables = False )
Constructor

Definition at line 45 of file hit_module.py.

62 write_tables=False):
63 """Constructor"""
64
65 TrackingValidationModule.__init__(
66 self,
67 name,
68 contact,
69 fit,
70 pulls,
71 resolution,
72 output_file_name,
73 track_filter_object,
74 plot_name_postfix,
75 plot_title_postfix,
76 exclude_profile_mc_parameter,
77 exclude_profile_pr_parameter,
78 use_expert_folder,
79 trackCandidatesColumnName,
80 mcTrackCandidatesColumnName)
81
82 ## cached name of the CDCHits StoreArray
83 self.cdcHitsColumnname = cdcHitsColumnName
84 ## cached value of the flag to write the validation figures of merit
85 self.write_tables = write_tables
86

Member Function Documentation

◆ event()

event ( self)
Event method

Reimplemented from TrackingValidationModule.

Definition at line 136 of file hit_module.py.

136 def event(self):
137 """Event method"""
138
139 TrackingValidationModule.event(self)
140 self.examine_hits_in_event()
141

◆ examine_hits_in_event()

examine_hits_in_event ( self)
Classify all of the hits in the event according to the parent track(s)

Definition at line 142 of file hit_module.py.

142 def examine_hits_in_event(self):
143 """Classify all of the hits in the event according to the parent track(s)"""
144
145 trackCands = Belle2.PyStoreArray(self.trackCandidatesColumnName)
146 mcTrackCands = Belle2.PyStoreArray(self.mcTrackCandidatesColumnName)
147 if self.cdcHitsColumnname not in Belle2.PyStoreArray.list():
148 # No CDC hits available, hit analysis incomplete, don't perform
149 # hit analysis
150 return
151 cdcHits = Belle2.PyStoreArray(self.cdcHitsColumnname)
152
153 # # CDC Hits in MC tracks
154 totalHitListMC = []
155 for mcTrackCand in mcTrackCands:
156 cdcHitIDs = [cdcHit.getArrayIndex() for cdcHit in getObjectList(mcTrackCand.getCDCHitList())] # Checked
157 # Working around a bug in ROOT where you should not access empty std::vectors
158 if len(cdcHitIDs) == 0:
159 cdcHitIDs = set()
160 else:
161 cdcHitIDs = set(cdcHitIDs)
162 totalHitListMC.extend(cdcHitIDs)
163
164 # Make the ids unique
165 totalHitListMC = set(totalHitListMC)
166
167 # # CDC Hits in PR tracks
168 totalHitListPR = []
169 totalHitListPRGood = []
170 totalHitListPRClone = []
171 totalHitListPRFake = []
172 for trackCand in trackCands:
173 if trackCand.getNumberOfTotalHits() == 0:
174 basf2.B2WARNING("Encountered a pattern recognition track with no hits")
175 continue
176
177 cdcHitIDs = [cdcHit.getArrayIndex() for cdcHit in getObjectList(trackCand.getCDCHitList())] # Checked
178 # Working around a bug in ROOT where you should not access empty std::vectors
179 if len(cdcHitIDs) == 0:
180 cdcHitIDs = set()
181 else:
182 cdcHitIDs = set(cdcHitIDs)
183
184 totalHitListPR.extend(cdcHitIDs)
185 if self.trackMatchLookUp.isAnyChargeMatchedPRRecoTrack(trackCand):
186 totalHitListPRGood.extend(cdcHitIDs)
187
188 if self.trackMatchLookUp.isAnyChargeClonePRRecoTrack(trackCand):
189 totalHitListPRClone.extend(cdcHitIDs)
190
191 if (self.trackMatchLookUp.isBackgroundPRRecoTrack(trackCand) or
192 self.trackMatchLookUp.isGhostPRRecoTrack(trackCand)):
193 totalHitListPRFake.extend(cdcHitIDs)
194
195 # Make the ids unique
196 totalHitListPR = set(totalHitListPR)
197 totalHitListPRGood = set(totalHitListPRGood)
198 totalHitListPRClone = set(totalHitListPRClone)
199 totalHitListPRFake = set(totalHitListPRFake)
200
201 # # All CDC Hits
202 totalHitList = {cdcHit.getArrayIndex() for cdcHit in cdcHits}
203
204 number_of_mc_hits = len(totalHitListMC)
205 number_of_pr_hits = len(totalHitListPR)
206 number_of_all_hits = len(totalHitList)
207
208 is_hit_matched = 0
209 is_hit_found = len(totalHitListMC & totalHitListPR)
210
211 for trackCand in trackCands:
212
213 is_matched = self.trackMatchLookUp.isAnyChargeMatchedPRRecoTrack(trackCand)
214 is_clone = self.trackMatchLookUp.isAnyChargeClonePRRecoTrack(trackCand)
215
216 trackCandHits = [cdcHit.getArrayIndex() for cdcHit in getObjectList(trackCand.getCDCHitList())]
217 # Working around a bug in ROOT where you should not access empty std::vectors
218 if len(trackCandHits) == 0:
219 trackCandHits = set()
220 else:
221 trackCandHits = set(trackCandHits)
222
223 # this is not very efficient...
224 list_of_connected_mc_tracks = set()
225 list_of_numbers_of_hits_for_connected_tracks = collections.deque()
226 # number_of_connected_tracks = 0
227 # number_of_wrong_hits = 0
228
229 for mcTrackCand in mcTrackCands:
230 mcTrackCandHits = [cdcHit.getArrayIndex() for cdcHit in getObjectList(mcTrackCand.getCDCHitList())]
231 # Working around a bug in ROOT where you should not access empty std::vectors
232 if len(mcTrackCandHits) == 0:
233 mcTrackCandHits = set()
234 else:
235 mcTrackCandHits = set(mcTrackCandHits)
236
237 length_of_intersection = len(mcTrackCandHits & trackCandHits)
238 if length_of_intersection > 0:
239 list_of_connected_mc_tracks.add(mcTrackCand)
240 list_of_numbers_of_hits_for_connected_tracks.append(length_of_intersection)
241
242 if len(list_of_numbers_of_hits_for_connected_tracks) == 0:
243 self.number_of_wrong_hits.append(0)
244 self.pr_number_of_matched_hits.append(0)
245 else:
246 maximum_intersection = \
247 max(list_of_numbers_of_hits_for_connected_tracks)
248 self.pr_number_of_matched_hits.append(sum(list_of_numbers_of_hits_for_connected_tracks))
249 self.number_of_wrong_hits.append(sum(list_of_numbers_of_hits_for_connected_tracks) -
250 maximum_intersection)
251
252 self.number_of_connected_tracks.append(len(list_of_connected_mc_tracks))
253
254 if is_matched or is_clone:
255 mcTrackCand = \
256 self.trackMatchLookUp.getRelatedMCRecoTrack(trackCand)
257 mcTrackCandHits = [cdcHit.getArrayIndex() for cdcHit in getObjectList(mcTrackCand.getCDCHitList())] # Checked
258 # Working around a bug in ROOT where you should not access empty std::vectors
259 if len(mcTrackCandHits) == 0:
260 mcTrackCandHits = set()
261 else:
262 mcTrackCandHits = set(mcTrackCandHits)
263
264 is_hit_matched += len(trackCandHits & mcTrackCandHits)
265
266 self.pr_number_of_hits.append(len(trackCandHits))
267
268 for mcTrackCand in mcTrackCands:
269 is_missing = \
270 self.trackMatchLookUp.isMissingMCRecoTrack(mcTrackCand)
271
272 mcTrackCandHits = [cdcHit.getArrayIndex() for cdcHit in getObjectList(mcTrackCand.getCDCHitList())] # Checked
273
274 # Working around a bug in ROOT where you should not access empty std::vectors
275 if len(mcTrackCandHits) == 0:
276 continue
277 else:
278 mcTrackCandHits = set(mcTrackCandHits)
279
280 ratio = 1.0 * len(mcTrackCandHits & totalHitListPR) / len(mcTrackCandHits)
281
282 self.ratio_hits_in_mc_tracks_and_not_in_pr_tracks.append(1.0 - ratio)
283 self.ratio_hits_in_mc_tracks_and_in_pr_tracks.append(ratio)
284 if is_missing:
285 self.ratio_hits_in_missing_mc_tracks_and_in_pr_tracks.append(ratio)
286 self.ratio_hits_in_mc_tracks_and_in_good_pr_tracks.append(
287 1.0 * len(mcTrackCandHits & totalHitListPRGood) / len(mcTrackCandHits))
288 self.ratio_hits_in_mc_tracks_and_in_fake_pr_tracks.append(
289 1.0 * len(mcTrackCandHits & totalHitListPRFake) / len(mcTrackCandHits))
290
291 mcParticle = \
292 self.trackMatchLookUp.getRelatedMCParticle(mcTrackCand)
293 is_primary = \
294 mcParticle.hasStatus(Belle2.MCParticle.c_PrimaryParticle)
295 self.mc_is_primary.append(is_primary)
296 self.mc_number_of_hits.append(len(mcTrackCandHits))
297
298 self.mc_missing.append(is_missing)
299
300 self.number_of_total_hits.append(number_of_all_hits)
301 self.number_of_mc_hits.append(number_of_mc_hits)
302 self.number_of_pr_hits.append(number_of_pr_hits)
303
304 self.is_hit_found.append(is_hit_found)
305 self.is_hit_matched.append(is_hit_matched)
306
A (simplified) python wrapper for StoreArray.
static std::vector< std::string > list(DataStore::EDurability durability=DataStore::EDurability::c_Event)
Return list of available arrays for given durability.

◆ examine_mc_tracks()

examine_mc_tracks ( self)
inherited
Looks at the individual Monte Carlo tracks and store information about them

Definition at line 381 of file module.py.

381 def examine_mc_tracks(self):
382 """Looks at the individual Monte Carlo tracks and store information about them"""
383
384 trackMatchLookUp = self.trackMatchLookUp
385
386 # Analyse from the Monte Carlo reference side
387 mcTrackCands = Belle2.PyStoreArray(self.mcTrackCandidatesColumnName)
388 mcParticles = Belle2.PyStoreArray('MCParticles')
389 if not mcTrackCands:
390 return
391
392 multiplicity = mcTrackCands.getEntries()
393 multiplicity_primaries = multiplicity
394
395 # measure the charge asymmetry
396 n_matched_plus = 0
397 n_matched_minus = 0
398
399 for mcTrackCand in mcTrackCands:
400 is_matched = trackMatchLookUp.isAnyChargeMatchedMCRecoTrack(mcTrackCand)
401
402 relatedPRtrackCand = trackMatchLookUp.getRelatedPRRecoTrack(mcTrackCand)
403 if relatedPRtrackCand:
404 is_chargeMatched = trackMatchLookUp.isChargeMatched(relatedPRtrackCand)
405 else:
406 is_chargeMatched = False
407
408 if is_chargeMatched:
409 if mcTrackCand.getChargeSeed() > 0:
410 n_matched_plus += 1
411 else:
412 n_matched_minus += 1
413
414 hit_efficiency = trackMatchLookUp.getRelatedEfficiency(mcTrackCand)
415 if math.isnan(hit_efficiency):
416 hit_efficiency = 0
417
418 mcParticle = trackMatchLookUp.getRelatedMCParticle(mcTrackCand)
419 mcHelix = getHelixFromMCParticle(mcParticle)
420
421 # fill the FilterProperties will all properties on this track
422 # gathered so far
423 filterProperties = FilterProperties(mcParticle=mcParticle,
424 mcParticles=mcParticles)
425
426 if not self.track_filter_object.doesMcPass(filterProperties):
427 continue
428
429 momentum = mcParticle.getMomentum()
430 pt = momentum.Rho()
431 tan_lambda = np.divide(1.0, math.tan(momentum.Theta())) # Avoid zero division exception
432 d0 = mcHelix.getD0()
433 det_hit_ids = get_det_hit_ids(mcTrackCand)
434 ndf = calc_ndf_from_det_hit_ids(det_hit_ids)
435
436 self.mc_matches.append(is_matched)
437 self.mc_charge_matches.append(is_chargeMatched and is_matched)
438 self.mc_primaries.append(is_primary(mcParticle))
439 self.mc_hit_efficiencies.append(hit_efficiency)
440 self.mc_pts.append(pt)
441 self.mc_d0s.append(d0)
442 self.mc_tan_lambdas.append(tan_lambda)
443 self.mc_multiplicities.append(multiplicity)
444 self.mc_phi.append(momentum.Phi())
445 self.mc_ndf.append(ndf)
446 if not is_primary(mcParticle):
447 multiplicity_primaries -= 1
448
449 charge_asymmetry = (n_matched_plus - n_matched_minus)/(n_matched_plus +
450 n_matched_minus) if (n_matched_plus + n_matched_minus) != 0 else 0
451 for mcTrackCand in mcTrackCands:
452 if is_primary(mcParticle):
453 self.mc_charge_asymmetry.append(charge_asymmetry)
454 self.mc_charge_asymmetry_weights.append(1./multiplicity_primaries)
455 else:
456 self.mc_charge_asymmetry.append(0)
457 self.mc_charge_asymmetry_weights.append(0)
458

◆ examine_pr_tracks()

examine_pr_tracks ( self)
inherited
Looks at the individual pattern reconstructed tracks and store information about them

Definition at line 264 of file module.py.

264 def examine_pr_tracks(self):
265 """Looks at the individual pattern reconstructed tracks and store information about them"""
266
267 # Analyse from the pattern recognition side
268 trackMatchLookUp = self.trackMatchLookUp
269
270 trackCands = Belle2.PyStoreArray(self.trackCandidatesColumnName)
271 mcParticles = Belle2.PyStoreArray("MCParticles")
272 if not trackCands:
273 return
274
275 for trackCand in trackCands:
276 is_matched = trackMatchLookUp.isAnyChargeMatchedPRRecoTrack(trackCand)
277 is_clone = trackMatchLookUp.isAnyChargeClonePRRecoTrack(trackCand)
278
279 pt_truth = float('nan')
280 omega_truth = float('nan')
281 tan_lambda_truth = float('nan')
282 d0_truth = float('nan')
283 z0_truth = float('nan')
284
285 mcParticle = None
286 if is_matched or is_clone:
287 # Only matched and clone tracks have a related MCParticle
288 mcParticle = trackMatchLookUp.getRelatedMCParticle(trackCand)
289 mcHelix = getHelixFromMCParticle(mcParticle)
290 omega_truth = mcHelix.getOmega()
291 tan_lambda_truth = mcHelix.getTanLambda()
292 pt_truth = mcParticle.getMomentum().Rho()
293 d0_truth = mcHelix.getD0()
294 z0_truth = mcHelix.getZ0()
295
296 # fill the FilterProperties will all properties on this track
297 # gathered so far
298 filterProperties = FilterProperties(trackCand=trackCand,
299 mcParticle=mcParticle, mcParticles=mcParticles)
300
301 if self.fit:
302 prTrackFitResult = \
303 trackMatchLookUp.getRelatedTrackFitResult(trackCand)
304 filterProperties.wasFitted = prTrackFitResult is not None
305 filterProperties.fitResult = prTrackFitResult
306 else:
307 prTrackFitResult = getSeedTrackFitResult(trackCand)
308 filterProperties.seedResult = prTrackFitResult
309
310 # skip this track due to the filtering rules ?
311 if not self.track_filter_object.doesPrPass(filterProperties):
312 continue
313
314 omega_estimate = float('nan')
315 omega_variance = float('nan')
316 tan_lambda_estimate = float('nan')
317 tan_lambda_variance = float('nan')
318 d0_estimate = float('nan')
319 d0_variance = float('nan')
320 z0_estimate = float('nan')
321 pt_estimate = float('nan')
322
323 momentum = float('nan')
324
325 # store seed information, they are always available from the pattern reco
326 # even if the fit was no successful
327 # this information can we used when plotting fake tracks, for example
328 seed_momentum = trackCand.getMomentumSeed()
329 # Avoid zero division exception
330 seed_tan_lambda = np.divide(1.0, math.tan(seed_momentum.Theta()))
331 seed_phi = seed_momentum.Phi()
332 seed_pt = seed_momentum.Rho()
333
334 if prTrackFitResult:
335 omega_estimate = prTrackFitResult.getOmega()
336 omega_variance = prTrackFitResult.getCov()[9]
337
338 tan_lambda_estimate = prTrackFitResult.getCotTheta()
339 tan_lambda_variance = prTrackFitResult.getCov()[14]
340
341 d0_estimate = prTrackFitResult.getD0()
342 d0_variance = prTrackFitResult.getCov()[0]
343
344 z0_estimate = prTrackFitResult.getZ0()
345
346 momentum = prTrackFitResult.getMomentum()
347 pt_estimate = momentum.Rho()
348
349 # store properties of the seed
350 self.pr_seed_pt.append(seed_pt)
351 self.pr_seed_tan_lambdas.append(seed_tan_lambda)
352 self.pr_seed_phi.append(seed_phi)
353
354 self.pr_bining_pt.append(pt_truth)
355
356 # store properties resulting from this trackfit
357 isMatchedOrIsClone = is_matched or is_clone
358 self.pr_clones_and_matches.append(isMatchedOrIsClone)
359 self.pr_matches.append(is_matched)
360
361 self.pr_fakes.append(not isMatchedOrIsClone)
362
363 self.pr_omega_estimates.append(omega_estimate)
364 self.pr_omega_variances.append(omega_variance)
365 self.pr_omega_truths.append(omega_truth)
366
367 self.pr_tan_lambda_estimates.append(tan_lambda_estimate)
368 self.pr_tan_lambda_variances.append(tan_lambda_variance)
369 self.pr_tan_lambda_truths.append(tan_lambda_truth)
370
371 self.pr_d0_estimates.append(d0_estimate)
372 self.pr_d0_variances.append(d0_variance)
373 self.pr_d0_truths.append(d0_truth)
374
375 self.pr_z0_estimates.append(z0_estimate)
376 self.pr_z0_truths.append(z0_truth)
377
378 self.pr_pt_estimates.append(pt_estimate)
379 self.pr_pt_truths.append(pt_truth)
380

◆ initialize()

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

Reimplemented from TrackingValidationModule.

Definition at line 87 of file hit_module.py.

87 def initialize(self):
88 """Receive signal at the start of event processing"""
89 TrackingValidationModule.initialize(self)
90
91 # Use dequeues in favour of lists to prevent repeated memory allocation of cost O(n)
92
93 self.number_of_total_hits = collections.deque()
94
95 self.number_of_mc_hits = collections.deque()
96
97 self.number_of_pr_hits = collections.deque()
98
99 self.is_hit_found = collections.deque()
100
101 self.is_hit_matched = collections.deque()
102
103 # MC information
104
105 self.mc_missing = collections.deque()
106
107 self.ratio_hits_in_mc_tracks_and_not_in_pr_tracks = collections.deque()
108
109 self.ratio_hits_in_mc_tracks_and_in_pr_tracks = collections.deque()
110
111 self.ratio_hits_in_missing_mc_tracks_and_in_pr_tracks = collections.deque()
112
113 self.ratio_hits_in_mc_tracks_and_in_fake_pr_tracks = \
114 collections.deque()
115
116 self.ratio_hits_in_mc_tracks_and_in_good_pr_tracks = \
117 collections.deque()
118
119 self.mc_is_primary = collections.deque()
120
121 self.mc_number_of_hits = collections.deque()
122
123 # PT information
124
125 self.number_of_connected_tracks = collections.deque()
126
127 self.number_of_wrong_hits = collections.deque()
128 # It is calculated by going through all hits of the fake track and the connected mc track cands and counting the number.
129 # These numbers are than summed up and subtracted by the biggest number
130 # of hits this candidates shares with the mc track cands.
131
132 self.pr_number_of_hits = collections.deque()
133
134 self.pr_number_of_matched_hits = collections.deque()
135

◆ profiles_by_mc_parameters()

profiles_by_mc_parameters ( self,
xs,
quantity_name,
unit = None,
parameter_names = [             'd_0',             'p_t',             'tan_lambda',             'multiplicity',             'phi',             'ndf',         ],
make_hist = True,
weights = None,
is_asymmetry = False )
inherited
Create profile histograms by MC-track parameters

Definition at line 708 of file module.py.

724 ):
725 """Create profile histograms by MC-track parameters"""
726
727 # apply exclusion list
728 new_parameter_names = [item for item in parameter_names if item
729 not in self.exclude_profile_mc_parameter]
730
731 # Profile versus the various parameters
732 profile_parameters = {
733 'd_{0}': self.mc_d0s,
734 'p_{t}': self.mc_pts,
735 'tan #lambda': self.mc_tan_lambdas,
736 '#phi': self.mc_phi,
737 'multiplicity': self.mc_multiplicities,
738 'ndf': self.mc_ndf,
739 }
740
741 return self.profiles_by_parameters_base(
742 xs,
743 quantity_name,
744 new_parameter_names,
745 profile_parameters,
746 unit,
747 make_hist,
748 weights=weights,
749 is_asymmetry=is_asymmetry
750 )
751

◆ profiles_by_parameters_base()

profiles_by_parameters_base ( self,
xs,
quantity_name,
parameter_names,
profile_parameters,
unit,
make_hist,
weights = None,
is_asymmetry = False )
inherited
Create profile histograms for generic parameters

Definition at line 780 of file module.py.

790 ):
791 """Create profile histograms for generic parameters"""
792
793 contact = self.contact
794
795 validation_plots = []
796 plot_name_prefix = self.validation_name + '_' + root_save_name(quantity_name) \
797 + self.plot_name_postfix
798
799 if make_hist:
800 # Histogram of the quantity
801 histogram = ValidationPlot(plot_name_prefix, self.referenceFileName)
802 histogram.hist(xs, weights=weights)
803
804 histogram.xlabel = quantity_name
805 histogram.description = 'Not a serious plot yet.'
806 histogram.check = ''
807 histogram.contact = contact
808 histogram.title = quantity_name + self.plot_title_postfix
809
810 validation_plots.append(histogram)
811
812 for (parameter_name, parameter_values) in list(profile_parameters.items()):
813 if parameter_name in parameter_names \
814 or root_save_name(parameter_name) in parameter_names:
815
816 is_expert = not (parameter_name in self.non_expert_parameters)
817
818 parameter_root_name = root_save_name(parameter_name)
819
820 # Apply some boundaries for the maximal tracking acceptance
821 # such that the plots look more instructive
822 if 'tan_lambda' in parameter_root_name:
823 lower_bound = -2.0
824 upper_bound = 5.0
825 # need different bounds for cosmics
826 if 'cosmics' in self.validation_name.lower() or \
827 'cosmics' in self.output_file_name.lower():
828 lower_bound = -1.5
829 upper_bound = 1.5
830 elif 'ndf' in parameter_root_name:
831 lower_bound = 0
832 upper_bound = min(200, np.max(parameter_values))
833 elif 'p_t' in parameter_root_name:
834 lower_bound = 0
835 upper_bound = 2.5
836 # need different upper_bound for cosmics
837 if 'cosmics' in self.validation_name.lower() or \
838 'cosmics' in self.output_file_name.lower():
839 upper_bound = 30
840 elif 'd_0' in parameter_root_name:
841 lower_bound = -0.06
842 upper_bound = 0.06
843 # need different bounds for cosmics
844 if 'cosmics' in self.validation_name.lower() or \
845 'cosmics' in self.output_file_name.lower():
846 lower_bound = -20
847 upper_bound = 20
848 else:
849 lower_bound = None
850 upper_bound = None
851
852 profile_plot_name = plot_name_prefix + '_by_' \
853 + root_save_name(parameter_name)
854 profile_plot = ValidationPlot(profile_plot_name, self.referenceFileName)
855 profile_plot.profile(parameter_values,
856 xs,
857 weights=weights,
858 outlier_z_score=10.0,
859 lower_bound=lower_bound,
860 upper_bound=upper_bound,
861 y_binary=True,
862 is_expert=is_expert,
863 is_asymmetry=is_asymmetry)
864
865 profile_plot.xlabel = compose_axis_label(parameter_name)
866 profile_plot.ylabel = compose_axis_label(quantity_name, unit)
867 profile_plot.title = quantity_name + ' by ' + parameter_name \
868 + ' profile' + self.plot_title_postfix
869
870 profile_plot.description = \
871 'Dependence of %s of the track over the true %s' \
872 % (quantity_name, parameter_name)
873 profile_plot.check = 'Variations should be low'
874 profile_plot.contact = contact
875 validation_plots.append(profile_plot)
876
877 return validation_plots

◆ profiles_by_pr_parameters()

profiles_by_pr_parameters ( self,
xs,
quantity_name,
unit = None,
parameter_names = ['Seed_p_t', 'Seed tan #lambda', 'Seed #phi'],
make_hist = True )
inherited
Create profile histograms by PR-track parameters

Definition at line 752 of file module.py.

759 ):
760 """Create profile histograms by PR-track parameters"""
761
762 # apply exclusion list
763 new_parameter_names = [item for item in parameter_names if item
764 not in self.exclude_profile_pr_parameter]
765
766 # Profile versus the various parameters
767 profile_parameters = {'Seed p_{t}': self.pr_seed_pt,
768 'Seed tan #lambda': self.pr_seed_tan_lambdas,
769 'Seed #phi': self.pr_seed_phi}
770
771 return self.profiles_by_parameters_base(
772 xs,
773 quantity_name,
774 new_parameter_names,
775 profile_parameters,
776 unit,
777 make_hist,
778 )
779

◆ terminate()

terminate ( self)
Receive signal at the end of event processing

Reimplemented from TrackingValidationModule.

Definition at line 307 of file hit_module.py.

307 def terminate(self):
308 """Receive signal at the end of event processing"""
309 TrackingValidationModule.terminate(self)
310
311 output_tfile = ROOT.TFile(self.output_file_name, 'update')
312
313 validation_plots = []
314
315 # Hit ratios #
316
317 all_tracks_plot = self.profiles_by_parameters_base(
318 xs=self.ratio_hits_in_mc_tracks_and_in_pr_tracks,
319 quantity_name="ratio of hits in MCTracks found by the track finder",
320 make_hist=True,
321 parameter_names=[],
322 profile_parameters={},
323 unit=None)
324
325 validation_plots.extend(all_tracks_plot)
326
327 missing_tracks_plot = self.profiles_by_parameters_base(
328 xs=self.ratio_hits_in_missing_mc_tracks_and_in_pr_tracks,
329 quantity_name="ratio of hits in missing MCTracks found by the track finder",
330 make_hist=True,
331 parameter_names=[],
332 profile_parameters={},
333 unit=None)
334
335 validation_plots.extend(missing_tracks_plot)
336
337 for validation_plot in validation_plots:
338 validation_plot.write()
339
340 if self.write_tables:
341 # MC Figures of merit
342 mc_figures_of_merit = \
343 ValidationManyFiguresOfMerit(f'{self.validation_name}_mc_figures_of_merit')
344
345 mc_figures_of_merit['mc_pts'] = self.mc_pts
346 mc_figures_of_merit['mc_d0s'] = self.mc_d0s
347 mc_figures_of_merit['mc_matches'] = self.mc_matches
348 mc_figures_of_merit['mc_hit_efficiencies'] = self.mc_hit_efficiencies
349 mc_figures_of_merit['mc_multiplicities'] = self.mc_multiplicities
350 mc_figures_of_merit['mc_phis'] = self.mc_phi
351 mc_figures_of_merit['mc_tan_lambdas'] = self.mc_tan_lambdas
352 mc_figures_of_merit['mc_missing'] = self.mc_missing
353 mc_figures_of_merit['mc_is_primary'] = self.mc_is_primary
354 mc_figures_of_merit['mc_number_of_hits'] = self.mc_number_of_hits
355 mc_figures_of_merit['ratio_hits_in_mc_tracks_and_in_good_pr_tracks'] = \
356 self.ratio_hits_in_mc_tracks_and_in_good_pr_tracks
357 mc_figures_of_merit['ratio_hits_in_mc_tracks_and_in_fake_pr_tracks'] = \
358 self.ratio_hits_in_mc_tracks_and_in_fake_pr_tracks
359 mc_figures_of_merit['ratio_hits_in_mc_tracks_and_not_in_pr_tracks'] = \
360 self.ratio_hits_in_mc_tracks_and_not_in_pr_tracks
361
362 mc_figures_of_merit.write()
363
364 # PR Figures of merit
365 pr_figures_of_merit = \
366 ValidationManyFiguresOfMerit(f'{self.validation_name}_pr_figures_of_merit')
367
368 pr_figures_of_merit['pr_clones_and_matches'] = \
369 self.pr_clones_and_matches
370 pr_figures_of_merit['pr_matches'] = self.pr_matches
371 pr_figures_of_merit['pr_fakes'] = self.pr_fakes
372 pr_figures_of_merit['pr_number_of_hits'] = self.pr_number_of_hits
373 pr_figures_of_merit['pr_number_of_matched_hits'] = \
374 self.pr_number_of_matched_hits
375 pr_figures_of_merit['pr_seed_tan_lambdas'] = self.pr_seed_tan_lambdas
376 pr_figures_of_merit['pr_seed_phi'] = self.pr_seed_phi
377
378 pr_figures_of_merit['number_of_connected_tracks'] = \
379 self.number_of_connected_tracks
380 pr_figures_of_merit['number_of_wrong_hits'] = self.number_of_wrong_hits
381
382 pr_figures_of_merit.write()
383
384 # Hit Figures of merit
385 hit_figures_of_merit = \
386 ValidationFiguresOfMerit(f'{self.validation_name}_hit_figures_of_merit')
387
388 hit_figures_of_merit['number_of_total_hits'] = \
389 np.sum(self.number_of_total_hits)
390 hit_figures_of_merit['number_of_mc_hits'] = \
391 np.sum(self.number_of_mc_hits)
392 hit_figures_of_merit['number_of_pr_hits'] = \
393 np.sum(self.number_of_pr_hits)
394 hit_figures_of_merit['is_hit_found'] = np.sum(self.is_hit_found)
395 hit_figures_of_merit['is_hit_matched'] = np.sum(self.is_hit_matched)
396
397 print(hit_figures_of_merit)
398 hit_figures_of_merit.write()
399
400 output_tfile.Close()

Member Data Documentation

◆ cdcHitsColumnname

cdcHitsColumnname = cdcHitsColumnName

cached name of the CDCHits StoreArray

Definition at line 83 of file hit_module.py.

◆ contact

contact = contact
inherited

cached value of the contact person name

Definition at line 132 of file module.py.

◆ exclude_profile_mc_parameter

exclude_profile_mc_parameter = exclude_profile_mc_parameter
inherited

cached list of perigee parameters excluded from MC side plots

Definition at line 151 of file module.py.

◆ exclude_profile_pr_parameter

exclude_profile_pr_parameter = exclude_profile_pr_parameter
inherited

cached list of perigee parameters excluded from PR side plots

Definition at line 149 of file module.py.

◆ fit

fit = fit
inherited

cached value of the track fit

Definition at line 134 of file module.py.

◆ is_hit_found

is_hit_found = collections.deque()

list of flags for [not-]found hits

Definition at line 99 of file hit_module.py.

◆ is_hit_matched

is_hit_matched = collections.deque()

list of flags for [not-]matched hits

Definition at line 101 of file hit_module.py.

◆ mc_charge_asymmetry

mc_charge_asymmetry = collections.deque()
inherited

list of MC-track matches charge asymmetry

Definition at line 238 of file module.py.

◆ mc_charge_asymmetry_weights

mc_charge_asymmetry_weights = collections.deque()
inherited

list of MC-track matches charge asymmetry weights

Definition at line 240 of file module.py.

◆ mc_charge_matches

mc_charge_matches = collections.deque()
inherited

list of MC-track matches, including matched charge

Definition at line 236 of file module.py.

◆ mc_d0s

mc_d0s = collections.deque()
inherited

list of MC-track d0 values

Definition at line 244 of file module.py.

◆ mc_hit_efficiencies

mc_hit_efficiencies = collections.deque()
inherited

list of MC-track hit efficiencies

Definition at line 252 of file module.py.

◆ mc_is_primary

mc_is_primary = collections.deque()

list of flags indicating that the MC track is [not] a primary MCParticle

Definition at line 119 of file hit_module.py.

◆ mc_matches

mc_matches = collections.deque()
inherited

list of MC-track matches

Definition at line 234 of file module.py.

◆ mc_missing

mc_missing = collections.deque()

list of flags where MCRecoTrack is [not] missing MCTrackCand

Definition at line 105 of file hit_module.py.

◆ mc_multiplicities

mc_multiplicities = collections.deque()
inherited

list of MC-track multiplicities

Definition at line 254 of file module.py.

◆ mc_ndf

mc_ndf = collections.deque()
inherited

list of MC-track number of degrees of freedom

Definition at line 256 of file module.py.

◆ mc_number_of_hits

mc_number_of_hits = collections.deque()

list of the number of MCTrackCandHits on the MC track

Definition at line 121 of file hit_module.py.

◆ mc_phi

mc_phi = collections.deque()
inherited

direction of the track in phi

Definition at line 248 of file module.py.

◆ mc_primaries

mc_primaries = collections.deque()
inherited

list of MC-track primaries

Definition at line 242 of file module.py.

◆ mc_pts

mc_pts = collections.deque()
inherited

list of MC-track pt values

Definition at line 250 of file module.py.

◆ mc_tan_lambdas

mc_tan_lambdas = collections.deque()
inherited

list of MC-track tan(lambda) values

Definition at line 246 of file module.py.

◆ mcTrackCandidatesColumnName

mcTrackCandidatesColumnName = mcTrackCandidatesColumName
inherited

cached name of the MCRecoTracks StoreArray

Definition at line 157 of file module.py.

◆ non_expert_parameters

non_expert_parameters = non_expert_parameters
inherited

list of parameters that determines which plots (all with corresponding x-axis) are marked as shifter plots

Definition at line 159 of file module.py.

◆ number_of_connected_tracks

number_of_connected_tracks = collections.deque()

This is the number of mcTrackCands sharing a hit with the track cand.

Definition at line 125 of file hit_module.py.

◆ number_of_mc_hits

number_of_mc_hits = collections.deque()

number of hits on MC track

Definition at line 95 of file hit_module.py.

◆ number_of_pr_hits

number_of_pr_hits = collections.deque()

number of hits on pattern reconstructed tracks

Definition at line 97 of file hit_module.py.

◆ number_of_total_hits

number_of_total_hits = collections.deque()

number of all hits

Definition at line 93 of file hit_module.py.

◆ number_of_wrong_hits

number_of_wrong_hits = collections.deque()

This number gives information about the "badness" of the fake.

Definition at line 127 of file hit_module.py.

◆ output_file_name

str output_file_name
inherited
Initial value:
= output_file_name or self.validation_name \
+ 'TrackingValidation.root'

cached value of the output ROOT TFile

Definition at line 140 of file module.py.

◆ plot_name_postfix

plot_name_postfix = plot_name_postfix
inherited

cached value of the suffix appended to the plot names

Definition at line 145 of file module.py.

◆ plot_title_postfix

plot_title_postfix = plot_title_postfix
inherited

cached value of the suffix appended to the plot titles

Definition at line 147 of file module.py.

◆ pr_bining_pt

pr_bining_pt = collections.deque()
inherited

list of PR-track binning values

Definition at line 231 of file module.py.

◆ pr_clones_and_matches

pr_clones_and_matches = collections.deque()
inherited

Use dequeues in favour of lists to prevent repeated memory allocation of cost O(n)

list of PR-track clones and matches

Definition at line 186 of file module.py.

◆ pr_d0_estimates

pr_d0_estimates = collections.deque()
inherited

list of PR-track seed d0-estimate values

Definition at line 216 of file module.py.

◆ pr_d0_truths

pr_d0_truths = collections.deque()
inherited

list of PR-track seed d0-truth values

Definition at line 214 of file module.py.

◆ pr_d0_variances

pr_d0_variances = collections.deque()
inherited

list of PR-track seed d0-variance values

Definition at line 218 of file module.py.

◆ pr_fakes

pr_fakes = collections.deque()
inherited

list of PR-track fakes

Definition at line 190 of file module.py.

◆ pr_matches

pr_matches = collections.deque()
inherited

list of PR-track matches

Definition at line 188 of file module.py.

◆ pr_number_of_hits

pr_number_of_hits = collections.deque()

list of the number of pattern-reconstructed hits

Definition at line 132 of file hit_module.py.

◆ pr_number_of_matched_hits

pr_number_of_matched_hits = collections.deque()

list of the number of pattern-reconstructed hits matched to MC track

Definition at line 134 of file hit_module.py.

◆ pr_omega_estimates

pr_omega_estimates = collections.deque()
inherited

list of PR-track seed omega-estimate values

Definition at line 202 of file module.py.

◆ pr_omega_truths

pr_omega_truths = collections.deque()
inherited

list of PR-track seed omega-truth values

Definition at line 200 of file module.py.

◆ pr_omega_variances

pr_omega_variances = collections.deque()
inherited

list of PR-track seed omega-variance values

Definition at line 204 of file module.py.

◆ pr_pt_estimates

pr_pt_estimates = collections.deque()
inherited

list of PR-track seed pt-estimate values

Definition at line 228 of file module.py.

◆ pr_pt_truths

pr_pt_truths = collections.deque()
inherited

list of PR-track seed pt-truth values

Definition at line 226 of file module.py.

◆ pr_seed_phi

pr_seed_phi = collections.deque()
inherited

list of PR-track seed phi values

Definition at line 197 of file module.py.

◆ pr_seed_pt

pr_seed_pt = collections.deque()
inherited

list of PR-track seed pt values

Definition at line 193 of file module.py.

◆ pr_seed_tan_lambdas

pr_seed_tan_lambdas = collections.deque()
inherited

list of PR-track seed tan(lambda) values

Definition at line 195 of file module.py.

◆ pr_tan_lambda_estimates

pr_tan_lambda_estimates = collections.deque()
inherited

list of PR-track seed tan(lambda)-estimate values

Definition at line 209 of file module.py.

◆ pr_tan_lambda_truths

pr_tan_lambda_truths = collections.deque()
inherited

list of PR-track seed tan(lambda)-truth values

Definition at line 207 of file module.py.

◆ pr_tan_lambda_variances

pr_tan_lambda_variances = collections.deque()
inherited

list of PR-track seed tan(lambda)-variance values

Definition at line 211 of file module.py.

◆ pr_z0_estimates

pr_z0_estimates = collections.deque()
inherited

list of PR-track seed z0-estimate values

Definition at line 223 of file module.py.

◆ pr_z0_truths

pr_z0_truths = collections.deque()
inherited

list of PR-track seed z0-truth values

Definition at line 221 of file module.py.

◆ pulls

pulls = pulls
inherited

cached values of the track-fit pulls

Definition at line 136 of file module.py.

◆ ratio_hits_in_mc_tracks_and_in_fake_pr_tracks

ratio_hits_in_mc_tracks_and_in_fake_pr_tracks
Initial value:
= \
collections.deque()

list of fraction of number of hits in MC track and in fake PR track

Definition at line 113 of file hit_module.py.

◆ ratio_hits_in_mc_tracks_and_in_good_pr_tracks

ratio_hits_in_mc_tracks_and_in_good_pr_tracks
Initial value:
= \
collections.deque()

list of fraction of number of hits in MC track and in good PR track

Definition at line 116 of file hit_module.py.

◆ ratio_hits_in_mc_tracks_and_in_pr_tracks

ratio_hits_in_mc_tracks_and_in_pr_tracks = collections.deque()

list of fraction of number of hits in MC track and in PR track

Definition at line 109 of file hit_module.py.

◆ ratio_hits_in_mc_tracks_and_not_in_pr_tracks

ratio_hits_in_mc_tracks_and_not_in_pr_tracks = collections.deque()

list of fraction of number of hits in MC track but not in PR track

Definition at line 107 of file hit_module.py.

◆ ratio_hits_in_missing_mc_tracks_and_in_pr_tracks

ratio_hits_in_missing_mc_tracks_and_in_pr_tracks = collections.deque()

list of fraction of number of hits in missing MC track and in PR track

Definition at line 111 of file hit_module.py.

◆ referenceFileName

referenceFileName = None
inherited

If this variable is set the code will open the file with same name as the file created here and will read the binning from the TH1/TProfile with same name as the one created here.

If you do not want this feature either remove the corresponding root files from the validation directory (this will trigger the default behaviour) or set the environmental variable DO_NOT_READ_BINNING

Definition at line 168 of file module.py.

◆ resolution

resolution = resolution
inherited

cached value of the resolution

Definition at line 138 of file module.py.

◆ resolution_pt_binning

list resolution_pt_binning = [0.05, 0.1, 0.25, 0.4, 0.6, 1., 1.5, 2., 3., 4.]
inherited

default binning used for resolution plots over pt

Definition at line 162 of file module.py.

◆ track_filter_object

track_filter_object = track_filter_object
inherited

cached value of the track-filter object

Definition at line 143 of file module.py.

◆ trackCandidatesColumnName

trackCandidatesColumnName = trackCandidatesColumnName
inherited

cached name of the RecoTracks StoreArray

Definition at line 155 of file module.py.

◆ trackMatchLookUp

trackMatchLookUp = Belle2.TrackMatchLookUp(self.mcTrackCandidatesColumnName, self.trackCandidatesColumnName)
inherited

Track-match object that examines relation information from MCMatcherTracksModule.

Definition at line 181 of file module.py.

◆ use_expert_folder

use_expert_folder = use_expert_folder
inherited

cached flag to use the "expert" folder for the pull and residual plots

Definition at line 153 of file module.py.

◆ validation_name

validation_name = name
inherited

cached value of the tracking-validation name

Definition at line 130 of file module.py.

◆ write_tables

write_tables = write_tables

cached value of the flag to write the validation figures of merit

Definition at line 85 of file hit_module.py.


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