Source code for msqms.workflows.opmqc_reference
"""
Obtain the range of quality metrics.
"""
[docs]
def obtain_quality_ranges(dataset_metrics_pd, yaml_fname="bounds.yaml", sigma=1):
"""Calculate the 1,2,3sigma rule and generate the quality reference file(yaml)
Parameters
----------
dataset_metrics_pd : pandas.DataFrame
the dataset metrics
yaml_fname : str
the name of the yaml
sigma : int
the sigma of metric quality distribution.
Returns
-------
"""
avg_mag = dataset_metrics_pd.loc['avg_mag']
std_mag = dataset_metrics_pd.loc['std_mag']
upper_bound = avg_mag + sigma * std_mag
lower_bound = avg_mag - sigma * std_mag
# handle lower bound < 0
lower_bound = lower_bound.apply(lambda x: max(x, 0))
dataset_metrics_pd.loc['upper_bound'] = upper_bound
dataset_metrics_pd.loc['lower_bound'] = lower_bound
# convert to dict
columns = dataset_metrics_pd.columns
bounds_dict = {}
df = dataset_metrics_pd.to_dict()
for col in columns:
mean = df[col]['avg_mag']
std_dev = df[col]['std_mag']
upper_bound = df[col]['upper_bound']
lower_bound = df[col]['lower_bound']
bounds_dict[col] = {'range': [lower_bound, upper_bound], 'mean': mean, 'std': std_dev}
# Save into YAML
with open(yaml_fname, 'w') as file:
yaml.dump(bounds_dict, file, default_flow_style=False)
return dataset_metrics_pd
if __name__ == '__main__':
# get opm quality references
# avg_dataset_df = (opm_cog + opm_face) / 2.
# obtain_quality_ranges(avg_dataset_df, yaml_fname='opm_quality_reference.yaml')
#
# # get squid quality references
# avg_dataset_squid_df = (masc_df + hcp_df + omega_df) / 3
# obtain_quality_ranges(avg_dataset_squid_df, yaml_fname='squid_quality_reference.yaml')
import yaml
# 从YAML文件加载参考指标数据
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
# 遍历配置文件中的指标
for metric, data in config.items():
mean = data["mean"]
std_dev = data["std"]
sigma_3_range = data["range"]
print(f"{metric} - 3σ range: {sigma_3_range}")