From 9eb098933a253266fb2d528e7f81fca80df3cf55 Mon Sep 17 00:00:00 2001 From: mancini <mancini@astron.nl> Date: Fri, 1 Apr 2022 12:08:38 +0200 Subject: [PATCH] Add quality metrics generation --- compress_pipeline.cwl | 36 +++++--------------- download_and_compress_pipeline.cwl | 42 ++++++++++++++++------- steps/combine_inspect_dataset.cwl | 28 ++++++++++++++++ steps/create_inspect_dataset.cwl | 28 ++++++++++++++++ steps/extract_quality_metrics.cwl | 34 +++++++++++++++++++ steps/format_metrics.cwl | 44 ++++++++++++++++++++++++ workflows/inspect_workflow.cwl | 54 ++++++++++++++++++++++++++++++ 7 files changed, 227 insertions(+), 39 deletions(-) create mode 100644 steps/combine_inspect_dataset.cwl create mode 100644 steps/create_inspect_dataset.cwl create mode 100644 steps/extract_quality_metrics.cwl create mode 100644 steps/format_metrics.cwl create mode 100644 workflows/inspect_workflow.cwl diff --git a/compress_pipeline.cwl b/compress_pipeline.cwl index e76a0a3..192fd98 100644 --- a/compress_pipeline.cwl +++ b/compress_pipeline.cwl @@ -10,7 +10,7 @@ inputs: outputs: - id: inspect outputSource: - - inspect_flagging_dataloss/output + - inspect_step/inspect_file type: 'File' - id: logfile outputSource: @@ -24,14 +24,6 @@ outputs: outputSource: - format_ingest/ingest type: Any - - id: uv_plot - type: File - outputSource: - - plot_uvw_coverage/uv_plot - - id: uv_coverage - type: File - outputSource: - - inspect_flagging_dataloss/flags_output steps: - id: identify_issues run: steps/identify_issues.cwl @@ -133,23 +125,6 @@ steps: - id: output run: steps/define_parset.cwl label: define_parset - - id: inspect_flagging_dataloss - in: - - id: input - source: - - fix_baselines/msout - out: - - id: output - - id: flags_output - run: steps/inspect_flagging_dataloss.cwl - label: inspect_flagging_dataloss - - id: plot_uvw_coverage - in: - - id: input_file - source: inspect_flagging_dataloss/flags_output - out: - - id: uv_plot - run: steps/plot_uvw_coverage.cwl - id: compress in: - id: directory @@ -158,7 +133,14 @@ steps: - id: compressed run: steps/compress.cwl label: compress + - id: inspect_step + in: + - id: msin + source: dppp/msout + out: + - inspect_file + run: steps/create_inspect_dataset.cwl requirements: - class: StepInputExpressionRequirement - class: InlineJavascriptRequirement - - class: MultipleInputFeatureRequirement + - class: MultipleInputFeatureRequirement \ No newline at end of file diff --git a/download_and_compress_pipeline.cwl b/download_and_compress_pipeline.cwl index 9614352..fed9961 100644 --- a/download_and_compress_pipeline.cwl +++ b/download_and_compress_pipeline.cwl @@ -12,10 +12,6 @@ outputs: outputSource: - compress/compressed type: File[] - - id: inspect - outputSource: - - compress/inspect - type: File[] - id: logfile outputSource: - compress/logfile @@ -28,14 +24,14 @@ outputs: outputSource: - compress/ingest type: Any[] - - id: uv_coverage - type: File[] + - id: quality + type: Any outputSource: - - compress/uv_coverage - - id: uv_plot - type: File[] + - format_quality_metrics/formatted_quality + - id: inspect + type: File outputSource: - - compress/uv_plot + - combine/inspect_file steps: - id: fetch_data in: @@ -60,9 +56,31 @@ steps: - id: inspect - id: logfile - id: ingest - - id: uv_coverage - - id: uv_plot run: ./compress_pipeline.cwl + - id: combine + in: + - id: inputs + source: compress/inspect + out: + - inspect_file + run: steps/combine_inspect_dataset.cwl + - id: extract_metrics + in: + - id: inspect + source: combine/inspect_file + out: + - id: plots + - id: quality + run: steps/extract_quality_metrics.cwl + - id: format_quality_metrics + in: + - id: plots + source: extract_metrics/plots + - id: quality + source: extract_metrics/quality + run: steps/format_metrics.cwl + out: + - formatted_quality requirements: - class: ScatterFeatureRequirement - class: SubworkflowFeatureRequirement diff --git a/steps/combine_inspect_dataset.cwl b/steps/combine_inspect_dataset.cwl new file mode 100644 index 0000000..538a796 --- /dev/null +++ b/steps/combine_inspect_dataset.cwl @@ -0,0 +1,28 @@ +cwlVersion: 'v1.2' +class: CommandLineTool +baseCommand: + - inspect_utils.py + - join + +requirements: + - class: InlineJavascriptRequirement +hints: + - class: DockerRequirement + dockerPull: git.astron.nl:5000/ldv/lofar_quality:latest + - class: NetworkAccess + networkAccess: true +inputs: +- id: inputs + type: File[] + inputBinding: + position: 1 +- id: output_filename + type: string? + default: inspect.h5 + inputBinding: + position: 2 +outputs: +- id: inspect_file + type: File + outputBinding: + glob: $(inputs.output_filename) \ No newline at end of file diff --git a/steps/create_inspect_dataset.cwl b/steps/create_inspect_dataset.cwl new file mode 100644 index 0000000..4254400 --- /dev/null +++ b/steps/create_inspect_dataset.cwl @@ -0,0 +1,28 @@ +cwlVersion: 'v1.2' +class: CommandLineTool +baseCommand: + - inspect_utils.py + - create + +requirements: + - class: InlineJavascriptRequirement +hints: + - class: DockerRequirement + dockerPull: git.astron.nl:5000/ldv/lofar_quality:latest + - class: NetworkAccess + networkAccess: true +inputs: +- id: msin + type: Directory + inputBinding: + position: 1 +- id: inspect_file_name + type: string? + default: 'inspect.h5' + inputBinding: + position: 2 +outputs: +- id: inspect_file + type: File + outputBinding: + glob: $(inputs.inspect_file_name) \ No newline at end of file diff --git a/steps/extract_quality_metrics.cwl b/steps/extract_quality_metrics.cwl new file mode 100644 index 0000000..c47e38a --- /dev/null +++ b/steps/extract_quality_metrics.cwl @@ -0,0 +1,34 @@ +cwlVersion: 'v1.2' +class: CommandLineTool +baseCommand: + - bash + - script.sh + +requirements: + - class: InlineJavascriptRequirement + - class: InitialWorkDirRequirement + listing: + - entryname: script.sh + entry: | + #!/bin/bash + inspect_utils.py plot $(inputs.inspect.path) plots + inspect_utils.py inspect $(inputs.inspect.path) quality.json +hints: + - class: DockerRequirement + dockerPull: git.astron.nl:5000/ldv/lofar_quality:latest + - class: NetworkAccess + networkAccess: true +inputs: +- id: inspect + type: File +outputs: +- id: plots + type: File[] + outputBinding: + glob: plots/*.png +- id: quality + type: Any + outputBinding: + glob: quality.json + loadContents: true + outputEval: $(JSON.parse(self[0].contents)) \ No newline at end of file diff --git a/steps/format_metrics.cwl b/steps/format_metrics.cwl new file mode 100644 index 0000000..c2eed30 --- /dev/null +++ b/steps/format_metrics.cwl @@ -0,0 +1,44 @@ +cwlVersion: 'v1.2' +class: ExpressionTool +expression: | + ${ + var sensitivityScore = inputs.quality.dutch_array_incomplete ? 1 : 0; + sensitivityScore += inputs.quality.dutch_array_high_data_loss ? 0.5 : 0; + sensitivityScore += inputs.quality.dutch_array_flag_data_loss ? 0.5 : 0; + sensitivityScore += inputs.quality.full_array_incomplete ? 1 : 0; + sensitivityScore += inputs.quality.full_array_missing_important_pair ? 0.5 : 0; + sensitivityScore += inputs.quality.full_array_incomplete_is ? 0.5 : 0; + var uvCoverageScore = sensitivityScore; + + uvCoverageScore += inputs.quality.fill_array_missing_is_pair ? 1 : 0; + uvCoverageScore += inputs.quality.dutch_array_missing_important_pair ? 1 : 0; + uvCoverageScore += inputs.quality.full_array_missing_important_pair ? 1 : 0; + + sensitivityScore += inputs.quality.high_flagging ? 1 : 0; + + var observingConditions = inputs.quality.sun_interference; + observingConditions += inputs.quality.moon_interference; + observingConditions += inputs.quality.jupiter_interference; + observingConditions += 1 - inputs.quality.elevation_score; + sensitivityScore += observingConditions; + + var result = { + 'uv-coverage': uvCoverageScore, + 'sensitivity': sensitivityScore, + 'observing-conditions': observingConditions, + 'plots': inputs.plots, + 'details': inputs.quality + }; + return {'formatted_quality': result} + + } +requirements: +- class: InlineJavascriptRequirement +inputs: +- id: plots + type: File[] +- id: quality + type: Any +outputs: +- id: formatted_quality + type: Any diff --git a/workflows/inspect_workflow.cwl b/workflows/inspect_workflow.cwl new file mode 100644 index 0000000..b334322 --- /dev/null +++ b/workflows/inspect_workflow.cwl @@ -0,0 +1,54 @@ +#!/usr/bin/env cwl-runner + +cwlVersion: v1.2 +class: Workflow + +inputs: +- id: ms + type: Directory[] + +outputs: +- id: inspect + type: File + outputSource: + combine/inspect_file +- id: quality + type: Any + outputSource: + format_metrics/formatted_quality + +requirements: +- class: ScatterFeatureRequirement +steps: +- id: create + in: + - id: msin + source: ms + out: + - id: inspect_file + scatter: msin + run: ../steps/create_inspect_dataset.cwl +- id: combine + in: + - id: inputs + source: create/inspect_file + out: + - id: inspect_file + run: ../steps/combine_inspect_dataset.cwl +- id: extract + in: + - id: inspect + source: combine/inspect_file + out: + - id: quality + - id: plots + run: ../steps/extract_quality_metrics.cwl +- id: format_metrics + in: + - id: quality + source: extract/quality + - id: plots + source: extract/plots + out: + - formatted_quality + run: ../steps/format_metrics.cwl \ No newline at end of file -- GitLab