diff --git a/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt b/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt index 3a7daaa829f09722bd78609d1ec653ec2240d133..47a6fc110c6e09c09bf272f1ee0f0f04a5a65407 100644 --- a/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt +++ b/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt @@ -22,3 +22,5 @@ add_subdirectory(renderers) add_subdirectory(serializers) add_subdirectory(viewsets) add_subdirectory(adapters) +add_subdirectory(schemas) + diff --git a/SAS/TMSS/src/tmss/tmssapp/populate.py b/SAS/TMSS/src/tmss/tmssapp/populate.py index 7a16ac32591fc47cb543e0bdf719c70d4b2a5af7..0d5940a18a8bd7bfd9bc3b1c79831c7f5c9abe19 100644 --- a/SAS/TMSS/src/tmss/tmssapp/populate.py +++ b/SAS/TMSS/src/tmss/tmssapp/populate.py @@ -18,12 +18,15 @@ import logging logger = logging.getLogger(__name__) import json +import os from lofar.sas.tmss.tmss.tmssapp.subtasks import * from lofar.sas.tmss.tmss.tmssapp.models.specification import * from lofar.sas.tmss.tmss.tmssapp.models.scheduling import * from lofar.common.json_utils import * from lofar.common import isTestEnvironment, isDevelopmentEnvironment +working_dir = os.path.dirname(os.path.abspath(__file__)) + def populate_choices(apps, schema_editor): ''' @@ -37,20 +40,43 @@ def populate_choices(apps, schema_editor): def populate_lofar_json_schemas(apps, schema_editor): + + _populate_scheduling_unit_schema() + # populate task schema's + _populate_stations_schema() + _populate_preprocessing_schema() + _populate_correlator_calibrator_schema() + _populate_observation_with_stations_schema() + _populate_calibrator_addon_schema() + _populate_dataproduct_specifications_templates() _populate_taskrelation_selection_templates() _populate_dataproduct_feedback_templates() - _populate_correlator_calibrator_schema() _populate_obscontrol_schema() - _populate_stations_schema() _populate_pipelinecontrol_schema() - _populate_preprocessing_schema() _populate_connectors() _populate_qa_files_subtask_template() _populate_qa_plots_subtask_template() - _populate_task_draft_example() + #_populate_task_draft_example() # Should be removed later + _populate_scheduling_set_for_scheduling_unit_reference() + + +def _populate_scheduling_set_for_scheduling_unit_reference(): + """ + Create a Schedule Set to be able to refer to + :return: + """ + try: + from lofar.sas.tmss.tmss.tmssapp import models + from lofar.sas.tmss.test.tmss_test_data_django_models import SchedulingSet_test_data + if isTestEnvironment() or isDevelopmentEnvironment(): + scheduling_set_data = SchedulingSet_test_data(name="Test Scheduling Set") + models.SchedulingSet.objects.create(**scheduling_set_data) + + except ImportError: + pass def _populate_task_draft_example(): @@ -98,193 +124,53 @@ def populate_resources(apps, schema_editor): ResourceType.objects.create(name="cep_storage", description="Amount of storage at CEP processing cluster", resource_unit=ru_bytes) ResourceType.objects.create(name="cep_processing_hours", description="Number of processing hours for CEP processing cluster", resource_unit=ru_hours) + def populate_misc(apps, schema_editor): cluster = Cluster.objects.create(name="CEP4", location="CIT") fs = Filesystem.objects.create(name="LustreFS", cluster=cluster, capacity=3.6e15) -def _populate_correlator_calibrator_schema(): - task_template_data = {"name": "correlator schema", - "description": 'correlator schema for calibrator observations', - "version": '0.1', - "schema": json.loads(''' -{ - "$id": "http://example.com/example.json", - "type": "object", - "$schema": "http://json-schema.org/draft-06/schema#", - "definitions": { - "pointing": { - "type": "object", - "additionalProperties": false, - "properties": { - "direction_type": { - "type": "string", - "title": "Reference frame", - "description": "", - "default": "J2000", - "enum": [ - "J2000", - "SUN", - "MOON", - "MERCURY", - "VENUS", - "MARS", - "JUPITER", - "SATURN", - "URANUS", - "NEPTUNE", - "PLUTO" - ] - }, - "angle1": { - "type": "number", - "title": "Angle 1", - "description": "First angle (f.e. RA)", - "default": 0 - }, - "angle2": { - "type": "number", - "title": "Angle 2", - "description": "Second angle (f.e. DEC)", - "default": 0 - } - } - } - }, - "additionalProperties": false, - "properties": { - "duration": { - "type": "number", - "title": "Duration (seconds)", - "description": "Duration of this observation", - "default": 60, - "minimum": 1 - }, - "calibrator": { - "type": "object", - "additionalProperties": false, - "default": {}, - "properties": { - "enabled": { - "type": "boolean", - "title": "Calibrator", - "description": "Replace targets by calibrators", - "default": false - }, - "autoselect": { - "type": "boolean", - "title": "Auto-select", - "description": "Auto-select calibrator based on elevation", - "default": false - }, - "pointing": { - "title": "Digital pointing", - "$ref": "#/definitions/pointing", - "default": {} - } - } - }, - "channels_per_subband": { - "type": "integer", - "title": "Channels/subband", - "description": "Number of frequency bands per subband", - "default": 64, - "minimum": 8, - "enum": [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 1024 - ] - }, - "integration_time": { - "type": "number", - "title": "Integration time (seconds)", - "description": "Desired integration period", - "default": 1, - "minimum": 0.1 - }, - "storage_cluster": { - "type": "string", - "title": "Storage cluster", - "description": "Cluster to write output to", - "default": "CEP4", - "enum": [ - "CEP4", - "DragNet" - ] - }, - "QA": { - "type": "object", - "title": "Quality Assurance", - "default": {}, - "description": "Specify Quality Assurance steps for this observation", - "properties": { - "file_conversion": { - "type": "object", - "title": "File Conversion", - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "type": "boolean", - "title": "enabled", - "default": true, - "description": "Do/Don't create a QA file for the observation" - }, - "nr_of_subbands": { - "type": "integer", - "title": "#subbands", - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1" - }, - "nr_of_timestamps": { - "type": "integer", - "title": "#timestamps", - "default": 256, - "minimum": 1, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)" - } - }, - "additionalProperties": false - }, - "plots": { - "type": "object", - "title": "Plots", - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "enabled": { - "type": "boolean", - "title": "enabled", - "default": true, - "description": "Do/Don't create plots from the QA file from the observation" - }, - "autocorrelation": { - "type": "boolean", - "title": "autocorrelation", - "default": true, - "description": "Create autocorrelation plots for all stations" - }, - "crosscorrelation": { - "type": "boolean", - "title": "crosscorrelation", - "default": true, - "description": "Create crosscorrelation plots for all baselines" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - } - } -}'''), "tags": []} +def _populate_scheduling_unit_schema(): + with open(os.path.join(working_dir, "schemas/scheduling-unit.json")) as json_file: + json_data = json.loads(json_file.read()) + scheduling_unit_template_data = {"name": "scheduling unit schema", + "description": 'Schema for UC1 HBA scheduling unit', + "version": '0.1', + "tags": ["UC1"], + "schema": json_data} + SchedulingUnitTemplate.objects.create(**scheduling_unit_template_data) + + +def _populate_observation_with_stations_schema(): + with open(os.path.join(working_dir, "schemas/task-observation-with-stations.json")) as json_file: + json_data = json.loads(json_file.read()) + task_template_data = {"name": "observation schema", + "description": 'schema for observations', + "version": '0.1', + "tags": [], + "schema": json_data} + TaskTemplate.objects.create(**task_template_data) + +def _populate_calibrator_addon_schema(): + with open(os.path.join(working_dir, "schemas/task-calibrator-addon.json")) as json_file: + json_data = json.loads(json_file.read()) + task_template_data = {"name": "calibrator addon schema", + "description": 'addon schema for calibrator observations', + "version": '0.1', + "tags": [], + "schema": json_data} + TaskTemplate.objects.create(**task_template_data) + + +def _populate_correlator_calibrator_schema(): + with open(os.path.join(working_dir, "schemas/task-correlator.json")) as json_file: + json_data = json.loads(json_file.read()) + task_template_data = {"name": "correlator schema", + "description": 'correlator schema for calibrator observations', + "version": '0.1', + "tags": [], + "schema": json_data} TaskTemplate.objects.create(**task_template_data) @@ -618,250 +504,13 @@ def _populate_obscontrol_schema(): def _populate_stations_schema(): - task_template_data = {"name": "stations schema", - "description": 'Generic station settings and selection', - "version": '0.1', - "schema": json.loads(''' -{ - "$id": "http://example.com/example.json", - "type": "object", - "$schema": "http://json-schema.org/draft-06/schema#", - "definitions": { - "pointing": { - "type": "object", - "additionalProperties": false, - "properties": { - "direction_type": { - "type": "string", - "title": "Reference frame", - "description": "", - "default": "J2000", - "enum": [ - "J2000", - "SUN", - "MOON", - "MERCURY", - "VENUS", - "MARS", - "JUPITER", - "SATURN", - "URANUS", - "NEPTUNE", - "PLUTO" - ] - }, - "angle1": { - "type": "number", - "title": "Angle 1", - "description": "First angle (f.e. RA)", - "default": 0 - }, - "angle2": { - "type": "number", - "title": "Angle 2", - "description": "Second angle (f.e. DEC)", - "default": 0 - } - } - } - }, - "additionalProperties": false, - "properties": { - "stations": { - "title": "Station list", - "type": "array", - "default": [{}], - "oneOf": [{ - "type": "array", - "title": "Fixed list", - "additionalItems": false, - "additionalProperties": false, - "default": ["CS001"], - "items": { - "type": "string", - "enum": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501", - "RS104", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS410", - "RS503", - "RS508", - "RS509", - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "FR606", - "SE607", - "UK608", - "DE609", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ], - "title": "Station", - "description": "" - }, - "minItems": 1, - "uniqueItems": true - }, - { - "title": "Dynamic list", - "type": "array", - "additionalItems": false, - "default": [{}], - "items": { - "type": "object", - "title": "Station set", - "headerTemplate": "{{ self.group }}", - "additionalProperties": false, - "default": {}, - "properties": { - "group": { - "type": "string", - "title": "Group/station", - "description": "Which (group of) station(s) to select from", - "default": "ALL", - "enum": [ - "ALL", - "SUPERTERP", - "CORE", - "REMOTE", - "DUTCH", - "INTERNATIONAL" - ] - }, - "min_stations": { - "type": "integer", - "title": "Minimum nr of stations", - "description": "Number of stations to use within group/station", - "default": 1, - "minimum": 0 - } - } - } - } - ] - }, - "antenna_set": { - "type": "string", - "title": "Antenna set", - "description": "Fields & antennas to use", - "default": "HBA_DUAL", - "enum": [ - "HBA_DUAL", - "HBA_DUAL_INNER", - "HBA_JOINED", - "HBA_JOINED_INNER", - "HBA_ONE", - "HBA_ONE_INNER", - "HBA_ZERO", - "HBA_ZERO_INNER", - "LBA_INNER", - "LBA_OUTER", - "LBA_SPARSE_EVEN", - "LBA_SPARSE_ODD", - "LBA_ALL" - ] - }, - "filter": { - "type": "string", - "title": "Band-pass filter", - "description": "Must match antenna type", - "default": "HBA_110_190", - "enum": [ - "LBA_10_70", - "LBA_30_70", - "LBA_10_90", - "LBA_30_90", - "HBA_110_190", - "HBA_210_250" - ] - }, - "analog_pointing": { - "title": "Analog pointing", - "description": "HBA only", - "default": {}, - "$ref": "#/definitions/pointing" - }, - "beams": { - "type": "array", - "title": "Beams", - "additionalItems": false, - "default": [{}], - "items": { - "title": "Beam", - "headerTemplate": "{{ i0 }} - {{ self.name }}", - "type": "object", - "additionalProperties": false, - "default": {}, - "properties": { - "name": { - "type": "string", - "title": "Name/target", - "description": "Identifier for this beam", - "default": "" - }, - "digital_pointing": { - "title": "Digital pointing", - "default": {}, - "$ref": "#/definitions/pointing" - }, - "subbands": { - "type": "array", - "title": "Subband list", - "additionalItems": false, - "default": [], - "items": { - "type": "integer", - "title": "Subband", - "minimum": 0, - "maximum": 511 - } - } - } - } - } - } -}'''), - "tags": []} - + with open(os.path.join(working_dir, "schemas/task-stations.json")) as json_file: + json_data = json.loads(json_file.read()) + task_template_data = {"name": "stations schema", + "description": 'Generic station settings and selection', + "version": '0.1', + "tags": [], + "schema": json_data} TaskTemplate.objects.create(**task_template_data) @@ -1038,172 +687,15 @@ def _populate_qa_plots_subtask_template(): SubtaskTemplate.objects.create(**subtask_template_data) -def _populate_preprocessing_schema(): - task_template_data = {"name": "preprocessing schema", - "description": 'preprocessing settings', - "version": '0.1', - "schema": json.loads(''' -{ - "$id": "http://example.com/example.json", - "type": "object", - "$schema": "http://json-schema.org/draft-06/schema#", - "additionalProperties": false, - "definitions": { - "demix_strategy": { - "type": "string", - "default": "auto", - "enum": [ - "auto", - "yes", - "no" - ] - } - }, - "properties": { - "flag": { - "title": "Flagging", - "type": "object", - "additionalProperties": false, - "properties": { - "outerchannels": { - "type": "boolean", - "title": "Flag outer channels", - "default": true - }, - "autocorrelations": { - "type": "boolean", - "title": "Flag auto correlations", - "default": true - }, - "rfi_strategy": { - "type": "string", - "title": "RFI flagging strategy", - "default": "auto", - "enum": [ - "none", - "auto", - "HBAdefault", - "LBAdefault" - ] - } - }, - "required": [ - "outerchannels", - "autocorrelations", - "rfi_strategy" - ], - "default": {} - }, - "average": { - "title": "Averaging", - "type": "object", - "additionalProperties": false, - "properties": { - "frequency_steps": { - "type": "integer", - "title": "Frequency steps", - "default": 4, - "minimum": 1 - }, - "time_steps": { - "type": "integer", - "title": "Time steps", - "default": 1, - "minimum": 1 - } - }, - "required": [ - "frequency_steps", - "time_steps" - ], - "default": {} - }, - "demix": { - "title": "Demixing", - "type": "object", - "additionalProperties": false, - "properties": { - "frequency_steps": { - "type": "integer", - "title": "Frequency steps", - "description": "Must be a multiple of the averaging frequency steps", - "default": 64, - "minimum": 1 - }, - "time_steps": { - "type": "integer", - "title": "Time steps", - "description": "Must be a multiple of the averaging time steps", - "default": 10, - "minimum": 1 - }, - "ignore_target": { - "type": "boolean", - "title": "Ignore target", - "default": false - }, - "sources": { - "title": "Sources", - "type": "object", - "additionalProperties": false, - "properties": { - "CasA": { - "title": "CasA", - "$ref": "#/definitions/demix_strategy" - }, - "CygA": { - "title": "CygA", - "$ref": "#/definitions/demix_strategy" - }, - "HerA": { - "title": "HerA", - "$ref": "#/definitions/demix_strategy" - }, - "HydraA": { - "title": "HyrdraA", - "$ref": "#/definitions/demix_strategy" - }, - "TauA": { - "title": "TauA", - "$ref": "#/definitions/demix_strategy" - }, - "VirA": { - "title": "VirA", - "$ref": "#/definitions/demix_strategy" - } - }, - "default": {} - } - }, - "required": [ - "frequency_steps", - "time_steps", - "ignore_target", - "sources" - ], - "options": { - "dependencies": { - "demix": true - } - }, - "default": {} - }, - "storagemanager": { - "type": "string", - "title": "Storage Manager", - "default": "dysco", - "enum": [ - "basic", - "dysco" - ] - } - }, - "required": [ - "storagemanager" - ] -}'''), - "tags": []} +def _populate_preprocessing_schema(): + with open(os.path.join(working_dir, "schemas/task-preprocessing.json")) as json_file: + json_data = json.loads(json_file.read()) + task_template_data = {"name": "preprocessing schema", + "description": 'preprocessing settings', + "version": '0.1', + "tags": [], + "schema": json_data} TaskTemplate.objects.create(**task_template_data) diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/CMakeLists.txt b/SAS/TMSS/src/tmss/tmssapp/schemas/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f0afa83fb26ffb7c64b14badad130086e54952c6 --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/CMakeLists.txt @@ -0,0 +1,14 @@ + +include(PythonInstall) + +set(_json_schema_files + scheduling-unit.json + task-calibrator-addon.json + task-observation-with-stations.json + task-stations.json + task-correlator.json + task-preprocessing.json + ) + +python_install(${_json_schema_files} + DESTINATION lofar/sas/tmss/tmss/tmssapp/schemas) diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/scheduling-unit.json b/SAS/TMSS/src/tmss/tmssapp/schemas/scheduling-unit.json new file mode 100644 index 0000000000000000000000000000000000000000..6dd56baffaa1a6796d3ae8c11eee7cb2f8698eb1 --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/scheduling-unit.json @@ -0,0 +1,174 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "definitions": { + "task_connector": { + "type": "object", + "additionalProperties": false, + "properties": { + "role": { + "type": "string", + "title": "Role" + }, + "datatype": { + "type": "string", + "title": "Data Type" + } + }, + "required": [ + "role", + "datatype" + ] + } + }, + "properties": { + "tasks": { + "title": "Tasks", + "type": "array", + "additionalItems": false, + "uniqueItems": true, + "items": { + "type": "object", + "title": "Task", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "title": "Name (unique)" + }, + "description": { + "type": "string", + "title": "Description" + }, + "tags": { + "type": "array", + "addtionalItems": false, + "uniqueItems": true, + "items": { + "type": "string", + "title": "Tag" + } + }, + "specifications_doc": { + "type": "object", + "title": "Specifications", + "addtionalProperties": true + }, + "specifications_template": { + "type": "string", + "title": "Name of Template for Specifications" + } + }, + "required": [ + "name", + "specifications_doc", + "specifications_template" + ] + } + }, + "task_relations": { + "title": "Task Relations", + "type": "array", + "additionalItems": false, + "uniqueItems": true, + "items": { + "type": "object", + "title": "Task Relation", + "additionalProperties": false, + "properties": { + "producer": { + "type": "string", + "title": "Name of Producer Task" + }, + "consumer": { + "type": "string", + "title": "Name of Consumer Task" + }, + "tags": { + "type": "array", + "addtionalItems": false, + "uniqueItems": true, + "items": { + "type": "string", + "title": "Tag" + } + }, + "input": { + "title": "Input I/O Connector", + "$ref": "#/definitions/task_connector" + }, + "output": { + "title": "Output I/O Connector", + "$ref": "#/definitions/task_connector" + }, + "dataformat": { + "type": "string", + "title": "Data Format" + }, + "selection_doc": { + "type": "object", + "title": "Filter selection", + "addtionalProperties": true + }, + "selection_template": { + "type": "string", + "title": "Name of Template for Selection" + } + }, + "required": [ + "producer", + "consumer", + "input", + "output", + "selection_template" + ] + } + }, + "task_scheduling_relations": { + "title": "Task Scheduling Relations", + "type": "array", + "additionalItems": false, + "uniqueItems": true, + "items": { + "type": "object", + "title": "Task Scheduling Relation", + "additionalProperties": false, + "properties": { + "first": { + "type": "string", + "title": "Name of First Task" + }, + "second": { + "type": "string", + "title": "Name of Second Task" + }, + "placement": { + "type": "string", + "title": "Placement", + "description": "How `first' relates to `second'", + "enum": [ + "before", + "after", + "parallel" + ], + "default": "before" + }, + "time_offset": { + "type": "number", + "title": "Time Offset", + "description": "Distance between `first' and `second' (in seconds)", + "default": 60 + } + }, + "required": [ + "first", + "second", + "placement" + ] + } + } + }, + "required": [] +} \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/task-calibrator-addon.json b/SAS/TMSS/src/tmss/tmssapp/schemas/task-calibrator-addon.json new file mode 100644 index 0000000000000000000000000000000000000000..0d86b1861788243b88d6ec47fbff626da42f999a --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/task-calibrator-addon.json @@ -0,0 +1,68 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "pointing": { + "type": "object", + "additionalProperties": false, + "format": "grid", + "properties": { + "direction_type": { + "type": "string", + "title": "Reference frame", + "description": "", + "default": "J2000", + "enum": [ + "J2000", + "SUN", + "MOON", + "MERCURY", + "VENUS", + "MARS", + "JUPITER", + "SATURN", + "URANUS", + "NEPTUNE", + "PLUTO" + ] + }, + "angle1": { + "type": "number", + "title": "Angle 1", + "description": "First angle (f.e. RA)", + "default": 0 + }, + "angle2": { + "type": "number", + "title": "Angle 2", + "description": "Second angle (f.e. DEC)", + "default": 0 + } + } + } + }, + "format": "grid", + "additionalProperties": false, + "properties": { + "duration": { + "type": "number", + "title": "Duration (seconds)", + "description": "Duration of this observation", + "default": 600, + "minimum": 1 + }, + "autoselect": { + "type": "boolean", + "format": "checkbox", + "title": "Auto-select", + "description": "Auto-select calibrator based on elevation", + "default": true + }, + "pointing": { + "title": "Digital pointing", + "description": "Manually selected calibrator", + "$ref": "#/definitions/pointing" + } + }, "required": ["autoselect"] +} \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/task-correlator.json b/SAS/TMSS/src/tmss/tmssapp/schemas/task-correlator.json new file mode 100644 index 0000000000000000000000000000000000000000..55b73899eb0e499455bb37d14df1207eca65a43a --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/task-correlator.json @@ -0,0 +1,176 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "pointing": { + "type": "object", + "additionalProperties": false, + "properties": { + "direction_type": { + "type": "string", + "title": "Reference frame", + "description": "", + "default": "J2000", + "enum": [ + "J2000", + "SUN", + "MOON", + "MERCURY", + "VENUS", + "MARS", + "JUPITER", + "SATURN", + "URANUS", + "NEPTUNE", + "PLUTO" + ] + }, + "angle1": { + "type": "number", + "title": "Angle 1", + "description": "First angle (f.e. RA)", + "default": 0 + }, + "angle2": { + "type": "number", + "title": "Angle 2", + "description": "Second angle (f.e. DEC)", + "default": 0 + } + } + } + }, + "additionalProperties": false, + "properties": { + "duration": { + "type": "number", + "title": "Duration (seconds)", + "description": "Duration of this observation", + "default": 60, + "minimum": 1 + }, + "calibrator": { + "type": "object", + "additionalProperties": false, + "default": {}, + "properties": { + "enabled": { + "type": "boolean", + "title": "Calibrator", + "description": "Replace targets by calibrators", + "default": false + }, + "autoselect": { + "type": "boolean", + "title": "Auto-select", + "description": "Auto-select calibrator based on elevation", + "default": false + }, + "pointing": { + "title": "Digital pointing", + "$ref": "#/definitions/pointing", + "default": {} + } + } + }, + "channels_per_subband": { + "type": "integer", + "title": "Channels/subband", + "description": "Number of frequency bands per subband", + "default": 64, + "minimum": 8, + "enum": [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ] + }, + "integration_time": { + "type": "number", + "title": "Integration time (seconds)", + "description": "Desired integration period", + "default": 1, + "minimum": 0.1 + }, + "storage_cluster": { + "type": "string", + "title": "Storage cluster", + "description": "Cluster to write output to", + "default": "CEP4", + "enum": [ + "CEP4", + "DragNet" + ] + }, + "QA": { + "type": "object", + "title": "Quality Assurance", + "default": {}, + "description": "Specify Quality Assurance steps for this observation", + "properties": { + "file_conversion": { + "type": "object", + "title": "File Conversion", + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "type": "boolean", + "title": "enabled", + "default": true, + "description": "Do/Don't create a QA file for the observation" + }, + "nr_of_subbands": { + "type": "integer", + "title": "#subbands", + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1" + }, + "nr_of_timestamps": { + "type": "integer", + "title": "#timestamps", + "default": 256, + "minimum": 1, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)" + } + }, + "additionalProperties": false + }, + "plots": { + "type": "object", + "title": "Plots", + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "enabled": { + "type": "boolean", + "title": "enabled", + "default": true, + "description": "Do/Don't create plots from the QA file from the observation" + }, + "autocorrelation": { + "type": "boolean", + "title": "autocorrelation", + "default": true, + "description": "Create autocorrelation plots for all stations" + }, + "crosscorrelation": { + "type": "boolean", + "title": "crosscorrelation", + "default": true, + "description": "Create crosscorrelation plots for all baselines" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } +} \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/task-observation-with-stations.json b/SAS/TMSS/src/tmss/tmssapp/schemas/task-observation-with-stations.json new file mode 100644 index 0000000000000000000000000000000000000000..9bfccc111092ca5946078edd7331cb29faf8c567 --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/task-observation-with-stations.json @@ -0,0 +1,307 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "pointing": { + "type": "object", + "additionalProperties": false, + "format": "grid", + "properties": { + "direction_type": { + "type": "string", + "title": "Reference frame", + "description": "", + "default": "J2000", + "enum": [ + "J2000", + "SUN", + "MOON", + "MERCURY", + "VENUS", + "MARS", + "JUPITER", + "SATURN", + "URANUS", + "NEPTUNE", + "PLUTO" + ] + }, + "angle1": { + "type": "number", + "title": "Angle 1", + "description": "First angle (f.e. RA)", + "default": 0 + }, + "angle2": { + "type": "number", + "title": "Angle 2", + "description": "Second angle (f.e. DEC)", + "default": 0 + } + }, + "required": [ + "angle1", + "angle2" + ] + } + }, + "format": "grid", + "additionalProperties": false, + "properties": { + "stations": { + "title": "Station list", + "oneOf": [ + { + "type": "array", + "title": "Fixed list", + "format": "grid", + "additionalItems": false, + "additionalProperties": false, + "items": { + "type": "string", + "enum": [ + "CS001", + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501", + "RS104", + "RS106", + "RS205", + "RS208", + "RS210", + "RS305", + "RS306", + "RS307", + "RS310", + "RS406", + "RS407", + "RS409", + "RS410", + "RS503", + "RS508", + "RS509", + "DE601", + "DE602", + "DE603", + "DE604", + "DE605", + "FR606", + "SE607", + "UK608", + "DE609", + "PL610", + "PL611", + "PL612", + "IE613", + "LV614" + ], + "title": "Station", + "description": "" + }, + "minItems": 1, + "uniqueItems": true + }, + { + "title": "Dynamic list", + "type": "array", + "format": "tabs", + "additionalItems": false, + "items": { + "type": "object", + "format": "grid", + "title": "Station set", + "headerTemplate": "{{ self.group }}", + "additionalProperties": false, + "properties": { + "group": { + "type": "string", + "title": "Group/station", + "description": "Which (group of) station(s) to select from", + "default": "ALL", + "enum": [ + "ALL", + "SUPERTERP", + "CORE", + "REMOTE", + "DUTCH", + "INTERNATIONAL" + ] + }, + "min_stations": { + "type": "integer", + "title": "Minimum nr of stations", + "description": "Number of stations to use within group/station", + "default": 1, + "minimum": 0 + } + }, + "required": [ + "group", + "min_stations" + ] + } + } + ] + }, + "antenna_set": { + "type": "string", + "title": "Antenna set", + "description": "Fields & antennas to use", + "default": "HBA_DUAL", + "enum": [ + "HBA_DUAL", + "HBA_DUAL_INNER", + "HBA_ONE", + "HBA_ONE_INNER", + "HBA_ZERO", + "HBA_ZERO_INNER", + "LBA_INNER", + "LBA_OUTER", + "LBA_SPARSE_EVEN", + "LBA_SPARSE_ODD", + "LBA_ALL" + ] + }, + "filter": { + "type": "string", + "title": "Band-pass filter", + "description": "Must match antenna type", + "default": "HBA_110_190", + "enum": [ + "LBA_10_70", + "LBA_30_70", + "LBA_10_90", + "LBA_30_90", + "HBA_110_190", + "HBA_210_250" + ] + }, + "analog_pointing": { + "title": "Analog pointing", + "description": "HBA only", + "$ref": "#/definitions/pointing" + }, + "beams": { + "type": "array", + "title": "Beams", + "format": "tabs", + "additionalItems": false, + "items": { + "title": "Beam", + "headerTemplate": "{{ i0 }} - {{ self.name }}", + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "title": "Name/target", + "description": "Identifier for this beam", + "default": "" + }, + "digital_pointing": { + "title": "Digital pointing", + "$ref": "#/definitions/pointing" + }, + "subbands": { + "type": "array", + "title": "Subband list", + "format": "table", + "additionalItems": false, + "items": { + "type": "integer", + "title": "Subband", + "minimum": 0, + "maximum": 511 + } + } + }, + "required": [ + "digital_pointing", + "subbands" + ] + } + }, + "duration": { + "type": "number", + "title": "Duration (seconds)", + "description": "Duration of this observation", + "default": 300, + "minimum": 1 + }, + "correlator": { + "title": "Correlator Settings", + "type": "object", + "additionalProperties": false, + "properties": { + "channels_per_subband": { + "type": "integer", + "title": "Channels/subband", + "description": "Number of frequency bands per subband", + "default": 64, + "minimum": 8, + "enum": [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ] + }, + "integration_time": { + "type": "number", + "title": "Integration time (seconds)", + "description": "Desired integration period", + "default": 1, + "minimum": 0.1 + }, + "storage_cluster": { + "type": "string", + "title": "Storage cluster", + "description": "Cluster to write output to", + "default": "CEP4", + "enum": [ + "CEP4", + "DragNet" + ] + } + }, + "required": [ + "channels_per_subband", + "integration_time", + "storage_cluster" + ] + } + }, + "required": [ + "stations", + "antenna_set", + "filter", + "beams", + "duration", + "correlator" + ] +} \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/task-preprocessing.json b/SAS/TMSS/src/tmss/tmssapp/schemas/task-preprocessing.json new file mode 100644 index 0000000000000000000000000000000000000000..e23f297b3abde73a2cde2291b084bcc9d5129224 --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/task-preprocessing.json @@ -0,0 +1,159 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-06/schema#", + "additionalProperties": false, + "definitions": { + "demix_strategy": { + "type": "string", + "default": "auto", + "enum": [ + "auto", + "yes", + "no" + ] + } + }, + "properties": { + "flag": { + "title": "Flagging", + "type": "object", + "additionalProperties": false, + "properties": { + "outerchannels": { + "type": "boolean", + "title": "Flag outer channels", + "default": true + }, + "autocorrelations": { + "type": "boolean", + "title": "Flag auto correlations", + "default": true + }, + "rfi_strategy": { + "type": "string", + "title": "RFI flagging strategy", + "default": "auto", + "enum": [ + "none", + "auto", + "HBAdefault", + "LBAdefault" + ] + } + }, + "required": [ + "outerchannels", + "autocorrelations", + "rfi_strategy" + ], + "default": {} + }, + "average": { + "title": "Averaging", + "type": "object", + "additionalProperties": false, + "properties": { + "frequency_steps": { + "type": "integer", + "title": "Frequency steps", + "default": 4, + "minimum": 1 + }, + "time_steps": { + "type": "integer", + "title": "Time steps", + "default": 1, + "minimum": 1 + } + }, + "required": [ + "frequency_steps", + "time_steps" + ], + "default": {} + }, + "demix": { + "title": "Demixing", + "type": "object", + "additionalProperties": false, + "properties": { + "frequency_steps": { + "type": "integer", + "title": "Frequency steps", + "description": "Must be a multiple of the averaging frequency steps", + "default": 64, + "minimum": 1 + }, + "time_steps": { + "type": "integer", + "title": "Time steps", + "description": "Must be a multiple of the averaging time steps", + "default": 10, + "minimum": 1 + }, + "ignore_target": { + "type": "boolean", + "title": "Ignore target", + "default": false + }, + "sources": { + "title": "Sources", + "type": "object", + "additionalProperties": false, + "properties": { + "CasA": { + "title": "CasA", + "$ref": "#/definitions/demix_strategy" + }, + "CygA": { + "title": "CygA", + "$ref": "#/definitions/demix_strategy" + }, + "HerA": { + "title": "HerA", + "$ref": "#/definitions/demix_strategy" + }, + "HydraA": { + "title": "HyrdraA", + "$ref": "#/definitions/demix_strategy" + }, + "TauA": { + "title": "TauA", + "$ref": "#/definitions/demix_strategy" + }, + "VirA": { + "title": "VirA", + "$ref": "#/definitions/demix_strategy" + } + }, + "default": {} + } + }, + "required": [ + "frequency_steps", + "time_steps", + "ignore_target", + "sources" + ], + "options": { + "dependencies": { + "demix": true + } + }, + "default": {} + }, + "storagemanager": { + "type": "string", + "title": "Storage Manager", + "default": "dysco", + "enum": [ + "basic", + "dysco" + ] + } + }, + "required": [ + "storagemanager" + ] +} \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/schemas/task-stations.json b/SAS/TMSS/src/tmss/tmssapp/schemas/task-stations.json new file mode 100644 index 0000000000000000000000000000000000000000..3e7fc9dbf0d90999a5260fe850c0a672813178bf --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/schemas/task-stations.json @@ -0,0 +1,238 @@ +{ + "$id": "http://example.com/example.json", + "type": "object", + "$schema": "http://json-schema.org/draft-06/schema#", + "definitions": { + "pointing": { + "type": "object", + "additionalProperties": false, + "properties": { + "direction_type": { + "type": "string", + "title": "Reference frame", + "description": "", + "default": "J2000", + "enum": [ + "J2000", + "SUN", + "MOON", + "MERCURY", + "VENUS", + "MARS", + "JUPITER", + "SATURN", + "URANUS", + "NEPTUNE", + "PLUTO" + ] + }, + "angle1": { + "type": "number", + "title": "Angle 1", + "description": "First angle (f.e. RA)", + "default": 0 + }, + "angle2": { + "type": "number", + "title": "Angle 2", + "description": "Second angle (f.e. DEC)", + "default": 0 + } + } + } + }, + "additionalProperties": false, + "properties": { + "stations": { + "title": "Station list", + "type": "array", + "default": [{}], + "oneOf": [{ + "type": "array", + "title": "Fixed list", + "additionalItems": false, + "additionalProperties": false, + "default": ["CS001"], + "items": { + "type": "string", + "enum": [ + "CS001", + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501", + "RS104", + "RS106", + "RS205", + "RS208", + "RS210", + "RS305", + "RS306", + "RS307", + "RS310", + "RS406", + "RS407", + "RS409", + "RS410", + "RS503", + "RS508", + "RS509", + "DE601", + "DE602", + "DE603", + "DE604", + "DE605", + "FR606", + "SE607", + "UK608", + "DE609", + "PL610", + "PL611", + "PL612", + "IE613", + "LV614" + ], + "title": "Station", + "description": "" + }, + "minItems": 1, + "uniqueItems": true + }, + { + "title": "Dynamic list", + "type": "array", + "additionalItems": false, + "default": [{}], + "items": { + "type": "object", + "title": "Station set", + "headerTemplate": "{{ self.group }}", + "additionalProperties": false, + "default": {}, + "properties": { + "group": { + "type": "string", + "title": "Group/station", + "description": "Which (group of) station(s) to select from", + "default": "ALL", + "enum": [ + "ALL", + "SUPERTERP", + "CORE", + "REMOTE", + "DUTCH", + "INTERNATIONAL" + ] + }, + "min_stations": { + "type": "integer", + "title": "Minimum nr of stations", + "description": "Number of stations to use within group/station", + "default": 1, + "minimum": 0 + } + } + } + } + ] + }, + "antenna_set": { + "type": "string", + "title": "Antenna set", + "description": "Fields & antennas to use", + "default": "HBA_DUAL", + "enum": [ + "HBA_DUAL", + "HBA_DUAL_INNER", + "HBA_JOINED", + "HBA_JOINED_INNER", + "HBA_ONE", + "HBA_ONE_INNER", + "HBA_ZERO", + "HBA_ZERO_INNER", + "LBA_INNER", + "LBA_OUTER", + "LBA_SPARSE_EVEN", + "LBA_SPARSE_ODD", + "LBA_ALL" + ] + }, + "filter": { + "type": "string", + "title": "Band-pass filter", + "description": "Must match antenna type", + "default": "HBA_110_190", + "enum": [ + "LBA_10_70", + "LBA_30_70", + "LBA_10_90", + "LBA_30_90", + "HBA_110_190", + "HBA_210_250" + ] + }, + "analog_pointing": { + "title": "Analog pointing", + "description": "HBA only", + "default": {}, + "$ref": "#/definitions/pointing" + }, + "beams": { + "type": "array", + "title": "Beams", + "additionalItems": false, + "default": [{}], + "items": { + "title": "Beam", + "headerTemplate": "{{ i0 }} - {{ self.name }}", + "type": "object", + "additionalProperties": false, + "default": {}, + "properties": { + "name": { + "type": "string", + "title": "Name/target", + "description": "Identifier for this beam", + "default": "" + }, + "digital_pointing": { + "title": "Digital pointing", + "default": {}, + "$ref": "#/definitions/pointing" + }, + "subbands": { + "type": "array", + "title": "Subband list", + "additionalItems": false, + "default": [], + "items": { + "type": "integer", + "title": "Subband", + "minimum": 0, + "maximum": 511 + } + } + } + } + } + } +} \ No newline at end of file