Belle II Software prerelease-11-00-00a
ExpertTrackingValidationModule Class Reference
Inheritance diagram for ExpertTrackingValidationModule:
Collaboration diagram for ExpertTrackingValidationModule:

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, plotTrackQualityIndicator=True)
 
 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
 
 plotTrackQualityIndicator = plotTrackQualityIndicator
 draw validation plots of track quality indicator
 
 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
 
 pr_track_QI = collections.deque()
 list of the quality indicator of tracks
 
 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,
plotTrackQualityIndicator = True )
Constructor

Definition at line 45 of file hit_module.py.

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

Member Function Documentation

◆ event()

event ( self)
Event method

Reimplemented from TrackingValidationModule.

Definition at line 141 of file hit_module.py.

141 def event(self):
142 """Event method"""
143
144 TrackingValidationModule.event(self)
145 self.examine_hits_in_event()
146

◆ 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 147 of file hit_module.py.

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

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

◆ 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 315 of file hit_module.py.

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

Member Data Documentation

◆ cdcHitsColumnname

cdcHitsColumnname = cdcHitsColumnName

cached name of the CDCHits StoreArray

Definition at line 84 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 102 of file hit_module.py.

◆ is_hit_matched

is_hit_matched = collections.deque()

list of flags for [not-]matched hits

Definition at line 104 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 122 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 108 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 124 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 128 of file hit_module.py.

◆ number_of_mc_hits

number_of_mc_hits = collections.deque()

number of hits on MC track

Definition at line 98 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 100 of file hit_module.py.

◆ number_of_total_hits

number_of_total_hits = collections.deque()

number of all hits

Definition at line 96 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 130 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.

◆ plotTrackQualityIndicator

plotTrackQualityIndicator = plotTrackQualityIndicator

draw validation plots of track quality indicator

Definition at line 88 of file hit_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 135 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 137 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_track_QI

pr_track_QI = collections.deque()

list of the quality indicator of tracks

Definition at line 139 of file hit_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 116 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 119 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 112 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 110 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 114 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 86 of file hit_module.py.


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