diff --git a/atdb/taskdatabase/services/calculated_qualities.py b/atdb/taskdatabase/services/calculated_qualities.py index da4c82b4ffc39d1ce3f2b45737f623653ee9fb09..fe83c0be14fc504c489a98bc748d045a5b0cddf7 100644 --- a/atdb/taskdatabase/services/calculated_qualities.py +++ b/atdb/taskdatabase/services/calculated_qualities.py @@ -27,7 +27,41 @@ def calculate_qualities(task, tasks_for_this_sasid, quality_thresholds): def calculate_quality_task(task): """ calculate the quality of this task based on rfi_percent values - The threshold values are written from a configuration json blob + The threshold values are read from a configuration json blob + + Using this algorithm from SDCO: + rfi_i <= 20 % is good + 20% <= rfi_i <= 50 is moderate + rfi_i > 50 is poor. + except when rfi_percent = 0 + """ + try: + + summary = task.quality_json["summary"] + + summary_flavour = get_summary_flavour(task) + + if summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value: + rfi_percent = float(summary['details']['rfi_percent']) + + if summary_flavour == SummaryFlavour.DEFAULT.value: + # summary is a dict, with (unknown) filenames as a key, look for 'rfi_percent' in them + for key in summary: + record = summary[key] + rfi_percent = float(record['rfi_percent']) + + return rfi_percentage_to_quality(rfi_percent, quality_thresholds['moderate'], quality_thresholds['poor']) + + except Exception as error: + # when rfi_percentage is missing, then the quality cannot be calculated. + # Just continue without it + pass + + + def calculate_quality_task_per_file(task): + """ + calculate the quality of this task based on rfi_percent values per summary file + The threshold values are read from a configuration json blob Using this algorithm from SDCO: rfi_i <= 20 % is good