Belle II Software light-2609-luna
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, int seed=None)
 
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, int seed=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 311 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 322 of file sysvar.py.

327 fillna: float = 1.0) -> None:
328 """
329 Initializes the Reweighter class.
330 """
331
332 self.n_variations = n_variations
333
334 self.particles = []
335
336 self.correlations = []
337
338 self.weight_name = weight_name
339
340 self.weights_generated = False
341
342 self.evaluate_plots = evaluate_plots
343
344 self.nbins = nbins
345
346 self.fillna = fillna
347

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,
int seed = 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.
    seed (int): Base seed for the variations, see :meth:`add_pid_particle`.

Definition at line 590 of file sysvar.py.

596 ) -> None:
597 """
598 Adds weight variations according to the total uncertainty for easier error propagation.
599
600 Args:
601 prefix (str): Prefix for the new columns.
602 table (pandas.DataFrame): Dataframe containing the efficiency weights.
603 threshold (float): Threshold for the efficiency weights.
604 cov (numpy.ndarray): Covariance matrix for the efficiency weights.
605 variable_aliases (dict): Dictionary containing variable aliases.
606 seed (int): Base seed for the variations, see :meth:`add_pid_particle`.
607 """
608 # Empty prefix means no prefix
609 if prefix is None:
610 prefix = ''
611 if prefix and not prefix.endswith('_'):
612 prefix += '_'
613 if self.get_particle(prefix):
614 raise ValueError(f"Particle with prefix '{prefix}' already exists!")
615 if variable_aliases is None:
616 variable_aliases = {}
617 if table is None or len(table) == 0:
618 raise ValueError('No weights provided!')
619 converted_table = self.convert_fei_table(table, threshold)
620 pdg_binning = {(reco_pdg, mc_pdg): self.get_fei_binning(converted_table.query(f'PDG == {reco_pdg} and mcPDG == {mc_pdg}'))
621 for reco_pdg, mc_pdg in converted_table[['PDG', 'mcPDG']].value_counts().index.to_list()}
622 particle = ReweighterParticle(prefix,
623 type='FEI',
624 merged_table=converted_table,
625 pdg_binning=pdg_binning,
626 variable_aliases=variable_aliases,
627 weight_name=self.weight_name,
628 cov=cov,
629 seed=seed)
630 self.particles += [particle]
631

◆ 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 632 of file sysvar.py.

632 def add_fei_weight_columns(self, ntuple_df: pd.DataFrame, particle: ReweighterParticle):
633 """
634 Adds weight columns according to the FEI calibration tables
635 """
636 rest_str = 'rest'
637 particle.merged_table[_fei_mode_col]
638 # Apply a weight value from the weight table to the ntuple, based on the binning
639 binning_df = pd.DataFrame(index=ntuple_df.index)
640 # Take absolute value of mcPDG for binning because we have charge already
641 binning_df['PDG'] = ntuple_df[f'{particle.get_varname("PDG")}'].abs()
642 # Copy the mode ID from the ntuple
643 binning_df['num_mode'] = ntuple_df[particle.get_varname(_fei_mode_col)].astype(int)
644 # Default value in case if reco PDG is not a B-meson PDG
645 # Object dtype, as string mode labels are assigned below
646 binning_df[_fei_mode_col] = pd.Series(np.nan, index=binning_df.index, dtype='object')
647 plot_values = {}
648 for reco_pdg, mc_pdg in particle.pdg_binning:
649 plot_values[(reco_pdg, mc_pdg)] = {}
650 binning_df.loc[binning_df['PDG'] == reco_pdg, _fei_mode_col] = particle.merged_table.query(
651 f'PDG == {reco_pdg} and {_fei_mode_col}.str.lower() == "{rest_str}"')[_fei_mode_col].values[0]
652 for mode in particle.pdg_binning[(reco_pdg, mc_pdg)][_fei_mode_col]:
653 binning_df.loc[(binning_df['PDG'] == reco_pdg) & (binning_df['num_mode'] == int(mode[4:])), _fei_mode_col] = mode
654 if self.evaluate_plots:
655 values = ntuple_df[f'{particle.get_varname(_fei_mode_col)}']
656 x_range = np.linspace(values.min(), values.max(), int(values.max()) + 1)
657 plot_values[(reco_pdg, mc_pdg)][_fei_mode_col] = x_range, np.histogram(values, bins=x_range, density=True)[0]
658
659 # merge the weight table with the ntuple on binning columns
660 weight_cols = _weight_cols
661 if particle.column_names:
662 weight_cols = particle.column_names
663 binning_df = binning_df.merge(particle.merged_table[weight_cols + ['PDG', _fei_mode_col]],
664 on=['PDG', _fei_mode_col], how='left')
665 binning_df.index = ntuple_df.index
666 particle.coverage = 1 - binning_df[weight_cols[0]].isna().sum() / len(binning_df)
667 particle.plot_values = plot_values
668 for col in weight_cols:
669 ntuple_df[f'{particle.get_varname(col)}'] = binning_df[col]
670

◆ 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,
int seed = None )
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 only. Prefer seed.
    syscorr (bool): When true assume systematics are 100% correlated defaults to
true. Note this is overridden by provision of a None value rho_sys
    seed (int): Base seed for the systematic and statistical variations. Makes
them reproducible for a given weight table and independent between tables.

Definition at line 485 of file sysvar.py.

492 seed: int = None) -> None:
493 """
494 Adds weight variations according to the total uncertainty for easier error propagation.
495
496 Args:
497 prefix (str): Prefix for the new columns.
498 weights_dict (pandas.DataFrame): Dataframe containing the efficiency weights.
499 pdg_pid_variable_dict (dict): Dictionary containing the PID variables and thresholds.
500 variable_aliases (dict): Dictionary containing variable aliases.
501 sys_seed (int): Seed for the systematic variations only. Prefer seed.
502 syscorr (bool): When true assume systematics are 100% correlated defaults to
503 true. Note this is overridden by provision of a None value rho_sys
504 seed (int): Base seed for the systematic and statistical variations. Makes
505 them reproducible for a given weight table and independent between tables.
506 """
507 _check_seeds(sys_seed, seed)
508 # Empty prefix means no prefix
509 if prefix is None:
510 prefix = ''
511 # Add underscore if not present
512 if prefix and not prefix.endswith('_'):
513 prefix += '_'
514 if self.get_particle(prefix):
515 raise ValueError(f"Particle with prefix '{prefix}' already exists!")
516 if variable_aliases is None:
517 variable_aliases = {}
518 merged_weight_df = self.merge_pid_weight_tables(weights_dict, pdg_pid_variable_dict)
519 pdg_binning = {(reco_pdg, mc_pdg): self.get_binning(merged_weight_df.query(f'PDG == {reco_pdg} and mcPDG == {mc_pdg}'))
520 for reco_pdg, mc_pdg in merged_weight_df[['PDG', 'mcPDG']].value_counts().index.to_list()}
521 particle = ReweighterParticle(prefix,
522 type='PID',
523 merged_table=merged_weight_df,
524 pdg_binning=pdg_binning,
525 variable_aliases=variable_aliases,
526 weight_name=self.weight_name,
527 sys_seed=sys_seed,
528 syscorr=syscorr,
529 seed=seed)
530 self.particles += [particle]
531

◆ 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 431 of file sysvar.py.

433 particle: ReweighterParticle) -> None:
434 """
435 Adds a weight and uncertainty columns to the dataframe.
436
437 Args:
438 ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
439 particle (ReweighterParticle): Particle object.
440 """
441 # Apply a weight value from the weight table to the ntuple, based on the binning
442 binning_df = pd.DataFrame(index=ntuple_df.index)
443 # Take absolute value of mcPDG for binning because we have charge already
444 binning_df['mcPDG'] = ntuple_df[f'{particle.get_varname("mcPDG")}'].abs()
445 binning_df['PDG'] = ntuple_df[f'{particle.get_varname("PDG")}'].abs()
446 plot_values = {}
447 for reco_pdg, mc_pdg in particle.pdg_binning:
448 ntuple_cut = f'abs({particle.get_varname("mcPDG")}) == {mc_pdg} and abs({particle.get_varname("PDG")}) == {reco_pdg}'
449 if ntuple_df.query(ntuple_cut).empty:
450 continue
451 plot_values[(reco_pdg, mc_pdg)] = {}
452 for var in particle.pdg_binning[(reco_pdg, mc_pdg)]:
453 labels = [(particle.pdg_binning[(reco_pdg, mc_pdg)][var][i - 1], particle.pdg_binning[(reco_pdg, mc_pdg)][var][i])
454 for i in range(1, len(particle.pdg_binning[(reco_pdg, mc_pdg)][var]))]
455 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg), var] = pd.cut(ntuple_df.query(
456 ntuple_cut)[f'{particle.get_varname(var)}'],
457 particle.pdg_binning[(reco_pdg, mc_pdg)][var], labels=labels)
458 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
459 f'{var}_min'] = binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
460 var].str[0]
461 binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
462 f'{var}_max'] = binning_df.loc[(binning_df['mcPDG'] == mc_pdg) & (binning_df['PDG'] == reco_pdg),
463 var].str[1]
464 binning_df.drop(var, axis=1, inplace=True)
465 if self.evaluate_plots:
466 values = ntuple_df.query(ntuple_cut)[f'{particle.get_varname(var)}']
467 if len(values.unique()) < 2:
468 print(f'Skip {var} for plotting!')
469 continue
470 x_range = np.linspace(values.min(), values.max(), self.nbins)
471 plot_values[(reco_pdg, mc_pdg)][var] = x_range, np.histogram(values, bins=x_range, density=True)[0]
472 # merge the weight table with the ntuple on binning columns
473 weight_cols = _weight_cols
474 if particle.column_names:
475 weight_cols = particle.column_names
476 binning_df = binning_df.merge(particle.merged_table[weight_cols + binning_df.columns.tolist()],
477 on=binning_df.columns.tolist(), how='left')
478 binning_df.index = ntuple_df.index
479 particle.coverage = 1 - binning_df[weight_cols[0]].isna().sum() / len(binning_df)
480 particle.plot_values = plot_values
481 for col in weight_cols:
482 ntuple_df[f'{particle.get_varname(col)}'] = binning_df[col]
483 ntuple_df[f'{particle.get_varname(col)}'] = ntuple_df[f'{particle.get_varname(col)}'].fillna(self.fillna)
484

◆ 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 541 of file sysvar.py.

541 def convert_fei_table(self, table: pd.DataFrame, threshold: float):
542 """
543 Checks if the tables are provided in a legacy format and converts them to the standard format.
544 """
545 result = None
546 str_to_pdg = {'B+': 521, 'B-': 521, 'B0': 511}
547 if 'cal' in table.columns:
548 result = pd.DataFrame(index=table.index)
549 result['data_MC_ratio'] = table['cal']
550 result['PDG'] = table['Btag'].apply(lambda x: str_to_pdg.get(x))
551 # Assume these are only efficiency tables
552 result['mcPDG'] = result['PDG']
553 result['threshold'] = table['sig_prob_threshold']
554 result[_fei_mode_col] = table[_fei_mode_col]
555 result['data_MC_uncertainty_stat_dn'] = table['cal_stat_error']
556 result['data_MC_uncertainty_stat_up'] = table['cal_stat_error']
557 result['data_MC_uncertainty_sys_dn'] = table['cal_sys_error']
558 result['data_MC_uncertainty_sys_up'] = table['cal_sys_error']
559 elif 'cal factor' in table.columns:
560 result = pd.DataFrame(index=table.index)
561 result['data_MC_ratio'] = table['cal factor']
562 result['PDG'] = table['Btype'].apply(lambda x: str_to_pdg.get(x))
563 result['mcPDG'] = result['PDG']
564 result['threshold'] = table['sig prob cut']
565 # Assign the total error to the stat uncertainty and set syst. one to 0
566 result['data_MC_uncertainty_stat_dn'] = table['error']
567 result['data_MC_uncertainty_stat_up'] = table['error']
568 result['data_MC_uncertainty_sys_dn'] = 0
569 result['data_MC_uncertainty_sys_up'] = 0
570 result[_fei_mode_col] = table['mode']
571 elif 'dmID' in table.columns:
572 result = pd.DataFrame(index=table.index)
573 result['data_MC_ratio'] = table['central_value']
574 result['PDG'] = table['PDG'].apply(ast.literal_eval).str[0].abs()
575 result['mcPDG'] = result['PDG']
576 result['threshold'] = table['sigProb']
577 # Assign the total error to the stat uncertainty and set syst. one to 0
578 result['data_MC_uncertainty_stat_dn'] = table['total_error']
579 result['data_MC_uncertainty_stat_up'] = table['total_error']
580 result['data_MC_uncertainty_sys_dn'] = 0
581 result['data_MC_uncertainty_sys_up'] = 0
582 result[_fei_mode_col] = ('mode' + table['dmID'].astype(str)).replace('mode999', 'rest')
583 else:
584 result = table
585 result = result.query(f'threshold == {threshold}')
586 if len(result) == 0:
587 raise ValueError(f'No weights found for threshold {threshold}!')
588 return result
589

◆ get_bin_columns()

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

Definition at line 348 of file sysvar.py.

348 def get_bin_columns(self, weight_df) -> list:
349 """
350 Returns the kinematic bin columns of the dataframe.
351 """
352 return [col for col in weight_df.columns if col.endswith('_min') or col.endswith('_max')]
353

◆ get_binning()

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

Definition at line 354 of file sysvar.py.

354 def get_binning(self, weight_df) -> dict:
355 """
356 Returns the kinematic binning of the dataframe.
357 """
358 columns = self.get_bin_columns(weight_df)
359 var_names = {'_'.join(col.split('_')[:-1]) for col in columns}
360 bin_dict = {}
361 for var_name in var_names:
362 bin_dict[var_name] = []
363 for col in columns:
364 if col.startswith(var_name):
365 bin_dict[var_name] += list(weight_df[col].values)
366 bin_dict[var_name] = np.array(sorted(set(bin_dict[var_name])))
367 return bin_dict
368

◆ get_fei_binning()

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

Definition at line 369 of file sysvar.py.

369 def get_fei_binning(self, weight_df) -> dict:
370 """
371 Returns the irregular binning of the dataframe.
372 """
373 return {_fei_mode_col: weight_df.loc[weight_df[_fei_mode_col].str.startswith('mode'),
374 _fei_mode_col].value_counts().index.to_list()}
375

◆ 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 376 of file sysvar.py.

378 particle: ReweighterParticle) -> None:
379 """
380 Checks if the variables are in the ntuple and returns them.
381
382 Args:
383 ntuple_df (pandas.DataFrame): Dataframe containing the analysis ntuple.
384 particle (ReweighterParticle): Particle object containing the necessary variables.
385 """
386 ntuple_variables = particle.get_binning_variables()
387 ntuple_variables += particle.get_pdg_variables()
388 for var in ntuple_variables:
389 if var not in ntuple_df.columns:
390 raise ValueError(f'Variable {var} is not in the ntuple! Required variables are {ntuple_variables}')
391 return ntuple_variables
392

◆ get_particle()

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

Definition at line 532 of file sysvar.py.

532 def get_particle(self, prefix: str) -> ReweighterParticle:
533 """
534 Get a particle by its prefix.
535 """
536 cands = [particle for particle in self.particles if particle.prefix.strip('_') == prefix.strip('_')]
537 if len(cands) == 0:
538 return None
539 return cands[0]
540

◆ 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 393 of file sysvar.py.

395 pdg_pid_variable_dict: dict) -> pd.DataFrame:
396 """
397 Merges the efficiency and fake rate weight tables.
398
399 Args:
400 weights_dict (dict): Dictionary containing the weight tables.
401 pdg_pid_variable_dict (dict): Dictionary containing the PDG codes and variable names.
402 """
403 weight_dfs = []
404 for reco_pdg, mc_pdg in weights_dict:
405 if reco_pdg not in pdg_pid_variable_dict:
406 raise ValueError(f'Reconstructed PDG code {reco_pdg} not found in thresholds!')
407 weight_df = weights_dict[(reco_pdg, mc_pdg)]
408 weight_df['mcPDG'] = mc_pdg
409 weight_df['PDG'] = reco_pdg
410 # Check if these are legacy tables:
411 if 'charge' in weight_df.columns:
412 charge_dict = {'+': [0, 2], '-': [-2, 0]}
413 weight_df[['charge_min', 'charge_max']] = [charge_dict[val] for val in weight_df['charge'].values]
414 weight_df = weight_df.drop(columns=['charge'])
415 # If iso_score is a single value, drop the min and max columns
416 if 'iso_score_min' in weight_df.columns and len(weight_df['iso_score_min'].unique()) == 1:
417 weight_df = weight_df.drop(columns=['iso_score_min', 'iso_score_max'])
418 pid_variable_name = pdg_pid_variable_dict[reco_pdg][0]
419 threshold = pdg_pid_variable_dict[reco_pdg][1]
420 selected_weights = weight_df.query(f'variable == "{pid_variable_name}" and threshold == {threshold}')
421 if len(selected_weights) == 0:
422 available_variables = weight_df['variable'].unique()
423 available_thresholds = weight_df['threshold'].unique()
424 raise ValueError(f'No weights found for PDG code {reco_pdg}, mcPDG {mc_pdg},'
425 f' variable {pid_variable_name} and threshold {threshold}!\n'
426 f' Available variables: {available_variables}\n'
427 f' Available thresholds: {available_thresholds}')
428 weight_dfs.append(selected_weights)
429 return pd.concat(weight_dfs, ignore_index=True)
430

◆ plot_coverage()

plot_coverage ( self)
Plots the coverage of each particle.

Definition at line 701 of file sysvar.py.

701 def plot_coverage(self):
702 """
703 Plots the coverage of each particle.
704 """
705 for particle in self.particles:
706 particle.plot_coverage()
707
708

◆ print_coverage()

print_coverage ( self)
Prints the coverage of each particle.

Definition at line 693 of file sysvar.py.

693 def print_coverage(self):
694 """
695 Prints the coverage of each particle.
696 """
697 print('Coverage:')
698 for particle in self.particles:
699 print(f'{particle.type} {particle.prefix.strip("_")}: {particle.coverage*100:0.1f}%')
700

◆ 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 671 of file sysvar.py.

673 generate_variations: bool = True):
674 """
675 Reweights the dataframe according to the weight tables.
676
677 Args:
678 df (pandas.DataFrame): Dataframe containing the analysis ntuple.
679 generate_variations (bool): When true generate weight variations.
680 """
681 for particle in self.particles:
682 if particle.type not in _correction_types:
683 raise ValueError(f'Particle type {particle.type} not supported!')
684 print(f'Required variables: {self.get_ntuple_variables(df, particle)}')
685 if generate_variations:
686 particle.generate_variations(n_variations=self.n_variations)
687 if particle.type == 'PID':
688 self.add_pid_weight_columns(df, particle)
689 elif particle.type == 'FEI':
690 self.add_fei_weight_columns(df, particle)
691 return df
692

Member Data Documentation

◆ correlations

list correlations = []

Correlations between the particles.

Definition at line 336 of file sysvar.py.

◆ evaluate_plots

evaluate_plots = evaluate_plots

Flag to indicate if the plots should be evaluated.

Definition at line 342 of file sysvar.py.

◆ fillna

fillna = fillna

Value to fill NaN values.

Definition at line 346 of file sysvar.py.

◆ n_variations

n_variations = n_variations

Number of weight variations to generate.

Definition at line 332 of file sysvar.py.

◆ nbins

nbins = nbins

Number of bins for the plots.

Definition at line 344 of file sysvar.py.

◆ particles

list particles = []

List of particles.

Definition at line 334 of file sysvar.py.

◆ weight_name

weight_name = weight_name

Name of the weight column.

Definition at line 338 of file sysvar.py.

◆ weights_generated

bool weights_generated = False

Flag to indicate if the weights have been generated.

Definition at line 340 of file sysvar.py.


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