Belle II Software light-2601-hyperion
Reweighter Class Reference

Public Member Functions

None __init__ (self, int n_variations=100, str weight_name="Weight", bool evaluate_plots=True, int nbins=50, float fillna=1.0)
 
list get_bin_columns (self, weight_df)
 
dict get_binning (self, weight_df)
 
dict get_fei_binning (self, weight_df)
 
None get_ntuple_variables (self, pd.DataFrame ntuple_df, ReweighterParticle particle)
 
pd.DataFrame merge_pid_weight_tables (self, dict weights_dict, dict pdg_pid_variable_dict)
 
None add_pid_weight_columns (self, pd.DataFrame ntuple_df, ReweighterParticle particle)
 
None add_pid_particle (self, str prefix, dict weights_dict, dict pdg_pid_variable_dict, dict variable_aliases=None, int sys_seed=None, bool syscorr=True)
 
ReweighterParticle get_particle (self, str prefix)
 
 convert_fei_table (self, pd.DataFrame table, float threshold)
 
None add_fei_particle (self, str prefix, pd.DataFrame table, float threshold, np.ndarray cov=None, dict variable_aliases=None)
 
 add_fei_weight_columns (self, pd.DataFrame ntuple_df, ReweighterParticle particle)
 
 reweight (self, pd.DataFrame df, bool generate_variations=True)
 
 print_coverage (self)
 
 plot_coverage (self)
 

Public Attributes

 n_variations = n_variations
 Number of weight variations to generate.
 
list particles = []
 List of particles.
 
list correlations = []
 Correlations between the particles.
 
 weight_name = weight_name
 Name of the weight column.
 
bool weights_generated = False
 Flag to indicate if the weights have been generated.
 
 evaluate_plots = evaluate_plots
 Flag to indicate if the plots should be evaluated.
 
 nbins = nbins
 Number of bins for the plots.
 
 fillna = fillna
 Value to fill NaN values.
 

Detailed Description

Class that reweights the dataframe.

Args:
    n_variations (int): Number of weight variations to generate.
    weight_name (str): Name of the weight column.
    evaluate_plots (bool): Flag to indicate if the plots should be evaluated.
    nbins (int): Number of bins for the plots.

Definition at line 237 of file sysvar.py.

Constructor & Destructor Documentation

◆ __init__()

None __init__ ( self,
int n_variations = 100,
str weight_name = "Weight",
bool evaluate_plots = True,
int nbins = 50,
float fillna = 1.0 )
Initializes the Reweighter class.

Definition at line 248 of file sysvar.py.

253 fillna: float = 1.0) -> None:
254 """
255 Initializes the Reweighter class.
256 """
257
258 self.n_variations = n_variations
259
260 self.particles = []
261
262 self.correlations = []
263
264 self.weight_name = weight_name
265
266 self.weights_generated = False
267
268 self.evaluate_plots = evaluate_plots
269
270 self.nbins = nbins
271
272 self.fillna = fillna
273

Member Function Documentation

◆ add_fei_particle()

None add_fei_particle ( self,
str prefix,
pd.DataFrame table,
float threshold,
np.ndarray cov = None,
dict variable_aliases = None )
Adds weight variations according to the total uncertainty for easier error propagation.

Args:
    prefix (str): Prefix for the new columns.
    table (pandas.DataFrame): Dataframe containing the efficiency weights.
    threshold (float): Threshold for the efficiency weights.
    cov (numpy.ndarray): Covariance matrix for the efficiency weights.
    variable_aliases (dict): Dictionary containing variable aliases.

Definition at line 511 of file sysvar.py.

516 ) -> None:
517 """
518 Adds weight variations according to the total uncertainty for easier error propagation.
519
520 Args:
521 prefix (str): Prefix for the new columns.
522 table (pandas.DataFrame): Dataframe containing the efficiency weights.
523 threshold (float): Threshold for the efficiency weights.
524 cov (numpy.ndarray): Covariance matrix for the efficiency weights.
525 variable_aliases (dict): Dictionary containing variable aliases.
526 """
527 # Empty prefix means no prefix
528 if prefix is None:
529 prefix = ''
530 if prefix and not prefix.endswith('_'):
531 prefix += '_'
532 if self.get_particle(prefix):
533 raise ValueError(f"Particle with prefix '{prefix}' already exists!")
534 if variable_aliases is None:
535 variable_aliases = {}
536 if table is None or len(table) == 0:
537 raise ValueError('No weights provided!')
538 converted_table = self.convert_fei_table(table, threshold)
539 pdg_binning = {(reco_pdg, mc_pdg): self.get_fei_binning(converted_table.query(f'PDG == {reco_pdg} and mcPDG == {mc_pdg}'))
540 for reco_pdg, mc_pdg in converted_table[['PDG', 'mcPDG']].value_counts().index.to_list()}
541 particle = ReweighterParticle(prefix,
542 type='FEI',
543 merged_table=converted_table,
544 pdg_binning=pdg_binning,
545 variable_aliases=variable_aliases,
546 weight_name=self.weight_name,
547 cov=cov)
548 self.particles += [particle]
549

◆ add_fei_weight_columns()

add_fei_weight_columns ( self,
pd.DataFrame ntuple_df,
ReweighterParticle particle )
Adds weight columns according to the FEI calibration tables

Definition at line 550 of file sysvar.py.

550 def add_fei_weight_columns(self, ntuple_df: pd.DataFrame, particle: ReweighterParticle):
551 """
552 Adds weight columns according to the FEI calibration tables
553 """
554 rest_str = 'rest'
555 particle.merged_table[_fei_mode_col]
556 # Apply a weight value from the weight table to the ntuple, based on the binning
557 binning_df = pd.DataFrame(index=ntuple_df.index)
558 # Take absolute value of mcPDG for binning because we have charge already
559 binning_df['PDG'] = ntuple_df[f'{particle.get_varname("PDG")}'].abs()
560 # Copy the mode ID from the ntuple
561 binning_df['num_mode'] = ntuple_df[particle.get_varname(_fei_mode_col)].astype(int)
562 # Default value in case if reco PDG is not a B-meson PDG
563 binning_df[_fei_mode_col] = np.nan
564 plot_values = {}
565 for reco_pdg, mc_pdg in particle.pdg_binning:
566 plot_values[(reco_pdg, mc_pdg)] = {}
567 binning_df.loc[binning_df['PDG'] == reco_pdg, _fei_mode_col] = particle.merged_table.query(
568 f'PDG == {reco_pdg} and {_fei_mode_col}.str.lower() == "{rest_str}"')[_fei_mode_col].values[0]
569 for mode in particle.pdg_binning[(reco_pdg, mc_pdg)][_fei_mode_col]:
570 binning_df.loc[(binning_df['PDG'] == reco_pdg) & (binning_df['num_mode'] == int(mode[4:])), _fei_mode_col] = mode
571 if self.evaluate_plots:
572 values = ntuple_df[f'{particle.get_varname(_fei_mode_col)}']
573 x_range = np.linspace(values.min(), values.max(), int(values.max())+1)
574 plot_values[(reco_pdg, mc_pdg)][_fei_mode_col] = x_range, np.histogram(values, bins=x_range, density=True)[0]
575
576 # merge the weight table with the ntuple on binning columns
577 weight_cols = _weight_cols
578 if particle.column_names:
579 weight_cols = particle.column_names
580 binning_df = binning_df.merge(particle.merged_table[weight_cols + ['PDG', _fei_mode_col]],
581 on=['PDG', _fei_mode_col], how='left')
582 binning_df.index = ntuple_df.index
583 particle.coverage = 1 - binning_df[weight_cols[0]].isna().sum() / len(binning_df)
584 particle.plot_values = plot_values
585 for col in weight_cols:
586 ntuple_df[f'{particle.get_varname(col)}'] = binning_df[col]
587

◆ add_pid_particle()

None add_pid_particle ( self,
str prefix,
dict weights_dict,
dict pdg_pid_variable_dict,
dict variable_aliases = None,
int sys_seed = None,
bool syscorr = True )
Adds weight variations according to the total uncertainty for easier error propagation.

Args:
    prefix (str): Prefix for the new columns.
    weights_dict (pandas.DataFrame): Dataframe containing the efficiency weights.
    pdg_pid_variable_dict (dict): Dictionary containing the PID variables and thresholds.
    variable_aliases (dict): Dictionary containing variable aliases.
    sys_seed (int): Seed for the systematic variations.
    syscorr (bool): When true assume systematics are 100% correlated defaults to
true. Note this is overridden by provision of a None value rho_sys

Definition at line 411 of file sysvar.py.

417 syscorr: bool = True) -> None:
418 """
419 Adds weight variations according to the total uncertainty for easier error propagation.
420
421 Args:
422 prefix (str): Prefix for the new columns.
423 weights_dict (pandas.DataFrame): Dataframe containing the efficiency weights.
424 pdg_pid_variable_dict (dict): Dictionary containing the PID variables and thresholds.
425 variable_aliases (dict): Dictionary containing variable aliases.
426 sys_seed (int): Seed for the systematic variations.
427 syscorr (bool): When true assume systematics are 100% correlated defaults to
428 true. Note this is overridden by provision of a None value rho_sys
429 """
430 # Empty prefix means no prefix
431 if prefix is None:
432 prefix = ''
433 # Add underscore if not present
434 if prefix and not prefix.endswith('_'):
435 prefix += '_'
436 if self.get_particle(prefix):
437 raise ValueError(f"Particle with prefix '{prefix}' already exists!")
438 if variable_aliases is None:
439 variable_aliases = {}
440 merged_weight_df = self.merge_pid_weight_tables(weights_dict, pdg_pid_variable_dict)
441 pdg_binning = {(reco_pdg, mc_pdg): self.get_binning(merged_weight_df.query(f'PDG == {reco_pdg} and mcPDG == {mc_pdg}'))
442 for reco_pdg, mc_pdg in merged_weight_df[['PDG', 'mcPDG']].value_counts().index.to_list()}
443 particle = ReweighterParticle(prefix,
444 type='PID',
445 merged_table=merged_weight_df,
446 pdg_binning=pdg_binning,
447 variable_aliases=variable_aliases,
448 weight_name=self.weight_name,
449 sys_seed=sys_seed,
450 syscorr=syscorr)
451 self.particles += [particle]
452

◆ add_pid_weight_columns()

None add_pid_weight_columns ( self,
pd.DataFrame ntuple_df,
ReweighterParticle particle )
Adds a weight and uncertainty columns to the dataframe.

Args:
    ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
    particle (ReweighterParticle): Particle object.

Definition at line 357 of file sysvar.py.

359 particle: ReweighterParticle) -> None:
360 """
361 Adds a weight and uncertainty columns to the dataframe.
362
363 Args:
364 ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
365 particle (ReweighterParticle): Particle object.
366 """
367 # Apply a weight value from the weight table to the ntuple, based on the binning
368 binning_df = pd.DataFrame(index=ntuple_df.index)
369 # Take absolute value of mcPDG for binning because we have charge already
370 binning_df['mcPDG'] = ntuple_df[f'{particle.get_varname("mcPDG")}'].abs()
371 binning_df['PDG'] = ntuple_df[f'{particle.get_varname("PDG")}'].abs()
372 plot_values = {}
373 for reco_pdg, mc_pdg in particle.pdg_binning:
374 ntuple_cut = f'abs({particle.get_varname("mcPDG")}) == {mc_pdg} and abs({particle.get_varname("PDG")}) == {reco_pdg}'
375 if ntuple_df.query(ntuple_cut).empty:
376 continue
377 plot_values[(reco_pdg, mc_pdg)] = {}
378 for var in particle.pdg_binning[(reco_pdg, mc_pdg)]:
379 labels = [(particle.pdg_binning[(reco_pdg, mc_pdg)][var][i-1], particle.pdg_binning[(reco_pdg, mc_pdg)][var][i])
380 for i in range(1, len(particle.pdg_binning[(reco_pdg, mc_pdg)][var]))]
381 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg), var] = pd.cut(ntuple_df.query(
382 ntuple_cut)[f'{particle.get_varname(var)}'],
383 particle.pdg_binning[(reco_pdg, mc_pdg)][var], labels=labels)
384 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
385 f'{var}_min'] = binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
386 var].str[0]
387 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
388 f'{var}_max'] = binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
389 var].str[1]
390 binning_df.drop(var, axis=1, inplace=True)
391 if self.evaluate_plots:
392 values = ntuple_df.query(ntuple_cut)[f'{particle.get_varname(var)}']
393 if len(values.unique()) < 2:
394 print(f'Skip {var} for plotting!')
395 continue
396 x_range = np.linspace(values.min(), values.max(), self.nbins)
397 plot_values[(reco_pdg, mc_pdg)][var] = x_range, np.histogram(values, bins=x_range, density=True)[0]
398 # merge the weight table with the ntuple on binning columns
399 weight_cols = _weight_cols
400 if particle.column_names:
401 weight_cols = particle.column_names
402 binning_df = binning_df.merge(particle.merged_table[weight_cols + binning_df.columns.tolist()],
403 on=binning_df.columns.tolist(), how='left')
404 binning_df.index = ntuple_df.index
405 particle.coverage = 1 - binning_df[weight_cols[0]].isna().sum() / len(binning_df)
406 particle.plot_values = plot_values
407 for col in weight_cols:
408 ntuple_df[f'{particle.get_varname(col)}'] = binning_df[col]
409 ntuple_df[f'{particle.get_varname(col)}'] = ntuple_df[f'{particle.get_varname(col)}'].fillna(self.fillna)
410

◆ convert_fei_table()

convert_fei_table ( self,
pd.DataFrame table,
float threshold )
Checks if the tables are provided in a legacy format and converts them to the standard format.

Definition at line 462 of file sysvar.py.

462 def convert_fei_table(self, table: pd.DataFrame, threshold: float):
463 """
464 Checks if the tables are provided in a legacy format and converts them to the standard format.
465 """
466 result = None
467 str_to_pdg = {'B+': 521, 'B-': 521, 'B0': 511}
468 if 'cal' in table.columns:
469 result = pd.DataFrame(index=table.index)
470 result['data_MC_ratio'] = table['cal']
471 result['PDG'] = table['Btag'].apply(lambda x: str_to_pdg.get(x))
472 # Assume these are only efficiency tables
473 result['mcPDG'] = result['PDG']
474 result['threshold'] = table['sig_prob_threshold']
475 result[_fei_mode_col] = table[_fei_mode_col]
476 result['data_MC_uncertainty_stat_dn'] = table['cal_stat_error']
477 result['data_MC_uncertainty_stat_up'] = table['cal_stat_error']
478 result['data_MC_uncertainty_sys_dn'] = table['cal_sys_error']
479 result['data_MC_uncertainty_sys_up'] = table['cal_sys_error']
480 elif 'cal factor' in table.columns:
481 result = pd.DataFrame(index=table.index)
482 result['data_MC_ratio'] = table['cal factor']
483 result['PDG'] = table['Btype'].apply(lambda x: str_to_pdg.get(x))
484 result['mcPDG'] = result['PDG']
485 result['threshold'] = table['sig prob cut']
486 # Assign the total error to the stat uncertainty and set syst. one to 0
487 result['data_MC_uncertainty_stat_dn'] = table['error']
488 result['data_MC_uncertainty_stat_up'] = table['error']
489 result['data_MC_uncertainty_sys_dn'] = 0
490 result['data_MC_uncertainty_sys_up'] = 0
491 result[_fei_mode_col] = table['mode']
492 elif 'dmID' in table.columns:
493 result = pd.DataFrame(index=table.index)
494 result['data_MC_ratio'] = table['central_value']
495 result['PDG'] = table['PDG'].apply(ast.literal_eval).str[0].abs()
496 result['mcPDG'] = result['PDG']
497 result['threshold'] = table['sigProb']
498 # Assign the total error to the stat uncertainty and set syst. one to 0
499 result['data_MC_uncertainty_stat_dn'] = table['total_error']
500 result['data_MC_uncertainty_stat_up'] = table['total_error']
501 result['data_MC_uncertainty_sys_dn'] = 0
502 result['data_MC_uncertainty_sys_up'] = 0
503 result[_fei_mode_col] = ('mode' + table['dmID'].astype(str)).replace('mode999', 'rest')
504 else:
505 result = table
506 result = result.query(f'threshold == {threshold}')
507 if len(result) == 0:
508 raise ValueError(f'No weights found for threshold {threshold}!')
509 return result
510

◆ get_bin_columns()

list get_bin_columns ( self,
weight_df )
Returns the kinematic bin columns of the dataframe.

Definition at line 274 of file sysvar.py.

274 def get_bin_columns(self, weight_df) -> list:
275 """
276 Returns the kinematic bin columns of the dataframe.
277 """
278 return [col for col in weight_df.columns if col.endswith('_min') or col.endswith('_max')]
279

◆ get_binning()

dict get_binning ( self,
weight_df )
Returns the kinematic binning of the dataframe.

Definition at line 280 of file sysvar.py.

280 def get_binning(self, weight_df) -> dict:
281 """
282 Returns the kinematic binning of the dataframe.
283 """
284 columns = self.get_bin_columns(weight_df)
285 var_names = {'_'.join(col.split('_')[:-1]) for col in columns}
286 bin_dict = {}
287 for var_name in var_names:
288 bin_dict[var_name] = []
289 for col in columns:
290 if col.startswith(var_name):
291 bin_dict[var_name] += list(weight_df[col].values)
292 bin_dict[var_name] = np.array(sorted(set(bin_dict[var_name])))
293 return bin_dict
294

◆ get_fei_binning()

dict get_fei_binning ( self,
weight_df )
Returns the irregular binning of the dataframe.

Definition at line 295 of file sysvar.py.

295 def get_fei_binning(self, weight_df) -> dict:
296 """
297 Returns the irregular binning of the dataframe.
298 """
299 return {_fei_mode_col: weight_df.loc[weight_df[_fei_mode_col].str.startswith('mode'),
300 _fei_mode_col].value_counts().index.to_list()}
301

◆ get_ntuple_variables()

None get_ntuple_variables ( self,
pd.DataFrame ntuple_df,
ReweighterParticle particle )
Checks if the variables are in the ntuple and returns them.

Args:
    ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
    particle (ReweighterParticle): Particle object containing the necessary variables.

Definition at line 302 of file sysvar.py.

304 particle: ReweighterParticle) -> None:
305 """
306 Checks if the variables are in the ntuple and returns them.
307
308 Args:
309 ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
310 particle (ReweighterParticle): Particle object containing the necessary variables.
311 """
312 ntuple_variables = particle.get_binning_variables()
313 ntuple_variables += particle.get_pdg_variables()
314 for var in ntuple_variables:
315 if var not in ntuple_df.columns:
316 raise ValueError(f'Variable {var} is not in the ntuple! Required variables are {ntuple_variables}')
317 return ntuple_variables
318

◆ get_particle()

ReweighterParticle get_particle ( self,
str prefix )
Get a particle by its prefix.

Definition at line 453 of file sysvar.py.

453 def get_particle(self, prefix: str) -> ReweighterParticle:
454 """
455 Get a particle by its prefix.
456 """
457 cands = [particle for particle in self.particles if particle.prefix.strip('_') == prefix.strip('_')]
458 if len(cands) == 0:
459 return None
460 return cands[0]
461

◆ merge_pid_weight_tables()

pd.DataFrame merge_pid_weight_tables ( self,
dict weights_dict,
dict pdg_pid_variable_dict )
Merges the efficiency and fake rate weight tables.

Args:
    weights_dict (dict): Dictionary containing the weight tables.
    pdg_pid_variable_dict (dict): Dictionary containing the PDG codes and variable names.

Definition at line 319 of file sysvar.py.

321 pdg_pid_variable_dict: dict) -> pd.DataFrame:
322 """
323 Merges the efficiency and fake rate weight tables.
324
325 Args:
326 weights_dict (dict): Dictionary containing the weight tables.
327 pdg_pid_variable_dict (dict): Dictionary containing the PDG codes and variable names.
328 """
329 weight_dfs = []
330 for reco_pdg, mc_pdg in weights_dict:
331 if reco_pdg not in pdg_pid_variable_dict:
332 raise ValueError(f'Reconstructed PDG code {reco_pdg} not found in thresholds!')
333 weight_df = weights_dict[(reco_pdg, mc_pdg)]
334 weight_df['mcPDG'] = mc_pdg
335 weight_df['PDG'] = reco_pdg
336 # Check if these are legacy tables:
337 if 'charge' in weight_df.columns:
338 charge_dict = {'+': [0, 2], '-': [-2, 0]}
339 weight_df[['charge_min', 'charge_max']] = [charge_dict[val] for val in weight_df['charge'].values]
340 weight_df = weight_df.drop(columns=['charge'])
341 # If iso_score is a single value, drop the min and max columns
342 if 'iso_score_min' in weight_df.columns and len(weight_df['iso_score_min'].unique()) == 1:
343 weight_df = weight_df.drop(columns=['iso_score_min', 'iso_score_max'])
344 pid_variable_name = pdg_pid_variable_dict[reco_pdg][0]
345 threshold = pdg_pid_variable_dict[reco_pdg][1]
346 selected_weights = weight_df.query(f'variable == "{pid_variable_name}" and threshold == {threshold}')
347 if len(selected_weights) == 0:
348 available_variables = weight_df['variable'].unique()
349 available_thresholds = weight_df['threshold'].unique()
350 raise ValueError(f'No weights found for PDG code {reco_pdg}, mcPDG {mc_pdg},'
351 f' variable {pid_variable_name} and threshold {threshold}!\n'
352 f' Available variables: {available_variables}\n'
353 f' Available thresholds: {available_thresholds}')
354 weight_dfs.append(selected_weights)
355 return pd.concat(weight_dfs, ignore_index=True)
356

◆ plot_coverage()

plot_coverage ( self)
Plots the coverage of each particle.

Definition at line 618 of file sysvar.py.

618 def plot_coverage(self):
619 """
620 Plots the coverage of each particle.
621 """
622 for particle in self.particles:
623 particle.plot_coverage()
624
625

◆ print_coverage()

print_coverage ( self)
Prints the coverage of each particle.

Definition at line 610 of file sysvar.py.

610 def print_coverage(self):
611 """
612 Prints the coverage of each particle.
613 """
614 print('Coverage:')
615 for particle in self.particles:
616 print(f'{particle.type} {particle.prefix.strip("_")}: {particle.coverage*100 :0.1f}%')
617

◆ reweight()

reweight ( self,
pd.DataFrame df,
bool generate_variations = True )
Reweights the dataframe according to the weight tables.

Args:
    df (pandas.DataFrame): Dataframe containing the analysis ntuple.
    generate_variations (bool): When true generate weight variations.

Definition at line 588 of file sysvar.py.

590 generate_variations: bool = True):
591 """
592 Reweights the dataframe according to the weight tables.
593
594 Args:
595 df (pandas.DataFrame): Dataframe containing the analysis ntuple.
596 generate_variations (bool): When true generate weight variations.
597 """
598 for particle in self.particles:
599 if particle.type not in _correction_types:
600 raise ValueError(f'Particle type {particle.type} not supported!')
601 print(f'Required variables: {self.get_ntuple_variables(df, particle)}')
602 if generate_variations:
603 particle.generate_variations(n_variations=self.n_variations)
604 if particle.type == 'PID':
605 self.add_pid_weight_columns(df, particle)
606 elif particle.type == 'FEI':
607 self.add_fei_weight_columns(df, particle)
608 return df
609

Member Data Documentation

◆ correlations

list correlations = []

Correlations between the particles.

Definition at line 262 of file sysvar.py.

◆ evaluate_plots

evaluate_plots = evaluate_plots

Flag to indicate if the plots should be evaluated.

Definition at line 268 of file sysvar.py.

◆ fillna

fillna = fillna

Value to fill NaN values.

Definition at line 272 of file sysvar.py.

◆ n_variations

n_variations = n_variations

Number of weight variations to generate.

Definition at line 258 of file sysvar.py.

◆ nbins

nbins = nbins

Number of bins for the plots.

Definition at line 270 of file sysvar.py.

◆ particles

list particles = []

List of particles.

Definition at line 260 of file sysvar.py.

◆ weight_name

weight_name = weight_name

Name of the weight column.

Definition at line 264 of file sysvar.py.

◆ weights_generated

bool weights_generated = False

Flag to indicate if the weights have been generated.

Definition at line 266 of file sysvar.py.


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