diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 19153cf7b408a7cd501eaf36d85e19cfd0842ad4..d15f2416f8c6865544a2a249aaa86c44d975c78b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -350,9 +350,6 @@ unit_test_MCU_MAC: integration_test_TMSS_Frontend: stage: integration_test image: ci_tmss:$CI_COMMIT_SHORT_SHA - #before_script: - # - apt-get update - # - apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget script: - PACKAGE=TMSSFrontend - echo "Testing $PACKAGE..." @@ -368,9 +365,6 @@ integration_test_TMSS_Frontend: - npm test a - npx kill-port 3000 - npm run cleanTemplateSchemas - interruptible: true - allow_failure: true - timeout: 2h needs: - build_TMSS diff --git a/SAS/TMSS/docker-compose-scu199.yml b/SAS/TMSS/docker-compose-scu199.yml deleted file mode 100644 index 227ca832e0a291a189d1f60c098439ead86ec1a8..0000000000000000000000000000000000000000 --- a/SAS/TMSS/docker-compose-scu199.yml +++ /dev/null @@ -1,19 +0,0 @@ -# This docker-compose is used to run TMSS together with a test open ID connect server on the test system (scu199) -version: "3" -services: - web: - image: nexus.cep4.control.lofar:18080/tmss_django:latest - restart: on-failure - env_file: - - ./.env - network_mode: "host" - command: bash -c 'source /opt/lofar/lofarinit.sh && ALLOWED_HOSTS=* tmss_test_environment -H 0.0.0.0 -P `hostname -f` -p 8008 -sSdv' - ports: - - "8008:8008" - testprovider: - image: nexus.cep4.control.lofar:18080/tmss_testprovider:latest - restart: unless-stopped - env_file: - - ./.env - ports: - - "8088:8088" \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/README.md b/SAS/TMSS/frontend/tmss_webapp/README.md index 84ed35a3a09fee728d207501192d7931e944ab83..4935a2e500743488487762a87cca860e5864bb66 100644 --- a/SAS/TMSS/frontend/tmss_webapp/README.md +++ b/SAS/TMSS/frontend/tmss_webapp/README.md @@ -1,113 +1,69 @@ -The TMSS frontend web application was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -To run and work on this application the TMSS-backend must have been started locally or in a docker container with rabbitmq or running rabbitmq separately. +The TMSS frontend web application was bootstrapped +with [Create React App](https://github.com/facebook/create-react-app). ## Running TMSS Backend with dependant services in docker -In the local development environment, the docker image of any branch can be downloaded and started with dependent services like rabbitmq to test the TMSS application as a whole. -1. First identify the docker image to be downloaded from the gitlab CI/CD pipelines. - +In the local development environment, the docker image of any branch can be downloaded and started with dependent services like rabbitmq to test the TMSS application as a whole. -2. Create a **docker-compose-tmss.yml** file in a folder. For example **./TMSS-backend-docker** +1. First identify the docker image to be downloaded from + the [container registry](https://git.astron.nl/ro/lofar/container_registry/11?) +2. Create and run a docker compose with the following to run TMSS and Rabbit MQ. -3. Copy the code to the **docker-compose-tmss.yml**. ``` -# This docker-compose is used to run TMSS together with rabbitmq version: "3" +networks: + tmss_network: + default: + driver: bridge + services: rabbitmq: image: rabbitmq:latest - hostname: rabbitmq - ports: - - 5672:5672 - - 15672:15672 + container_name: rabbitmq + networks: + - tmss_network + tmss-backend: - image: git.astron.nl:5000/ro/lofar/tmss_django:69bfeb28 - - restart: unless-stopped - stdin_open: true # docker run -i - tty: true # docker run -t + image: git.astron.nl:5000/ro/lofar/tmss_django:30048a25 << TO BE REPLACED environment: - RABBITMQ_DEFAULT_USER=guest - RABBITMQ_DEFAULT_PASS=guest - RABBITMQ_DEFAULT_PORT=5672 - LOFAR_DEFAULT_BROKER=rabbitmq - LOFARENV=TEST - #network_mode: "host" ports: - "8008:8008" - - "5678:5678" - - "5444:5444" command: bash -c 'source /opt/lofar/lofarinit.sh && ALLOWED_HOSTS=* tmss_test_environment -p 8008 -ldmMsSwV --simulate' #includes legacy + restart: unless-stopped + networks: + - tmss_network ``` -4. Replace the identified docker image id in the above code. -``` -tmss-backend: - image: git.astron.nl:5000/ro/lofar/tmss_django:8bbef603 -``` -5. Open the windows powershell or terminal and go to the folder **./TMSS-backend-docker** -``` -cd ./TMSS-backend-docker -``` +The TMSS backend API can be accessed with url http://localhost:8008/api/ and swagger can be accessed with +url http://localhost:8008/api/swagger/ -6. Use `docker-compose` command to start the backend and rabbitmq using the **docker-compose-tmss.yml** -``` -docker-compose -f ./docker-compose-tmss.yml up -``` -7. In few seconds, the docker image will be downloaded and the required services will be started in the docker container. +NOTE: This docker container also runs the TMSS Frontend application (http://localhost:8008/). -8. The TMSS backend API can be accessed with url http://localhost:8008/api/ and swagger can be accessed with url http://localhost:8008/api/swagger/ +## NPM -NOTE: This docker container also runs the TMSS Frontend application (http://localhost:8008/). +### requirements -## Running TMSS Backend in docker and rabbitmq locally. -It is assumed that you run some debian/ubuntu derived distro:First of all, make sure your machine runs a rabbitmq server. (This is needed for more lofar development, so it's a good thing to setup now) -``` -sudo apt-get install rabbitmq-server -``` -Then pull the latest tmss docker image from gitlab: -``` -docker pull git.astron.nl:5000/ro/lofar/tmss_django:8bbef603 -``` -Start the image: -``` -docker run --rm -it --net=host git.astron.nl:5000/ro/lofar/tmss_django:112eb497 -``` -In the image, source the lofarenvironment: -``` -source /opt/lofar/lofarinit.sh -``` -And finally, in the image, start tmss. We have a development "program"/script that gives you an entire TMSS server with a fresh test database and all side-services all running in one. -For your task at hand, this set of options would give you a nice enviroment: -``` -tmss_test_environment -p 8008 -dMSVw -``` -Wait until started, and then visit: http://localhost:8008/api/ +- node version ^14.40.0. -## TMSS Frontend Application -Once the TMSS API is accessible with one of the above mentioned methods, it is good to clone the `lofar` project and start the TMSS frontend application. +_The application is developed, tested and deployed with version 14.20.0. Though it supports all version ^14.20.0, it is +not tested yet._ -Before cloning the project, install the required node version. The application is developed, tested and deployed with version 14.20.0. Though it supports all version ^14.20.0, it is not tested yet. +- npm version ^8.3.0. -Now clone the lofar project to your local directory. -``` -git clone https://git.astron.nl/ro/lofar.git lofar -``` -Then goto ./lofar/SAS/TMSS/frontend/tmss_webapp -``` -cd ./lofar/SAS/TMSS/frontend/tmss_webapp -``` -Run npm install command to download and install all required modules/packages into node_modules folder. -``` -npm install -``` -When all the dependencies are installed, it is ready to run the application. +_It is a very outdated version; see 'npm version hell'_ ### npm version hell -Chances are, if you have a recent ubuntu development system, that you have a too recent npm version on your machine. It breaks with the not-so-recent-and-pinnen-at-fixed-version of the TMSS-used-js-modules in package.json. + +Chances are, if you have a recent ubuntu development system, that you have a too recent npm version on your machine. It +breaks with the not-so-recent-and-pinnen-at-fixed-version of the TMSS-used-js-modules in package.json. Here's the recipy out of that hell: Use NVM (Node Version Manager). This is a sort of python virtualenv for node. See also: https://github.com/nvm-sh/nvm#readme + ``` cd ~ rm -rf .npm @@ -120,8 +76,13 @@ npm install npm start ``` +### Available Scripts + +Run npm install command to download and install all required modules/packages into node_modules folder. + +### `npm install` -## Available Scripts +When all the dependencies are installed, it is ready to run the application. In the project directory, you can run: @@ -132,17 +93,30 @@ Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.<br /> You will also see any lint errors in the console. + ### `npm run prepareTemplateSchemasDev` -Prepares and creates the template schema json files from the latest backend source schemas to run the unit tests locally in development environment with test data. The schema json files are created in build/schemas folder and public/schemas folder. These files are not tracked in the git repository. + +Prepares and creates the template schema json files from the latest backend source schemas to run the unit tests locally +in development environment with test data. The schema json files are created in build/schemas folder and public/schemas +folder. These files are not tracked in the git repository. + ### `npm run prepareTemplateSchemas` -Prepares and creates the template schema json files from the latest backend source schemas to run the unit tests in CI/CD pipelines with test data. The schema json files are created in build/schemas folder and public/schemas folder. These files are not tracked in the git repository. + +Prepares and creates the template schema json files from the latest backend source schemas to run the unit tests in +CI/CD pipelines with test data. The schema json files are created in build/schemas folder and public/schemas folder. +These files are not tracked in the git repository. + ### `npm run cleanTemplateSchemas` + Deletes all schema json files created in build/schemas folder and public.schemas folder. ### `npm test` Launches the test runner in the interactive watch mode.<br /> -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more +information. +_Note: you need to run the prepareTemplateSchemaDev for local testing and prepareTemplateSchema for testing within +docker beforehand_ ### `npm build` @@ -158,25 +132,33 @@ See the section about [deployment](https://facebook.github.io/create-react-app/d **Note: this is a one-way operation. Once you `eject`, you can’t go back!** -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will +remove the single build dependency from your project. -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right +into your project so you have full control over them. All of the commands except `eject` will still work, but they will +point to the copied scripts so you can tweak them. At this point you’re on your own. -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you +shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t +customize it when you are ready for it. ## Available test users credentials -There are four test users available in the backend API which can be used to test the application for different role permission. -Username | Password | Role --------- | -------- | ----- -test | test | super user -scientist| scientist| telescope scientist -operator | operator | telescope operator -shared_support_user | shared_support_user | shared support user +There are four test users available in the backend API which can be used to test the application for different role +permission. + + Username | Password | Role +---------------------|---------------------|--------------------- + test | test | super user + scientist | scientist | telescope scientist + operator | operator | telescope operator + shared_support_user | shared_support_user | shared support user ## Learn More -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). +You can learn more in +the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). To learn React, check out the [React documentation](https://reactjs.org/). @@ -202,4 +184,5 @@ This section has moved here: https://facebook.github.io/create-react-app/docs/de ### `npm build` fails to minify -This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify +This section has moved +here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/SAS/TMSS/frontend/tmss_webapp/package.json b/SAS/TMSS/frontend/tmss_webapp/package.json index 985074c749172788c15eb431e378a44c94ed5db5..6872d3d059ef72689f6d850b7aad5ef7e98b93a6 100644 --- a/SAS/TMSS/frontend/tmss_webapp/package.json +++ b/SAS/TMSS/frontend/tmss_webapp/package.json @@ -62,7 +62,7 @@ "react-table": "^7.2.1", "react-table-plugins": "^1.3.1", "react-to-print": "^2.12.4", - "react-tooltip": "^3.11.6", + "react-tooltip": "^4.5.1", "react-transition-group": "^2.5.1", "react-websocket": "^2.1.0", "reactstrap": "^8.5.1", @@ -73,7 +73,9 @@ "suneditor": "^2.36.5", "suneditor-react": "^2.14.10", "typescript": "^3.9.5", - "yup": "^0.29.1" + "yup": "^0.29.1", + "jest-canvas-mock": "^2.5.0", + "jest-expect-message": "^1.1.3" }, "scripts": { "preinstall": "npx npm-force-resolutions", diff --git a/SAS/TMSS/frontend/tmss_webapp/src/App.test.js b/SAS/TMSS/frontend/tmss_webapp/src/App.test.js index d4513f63c5954fc3e5fd831ad7f14fadde299dd1..77d573325ba62fd3ac603316da9cb680eaf9b5ed 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/App.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/App.test.js @@ -1,6 +1,9 @@ import React from 'react'; import { render } from '@testing-library/react'; import App from './App'; +import {removeReact18ConsoleErrors} from "./utils/test.helper"; + +removeReact18ConsoleErrors() test('notification dialog exists in the application', () => { const content = render(<App />); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates.json b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates.json index b1bdfa3ddddefb7cbbd6d33ce3aaa6051cbedb1d..703fc3c78762a0a611c6b92c9658fe3a64edd0c2 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates.json +++ b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates.json @@ -1,16 +1,16 @@ { "strategies": [ { - "description": "Scheduling unit for Fast Radio Burst observations. Complex voltage observation at 110-188 MHz, 1 ch/SB, 5.12us. Pipeline outputs to digifil with extra channels. Specification instructions: Keep coherent dedisperion true and set DM > 0 else digifil fails.", - "name": "BF CV FRB", + "description": "Beamformed observation and pulsar pipeline for pulsar timing with extra frequency resolution for scintillation studies (default 6x). HBA, 110-188 MHz, 400 SBs, 8-bit raw output (195 kHz, 5.12 us).", + "name": "BF CS rings", "purpose": "technical_commissioning", "scheduling_unit_template": { "name": "scheduling unit", - "version": 7 + "version": 8 }, "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", @@ -25,13 +25,13 @@ ] }, { - "name": "Observation Name", + "name": "Observation Short Description", "refs": [ "#/tasks/Observation/short_description" ] }, { - "name": "Pipeline Name", + "name": "Pipeline Short Description", "refs": [ "#/tasks/Pipeline/short_description" ] @@ -50,19 +50,37 @@ ] }, { - "name": "Digifil options", + "name": "Number of rings CS", "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/digifil" + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/SAPs/0/tab_rings/count" ] }, { - "name": "Raw output (8bit)", + "name": "Rings separation CS", "refs": [ - "#/tasks/Pipeline/specifications_doc/output/quantisation/enabled" + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/SAPs/0/tab_rings/width" ] }, { - "name": "Subbands per file", + "name": "Stokes settings CS", + "refs": [ + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/stokes" + ] + }, + { + "name": "Number of channels per subband CS", + "refs": [ + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/channels_per_subband" + ] + }, + { + "name": "Downsampling time factor CS", + "refs": [ + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/time_integration_factor" + ] + }, + { + "name": "Subbands per file CS", "refs": [ "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/subbands_per_file" ] @@ -76,10 +94,6 @@ "moon": 0.00872665, "sun": 0.00872665 }, - "min_elevation": { - "calibrator": 0.5235987755982988, - "target": 0.5235987755982988 - }, "transit_offset": { "from": -21600, "to": 21600 @@ -88,7 +102,7 @@ }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { @@ -107,7 +121,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -126,7 +140,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -145,7 +159,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -164,7 +178,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -183,7 +197,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -202,7 +216,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], @@ -225,8 +239,8 @@ } }, "Observation": { - "description": "Beamforming observation for default baseband recording with HBA, Full Core, 20 min, 8bit, CV, 1ch/sub, Nsubs=400", - "short_description": "FRB YYYYMMDDA", + "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400", + "short_description": "Baaaa+bb", "specifications_doc": { "beamformer": { "pipelines": [ @@ -436,216 +450,18 @@ 247, 248, 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450 + 250 ], "method": "copy" }, "tab_rings": { - "count": 0, - "width": 0.01 + "count": 2, + "width": 0.001 }, "tabs": [ { + "allow_after_previous": true, + "duration": 0, "pointing": { "angle1": 0, "angle2": 0, @@ -658,27 +474,56 @@ } ], "settings": { - "channels_per_subband": 1, + "channels_per_subband": 16, "quantisation": { "bits": 8, "enabled": false, "scale_max": 5, "scale_min": -5 }, - "stokes": "XXYY", - "subbands_per_file": 20, - "time_integration_factor": 1 + "stokes": "I", + "subbands_per_file": 488, + "time_integration_factor": 6 } }, - "name": "Beamformer CV", - "station_groups": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", + "flys eye": { + "enabled": false, + "settings": { + "channels_per_subband": 1, + "quantisation": { + "bits": 8, + "enabled": false, + "scale_max": 5, + "scale_min": -5 + }, + "stokes": "I", + "subbands_per_file": 488, + "time_integration_factor": 1 + } + }, + "incoherent": { + "SAPs": [], + "settings": { + "channels_per_subband": 1, + "quantisation": { + "bits": 8, + "enabled": false, + "scale_max": 5, + "scale_min": -5 + }, + "stokes": "I", + "subbands_per_file": 488, + "time_integration_factor": 1 + } + }, + "name": "Beamformer StokesI", + "station_groups": [ + { + "max_nr_missing": 3, + "stations": [ + "CS002", + "CS003", + "CS004", "CS005", "CS006", "CS007", @@ -703,7 +548,8 @@ } ] } - ] + ], + "ppf": false }, "duration": 120, "station_configuration": { @@ -713,7 +559,7 @@ "angle1": 0.92934186635, "angle2": 0.952579228492, "direction_type": "J2000", - "target": "FRB YYYYMMDDA" + "target": "Baaaa+bb" }, "name": "SAP0", "subbands": [ @@ -1126,7 +972,6 @@ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -1157,7 +1002,7 @@ "angle1": 0.92934186635, "angle2": 0.952579228492, "direction_type": "J2000", - "target": "Tile Beam on SAP center" + "target": "Baaaa+bb" } } }, @@ -1167,9 +1012,10 @@ } }, "Pipeline": { - "description": "Pulsar Pipeline for FRB observation", - "short_description": "FRB YYYYMMDDA/pulp", + "description": "Pulsar Pipeline for HBA pulsar timing observation with additional channels HBA. Full Core, 8bit, XXYY, 6ch/sub, Nsubs=400", + "short_description": "Baaaa+bb/PULP", "specifications_doc": { + "$schema": "http://localhost:3000/schemas/tasktemplate/pulsar%20pipeline/6/ref_resolved", "cluster_resources": { "cores_per_task": 2, "parallel_tasks": 20, @@ -1180,21 +1026,21 @@ }, "dspsr": { "digifil": { - "channels_per_part": 320, - "coherent_dedispersion": true, - "dm": 0.0001, + "channels_per_part": 20, + "coherent_dedispersion": false, + "dm": 0, "integration_time_factor": 4 }, "enabled": false, "filterbank": { "channels_per_part": 120, - "coherent_dedispersion": false, + "coherent_dedispersion": true, "enabled": false }, - "optimise_period_dm": true, + "optimise_period_dm": false, "rfi_excision": true, "single_pulse_subintegration": false, - "subintegration_length": -1 + "subintegration_length": 10 }, "output": { "dynamic_spectrum": { @@ -1210,15 +1056,15 @@ "fold_profile": true, "input": { "decode_sigma": 3, - "nr_blocks": 100, + "nr_blocks": 6, "samples_per_block": 8192 }, "prepdata": { "dm": -1 }, - "prepfold": false, + "prepfold": true, "rfifind": { - "blocks": 16 + "blocks": 1 }, "rrats": { "dm_range": 5, @@ -1226,10 +1072,10 @@ } }, "pulsar": { - "name": "B9999+99", - "strategy": "manual" + "name": "", + "strategy": "tabfind+" }, - "single_pulse_search": true + "single_pulse_search": false }, "specifications_template": { "name": "pulsar pipeline", @@ -1238,22 +1084,22 @@ } } }, - "version": 19, + "version": 1, "id": 1, "state_value": "active", "purpose_value": "technical_commissioning" }, { - "description": "Beamformed observation and pulsar pipeline for pulsar timing with extra frequency resolution for scintillation studies (default 6x). HBA, 110-188 MHz, 400 SBs, 8-bit raw output (195 kHz, 5.12 us).", - "name": "BF CV Pulsar Timing Scintillation", - "purpose": "technical_commissioning", + "description": "Beamformed observation and pulsar pipeline for conversion to raw 8-bit data. HBA, 110-188 MHz, 400 SBs, 195 kHz, 5.12 us.", + "name": "BF CV 8-bit", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 7 + "version": 8 }, "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", @@ -1268,21 +1114,21 @@ ] }, { - "name": "Observation Short Description", + "name": "Duration", "refs": [ - "#/tasks/Observation/short_description" + "#/tasks/Observation/specifications_doc/duration" ] }, { - "name": "Pipeline Short Description", + "name": "Observation Short Description", "refs": [ - "#/tasks/Pipeline/short_description" + "#/tasks/Observation/short_description" ] }, { - "name": "Duration", + "name": "Pipeline Short Description", "refs": [ - "#/tasks/Observation/specifications_doc/duration" + "#/tasks/Pipeline/short_description" ] }, { @@ -1291,36 +1137,6 @@ "#/tasks/Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", "#/tasks/Observation/specifications_doc/station_configuration/tile_beam" ] - }, - { - "name": "Optimise period & DM", - "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/optimise_period_dm" - ] - }, - { - "name": "Subintegration time", - "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/subintegration_length" - ] - }, - { - "name": "Raw output (8bit)", - "refs": [ - "#/tasks/Pipeline/specifications_doc/output/quantisation/enabled" - ] - }, - { - "name": "Subbands per file", - "refs": [ - "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/subbands_per_file" - ] - }, - { - "name": "Frequency channels per file (multiple of subbands per file)", - "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/filterbank/channels_per_part" - ] } ], "scheduling_constraints_doc": { @@ -1339,7 +1155,7 @@ }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { @@ -1358,7 +1174,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -1377,7 +1193,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -1396,7 +1212,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -1415,7 +1231,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -1434,7 +1250,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -1453,7 +1269,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], @@ -1476,7 +1292,7 @@ } }, "Observation": { - "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400", + "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400 ", "short_description": "Baaaa+bb", "specifications_doc": { "beamformer": { @@ -2417,7 +2233,7 @@ } }, "Pipeline": { - "description": "Pulsar Pipeline for HBA pulsar timing observation with additional channels HBA. Full Core, 8bit, XXYY, 6ch/sub, Nsubs=400", + "description": "Pulsar Pipeline for conversion to raw 8 bit data only. HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400 ", "short_description": "Baaaa+bb/PULP", "specifications_doc": { "cluster_resources": { @@ -2435,15 +2251,10 @@ "dm": 0, "integration_time_factor": 4 }, - "enabled": true, - "filterbank": { - "channels_per_part": 120, - "coherent_dedispersion": true, - "enabled": true - }, + "enabled": false, "optimise_period_dm": false, "rfi_excision": true, - "subintegration_length": 10 + "subintegration_length": -1 }, "output": { "dynamic_spectrum": { @@ -2481,22 +2292,22 @@ } } }, - "version": 10, + "version": 17, "id": 2, "state_value": "active", - "purpose_value": "technical_commissioning" + "purpose_value": "production" }, { - "description": "Beamformed observation and pulsar pipeline for pulsar timing. HBA, 110-188 MHz, 400 SBs, 195 kHz, 5.12 us.", - "name": "BF Pulsar Timing", - "purpose": "technical_commissioning", + "description": "Scheduling unit for Fast Radio Burst observations. Complex voltage observation at 110-188 MHz, 1 ch/SB, 5.12us. Pipeline outputs to digifil with extra channels. Specification instructions: Keep coherent dedisperion true and set DM > 0 else digifil fails.", + "name": "BF CV FRB", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 7 + "version": 8 }, "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", @@ -2511,21 +2322,21 @@ ] }, { - "name": "Duration", + "name": "Observation Name", "refs": [ - "#/tasks/Observation/specifications_doc/duration" + "#/tasks/Observation/short_description" ] }, { - "name": "Observation Short Description", + "name": "Pipeline Name", "refs": [ - "#/tasks/Observation/short_description" + "#/tasks/Pipeline/short_description" ] }, { - "name": "Pipeline Short Description", + "name": "Duration", "refs": [ - "#/tasks/Pipeline/short_description" + "#/tasks/Observation/specifications_doc/duration" ] }, { @@ -2536,15 +2347,21 @@ ] }, { - "name": "Optimise period & DM", + "name": "Digifil options", "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/optimise_period_dm" + "#/tasks/Pipeline/specifications_doc/dspsr/digifil" ] }, { - "name": "Subintegration time", + "name": "Raw output (8bit)", "refs": [ - "#/tasks/Pipeline/specifications_doc/dspsr/subintegration_length" + "#/tasks/Pipeline/specifications_doc/output/quantisation/enabled" + ] + }, + { + "name": "Subbands per file", + "refs": [ + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/subbands_per_file" ] } ], @@ -2556,6 +2373,10 @@ "moon": 0.00872665, "sun": 0.00872665 }, + "min_elevation": { + "calibrator": 0.5235987755982988, + "target": 0.5235987755982988 + }, "transit_offset": { "from": -21600, "to": 21600 @@ -2564,7 +2385,7 @@ }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { @@ -2583,7 +2404,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -2602,7 +2423,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -2621,7 +2442,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -2640,7 +2461,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -2659,7 +2480,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -2678,7 +2499,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], @@ -2701,8 +2522,8 @@ } }, "Observation": { - "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400 ", - "short_description": "Baaaa+bb", + "description": "Beamforming observation for default baseband recording with HBA, Full Core, 20 min, 8bit, CV, 1ch/sub, Nsubs=400", + "short_description": "FRB YYYYMMDDA", "specifications_doc": { "beamformer": { "pipelines": [ @@ -3178,8 +2999,7 @@ } ] } - ], - "ppf": false + ] }, "duration": 120, "station_configuration": { @@ -3189,7 +3009,7 @@ "angle1": 0.92934186635, "angle2": 0.952579228492, "direction_type": "J2000", - "target": "Baaaa+bb" + "target": "FRB YYYYMMDDA" }, "name": "SAP0", "subbands": [ @@ -3632,7 +3452,7 @@ "angle1": 0.92934186635, "angle2": 0.952579228492, "direction_type": "J2000", - "target": "Baaaa+bb" + "target": "Tile Beam on SAP center" } } }, @@ -3642,8 +3462,8 @@ } }, "Pipeline": { - "description": "Pulsar Pipeline for default HBA pulsar timing observation. HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400 ", - "short_description": "Baaaa+bb/PULP", + "description": "Pulsar Pipeline for FRB observation", + "short_description": "FRB YYYYMMDDA/pulp", "specifications_doc": { "cluster_resources": { "cores_per_task": 2, @@ -3655,15 +3475,21 @@ }, "dspsr": { "digifil": { - "channels_per_part": 20, - "coherent_dedispersion": false, - "dm": 0, + "channels_per_part": 320, + "coherent_dedispersion": true, + "dm": 0.0001, "integration_time_factor": 4 }, - "enabled": true, - "optimise_period_dm": false, + "enabled": false, + "filterbank": { + "channels_per_part": 120, + "coherent_dedispersion": false, + "enabled": false + }, + "optimise_period_dm": true, "rfi_excision": true, - "subintegration_length": 10 + "single_pulse_subintegration": false, + "subintegration_length": -1 }, "output": { "dynamic_spectrum": { @@ -3682,17 +3508,23 @@ "nr_blocks": 100, "samples_per_block": 8192 }, + "prepdata": { + "dm": -1 + }, "prepfold": false, + "rfifind": { + "blocks": 16 + }, "rrats": { "dm_range": 5, "enabled": false } }, "pulsar": { - "name": "", - "strategy": "meta" + "name": "B9999+99", + "strategy": "manual" }, - "single_pulse_search": false + "single_pulse_search": true }, "specifications_template": { "name": "pulsar pipeline", @@ -3704,19 +3536,19 @@ "version": 20, "id": 3, "state_value": "active", - "purpose_value": "technical_commissioning" + "purpose_value": "production" }, { - "description": "Fly's Eye Monitoring. Fly's Eye observation of a known pulsar for station quality monitoring", - "name": "FE monitoring", - "purpose": "technical_commissioning", + "description": "Beamformed observation and pulsar pipeline for pulsar timing with extra frequency resolution for scintillation studies (default 6x). HBA, 110-188 MHz, 400 SBs, 8-bit raw output (195 kHz, 5.12 us).", + "name": "BF CV Pulsar Timing Scintillation", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 5 + "version": 8 }, - "state": "development", + "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/5/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", @@ -3724,6 +3556,24 @@ "#/tasks/Observation/specifications_doc/station_configuration/station_groups" ] }, + { + "name": "Scheduling Constraints", + "refs": [ + "#/scheduling_constraints_doc" + ] + }, + { + "name": "Observation Short Description", + "refs": [ + "#/tasks/Observation/short_description" + ] + }, + { + "name": "Pipeline Short Description", + "refs": [ + "#/tasks/Pipeline/short_description" + ] + }, { "name": "Duration", "refs": [ @@ -3731,54 +3581,60 @@ ] }, { - "name": "Antenna Set", + "name": "Target Pointing", "refs": [ - "#/tasks/Observation/specifications_doc/station_configuration/antenna_set" + "#/tasks/Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/Observation/specifications_doc/station_configuration/tile_beam" ] }, { - "name": "Filter", + "name": "Optimise period & DM", "refs": [ - "#/tasks/Observation/specifications_doc/station_configuration/filter" + "#/tasks/Pipeline/specifications_doc/dspsr/optimise_period_dm" ] }, { - "name": "Subbands", + "name": "Subintegration time", "refs": [ - "#/tasks/Observation/specifications_doc/station_configuration/SAPs/0/subbands" + "#/tasks/Pipeline/specifications_doc/dspsr/subintegration_length" ] - } + }, + { + "name": "Raw output (8bit)", + "refs": [ + "#/tasks/Pipeline/specifications_doc/output/quantisation/enabled" + ] + }, + { + "name": "Subbands per file", + "refs": [ + "#/tasks/Observation/specifications_doc/beamformer/pipelines/0/coherent/settings/subbands_per_file" + ] + }, + { + "name": "Frequency channels per file (multiple of subbands per file)", + "refs": [ + "#/tasks/Pipeline/specifications_doc/dspsr/filterbank/channels_per_part" + ] + } ], "scheduling_constraints_doc": { - "daily": { - "avoid_twilight": false, - "require_day": false, - "require_night": false - }, - "scheduler": "fixed_time", + "scheduler": "dynamic", "sky": { "min_distance": { - "jupiter": 0.00872665, + "jupiter": 0, "moon": 0.00872665, "sun": 0.00872665 }, - "min_elevation": { - "calibrator": 0.523599, - "target": 0.523599 - }, "transit_offset": { - "from": -50400, - "to": 50400 + "from": -21600, + "to": 21600 } - }, - "time": { - "between": [], - "not_between": [] } }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { @@ -3797,11 +3653,30 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { - "consumer": "Cleanup", + "consumer": "Ingest", + "input": { + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" + }, + "output": { + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" + }, + "producer": "Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Ingest", "input": { "dataformat": "pulp analysis", "datatype": "pulsar profile", @@ -3816,7 +3691,7 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -3824,7 +3699,7 @@ "input": { "dataformat": "Beamformed", "datatype": "time series", - "role": "any" + "role": "beamformer" }, "output": { "dataformat": "Beamformed", @@ -3835,3819 +3710,612 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" + }, + "output": { + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" + }, + "producer": "Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "pulp analysis", + "datatype": "pulsar profile", + "role": "any" + }, + "output": { + "dataformat": "pulp analysis", + "datatype": "pulsar profile", + "role": "any" + }, + "producer": "Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 } } ], "task_scheduling_relations": [], "tasks": { "Cleanup": { - "description": "Cleaning up all output dataproducts for this scheduling unit", - "short_description": "Cleanup", + "description": "Cleanup all dataproducts from disk", "specifications_doc": {}, "specifications_template": { "name": "cleanup", "version": 7 } }, + "Ingest": { + "description": "Ingest the pipeline outputs dataproducts", + "specifications_doc": {}, + "specifications_template": { + "name": "ingest", + "version": 7 + } + }, "Observation": { - "description": "Fly's Eye Observation with all stations", - "short_description": "IPS FE1", + "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400", + "short_description": "Baaaa+bb", "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": true, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": false, - "enabled": true - } - }, "beamformer": { "pipelines": [ { "coherent": { - "SAPs": [], - "settings": { - "channels_per_subband": 1, - "quantisation": { - "bits": 8, - "enabled": false, - "scale_max": 5, - "scale_min": -5 - }, - "stokes": "I", - "subbands_per_file": 488, - "time_integration_factor": 1 - } - }, - "flys eye": { - "enabled": true, - "settings": { - "channels_per_subband": 16, - "quantisation": { - "bits": 8, - "enabled": false, - "scale_max": 5, - "scale_min": -5 - }, - "stokes": "I", - "subbands_per_file": 488, - "time_integration_factor": 128 - } - }, - "incoherent": { - "SAPs": [], - "settings": { - "channels_per_subband": 1, - "quantisation": { - "bits": 8, - "enabled": false, - "scale_max": 5, - "scale_min": -5 - }, - "stokes": "I", - "subbands_per_file": 488, - "time_integration_factor": 1 - } - }, - "name": "FE", - "station_groups": [ - { - "max_nr_missing": 20, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509", - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "FR606", - "SE607", - "DE609", - "PL610", - "PL611", - "PL612" - ] - } - ] - } - ], - "ppf": false - }, - "duration": 300, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 2.1598085883168996, - "angle2": 1.300007038906933, - "direction_type": "J2000", - "target": "B0809+74" - }, - "name": "FE_pointing", - "subbands": [ - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 397, - 398, - 399, - 400, - 401, - 402, - 403, - 404, - 405, - 406, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453 - ] - } - ], - "antenna_set": "HBA_DUAL", - "filter": "HBA_110_190", - "station_groups": [ - { - "max_nr_missing": 20, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509", - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "DE609", - "FR606", - "SE607", - "UK608", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ] - } - ], - "tile_beam": { - "angle1": 2.1598085883168996, - "angle2": 1.300007038906933, - "direction_type": "J2000", - "target": "B0809+74" - } - } - }, - "specifications_template": { - "name": "beamforming observation", - "version": 8 - } - }, - "Pipeline": { - "description": "Pulsar Pipeline for Fly's Eye observation", - "short_description": "Baaaa+bb/PULP", - "specifications_doc": { - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 38, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "dspsr": { - "digifil": { - "channels_per_part": 20, - "coherent_dedispersion": false, - "dm": 0, - "integration_time_factor": 4 - }, - "enabled": true, - "optimise_period_dm": false, - "rfi_excision": true, - "subintegration_length": -1 - }, - "output": { - "dynamic_spectrum": { - "enabled": true, - "time_average": 0.5 - }, - "quantisation": { - "enabled": false, - "scale": 5 - } - }, - "presto": { - "fold_profile": true, - "input": { - "decode_sigma": 3, - "nr_blocks": 100, - "samples_per_block": 8192 - }, - "prepfold": true, - "rrats": { - "dm_range": 5, - "enabled": false - } - }, - "pulsar": { - "name": "", - "strategy": "meta" - }, - "single_pulse_search": false - }, - "specifications_template": { - "name": "pulsar pipeline", - "version": 6 - } - } - } - }, - "version": 5, - "id": 4, - "state_value": "development", - "purpose_value": "technical_commissioning" - }, - { - "description": "This observation strategy template defines a single-beam HBA imaging strategy with a Calibrator-Target-Calibrator observation chain, plus a preprocessing pipeline for each and ingest of pipeline data only.", - "name": "IM HBA - 1 Beam", - "purpose": "technical_commissioning", - "scheduling_unit_template": { - "name": "scheduling unit", - "version": 7 - }, - "state": "active", - "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", - "parameters": [ - { - "name": "Stations", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" - ] - }, - { - "name": "Scheduling Constraints", - "refs": [ - "#/scheduling_constraints_doc" - ] - }, - { - "name": "Observation Description", - "refs": [ - "#/tasks/Target Observation/short_description" - ] - }, - { - "name": "Target Pipeline Description", - "refs": [ - "#/tasks/Target Pipeline/short_description" - ] - }, - { - "name": "Target Pointing", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", - "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" - ] - }, - { - "name": "Subbands", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/subbands" - ] - }, - { - "name": "Target Duration", - "refs": [ - "#/tasks/Target Observation/specifications_doc/duration" - ] - }, - { - "name": "Calibrator Observation 1 Description", - "refs": [ - "#/tasks/Calibrator Observation 1/short_description" - ] - }, - { - "name": "Calibrator Pipeline 1 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 1/short_description" - ] - }, - { - "name": "Calibrator Observation 1 Pointing ", - "refs": [ - "#/tasks/Calibrator Observation 1/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Calibrator Observation 1 Duration", - "refs": [ - "#/tasks/Calibrator Observation 1/specifications_doc/duration" - ] - }, - { - "name": "Calibrator Observation 2 Description", - "refs": [ - "#/tasks/Calibrator Observation 2/short_description" - ] - }, - { - "name": "Calibrator Pipeline 2 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 2/short_description" - ] - }, - { - "name": "Calibrator Observation 2 Pointing", - "refs": [ - "#/tasks/Calibrator Observation 2/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Calibrator Observation 2 Duration", - "refs": [ - "#/tasks/Calibrator Observation 2/specifications_doc/duration" - ] - }, - { - "name": "Run Adder", - "refs": [ - "#/tasks/Target Observation/specifications_doc/QA/plots/enabled", - "#/tasks/Calibrator Observation 1/specifications_doc/QA/plots/enabled", - "#/tasks/Calibrator Observation 2/specifications_doc/QA/plots/enabled", - "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Calibrator Observation 1/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Calibrator Observation 2/specifications_doc/QA/file_conversion/enabled" - ] - } - ], - "scheduling_constraints_doc": { - "scheduler": "dynamic", - "sky": { - "transit_offset": { - "from": -1440, - "to": 1440 - } - } - }, - "scheduling_constraints_template": { - "name": "constraints", - "version": 7 - }, - "task_relations": [ - { - "consumer": "Calibrator Pipeline 1", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Calibrator Pipeline 2", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Target Pipeline", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "target" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Target Pipeline", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Target Pipeline", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - } - ], - "task_scheduling_relations": [ - { - "first": "Calibrator Observation 1", - "placement": "before", - "second": "Target Observation", - "time_offset": 60 - }, - { - "first": "Calibrator Observation 2", - "placement": "after", - "second": "Target Observation", - "time_offset": 60 - } - ], - "tasks": { - "Calibrator Observation 1": { - "description": "Calibrator Observation 1. Before the Target Observation", - "short_description": "Cal1 3Cabc", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator1", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cabc" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Observation 2": { - "description": "Calibrator Observation 2. After the Target Observation", - "short_description": "Cal2 3Cdef", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator2", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cdef" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Pipeline 1": { - "description": "Preprocessing Pipeline for Calibrator Observation 1", - "short_description": "Cal1 3Cabc/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Calibrator Pipeline 2": { - "description": "Preprocessing Pipeline for Calibrator Observation 2", - "short_description": "Cal2 3Cdef/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Cleanup": { - "description": "Clean up all dataproducts from disk after ingest", - "specifications_doc": {}, - "specifications_template": { - "name": "cleanup", - "version": 7 - } - }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Target Observation": { - "description": "Target Observation", - "short_description": "_Target_Name_", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" - }, - "duration": 28800, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "target1" - }, - "name": "target", - "subbands": [ - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 182, - 183, - 184, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 212, - 213, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 349, - 364, - 372, - 380, - 388, - 396, - 404, - 413, - 421, - 430, - 438, - 447 - ] - } - ], - "antenna_set": "HBA_DUAL_INNER", - "filter": "HBA_110_190", - "station_groups": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 2, - "stations": [ - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "DE609", - "FR606", - "SE607", - "UK608", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ] - }, - { - "max_nr_missing": 1, - "stations": [ - "DE601", - "DE605" - ] - } - ], - "tile_beam": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "target1" - } - } - }, - "specifications_template": { - "name": "target observation", - "version": 7 - } - }, - "Target Pipeline": { - "description": "Preprocessing Pipeline for Target Observation", - "short_description": "_Target_Name_/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - } - } - }, - "version": 29, - "id": 5, - "state_value": "active", - "purpose_value": "technical_commissioning" - }, - { - "description": "This observation strategy template defines a LoTSS deep field run with a Calibrator-Target-Calibrator observation chain, plus a preprocessing pipeline for each and ingest of pipeline data only, using a central beam with 3 flanking fields.", - "name": "IM HBA Deep - 4 Beams", - "purpose": "technical_commissioning", - "scheduling_unit_template": { - "name": "scheduling unit", - "version": 5 - }, - "state": "development", - "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/5/ref_resolved", - "parameters": [ - { - "name": "Stations", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" - ] - }, - { - "name": "Target Duration", - "refs": [ - "#/tasks/Target Observation/specifications_doc/duration" - ] - }, - { - "name": "Scheduling Constraints", - "refs": [ - "#/scheduling_constraints_doc" - ] - }, - { - "name": "Target Observation Description", - "refs": [ - "#/tasks/Target Observation/short_description" - ] - }, - { - "name": "Pipeline Central Target Description", - "refs": [ - "#/tasks/Pipeline Central Target/short_description" - ] - }, - { - "name": "Pipeline Offset A Description", - "refs": [ - "#/tasks/Pipeline Offset A/short_description" - ] - }, - { - "name": "Pipeline Offset B Description", - "refs": [ - "#/tasks/Pipeline Offset B/short_description" - ] - }, - { - "name": "Pipeline Offset C Description", - "refs": [ - "#/tasks/Pipeline Offset C/short_description" - ] - }, - { - "name": "Central Pointing", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", - "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" - ] - }, - { - "name": "Pointing Offset A", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" - ] - }, - { - "name": "Pointing Offset B", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/2/digital_pointing" - ] - }, - { - "name": "Pointing Offset C", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/3/digital_pointing" - ] - }, - { - "name": "Calibrator 1 Description", - "refs": [ - "#/tasks/Calibrator Observation 1/short_description" - ] - }, - { - "name": "Calibrator Pipeline 1 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 1/short_description" - ] - }, - { - "name": "Calibrator 1 Pointing", - "refs": [ - "#/tasks/Calibrator Observation 1/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Calibrator 2 Description", - "refs": [ - "#/tasks/Calibrator Observation 2/short_description" - ] - }, - { - "name": "Calibrator Pipeline 2 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 2/short_description" - ] - }, - { - "name": "Calibrator 2 Pointing", - "refs": [ - "#/tasks/Calibrator Observation 2/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Run ADDER QA", - "refs": [ - "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Target Observation/specifications_doc/QA/plots/enabled" - ] - } - ], - "scheduling_constraints_doc": { - "scheduler": "dynamic", - "sky": { - "transit_offset": { - "from": -1440, - "to": 1440 - } - } - }, - "scheduling_constraints_template": { - "name": "constraints", - "version": 7 - }, - "task_relations": [ - { - "consumer": "Calibrator Pipeline 1", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Calibrator Pipeline 2", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Pipeline Central Target", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "central-sap" - ] - }, - "selection_template": { - "name": "SAP", - "version": 4 - } - }, - { - "consumer": "Pipeline Offset A", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "offset-A" - ] - }, - "selection_template": { - "name": "SAP", - "version": 4 - } - }, - { - "consumer": "Pipeline Offset B", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "offset-B" - ] - }, - "selection_template": { - "name": "SAP", - "version": 4 - } - }, - { - "consumer": "Pipeline Offset C", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "offset-C" - ] - }, - "selection_template": { - "name": "SAP", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline Central Target", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline Offset A", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline Offset B", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline Offset C", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 4 - } - } - ], - "task_scheduling_relations": [ - { - "first": "Calibrator Observation 1", - "placement": "before", - "second": "Target Observation", - "time_offset": 60 - }, - { - "first": "Calibrator Observation 2", - "placement": "after", - "second": "Target Observation", - "time_offset": 60 - } - ], - "tasks": { - "Calibrator Observation 1": { - "description": "Calibrator Observation for UC1 HBA scheduling unit", - "short_description": "3Cabc", - "specifications_doc": { - "calibrator": { - "autoselect": false, - "name": "calibrator1", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cab1" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Observation 2": { - "description": "Calibrator Observation for UC1 HBA scheduling unit", - "short_description": "3Cabc", - "specifications_doc": { - "calibrator": { - "autoselect": false, - "name": "calibrator2", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cab2" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Pipeline 1": { - "description": "Preprocessing Pipeline for Calibrator Observation 1", - "short_description": "3Cabc/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Calibrator Pipeline 2": { - "description": "Preprocessing Pipeline for Calibrator Observation 2", - "short_description": "3Cabc/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "short_description": "Ingest", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Pipeline Central Target": { - "description": "Preprocessing Pipeline for Central Target, SAP000", - "short_description": "_target_field_name_/1.0/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 - }, - "demix": { - "frequency_steps": 16, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline Offset A": { - "description": "Preprocessing Pipeline for Offset Target A, SAP001", - "short_description": "_target_field_name_-IS-A/1.1/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 - }, - "demix": { - "frequency_steps": 16, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline Offset B": { - "description": "Preprocessing Pipeline for Offset Target B, SAP002", - "short_description": "_target_field_name_-IS-B/1.2/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 - }, - "demix": { - "frequency_steps": 16, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline Offset C": { - "description": "Preprocessing Pipeline for Offset Target C, SAP003", - "short_description": "_target_field_name_-IS-C/1.3/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 - }, - "demix": { - "frequency_steps": 16, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Target Observation": { - "description": "Target Observation for Deep HBA observation with 3 flanking fields", - "short_description": "_target_name_ Run _nr_", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": true, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": true - } - }, - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" - }, - "duration": 120, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_target_field_name_" - }, - "name": "central-sap", - "subbands": [ - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 348, - 349, - 350, - 351, - 352, - 353, - 354, - 355, - 356, - 357, - 358, - 359, - 360, - 361, - 362, - 363, - 364, - 365, - 366, - 367, - 368, - 369, - 370, - 371, - 372, - 373, - 374, - 375, - 376, - 377, - 378, - 379, - 380, - 381, - 382, - 383, - 384, - 385, - 386, - 387, - 388, - 389, - 390, - 391, - 392, - 393, - 394, - 395, - 396, - 402, - 407, - 408, - 409, - 410, - 411, - 412, - 413, - 414, - 415, - 416, - 417, - 418, - 419, - 420, - 421, - 422, - 423, - 424, - 425, - 426, - 427, - 428, - 429, - 430, - 431, - 432, - 433, - 434, - 435, - 436, - 437, - 438, - 439, - 440, - 441, - 442, - 443, - 444, - 445, - 446, - 447, - 448, - 449, - 450, - 451, - 452, - 453, - 454, - 455, - 456 - ] - }, - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_target_field_name_-IS-A" - }, - "name": "offset-A", - "subbands": [ - 77, - 87, - 97, - 107, - 117, - 127, - 137, - 147, - 157, - 167, - 177, - 187, - 197, - 207, - 217, - 227, - 237, - 247, - 257, - 267, - 277, - 287, - 297, - 307, - 317, - 327, - 337, - 347, - 357, - 367, - 377, - 387, - 396, - 407, - 417, - 427, - 437, - 447, - 456 - ] - }, - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_target_field_name_-IS-B" - }, - "name": "offset-B", - "subbands": [ - 77, - 87, - 97, - 107, - 117, - 127, - 137, - 147, - 157, - 167, - 177, - 187, - 197, - 207, - 217, - 227, - 237, - 247, - 257, - 267, - 277, - 287, - 297, - 307, - 317, - 327, - 337, - 347, - 357, - 367, - 377, - 387, - 396, - 407, - 417, - 427, - 437, - 447, - 456 - ] - }, - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_target_field_name_-IS-C" - }, - "name": "offset-C", - "subbands": [ - 77, - 87, - 97, - 107, - 117, - 127, - 137, - 147, - 157, - 167, - 177, - 187, - 197, - 207, - 217, - 227, - 237, - 247, - 257, - 267, - 277, - 287, - 297, - 307, - 317, - 327, - 337, - 347, - 357, - 367, - 377, - 387, - 396, - 407, - 417, - 427, - 437, - 447, - 456 - ] - } - ], - "antenna_set": "HBA_DUAL_INNER", - "filter": "HBA_110_190", - "station_groups": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 2, - "stations": [ - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "DE609", - "FR606", - "SE607", - "UK608", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ] - }, - { - "max_nr_missing": 1, - "stations": [ - "DE601", - "DE605" - ] - } - ], - "tile_beam": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "Tile Beam on Central Target" - } - } - }, - "specifications_template": { - "name": "target observation", - "version": 7 - } - } - } - }, - "version": 10, - "id": 6, - "state_value": "development", - "purpose_value": "technical_commissioning" - }, - { - "description": "This observation strategy template defines a LoTSS (Co-)observing run with a Calibrator-Target-Calibrator observation chain, plus a preprocessing pipeline for each and ingest of pipeline data only. Added cleanup.", - "name": "IM HBA LoTSS - 2 Beams", - "purpose": "technical_commissioning", - "scheduling_unit_template": { - "name": "scheduling unit", - "version": 7 - }, - "state": "active", - "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", - "parameters": [ - { - "name": "Stations", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" - ] - }, - { - "name": "Scheduling Constraints", - "refs": [ - "#/scheduling_constraints_doc" - ] - }, - { - "name": "Target Pointing 1", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" - ] - }, - { - "name": "Target Pointing 2", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" - ] - }, - { - "name": "Tile Beam", - "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" - ] - }, - { - "name": "Target Duration", - "refs": [ - "#/tasks/Target Observation/specifications_doc/duration" - ] - }, - { - "name": "Observation Description", - "refs": [ - "#/tasks/Target Observation/short_description" - ] - }, - { - "name": "Pipeline 1 Description", - "refs": [ - "#/tasks/Pipeline target1/short_description" - ] - }, - { - "name": "Pipeline 2 Description", - "refs": [ - "#/tasks/Pipeline target2/short_description" - ] - }, - { - "name": "Calibrator Observation 1 Description", - "refs": [ - "#/tasks/Calibrator Observation 1/short_description" - ] - }, - { - "name": "Calibrator Observation 1 Pointing", - "refs": [ - "#/tasks/Calibrator Observation 1/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Calibrator Pipeline 1 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 1/short_description" - ] - }, - { - "name": "Calibrator Observation 2 Description", - "refs": [ - "#/tasks/Calibrator Observation 2/short_description" - ] - }, - { - "name": "Calibrator Observation 2 Pointing", - "refs": [ - "#/tasks/Calibrator Observation 2/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Calibrator Pipeline 2 Description", - "refs": [ - "#/tasks/Calibrator Pipeline 2/short_description" - ] - }, - { - "name": "Run Adder", - "refs": [ - "#/tasks/Target Observation/specifications_doc/QA/plots/enabled", - "#/tasks/Calibrator Observation 1/specifications_doc/QA/plots/enabled", - "#/tasks/Calibrator Observation 2/specifications_doc/QA/plots/enabled", - "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Calibrator Observation 1/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Calibrator Observation 2/specifications_doc/QA/file_conversion/enabled" - ] - } - ], - "scheduling_constraints_doc": { - "scheduler": "dynamic", - "sky": { - "transit_offset": { - "from": -1440, - "to": 1440 - } - } - }, - "scheduling_constraints_template": { - "name": "constraints", - "version": 7 - }, - "task_relations": [ - { - "consumer": "Calibrator Pipeline 1", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Calibrator Pipeline 2", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Pipeline target1", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "sap1" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Pipeline target2", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": { - "sap": [ - "sap2" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline target1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline target2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Target Observation", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Calibrator Observation 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline target1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Pipeline target2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 1", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - }, - { - "consumer": "Cleanup", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline 2", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 - } - } - ], - "task_scheduling_relations": [ - { - "first": "Calibrator Observation 1", - "placement": "before", - "second": "Target Observation", - "time_offset": 60 - }, - { - "first": "Calibrator Observation 2", - "placement": "after", - "second": "Target Observation", - "time_offset": 60 - } - ], - "tasks": { - "Calibrator Observation 1": { - "description": "Calibrator Observation 1. Before the Target Observation", - "short_description": "Cal1 3Cabc", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator1", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cabc" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Observation 2": { - "description": "Calibrator Observation 2. After the Target Observation", - "short_description": "Cal2 3Cdef", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator1", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cdef" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, - "Calibrator Pipeline 1": { - "description": "Preprocessing Pipeline for Calibrator Observation 1", - "short_description": "Cal1 3Cabc/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 61, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Calibrator Pipeline 2": { - "description": "Preprocessing Pipeline for Calibrator Observation 2", - "short_description": "Cal2 3Cdef/PP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 61, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Cleanup": { - "description": "Clean up all dataproducts from disk after ingest", - "specifications_doc": {}, - "specifications_template": { - "name": "cleanup", - "version": 7 - } - }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Pipeline target1": { - "description": "Preprocessing Pipeline for Target Observation target1, SAP000, 120-168 MHz, 1s, 16ch/sb", - "short_description": "Paaa+01/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 61, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline target2": { - "description": "Preprocessing Pipeline for Target Observation target2, SAP001, 120-168 MHz, 1s, 16ch/sb", - "short_description": "Paaa+02/TP", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 61, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "HBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Target Observation": { - "description": "Target Observation for LoTSS scheduling unit. HBA_DUAL_INNER, 120-168 MHz, 1s, 64ch/sb ", - "short_description": "Paaa+01 & Paaa+02", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" - }, - "duration": 28800, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "Paaa+01" - }, - "name": "sap1", - "subbands": [ - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 182, - 183, - 184, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 212, - 213, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 349, - 364, - 372, - 380, - 388, - 396, - 404, - 413, - 421, - 430, - 438, - 447 + "SAPs": [ + { + "name": "SAP0", + "subbands": { + "list": [ + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450 + ], + "method": "copy" + }, + "tab_rings": { + "count": 0, + "width": 0.01 + }, + "tabs": [ + { + "pointing": { + "angle1": 0, + "angle2": 0, + "direction_type": "J2000", + "target": "OnTarget" + }, + "relative": true + } + ] + } + ], + "settings": { + "channels_per_subband": 1, + "quantisation": { + "bits": 8, + "enabled": false, + "scale_max": 5, + "scale_min": -5 + }, + "stokes": "XXYY", + "subbands_per_file": 20, + "time_integration_factor": 1 + } + }, + "name": "Beamformer CV", + "station_groups": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } ] - }, + } + ], + "ppf": false + }, + "duration": 120, + "station_configuration": { + "SAPs": [ { "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, + "angle1": 0.92934186635, + "angle2": 0.952579228492, "direction_type": "J2000", - "target": "Paaa+02" + "target": "Baaaa+bb" }, - "name": "sap2", + "name": "SAP0", "subbands": [ + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, 104, 105, 106, @@ -7681,6 +4349,7 @@ 134, 135, 136, + 137, 138, 139, 140, @@ -7707,6 +4376,7 @@ 161, 162, 163, + 164, 165, 166, 167, @@ -7723,9 +4393,12 @@ 178, 179, 180, + 181, 182, 183, 184, + 185, + 186, 187, 188, 189, @@ -7749,8 +4422,11 @@ 207, 208, 209, + 210, + 211, 212, 213, + 214, 215, 216, 217, @@ -7777,6 +4453,7 @@ 238, 239, 240, + 241, 242, 243, 244, @@ -7791,6 +4468,7 @@ 253, 254, 255, + 256, 257, 258, 259, @@ -7808,6 +4486,7 @@ 271, 272, 273, + 274, 275, 276, 277, @@ -7834,6 +4513,7 @@ 298, 299, 300, + 301, 302, 303, 304, @@ -7861,6 +4541,7 @@ 326, 327, 328, + 329, 330, 331, 332, @@ -7879,18 +4560,109 @@ 345, 346, 347, + 348, 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, 438, - 447 + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450 ] } ], @@ -7900,7 +4672,6 @@ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -7923,413 +4694,859 @@ "CS301", "CS302", "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 2, - "stations": [ - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "DE609", - "FR606", - "SE607", - "UK608", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ] - }, - { - "max_nr_missing": 1, - "stations": [ - "DE601", - "DE605" + "CS501" ] } ], "tile_beam": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, + "angle1": 0.92934186635, + "angle2": 0.952579228492, "direction_type": "J2000", - "target": "Paaa+01Paaa+02REF" + "target": "Baaaa+bb" } } }, "specifications_template": { - "name": "target observation", - "version": 7 + "name": "beamforming observation", + "version": 8 } - } - } - }, - "version": 10, - "id": 7, - "state_value": "active", - "purpose_value": "technical_commissioning" - }, - { - "description": "LBA Imaging Observing Strategy using 1 Beam and a parallel Calibrator Beam with a preprocessing pipeline for each.", - "name": "IM LBA - 1 Beam", - "purpose": "production", - "scheduling_unit_template": { - "name": "scheduling unit", - "version": 7 - }, - "state": "active", - "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", - "parameters": [ - { - "name": "Stations", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/station_groups" - ] - }, - { - "name": "Scheduling Constraints", - "refs": [ - "#/scheduling_constraints_doc" - ] - }, - { - "name": "Duration", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/duration" - ] - }, - { - "name": "Subbands", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/subbands" - ] - }, - { - "name": "Filter", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/filter" - ] }, + "Pipeline": { + "description": "Pulsar Pipeline for HBA pulsar timing observation with additional channels HBA. Full Core, 8bit, XXYY, 6ch/sub, Nsubs=400", + "short_description": "Baaaa+bb/PULP", + "specifications_doc": { + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 20, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "dspsr": { + "digifil": { + "channels_per_part": 20, + "coherent_dedispersion": false, + "dm": 0, + "integration_time_factor": 4 + }, + "enabled": true, + "filterbank": { + "channels_per_part": 120, + "coherent_dedispersion": true, + "enabled": true + }, + "optimise_period_dm": false, + "rfi_excision": true, + "subintegration_length": 10 + }, + "output": { + "dynamic_spectrum": { + "enabled": false, + "time_average": 0.5 + }, + "quantisation": { + "enabled": true, + "scale": 5 + } + }, + "presto": { + "fold_profile": true, + "input": { + "decode_sigma": 3, + "nr_blocks": 100, + "samples_per_block": 8192 + }, + "prepfold": false, + "rrats": { + "dm_range": 5, + "enabled": false + } + }, + "pulsar": { + "name": "", + "strategy": "meta" + }, + "single_pulse_search": false + }, + "specifications_template": { + "name": "pulsar pipeline", + "version": 6 + } + } + } + }, + "version": 11, + "id": 4, + "state_value": "active", + "purpose_value": "production" + }, + { + "description": "Beamformed observation and pulsar pipeline for pulsar timing. HBA, 110-188 MHz, 400 SBs, 195 kHz, 5.12 us.", + "name": "BF Pulsar Timing", + "purpose": "production", + "scheduling_unit_template": { + "name": "scheduling unit", + "version": 8 + }, + "state": "active", + "template": { + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", + "parameters": [ { - "name": "Antenna Set", + "name": "Stations", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/antenna_set" + "#/tasks/Observation/specifications_doc/station_configuration/station_groups" ] }, { - "name": "Run ADDER QA", + "name": "Scheduling Constraints", "refs": [ - "#/tasks/Combined Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Combined Observation/specifications_doc/QA/plots/enabled" + "#/scheduling_constraints_doc" ] }, { - "name": "Observation description", + "name": "Duration", "refs": [ - "#/tasks/Combined Observation/short_description" + "#/tasks/Observation/specifications_doc/duration" ] }, { - "name": "Pipeline description", + "name": "Observation Short Description", "refs": [ - "#/tasks/Pipeline target/short_description" + "#/tasks/Observation/short_description" ] }, { - "name": "Pipeline Calibrator description", + "name": "Pipeline Short Description", "refs": [ - "#/tasks/Calibrator Pipeline/short_description" + "#/tasks/Pipeline/short_description" ] }, { "name": "Target Pointing", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" - ] - }, - { - "name": "Calibrator Pointing", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/calibrator/pointing" - ] - }, - { - "name": "Time averaging steps", - "refs": [ - "#/tasks/Pipeline target/specifications_doc/average/time_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/time_steps" - ] - }, - { - "name": "Frequency averaging steps", - "refs": [ - "#/tasks/Pipeline target/specifications_doc/average/frequency_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" + "#/tasks/Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/Observation/specifications_doc/station_configuration/tile_beam" ] }, { - "name": "Demix Pipeline Target", + "name": "Optimise period & DM", "refs": [ - "#/tasks/Pipeline target/specifications_doc/demix" + "#/tasks/Pipeline/specifications_doc/dspsr/optimise_period_dm" ] }, { - "name": "Demix Pipeline Calibrator", + "name": "Subintegration time", "refs": [ - "#/tasks/Calibrator Pipeline/specifications_doc/demix" + "#/tasks/Pipeline/specifications_doc/dspsr/subintegration_length" ] } ], "scheduling_constraints_doc": { - "daily": { - "avoid_twilight": false, - "require_day": false, - "require_night": false - }, "scheduler": "dynamic", "sky": { "min_distance": { - "jupiter": 0.52359877559, - "moon": 0.52359877559, - "sun": 0.52359877559 - }, - "min_elevation": { - "calibrator": 0.52359877559, - "target": 0.69813170079 + "jupiter": 0, + "moon": 0.00872665, + "sun": 0.00872665 }, "transit_offset": { - "from": -7200, - "to": 7200 + "from": -21600, + "to": 21600 } } }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { - "consumer": "Calibrator Pipeline", + "consumer": "Pipeline", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "calibrator" - ] + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" }, + "producer": "Observation", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target", + "consumer": "Ingest", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp summary", + "datatype": "quality", "role": "any" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target1" - ] + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" }, + "producer": "Pipeline", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { "consumer": "Ingest", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp analysis", + "datatype": "pulsar profile", "role": "any" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp analysis", + "datatype": "pulsar profile", "role": "any" }, - "producer": "Calibrator Pipeline", + "producer": "Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { - "consumer": "Ingest", + "consumer": "Cleanup", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" }, - "producer": "Pipeline target", + "producer": "Observation", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { "consumer": "Cleanup", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp summary", + "datatype": "quality", "role": "any" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" + "dataformat": "pulp summary", + "datatype": "quality", + "role": "any" }, - "producer": "Combined Observation", + "producer": "Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { "consumer": "Cleanup", "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp analysis", + "datatype": "pulsar profile", "role": "any" }, "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", + "dataformat": "pulp analysis", + "datatype": "pulsar profile", "role": "any" }, - "producer": "Pipeline target", + "producer": "Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], "task_scheduling_relations": [], "tasks": { - "Calibrator Pipeline": { - "description": "Preprocessing Pipeline for Calibrator Observation", - "short_description": "oOOO.O 3Cabc", - "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 8 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" - }, + "Cleanup": { + "description": "Cleanup all dataproducts from disk", + "specifications_doc": {}, "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 + "name": "cleanup", + "version": 7 } }, - "Cleanup": { - "description": "Clean up all dataproducts from disk after ingest", + "Ingest": { + "description": "Ingest the pipeline outputs dataproducts", "specifications_doc": {}, "specifications_template": { - "name": "cleanup", + "name": "ingest", "version": 7 } }, - "Combined Observation": { - "description": "Combined parallel Calibrator & Target Observation for LBA with 1 target beam", - "short_description": "OOO.O _Target_name_", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": true, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": true - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cabc" - } - }, - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" + "Observation": { + "description": "Beamforming observation for default pulsar timing with HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400", + "short_description": "Baaaa+bb", + "specifications_doc": { + "beamformer": { + "pipelines": [ + { + "coherent": { + "SAPs": [ + { + "name": "SAP0", + "subbands": { + "list": [ + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450 + ], + "method": "copy" + }, + "tab_rings": { + "count": 0, + "width": 0.01 + }, + "tabs": [ + { + "pointing": { + "angle1": 0, + "angle2": 0, + "direction_type": "J2000", + "target": "OnTarget" + }, + "relative": true + } + ] + } + ], + "settings": { + "channels_per_subband": 1, + "quantisation": { + "bits": 8, + "enabled": false, + "scale_max": 5, + "scale_min": -5 + }, + "stokes": "XXYY", + "subbands_per_file": 20, + "time_integration_factor": 1 + } + }, + "name": "Beamformer CV", + "station_groups": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] + } + ], + "ppf": false }, "duration": 120, "station_configuration": { "SAPs": [ { "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, + "angle1": 0.92934186635, + "angle2": 0.952579228492, "direction_type": "J2000", - "target": "_Target_name_" + "target": "Baaaa+bb" }, - "name": "target1", + "name": "SAP0", "subbands": [ + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, 110, 111, 112, @@ -8573,17 +5790,113 @@ 350, 351, 352, - 353 + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450 ] } ], - "antenna_set": "LBA_SPARSE_EVEN", - "filter": "LBA_10_90", + "antenna_set": "HBA_DUAL_INNER", + "filter": "HBA_110_190", "station_groups": [ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -8606,128 +5919,104 @@ "CS301", "CS302", "CS401", - "CS501", - "RS106", - "RS205", - "RS208", - "RS210", - "RS305", - "RS306", - "RS307", - "RS310", - "RS406", - "RS407", - "RS409", - "RS503", - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 1, - "stations": [ - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 0, - "stations": [ - "RS310", - "RS210" - ] - }, - { - "max_nr_missing": 2, - "stations": [ - "DE601", - "DE602", - "DE603", - "DE604", - "DE605", - "DE609", - "FR606", - "SE607", - "UK608", - "PL610", - "PL611", - "PL612", - "IE613", - "LV614" - ] - }, - { - "max_nr_missing": 1, - "stations": [ - "DE601", - "DE605" + "CS501" ] } - ] + ], + "tile_beam": { + "angle1": 0.92934186635, + "angle2": 0.952579228492, + "direction_type": "J2000", + "target": "Baaaa+bb" + } } }, "specifications_template": { - "name": "parallel calibrator target observation", + "name": "beamforming observation", "version": 8 } }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Pipeline target": { - "description": "Preprocessing Pipeline for Target Observation target beam", - "short_description": "oOOO.O _Target_name_", + "Pipeline": { + "description": "Pulsar Pipeline for default HBA pulsar timing observation. HBA. Full Core, 8bit, XXYY, 1ch/sub, Nsubs=400", + "short_description": "Baaaa+bb/PULP", "specifications_doc": { - "average": { - "frequency_steps": 4, - "time_steps": 2 + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 20, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 8 + "dspsr": { + "digifil": { + "channels_per_part": 20, + "coherent_dedispersion": false, + "dm": 0, + "integration_time_factor": 4 + }, + "enabled": true, + "optimise_period_dm": false, + "rfi_excision": true, + "subintegration_length": 10 + }, + "output": { + "dynamic_spectrum": { + "enabled": false, + "time_average": 0.5 + }, + "quantisation": { + "enabled": false, + "scale": 5 + } + }, + "presto": { + "fold_profile": true, + "input": { + "decode_sigma": 3, + "nr_blocks": 100, + "samples_per_block": 8192 + }, + "prepfold": false, + "rrats": { + "dm_range": 5, + "enabled": false + } }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" + "pulsar": { + "name": "", + "strategy": "meta" }, - "storagemanager": "dysco" + "single_pulse_search": false }, "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 + "name": "pulsar pipeline", + "version": 6 } } } }, - "version": 7, - "id": 8, + "version": 23, + "id": 5, "state_value": "active", "purpose_value": "production" }, { - "description": "LBA Imaging Observing Strategy using 2 Beams and a parallel Calibrator Beam with a preprocessing pipeline for each.", - "name": "IM LBA - 2 Beams", - "purpose": "technical_commissioning", + "description": "This observation strategy template defines a single-beam HBA imaging strategy with a Calibrator-Target-Calibrator observation chain, plus a preprocessing pipeline for each and ingest of pipeline data only.", + "name": "IM HBA - 1 Beam", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 5 + "version": 8 }, - "state": "development", + "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/5/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/station_groups" + "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" ] }, { @@ -8737,160 +6026,112 @@ ] }, { - "name": "Duration", + "name": "Observation Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/duration" + "#/tasks/Target Observation/short_description" ] }, { - "name": "Antenna Set", + "name": "Target Pipeline Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/antenna_set" + "#/tasks/Target Pipeline/short_description" ] }, { - "name": "Filter", + "name": "Target Pointing", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/filter" + "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" ] }, { "name": "Subbands", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/subbands", - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/1/subbands" - ] - }, - { - "name": "Run ADDER QA", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Combined Observation/specifications_doc/QA/plots/enabled" - ] - }, - { - "name": "Observation description", - "refs": [ - "#/tasks/Combined Observation/short_description" - ] - }, - { - "name": "Pipeline 1 description", - "refs": [ - "#/tasks/Pipeline target1/short_description" - ] - }, - { - "name": "Pipeline 2 description", - "refs": [ - "#/tasks/Pipeline target2/short_description" - ] - }, - { - "name": "Pipeline Calibrator description", - "refs": [ - "#/tasks/Calibrator Pipeline/short_description" + "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/subbands" ] }, { - "name": "Target Pointing 1", + "name": "Target Duration", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" + "#/tasks/Target Observation/specifications_doc/duration" ] }, { - "name": "Target Pointing 2", + "name": "Calibrator Observation 1 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" + "#/tasks/Calibrator Observation 1/short_description" ] }, { - "name": "Calibrator Pointing", + "name": "Calibrator Pipeline 1 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/calibrator/pointing" + "#/tasks/Calibrator Pipeline 1/short_description" ] }, { - "name": "Time averaging steps", + "name": "Calibrator Observation 1 Pointing ", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/average/time_steps", - "#/tasks/Pipeline target2/specifications_doc/average/time_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/time_steps" + "#/tasks/Calibrator Observation 1/specifications_doc/calibrator/pointing" ] }, { - "name": "Time averaging steps demix", + "name": "Calibrator Observation 1 Duration", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/demix/time_steps", - "#/tasks/Pipeline target2/specifications_doc/demix/time_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/demix/time_steps" + "#/tasks/Calibrator Observation 1/specifications_doc/duration" ] }, { - "name": "Frequency averaging steps", + "name": "Calibrator Observation 2 Description", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/average/frequency_steps", - "#/tasks/Pipeline target2/specifications_doc/average/frequency_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" + "#/tasks/Calibrator Observation 2/short_description" ] }, { - "name": "Frequency averaging steps demix", + "name": "Calibrator Pipeline 2 Description", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/demix/frequency_steps", - "#/tasks/Pipeline target2/specifications_doc/demix/frequency_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/demix/frequency_steps" + "#/tasks/Calibrator Pipeline 2/short_description" ] }, { - "name": "Demix sources Pipeline Target 1", + "name": "Calibrator Observation 2 Pointing", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/demix/sources" + "#/tasks/Calibrator Observation 2/specifications_doc/calibrator/pointing" ] }, { - "name": "Demix sources Pipeline Target 2", + "name": "Calibrator Observation 2 Duration", "refs": [ - "#/tasks/Pipeline target2/specifications_doc/demix/sources" + "#/tasks/Calibrator Observation 2/specifications_doc/duration" ] }, { - "name": "Demix sources Pipeline Calibrator", + "name": "Run Adder", "refs": [ - "#/tasks/Calibrator Pipeline/specifications_doc/demix/sources" + "#/tasks/Target Observation/specifications_doc/QA/plots/enabled", + "#/tasks/Calibrator Observation 1/specifications_doc/QA/plots/enabled", + "#/tasks/Calibrator Observation 2/specifications_doc/QA/plots/enabled", + "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Calibrator Observation 1/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Calibrator Observation 2/specifications_doc/QA/file_conversion/enabled" ] } ], "scheduling_constraints_doc": { - "daily": { - "avoid_twilight": false, - "require_day": false, - "require_night": false - }, "scheduler": "dynamic", "sky": { - "min_distance": { - "jupiter": 0.52359877559, - "moon": 0.52359877559, - "sun": 0.52359877559 - }, - "min_elevation": { - "calibrator": 0.52359877559, - "target": 0.69813170079 - }, "transit_offset": { - "from": -7200, - "to": 7200 + "from": -1440, + "to": 1440 } } }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { - "consumer": "Calibrator Pipeline", + "consumer": "Calibrator Pipeline 1", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -8901,19 +6142,15 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "calibrator" - ] - }, + "producer": "Calibrator Observation 1", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 4 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target1", + "consumer": "Calibrator Pipeline 2", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -8924,19 +6161,15 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target1" - ] - }, + "producer": "Calibrator Observation 2", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 4 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target2", + "consumer": "Target Pipeline", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -8947,15 +6180,15 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", + "producer": "Target Observation", "selection_doc": { "sap": [ - "target2" + "target" ] }, "selection_template": { "name": "SAP", - "version": 4 + "version": 7 } }, { @@ -8970,11 +6203,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Calibrator Pipeline", + "producer": "Calibrator Pipeline 1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -8989,11 +6222,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target1", + "producer": "Calibrator Pipeline 2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -9008,11 +6241,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target2", + "producer": "Target Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -9027,11 +6260,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Calibrator Pipeline", + "producer": "Target Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -9046,11 +6279,30 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", + "producer": "Target Observation", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Calibrator Observation 1", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 } }, { @@ -9061,61 +6313,112 @@ "role": "any" }, "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Calibrator Observation 2", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target1", + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Calibrator Pipeline 1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Calibrator Pipeline 2", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 } } ], - "task_scheduling_relations": [], + "task_scheduling_relations": [ + { + "first": "Calibrator Observation 1", + "placement": "before", + "second": "Target Observation", + "time_offset": 60 + }, + { + "first": "Calibrator Observation 2", + "placement": "after", + "second": "Target Observation", + "time_offset": 60 + } + ], "tasks": { - "Calibrator Pipeline": { - "description": "Preprocessing Pipeline for Calibrator Observation", - "short_description": "3Cabc/1.0/CP", + "Calibrator Observation 1": { + "description": "Calibrator Observation 1. Before the Target Observation", + "short_description": "Cal1 3Cabc", "specifications_doc": { - "average": { - "frequency_steps": 16, - "time_steps": 4 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 8 + "QA": { + "file_conversion": { + "enabled": false, + "nr_of_subbands": -1, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": false + } }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" + "calibrator": { + "autoselect": false, + "name": "calibrator1", + "pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "3Cabc" + } }, - "storagemanager": "dysco" + "duration": 600 }, "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Cleanup": { - "description": "Cleaning up all output dataproducts for this scheduling unit", - "specifications_doc": {}, - "specifications_template": { - "name": "cleanup", - "version": 7 + "name": "calibrator observation", + "version": 9 } }, - "Combined Observation": { - "description": "Combined parallel Calibrator & Target Observation for LBA with 2 target beams", - "short_description": "_observation_name_", + "Calibrator Observation 2": { + "description": "Calibrator Observation 2. After the Target Observation", + "short_description": "Cal2 3Cdef", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -9123,214 +6426,206 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "calibrator": { "autoselect": false, - "name": "calibrator", + "name": "calibrator2", "pointing": { "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "3Cabc" + "target": "3Cdef" } }, - "duration": 120, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_target_1_name_" - }, - "name": "target1", - "subbands": [ - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338 - ] - }, + "duration": 600 + }, + "specifications_template": { + "name": "calibrator observation", + "version": 9 + } + }, + "Calibrator Pipeline 1": { + "description": "Preprocessing Pipeline for Calibrator Observation 1", + "short_description": "Cal1 3Cabc/PP", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 1 + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "HBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Calibrator Pipeline 2": { + "description": "Preprocessing Pipeline for Calibrator Observation 2", + "short_description": "Cal2 3Cdef/PP", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 1 + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "HBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Cleanup": { + "description": "Clean up all dataproducts from disk after ingest", + "specifications_doc": {}, + "specifications_template": { + "name": "cleanup", + "version": 7 + } + }, + "Ingest": { + "description": "Ingest all preprocessed dataproducts", + "specifications_doc": {}, + "specifications_template": { + "name": "ingest", + "version": 7 + } + }, + "Target Observation": { + "description": "Target Observation", + "short_description": "_Target_Name_", + "specifications_doc": { + "QA": { + "file_conversion": { + "enabled": false, + "nr_of_subbands": -1, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": false + } + }, + "correlator": { + "channels_per_subband": 64, + "integration_time": 1, + "storage_cluster": "CEP4" + }, + "duration": 28800, + "station_configuration": { + "SAPs": [ { "digital_pointing": { "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "_target_2_name_" + "target": "target1" }, - "name": "target2", + "name": "target", "subbands": [ + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, 177, 178, 179, 180, - 181, 182, 183, 184, - 185, - 186, 187, 188, 189, @@ -9354,11 +6649,8 @@ 207, 208, 209, - 210, - 211, 212, 213, - 214, 215, 216, 217, @@ -9385,7 +6677,6 @@ 238, 239, 240, - 241, 242, 243, 244, @@ -9400,7 +6691,6 @@ 253, 254, 255, - 256, 257, 258, 259, @@ -9418,7 +6708,6 @@ 271, 272, 273, - 274, 275, 276, 277, @@ -9445,7 +6734,6 @@ 298, 299, 300, - 301, 302, 303, 304, @@ -9473,7 +6761,6 @@ 326, 327, 328, - 329, 330, 331, 332, @@ -9482,22 +6769,37 @@ 335, 336, 337, - 338 + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 349, + 364, + 372, + 380, + 388, + 396, + 404, + 413, + 421, + 430, + 438, + 447 ] } ], - "antenna_set": "LBA_OUTER", - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" - }, - "filter": "LBA_30_90", + "antenna_set": "HBA_DUAL_INNER", + "filter": "HBA_110_190", "station_groups": [ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -9536,81 +6838,39 @@ "RS508", "RS509" ] - }, - { - "max_nr_missing": 1, - "stations": [ - "RS508", - "RS509" - ] - }, - { - "max_nr_missing": 0, - "stations": [ - "RS310", - "RS210" - ] } - ] - } - }, - "specifications_template": { - "name": "parallel calibrator target observation", - "version": 8 - } - }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Pipeline target1": { - "description": "Preprocessing Pipeline for Target Observation target1", - "short_description": "_target_1_name_/1.0/TP", - "specifications_doc": { - "average": { - "frequency_steps": 16, - "time_steps": 4 - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 8 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" + ], + "tile_beam": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "target1" + } + } }, "specifications_template": { - "name": "preprocessing pipeline", + "name": "target observation", "version": 8 } }, - "Pipeline target2": { - "description": "Preprocessing Pipeline for Target Observation target2", - "short_description": "_target_2_name_/1.1/TP", + "Target Pipeline": { + "description": "Preprocessing Pipeline for Target Observation", + "short_description": "_Target_Name_/PP", "specifications_doc": { "average": { - "frequency_steps": 16, - "time_steps": 4 + "frequency_steps": 4, + "time_steps": 1 }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 8 + "time_steps": 10 }, "flag": { "autocorrelations": true, "outerchannels": true, - "rfi_strategy": "LBAdefault" + "rfi_strategy": "HBAdefault" }, "storagemanager": "dysco" }, @@ -9621,27 +6881,27 @@ } } }, - "version": 4, - "id": 9, - "state_value": "development", - "purpose_value": "technical_commissioning" + "version": 32, + "id": 6, + "state_value": "active", + "purpose_value": "production" }, { - "description": "LBA Imaging Observing Strategy using 5 Beams and a parallel Calibrator Beam with a preprocessing pipeline for each, used for the LOFAR Decametre Sky Survey. LBA Sparse Even, 14.4-30.1 MHz, 1s, 64ch/sb", - "name": "IM LBA LoDSS - 5 Beams", - "purpose": "technical_commissioning", + "description": "This observation strategy template defines a LoTSS (Co-)observing run with a Calibrator-Target-Calibrator observation chain, plus a preprocessing pipeline for each and ingest of pipeline data only. Added cleanup.", + "name": "IM HBA LoTSS - 2 Beams", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 7 + "version": 8 }, "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/station_groups" + "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" ] }, { @@ -9651,214 +6911,120 @@ ] }, { - "name": "Duration", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/duration" - ] - }, - { - "name": "Run ADDER QA", - "refs": [ - "#/tasks/Combined Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Combined Observation/specifications_doc/QA/plots/enabled" - ] - }, - { - "name": "Observation description", - "refs": [ - "#/tasks/Combined Observation/short_description" - ] - }, - { - "name": "Pipeline 1 description", + "name": "Target Pointing 1", "refs": [ - "#/tasks/Pipeline target1/short_description" + "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" ] }, { - "name": "Pipeline 2 description", + "name": "Target Pointing 2", "refs": [ - "#/tasks/Pipeline target2/short_description" + "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" ] }, { - "name": "Pipeline 3 description", + "name": "Tile Beam", "refs": [ - "#/tasks/Pipeline target3/short_description" + "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" ] }, { - "name": "Pipeline 4 description", + "name": "Target Duration", "refs": [ - "#/tasks/Pipeline target4/short_description" + "#/tasks/Target Observation/specifications_doc/duration" ] }, { - "name": "Pipeline 5 description", + "name": "Observation Description", "refs": [ - "#/tasks/Pipeline target5/short_description" + "#/tasks/Target Observation/short_description" ] }, { - "name": "Pipeline Calibrator description", + "name": "Pipeline 1 Description", "refs": [ - "#/tasks/Calibrator Pipeline/short_description" + "#/tasks/Pipeline target1/short_description" ] }, { - "name": "Target Pointing 1", + "name": "Pipeline 2 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" + "#/tasks/Pipeline target2/short_description" ] }, { - "name": "Target Pointing 2", + "name": "Calibrator Observation 1 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" + "#/tasks/Calibrator Observation 1/short_description" ] }, { - "name": "Target Pointing 3", + "name": "Calibrator Observation 1 Pointing", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/2/digital_pointing" + "#/tasks/Calibrator Observation 1/specifications_doc/calibrator/pointing" ] }, { - "name": "Target Pointing 4", + "name": "Calibrator Pipeline 1 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/3/digital_pointing" + "#/tasks/Calibrator Pipeline 1/short_description" ] }, { - "name": "Target Pointing 5", + "name": "Calibrator Observation 2 Description", "refs": [ - "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/4/digital_pointing" + "#/tasks/Calibrator Observation 2/short_description" ] }, { - "name": "Calibrator Pointing", + "name": "Calibrator Observation 2 Pointing", "refs": [ - "#/tasks/Combined Observation/specifications_doc/calibrator/pointing" + "#/tasks/Calibrator Observation 2/specifications_doc/calibrator/pointing" ] }, { - "name": "Time averaging steps", + "name": "Calibrator Pipeline 2 Description", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/average/time_steps", - "#/tasks/Pipeline target2/specifications_doc/average/time_steps", - "#/tasks/Pipeline target3/specifications_doc/average/time_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/time_steps" + "#/tasks/Calibrator Pipeline 2/short_description" ] }, { - "name": "Frequency averaging steps", + "name": "Run Adder", "refs": [ - "#/tasks/Pipeline target1/specifications_doc/average/frequency_steps", - "#/tasks/Pipeline target2/specifications_doc/average/frequency_steps", - "#/tasks/Pipeline target3/specifications_doc/average/frequency_steps", - "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" + "#/tasks/Target Observation/specifications_doc/QA/plots/enabled", + "#/tasks/Calibrator Observation 1/specifications_doc/QA/plots/enabled", + "#/tasks/Calibrator Observation 2/specifications_doc/QA/plots/enabled", + "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Calibrator Observation 1/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Calibrator Observation 2/specifications_doc/QA/file_conversion/enabled" ] } ], "scheduling_constraints_doc": { - "daily": { - "avoid_twilight": false, - "require_day": false, - "require_night": false - }, "scheduler": "dynamic", "sky": { "min_distance": { - "jupiter": 0.52359877559, - "moon": 0.52359877559, - "sun": 0.52359877559 + "jupiter": 0.26179938779, + "moon": 0.5235987755982988, + "sun": 0.5235987755982988 }, "min_elevation": { - "calibrator": 0.52359877559, - "target": 0.87266462599 + "calibrator": 0.5235987755982988, + "target": 0.5235987755982988 }, "transit_offset": { - "from": -14400, - "to": 14400 + "from": -1440, + "to": 1440 } } }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { - "consumer": "Calibrator Pipeline", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "calibrator" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Pipeline target1", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target1" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Pipeline target2", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target2" - ] - }, - "selection_template": { - "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Pipeline target3", + "consumer": "Calibrator Pipeline 1", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -9869,19 +7035,15 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target3" - ] - }, + "producer": "Calibrator Observation 1", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target4", + "consumer": "Calibrator Pipeline 2", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -9892,19 +7054,15 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target4" - ] - }, + "producer": "Calibrator Observation 2", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target5", + "consumer": "Pipeline target1", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -9915,38 +7073,19 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", + "producer": "Target Observation", "selection_doc": { "sap": [ - "target5" + "sap1" ] }, "selection_template": { "name": "SAP", - "version": 6 - } - }, - { - "consumer": "Ingest", - "input": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "output": { - "dataformat": "MeasurementSet", - "datatype": "visibilities", - "role": "any" - }, - "producer": "Calibrator Pipeline", - "selection_doc": {}, - "selection_template": { - "name": "all", - "version": 6 + "version": 7 } }, { - "consumer": "Ingest", + "consumer": "Pipeline target2", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -9955,13 +7094,17 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "any" + "role": "correlator" + }, + "producer": "Target Observation", + "selection_doc": { + "sap": [ + "sap2" + ] }, - "producer": "Pipeline target1", - "selection_doc": {}, "selection_template": { - "name": "all", - "version": 6 + "name": "SAP", + "version": 7 } }, { @@ -9976,11 +7119,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target2", + "producer": "Calibrator Pipeline 1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -9995,11 +7138,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target3", + "producer": "Calibrator Pipeline 2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10014,11 +7157,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target4", + "producer": "Pipeline target1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10033,11 +7176,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target5", + "producer": "Pipeline target2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10052,11 +7195,11 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Combined Observation", + "producer": "Target Observation", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10069,13 +7212,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "any" + "role": "correlator" }, - "producer": "Pipeline target1", + "producer": "Calibrator Observation 1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10088,13 +7231,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "any" + "role": "correlator" }, - "producer": "Pipeline target2", + "producer": "Calibrator Observation 2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10109,11 +7252,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target3", + "producer": "Pipeline target1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10128,11 +7271,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target4", + "producer": "Pipeline target2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10147,11 +7290,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target5", + "producer": "Calibrator Pipeline 1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -10166,27 +7309,108 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Calibrator Pipeline", + "producer": "Calibrator Pipeline 2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], - "task_scheduling_relations": [], + "task_scheduling_relations": [ + { + "first": "Calibrator Observation 1", + "placement": "before", + "second": "Target Observation", + "time_offset": 60 + }, + { + "first": "Calibrator Observation 2", + "placement": "after", + "second": "Target Observation", + "time_offset": 60 + } + ], "tasks": { - "Calibrator Pipeline": { - "description": "Preprocessing Pipeline for Calibrator Observation. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "3Cabc/1.0/CP", + "Calibrator Observation 1": { + "description": "Calibrator Observation 1. Before the Target Observation", + "short_description": "Cal1 3Cabc", + "specifications_doc": { + "QA": { + "file_conversion": { + "enabled": false, + "nr_of_subbands": -1, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": false + } + }, + "calibrator": { + "autoselect": false, + "name": "calibrator1", + "pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "3Cabc" + } + }, + "duration": 600 + }, + "specifications_template": { + "name": "calibrator observation", + "version": 9 + } + }, + "Calibrator Observation 2": { + "description": "Calibrator Observation 2. After the Target Observation", + "short_description": "Cal2 3Cdef", + "specifications_doc": { + "QA": { + "file_conversion": { + "enabled": false, + "nr_of_subbands": -1, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": false + } + }, + "calibrator": { + "autoselect": false, + "name": "calibrator1", + "pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "3Cdef" + } + }, + "duration": 600 + }, + "specifications_template": { + "name": "calibrator observation", + "version": 9 + } + }, + "Calibrator Pipeline 1": { + "description": "Preprocessing Pipeline for Calibrator Observation 1", + "short_description": "Cal1 3Cabc/PP", "specifications_doc": { "average": { - "frequency_steps": 1, + "frequency_steps": 4, "time_steps": 1 }, "cluster_resources": { "cores_per_task": 2, - "parallel_tasks": 41, + "parallel_tasks": 61, "where": { "cluster": "CEP4", "partition": "cpu" @@ -10201,7 +7425,41 @@ "flag": { "autocorrelations": true, "outerchannels": true, - "rfi_strategy": "LBAdefault" + "rfi_strategy": "HBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Calibrator Pipeline 2": { + "description": "Preprocessing Pipeline for Calibrator Observation 2", + "short_description": "Cal2 3Cdef/PP", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 61, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "HBAdefault" }, "storagemanager": "dysco" }, @@ -10218,264 +7476,116 @@ "version": 7 } }, - "Combined Observation": { - "description": "Combined parallel Calibrator & Target Observation for LBA with 5 target beams. Dutch stations only, 200 MHz, 10-90 MHz filter", - "short_description": "oXXX Paaa+01 3Cabc", + "Ingest": { + "description": "Ingest all preprocessed dataproducts", + "specifications_doc": {}, + "specifications_template": { + "name": "ingest", + "version": 7 + } + }, + "Pipeline target1": { + "description": "Preprocessing Pipeline for Target Observation target1, SAP000, 120-168 MHz, 1s, 16ch/sb", + "short_description": "Paaa+01/TP", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 61, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "HBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Pipeline target2": { + "description": "Preprocessing Pipeline for Target Observation target2, SAP001, 120-168 MHz, 1s, 16ch/sb", + "short_description": "Paaa+02/TP", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 61, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "HBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Target Observation": { + "description": "Target Observation for LoTSS scheduling unit. HBA_DUAL_INNER, 120-168 MHz, 1s, 64ch/sb ", + "short_description": "Paaa+01 & Paaa+02", "specifications_doc": { "QA": { "file_conversion": { "enabled": false, "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_calibrator_name_" - } - }, - "correlator": { - "channels_per_subband": 64, - "integration_time": 1, - "storage_cluster": "CEP4" - }, - "duration": 120, - "station_configuration": { - "SAPs": [ - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "Paaa+01" - }, - "name": "target1", - "subbands": [ - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154 - ] - }, - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "Paaa+02" - }, - "name": "target2", - "subbands": [ - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154 - ] - }, - { - "digital_pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "Paaa+03" - }, - "name": "target3", - "subbands": [ - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": false + } + }, + "correlator": { + "channels_per_subband": 64, + "integration_time": 1, + "storage_cluster": "CEP4" + }, + "duration": 28800, + "station_configuration": { + "SAPs": [ + { + "digital_pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+01" + }, + "name": "sap1", + "subbands": [ 104, 105, 106, @@ -10509,7 +7619,6 @@ 134, 135, 136, - 137, 138, 139, 140, @@ -10526,7 +7635,200 @@ 151, 152, 153, - 154 + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 182, + 183, + 184, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 212, + 213, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 349, + 364, + 372, + 380, + 388, + 396, + 404, + 413, + 421, + 430, + 438, + 447 ] }, { @@ -10534,40 +7836,10 @@ "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "Paaa+04" - }, - "name": "target4", - "subbands": [ - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, + "target": "Paaa+02" + }, + "name": "sap2", + "subbands": [ 104, 105, 106, @@ -10601,7 +7873,6 @@ 134, 135, 136, - 137, 138, 139, 140, @@ -10618,54 +7889,638 @@ 151, 152, 153, - 154 + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 182, + 183, + 184, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 212, + 213, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 349, + 364, + 372, + 380, + 388, + 396, + 404, + 413, + 421, + 430, + 438, + 447 + ] + } + ], + "antenna_set": "HBA_DUAL_INNER", + "filter": "HBA_110_190", + "station_groups": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501", + "RS106", + "RS205", + "RS208", + "RS210", + "RS305", + "RS306", + "RS307", + "RS310", + "RS406", + "RS407", + "RS409", + "RS503", + "RS508", + "RS509" + ] + }, + { + "max_nr_missing": 2, + "stations": [ + "DE601", + "DE602", + "DE603", + "DE604", + "DE605", + "DE609", + "FR606", + "SE607", + "UK608", + "PL610", + "PL611", + "PL612", + "IE613", + "LV614" ] }, + { + "max_nr_missing": 1, + "stations": [ + "DE601", + "DE605" + ] + } + ], + "tile_beam": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+01Paaa+02REF" + } + } + }, + "specifications_template": { + "name": "target observation", + "version": 8 + } + } + } + }, + "version": 13, + "id": 7, + "state_value": "active", + "purpose_value": "production" + }, + { + "description": "LBA Imaging Observing Strategy using 1 Beam and a parallel Calibrator Beam with a preprocessing pipeline for each.", + "name": "IM LBA - 1 Beam", + "purpose": "production", + "scheduling_unit_template": { + "name": "scheduling unit", + "version": 8 + }, + "state": "active", + "template": { + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", + "parameters": [ + { + "name": "Stations", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/station_groups" + ] + }, + { + "name": "Scheduling Constraints", + "refs": [ + "#/scheduling_constraints_doc" + ] + }, + { + "name": "Duration", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/duration" + ] + }, + { + "name": "Subbands", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/subbands" + ] + }, + { + "name": "Filter", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/filter" + ] + }, + { + "name": "Antenna Set", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/antenna_set" + ] + }, + { + "name": "Run ADDER QA", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Combined Observation/specifications_doc/QA/plots/enabled" + ] + }, + { + "name": "Observation description", + "refs": [ + "#/tasks/Combined Observation/short_description" + ] + }, + { + "name": "Pipeline description", + "refs": [ + "#/tasks/Pipeline target/short_description" + ] + }, + { + "name": "Pipeline Calibrator description", + "refs": [ + "#/tasks/Calibrator Pipeline/short_description" + ] + }, + { + "name": "Target Pointing", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" + ] + }, + { + "name": "Calibrator Pointing", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/calibrator/pointing" + ] + }, + { + "name": "Time averaging steps", + "refs": [ + "#/tasks/Pipeline target/specifications_doc/average/time_steps", + "#/tasks/Calibrator Pipeline/specifications_doc/average/time_steps" + ] + }, + { + "name": "Frequency averaging steps", + "refs": [ + "#/tasks/Pipeline target/specifications_doc/average/frequency_steps", + "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" + ] + }, + { + "name": "Demix Pipeline Target", + "refs": [ + "#/tasks/Pipeline target/specifications_doc/demix" + ] + }, + { + "name": "Demix Pipeline Calibrator", + "refs": [ + "#/tasks/Calibrator Pipeline/specifications_doc/demix" + ] + } + ], + "scheduling_constraints_doc": { + "daily": { + "avoid_twilight": false, + "require_day": false, + "require_night": false + }, + "scheduler": "dynamic", + "sky": { + "min_distance": { + "jupiter": 0.52359877559, + "moon": 0.52359877559, + "sun": 0.52359877559 + }, + "min_elevation": { + "calibrator": 0.52359877559, + "target": 0.69813170079 + }, + "transit_offset": { + "from": -7200, + "to": 7200 + } + } + }, + "scheduling_constraints_template": { + "name": "constraints", + "version": 8 + }, + "task_relations": [ + { + "consumer": "Calibrator Pipeline", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "calibrator" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target1" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Calibrator Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Pipeline target", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Cleanup", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Pipeline target", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + } + ], + "task_scheduling_relations": [], + "tasks": { + "Calibrator Pipeline": { + "description": "Preprocessing Pipeline for Calibrator Observation", + "short_description": "oOOO.O 3Cabc", + "specifications_doc": { + "average": { + "frequency_steps": 4, + "time_steps": 2 + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 8 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "LBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Cleanup": { + "description": "Clean up all dataproducts from disk after ingest", + "specifications_doc": {}, + "specifications_template": { + "name": "cleanup", + "version": 7 + } + }, + "Combined Observation": { + "description": "Combined parallel Calibrator & Target Observation for LBA with 1 target beam", + "short_description": "OOO.O _Target_name_", + "specifications_doc": { + "QA": { + "file_conversion": { + "enabled": true, + "nr_of_subbands": -1, + "nr_of_timestamps": 256 + }, + "inspection_plots": "msplots", + "plots": { + "autocorrelation": true, + "crosscorrelation": true, + "enabled": true + } + }, + "calibrator": { + "autoselect": false, + "name": "calibrator", + "pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "3Cabc" + } + }, + "correlator": { + "channels_per_subband": 64, + "integration_time": 1, + "storage_cluster": "CEP4" + }, + "duration": 120, + "station_configuration": { + "SAPs": [ { "digital_pointing": { "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "Paaa+05" + "target": "_Target_name_" }, - "name": "target5", + "name": "target1", "subbands": [ - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, 110, 111, 112, @@ -10710,7 +8565,206 @@ 151, 152, 153, - 154 + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353 ] } ], @@ -10720,7 +8774,6 @@ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -10773,180 +8826,62 @@ "RS310", "RS210" ] + }, + { + "max_nr_missing": 2, + "stations": [ + "DE601", + "DE602", + "DE603", + "DE604", + "DE605", + "DE609", + "FR606", + "SE607", + "UK608", + "PL610", + "PL611", + "PL612", + "IE613", + "LV614" + ] + }, + { + "max_nr_missing": 1, + "stations": [ + "DE601", + "DE605" + ] } ] } }, "specifications_template": { "name": "parallel calibrator target observation", - "version": 8 + "version": 9 } }, "Ingest": { "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Pipeline target1": { - "description": "Preprocessing Pipeline for Target Observation target1. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "Paaa+01/1.0/TP", - "specifications_doc": { - "average": { - "frequency_steps": 1, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 41, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline target2": { - "description": "Preprocessing Pipeline for Target Observation target2. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "Paaa+02/1.1/TP", - "specifications_doc": { - "average": { - "frequency_steps": 1, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 41, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline target3": { - "description": "Preprocessing Pipeline for Target Observation target3. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "Paaa+03/1.2/TP", - "specifications_doc": { - "average": { - "frequency_steps": 1, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 41, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" - }, - "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 - } - }, - "Pipeline target4": { - "description": "Preprocessing Pipeline for Target Observation target4. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "Paaa+04/1.3/TP", - "specifications_doc": { - "average": { - "frequency_steps": 1, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 41, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } - }, - "demix": { - "frequency_steps": 64, - "ignore_target": false, - "sources": [], - "time_steps": 10 - }, - "flag": { - "autocorrelations": true, - "outerchannels": true, - "rfi_strategy": "LBAdefault" - }, - "storagemanager": "dysco" - }, + "specifications_doc": {}, "specifications_template": { - "name": "preprocessing pipeline", - "version": 8 + "name": "ingest", + "version": 7 } }, - "Pipeline target5": { - "description": "Preprocessing Pipeline for Target Observation target5. No demix, Flagging LBA_default, Dysco=enabled", - "short_description": "Paaa+05/1.4/TP", + "Pipeline target": { + "description": "Preprocessing Pipeline for Target Observation target beam", + "short_description": "oOOO.O _Target_name_", "specifications_doc": { "average": { - "frequency_steps": 1, - "time_steps": 1 - }, - "cluster_resources": { - "cores_per_task": 2, - "parallel_tasks": 41, - "where": { - "cluster": "CEP4", - "partition": "cpu" - } + "frequency_steps": 4, + "time_steps": 2 }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 10 + "time_steps": 8 }, "flag": { "autocorrelations": true, @@ -10962,22 +8897,22 @@ } } }, - "version": 44, - "id": 10, + "version": 8, + "id": 8, "state_value": "active", - "purpose_value": "technical_commissioning" + "purpose_value": "production" }, { - "description": "LBA Imaging Observing Strategy using 3 Beams and a parallel Calibrator Beam with a preprocessing pipeline for each, used for the LOFAR LBA High Survey and LBA Co-observing.", - "name": "IM LBA Survey - 3 Beams", + "description": "LBA Imaging Observing Strategy using 5 Beams and a parallel Calibrator Beam with a preprocessing pipeline for each, used for the LOFAR Decametre Sky Survey. LBA Sparse Even, 14.4-30.1 MHz, 1s, 64ch/sb", + "name": "IM LBA LoDSS - 5 Beams", "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 7 + "version": 8 }, "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/7/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", @@ -11028,6 +8963,18 @@ "#/tasks/Pipeline target3/short_description" ] }, + { + "name": "Pipeline 4 description", + "refs": [ + "#/tasks/Pipeline target4/short_description" + ] + }, + { + "name": "Pipeline 5 description", + "refs": [ + "#/tasks/Pipeline target5/short_description" + ] + }, { "name": "Pipeline Calibrator description", "refs": [ @@ -11052,6 +8999,18 @@ "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/2/digital_pointing" ] }, + { + "name": "Target Pointing 4", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/3/digital_pointing" + ] + }, + { + "name": "Target Pointing 5", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/4/digital_pointing" + ] + }, { "name": "Calibrator Pointing", "refs": [ @@ -11075,48 +9034,6 @@ "#/tasks/Pipeline target3/specifications_doc/average/frequency_steps", "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" ] - }, - { - "name": "Demix sources Pipeline Target 1", - "refs": [ - "#/tasks/Pipeline target1/specifications_doc/demix/sources" - ] - }, - { - "name": "Demix ignore target Pipeline Target 1", - "refs": [ - "#/tasks/Pipeline target1/specifications_doc/demix/ignore_target" - ] - }, - { - "name": "Demix sources Pipeline Target 2", - "refs": [ - "#/tasks/Pipeline target2/specifications_doc/demix/sources" - ] - }, - { - "name": "Demix ignore target Pipeline Target 2", - "refs": [ - "#/tasks/Pipeline target2/specifications_doc/demix/ignore_target" - ] - }, - { - "name": "Demix sources Pipeline Target 3", - "refs": [ - "#/tasks/Pipeline target3/specifications_doc/demix/sources" - ] - }, - { - "name": "Demix ignore target Pipeline Target 3", - "refs": [ - "#/tasks/Pipeline target3/specifications_doc/demix/ignore_target" - ] - }, - { - "name": "Demix sources Pipeline Calibrator", - "refs": [ - "#/tasks/Calibrator Pipeline/specifications_doc/demix/sources" - ] } ], "scheduling_constraints_doc": { @@ -11128,7 +9045,7 @@ "scheduler": "dynamic", "sky": { "min_distance": { - "jupiter": 0.26179938779, + "jupiter": 0.52359877559, "moon": 0.52359877559, "sun": 0.52359877559 }, @@ -11144,11 +9061,168 @@ }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { - "consumer": "Calibrator Pipeline", + "consumer": "Calibrator Pipeline", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "calibrator" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target1", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target1" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target2", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target2" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target3", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target3" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target4", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target4" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target5", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target5" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Calibrator Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Ingest", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11157,21 +9231,17 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "calibrator" - ] + "role": "any" }, + "producer": "Pipeline target1", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target1", + "consumer": "Ingest", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11180,21 +9250,17 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target1" - ] + "role": "any" }, + "producer": "Pipeline target2", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target2", + "consumer": "Ingest", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11203,21 +9269,17 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target2" - ] + "role": "any" }, + "producer": "Pipeline target3", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { - "consumer": "Pipeline target3", + "consumer": "Ingest", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11226,17 +9288,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" - }, - "producer": "Combined Observation", - "selection_doc": { - "sap": [ - "target3" - ] + "role": "any" }, + "producer": "Pipeline target4", + "selection_doc": {}, "selection_template": { - "name": "SAP", - "version": 6 + "name": "all", + "version": 9 } }, { @@ -11251,15 +9309,15 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Calibrator Pipeline", + "producer": "Pipeline target5", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { - "consumer": "Ingest", + "consumer": "Cleanup", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11268,17 +9326,17 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "any" + "role": "correlator" }, - "producer": "Pipeline target1", + "producer": "Combined Observation", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { - "consumer": "Ingest", + "consumer": "Cleanup", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11289,15 +9347,15 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target2", + "producer": "Pipeline target1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { - "consumer": "Ingest", + "consumer": "Cleanup", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -11308,11 +9366,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target3", + "producer": "Pipeline target2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -11325,13 +9383,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" + "role": "any" }, - "producer": "Combined Observation", + "producer": "Pipeline target3", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -11346,11 +9404,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target1", + "producer": "Pipeline target4", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -11365,11 +9423,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target2", + "producer": "Pipeline target5", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } }, { @@ -11384,29 +9442,37 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Pipeline target3", + "producer": "Calibrator Pipeline", "selection_doc": {}, "selection_template": { "name": "all", - "version": 6 + "version": 9 } } ], "task_scheduling_relations": [], "tasks": { "Calibrator Pipeline": { - "description": "Preprocessing Pipeline for Calibrator Observation", - "short_description": "c17 oOOO.O 3Cabc", + "description": "Preprocessing Pipeline for Calibrator Observation. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "3Cabc/1.0/CP", "specifications_doc": { "average": { - "frequency_steps": 8, - "time_steps": 4 + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 8 + "time_steps": 10 }, "flag": { "autocorrelations": true, @@ -11429,12 +9495,12 @@ } }, "Combined Observation": { - "description": "Combined parallel Calibrator & Target Observation for LBA with 3 target beams", - "short_description": "OOO.O Paaa+01 Paaa+02 Paaa+03", + "description": "Combined parallel Calibrator & Target Observation for LBA with 5 target beams. Dutch stations only, 200 MHz, 10-90 MHz filter", + "short_description": "oXXX Paaa+01 3Cabc", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -11442,7 +9508,7 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "calibrator": { @@ -11452,7 +9518,7 @@ "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "3Cabc" + "target": "_calibrator_name_" } }, "correlator": { @@ -11472,128 +9538,87 @@ }, "name": "target1", "subbands": [ - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338 + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154 ] }, { @@ -11605,128 +9630,87 @@ }, "name": "target2", "subbands": [ - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338 + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154 ] }, { @@ -11738,138 +9722,280 @@ }, "name": "target3", "subbands": [ - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254, - 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, - 263, - 264, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 274, - 275, - 276, - 277, - 278, - 279, - 280, - 281, - 282, - 283, - 284, - 285, - 286, - 287, - 288, - 289, - 290, - 291, - 292, - 293, - 294, - 295, - 296, - 297, - 298, - 299, - 300, - 301, - 302, - 303, - 304, - 305, - 306, - 307, - 308, - 309, - 310, - 311, - 312, - 313, - 314, - 315, - 316, - 317, - 318, - 319, - 320, - 321, - 322, - 323, - 324, - 325, - 326, - 327, - 328, - 329, - 330, - 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338 + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154 + ] + }, + { + "digital_pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+04" + }, + "name": "target4", + "subbands": [ + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154 + ] + }, + { + "digital_pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+05" + }, + "name": "target5", + "subbands": [ + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154 ] } ], "antenna_set": "LBA_SPARSE_EVEN", - "filter": "LBA_30_90", + "filter": "LBA_10_90", "station_groups": [ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -11928,7 +10054,7 @@ }, "specifications_template": { "name": "parallel calibrator target observation", - "version": 8 + "version": 9 } }, "Ingest": { @@ -11940,18 +10066,26 @@ } }, "Pipeline target1": { - "description": "Preprocessing Pipeline for Target Observation target1", - "short_description": "c17 oOOO.O Paaa+01", + "description": "Preprocessing Pipeline for Target Observation target1. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "Paaa+01/1.0/TP", "specifications_doc": { "average": { - "frequency_steps": 8, - "time_steps": 4 + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 8 + "time_steps": 10 }, "flag": { "autocorrelations": true, @@ -11966,18 +10100,26 @@ } }, "Pipeline target2": { - "description": "Preprocessing Pipeline for Target Observation target2", - "short_description": "c17 oOOO.O Paaa+02", + "description": "Preprocessing Pipeline for Target Observation target2. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "Paaa+02/1.1/TP", "specifications_doc": { "average": { - "frequency_steps": 8, - "time_steps": 4 + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 8 + "time_steps": 10 }, "flag": { "autocorrelations": true, @@ -11992,18 +10134,94 @@ } }, "Pipeline target3": { - "description": "Preprocessing Pipeline for Target Observation target3", - "short_description": "c17 oOOO.O Paaa+03", + "description": "Preprocessing Pipeline for Target Observation target3. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "Paaa+03/1.2/TP", + "specifications_doc": { + "average": { + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "LBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Pipeline target4": { + "description": "Preprocessing Pipeline for Target Observation target4. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "Paaa+04/1.3/TP", + "specifications_doc": { + "average": { + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 10 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "LBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Pipeline target5": { + "description": "Preprocessing Pipeline for Target Observation target5. No demix, Flagging LBA_default, Dysco=enabled", + "short_description": "Paaa+05/1.4/TP", "specifications_doc": { "average": { - "frequency_steps": 8, - "time_steps": 4 + "frequency_steps": 1, + "time_steps": 1 + }, + "cluster_resources": { + "cores_per_task": 2, + "parallel_tasks": 41, + "where": { + "cluster": "CEP4", + "partition": "cpu" + } }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 8 + "time_steps": 10 }, "flag": { "autocorrelations": true, @@ -12019,27 +10237,27 @@ } } }, - "version": 26, - "id": 11, + "version": 45, + "id": 9, "state_value": "active", "purpose_value": "production" }, { - "description": "This observation strategy template defines a similar observation strategy as for LoTSS, but then with a single Calibrator at the end so that the Target Observation can start immediately once the trigger is submitted.", - "name": "IM RT HBA LoTSS", - "purpose": "technical_commissioning", + "description": "LBA Imaging Observing Strategy using 3 Beams and a parallel Calibrator Beam with a preprocessing pipeline for each, used for the LOFAR LBA High Survey and LBA Co-observing.", + "name": "IM LBA Survey - 3 Beams", + "purpose": "production", "scheduling_unit_template": { "name": "scheduling unit", - "version": 5 + "version": 8 }, - "state": "development", + "state": "active", "template": { - "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/5/ref_resolved", + "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/8/ref_resolved", "parameters": [ { "name": "Stations", "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/station_groups" + "#/tasks/Combined Observation/specifications_doc/station_configuration/station_groups" ] }, { @@ -12049,89 +10267,163 @@ ] }, { - "name": "Observation Description", + "name": "Duration", "refs": [ - "#/tasks/Target Observation/short_description" + "#/tasks/Combined Observation/specifications_doc/duration" ] }, { - "name": "Pipeline Description", + "name": "Run ADDER QA", "refs": [ - "#/tasks/Target Pipeline/short_description" + "#/tasks/Combined Observation/specifications_doc/QA/file_conversion/enabled", + "#/tasks/Combined Observation/specifications_doc/QA/plots/enabled" ] }, { - "name": "Target Pointing", + "name": "Observation description", "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing", - "#/tasks/Target Observation/specifications_doc/station_configuration/tile_beam" + "#/tasks/Combined Observation/short_description" ] }, { - "name": "Target Duration", + "name": "Pipeline 1 description", "refs": [ - "#/tasks/Target Observation/specifications_doc/duration" + "#/tasks/Pipeline target1/short_description" ] }, { - "name": "Subbands", + "name": "Pipeline 2 description", "refs": [ - "#/tasks/Target Observation/specifications_doc/station_configuration/SAPs/0/subbands" + "#/tasks/Pipeline target2/short_description" ] }, { - "name": "Calibrator Observation Description", + "name": "Pipeline 3 description", "refs": [ - "#/tasks/Calibrator Observation/short_description" + "#/tasks/Pipeline target3/short_description" ] }, { - "name": "Calibrator Pipeline Description", + "name": "Pipeline Calibrator description", "refs": [ "#/tasks/Calibrator Pipeline/short_description" ] }, { - "name": "Calibrator Observation Pointing", + "name": "Target Pointing 1", "refs": [ - "#/tasks/Calibrator Observation/specifications_doc/calibrator/pointing" + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/0/digital_pointing" ] }, { - "name": "Calibrator Duration", + "name": "Target Pointing 2", "refs": [ - "#/tasks/Calibrator Observation/specifications_doc/duration" + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/1/digital_pointing" ] }, { - "name": "Run ADDER", + "name": "Target Pointing 3", "refs": [ - "#/tasks/Target Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Calibrator Observation/specifications_doc/QA/file_conversion/enabled", - "#/tasks/Target Observation/specifications_doc/QA/plots/enabled", - "#/tasks/Calibrator Observation/specifications_doc/QA/plots/enabled" + "#/tasks/Combined Observation/specifications_doc/station_configuration/SAPs/2/digital_pointing" + ] + }, + { + "name": "Calibrator Pointing", + "refs": [ + "#/tasks/Combined Observation/specifications_doc/calibrator/pointing" + ] + }, + { + "name": "Time averaging steps", + "refs": [ + "#/tasks/Pipeline target1/specifications_doc/average/time_steps", + "#/tasks/Pipeline target2/specifications_doc/average/time_steps", + "#/tasks/Pipeline target3/specifications_doc/average/time_steps", + "#/tasks/Calibrator Pipeline/specifications_doc/average/time_steps" + ] + }, + { + "name": "Frequency averaging steps", + "refs": [ + "#/tasks/Pipeline target1/specifications_doc/average/frequency_steps", + "#/tasks/Pipeline target2/specifications_doc/average/frequency_steps", + "#/tasks/Pipeline target3/specifications_doc/average/frequency_steps", + "#/tasks/Calibrator Pipeline/specifications_doc/average/frequency_steps" + ] + }, + { + "name": "Demix sources Pipeline Target 1", + "refs": [ + "#/tasks/Pipeline target1/specifications_doc/demix/sources" + ] + }, + { + "name": "Demix ignore target Pipeline Target 1", + "refs": [ + "#/tasks/Pipeline target1/specifications_doc/demix/ignore_target" + ] + }, + { + "name": "Demix sources Pipeline Target 2", + "refs": [ + "#/tasks/Pipeline target2/specifications_doc/demix/sources" + ] + }, + { + "name": "Demix ignore target Pipeline Target 2", + "refs": [ + "#/tasks/Pipeline target2/specifications_doc/demix/ignore_target" + ] + }, + { + "name": "Demix sources Pipeline Target 3", + "refs": [ + "#/tasks/Pipeline target3/specifications_doc/demix/sources" + ] + }, + { + "name": "Demix ignore target Pipeline Target 3", + "refs": [ + "#/tasks/Pipeline target3/specifications_doc/demix/ignore_target" + ] + }, + { + "name": "Demix sources Pipeline Calibrator", + "refs": [ + "#/tasks/Calibrator Pipeline/specifications_doc/demix/sources" ] } ], "scheduling_constraints_doc": { + "daily": { + "avoid_twilight": false, + "require_day": false, + "require_night": false + }, "scheduler": "dynamic", "sky": { + "min_distance": { + "jupiter": 0.26179938779, + "moon": 0.52359877559, + "sun": 0.52359877559 + }, + "min_elevation": { + "calibrator": 0.52359877559, + "target": 0.87266462599 + }, "transit_offset": { - "from": -86400, - "to": 86400 + "from": -14400, + "to": 14400 } - }, - "time": { - "between": [] } }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { - "consumer": "Target Pipeline", + "consumer": "Calibrator Pipeline", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -12142,19 +10434,126 @@ "datatype": "visibilities", "role": "correlator" }, - "producer": "Target Observation", + "producer": "Combined Observation", "selection_doc": { "sap": [ - "sap1" + "calibrator" ] }, "selection_template": { "name": "SAP", - "version": 4 + "version": 7 + } + }, + { + "consumer": "Pipeline target1", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target1" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target2", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target2" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Pipeline target3", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "correlator" + }, + "producer": "Combined Observation", + "selection_doc": { + "sap": [ + "target3" + ] + }, + "selection_template": { + "name": "SAP", + "version": 7 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Calibrator Pipeline", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "output": { + "dataformat": "MeasurementSet", + "datatype": "visibilities", + "role": "any" + }, + "producer": "Pipeline target1", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 9 } }, { - "consumer": "Calibrator Pipeline", + "consumer": "Ingest", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -12163,13 +10562,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" + "role": "any" }, - "producer": "Calibrator Observation", + "producer": "Pipeline target2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -12184,15 +10583,15 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Target Pipeline", + "producer": "Pipeline target3", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { - "consumer": "Ingest", + "consumer": "Cleanup", "input": { "dataformat": "MeasurementSet", "datatype": "visibilities", @@ -12201,13 +10600,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "any" + "role": "correlator" }, - "producer": "Calibrator Pipeline", + "producer": "Combined Observation", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -12220,13 +10619,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" + "role": "any" }, - "producer": "Target Observation", + "producer": "Pipeline target1", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -12241,11 +10640,11 @@ "datatype": "visibilities", "role": "any" }, - "producer": "Target Pipeline", + "producer": "Pipeline target2", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -12258,13 +10657,13 @@ "output": { "dataformat": "MeasurementSet", "datatype": "visibilities", - "role": "correlator" + "role": "any" }, - "producer": "Calibrator Observation", + "producer": "Pipeline target3", "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } }, { @@ -12283,71 +10682,30 @@ "selection_doc": {}, "selection_template": { "name": "all", - "version": 4 + "version": 9 } } ], - "task_scheduling_relations": [ - { - "first": "Calibrator Observation", - "placement": "after", - "second": "Target Observation", - "time_offset": 60 - } - ], + "task_scheduling_relations": [], "tasks": { - "Calibrator Observation": { - "description": "Calibrator Observation. After the Target Observation", - "short_description": "_Calibrator_Name_", - "specifications_doc": { - "QA": { - "file_conversion": { - "enabled": false, - "nr_of_subbands": -1, - "nr_of_timestamps": 256 - }, - "inspection_plots": "msplots", - "plots": { - "autocorrelation": true, - "crosscorrelation": true, - "enabled": false - } - }, - "calibrator": { - "autoselect": false, - "name": "calibrator", - "pointing": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "3Cdef" - } - }, - "duration": 600 - }, - "specifications_template": { - "name": "calibrator observation", - "version": 8 - } - }, "Calibrator Pipeline": { "description": "Preprocessing Pipeline for Calibrator Observation", - "short_description": "_Calibrator_Name_/CP", + "short_description": "c17 oOOO.O 3Cabc", "specifications_doc": { "average": { - "frequency_steps": 4, - "time_steps": 1 + "frequency_steps": 8, + "time_steps": 4 }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 10 + "time_steps": 8 }, "flag": { "autocorrelations": true, "outerchannels": true, - "rfi_strategy": "HBAdefault" + "rfi_strategy": "LBAdefault" }, "storagemanager": "dysco" }, @@ -12364,21 +10722,13 @@ "version": 7 } }, - "Ingest": { - "description": "Ingest all preprocessed dataproducts", - "specifications_doc": {}, - "specifications_template": { - "name": "ingest", - "version": 7 - } - }, - "Target Observation": { - "description": "Target Observation for Responsive Telescope scheduling unit. NL stations, HBA_DUAL_INNER, 120-168 MHz, 1s, 64ch/sb ", - "short_description": "_Triggered_Observation_Name_", + "Combined Observation": { + "description": "Combined parallel Calibrator & Target Observation for LBA with 3 target beams", + "short_description": "OOO.O Paaa+01 Paaa+02 Paaa+03", "specifications_doc": { "QA": { "file_conversion": { - "enabled": false, + "enabled": true, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -12386,7 +10736,17 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": false + "enabled": true + } + }, + "calibrator": { + "autoselect": false, + "name": "calibrator", + "pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "3Cabc" } }, "correlator": { @@ -12394,7 +10754,7 @@ "integration_time": 1, "storage_cluster": "CEP4" }, - "duration": 7200, + "duration": 120, "station_configuration": { "SAPs": [ { @@ -12402,115 +10762,276 @@ "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "_Triggered_Target_" + "target": "Paaa+01" + }, + "name": "target1", + "subbands": [ + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338 + ] + }, + { + "digital_pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+02" + }, + "name": "target2", + "subbands": [ + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338 + ] + }, + { + "digital_pointing": { + "angle1": 0.6624317181687094, + "angle2": 1.5579526427549426, + "direction_type": "J2000", + "target": "Paaa+03" }, - "name": "sap1", + "name": "target3", "subbands": [ - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 182, - 183, - 184, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 212, - 213, - 215, - 216, 217, 218, 219, @@ -12535,6 +11056,7 @@ 238, 239, 240, + 241, 242, 243, 244, @@ -12549,6 +11071,7 @@ 253, 254, 255, + 256, 257, 258, 259, @@ -12566,6 +11089,7 @@ 271, 272, 273, + 274, 275, 276, 277, @@ -12592,6 +11116,7 @@ 298, 299, 300, + 301, 302, 303, 304, @@ -12619,46 +11144,25 @@ 326, 327, 328, + 329, 330, 331, - 332, - 333, - 334, - 335, - 336, - 337, - 338, - 339, - 340, - 341, - 342, - 343, - 344, - 345, - 346, - 347, - 349, - 364, - 372, - 380, - 388, - 396, - 404, - 413, - 421, - 430, - 438, - 447 + 332, + 333, + 334, + 335, + 336, + 337, + 338 ] } ], - "antenna_set": "HBA_DUAL_INNER", - "filter": "HBA_110_190", + "antenna_set": "LBA_SPARSE_EVEN", + "filter": "LBA_30_90", "station_groups": [ { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -12697,39 +11201,107 @@ "RS508", "RS509" ] + }, + { + "max_nr_missing": 1, + "stations": [ + "RS508", + "RS509" + ] + }, + { + "max_nr_missing": 0, + "stations": [ + "RS310", + "RS210" + ] } - ], - "tile_beam": { - "angle1": 0.6624317181687094, - "angle2": 1.5579526427549426, - "direction_type": "J2000", - "target": "_Triggered_Target_" - } + ] } }, "specifications_template": { - "name": "target observation", + "name": "parallel calibrator target observation", + "version": 9 + } + }, + "Ingest": { + "description": "Ingest all preprocessed dataproducts", + "specifications_doc": {}, + "specifications_template": { + "name": "ingest", "version": 7 } }, - "Target Pipeline": { - "description": "Preprocessing Pipeline for Target Observation, SAP000, 120-168 MHz, 1s, 16ch/sb", - "short_description": "_Triggered_Observation_Name_/TP", + "Pipeline target1": { + "description": "Preprocessing Pipeline for Target Observation target1", + "short_description": "c17 oOOO.O Paaa+01", "specifications_doc": { "average": { - "frequency_steps": 4, - "time_steps": 1 + "frequency_steps": 8, + "time_steps": 4 }, "demix": { "frequency_steps": 64, "ignore_target": false, "sources": [], - "time_steps": 10 + "time_steps": 8 }, "flag": { "autocorrelations": true, "outerchannels": true, - "rfi_strategy": "HBAdefault" + "rfi_strategy": "LBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Pipeline target2": { + "description": "Preprocessing Pipeline for Target Observation target2", + "short_description": "c17 oOOO.O Paaa+02", + "specifications_doc": { + "average": { + "frequency_steps": 8, + "time_steps": 4 + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 8 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "LBAdefault" + }, + "storagemanager": "dysco" + }, + "specifications_template": { + "name": "preprocessing pipeline", + "version": 8 + } + }, + "Pipeline target3": { + "description": "Preprocessing Pipeline for Target Observation target3", + "short_description": "c17 oOOO.O Paaa+03", + "specifications_doc": { + "average": { + "frequency_steps": 8, + "time_steps": 4 + }, + "demix": { + "frequency_steps": 64, + "ignore_target": false, + "sources": [], + "time_steps": 8 + }, + "flag": { + "autocorrelations": true, + "outerchannels": true, + "rfi_strategy": "LBAdefault" }, "storagemanager": "dysco" }, @@ -12741,19 +11313,19 @@ } }, "version": 28, - "id": 12, - "state_value": "development", - "purpose_value": "technical_commissioning" + "id": 10, + "state_value": "active", + "purpose_value": "production" }, { - "description": "observing_strategy_template from scheduling_unit_draft id=308", + "description": "Solar observing strategy. Imaging + Beamformed observation on the Sun and a calibrator with 127 tied-array beams and a preprocessing pipeline for each SAP. In parallel single station BF spectra in LBA and HBA and 4 consecutive FE observations.", "name": "Solar Campaign", "purpose": "technical_commissioning", "scheduling_unit_template": { "name": "scheduling unit", "version": 5 }, - "state": "development", + "state": "active", "template": { "$schema": "http://localhost:3000/schemas/schedulingunittemplate/scheduling%20unit/5/ref_resolved", "parameters": [ @@ -12791,21 +11363,59 @@ ] }, { - "name": "Duration IM+BF", + "name": "Duration (IM+BF, Sun LBA, Sun HBA)", "refs": [ - "#/tasks/IM+BF/specifications_doc/duration" + "#/tasks/IM+BF/specifications_doc/duration", + "#/tasks/BF 1 station LBA/specifications_doc/duration", + "#/tasks/BF 1 station HBA/specifications_doc/duration" ] }, { - "name": "Duration BF 1 station LBA", + "name": "Description IM+BF", "refs": [ - "#/tasks/BF 1 station LBA/specifications_doc/duration" + "#/tasks/IM+BF/short_description" ] }, { - "name": "Duration BF 1 station HBA", + "name": "Description Preprecessing Sun", "refs": [ - "#/tasks/BF 1 station HBA/specifications_doc/duration" + "#/tasks/Preprocessing of Target/short_description" + ] + }, + { + "name": "Description Preprecessing Calibrator", + "refs": [ + "#/tasks/Preprocessing of Calibrator/short_description" + ] + }, + { + "name": "Description LBA Sun Spectrum", + "refs": [ + "#/tasks/BF 1 station LBA/short_description" + ] + }, + { + "name": "Description HBA Sun Spectrum", + "refs": [ + "#/tasks/BF 1 station HBA/short_description" + ] + }, + { + "name": "Pointing Sun J2000 (IM+BF)", + "refs": [ + "#/tasks/IM+BF/specifications_doc/station_configuration/SAPs/0/digital_pointing" + ] + }, + { + "name": "Pointing Calibrator (IM+BF)", + "refs": [ + "#/tasks/IM+BF/specifications_doc/calibrator/pointing" + ] + }, + { + "name": "Description FE1", + "refs": [ + "#/tasks/FE 1/short_description" ] }, { @@ -12814,23 +11424,69 @@ "#/tasks/FE 1/specifications_doc/duration" ] }, + { + "name": "Pointing FE1", + "refs": [ + "#/tasks/FE 1/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/FE 1/specifications_doc/station_configuration/tile_beam" + ] + }, + { + "name": "Description FE2", + "refs": [ + "#/tasks/FE 2/short_description" + ] + }, { "name": "Duration FE2", "refs": [ "#/tasks/FE 2/specifications_doc/duration" ] }, + { + "name": "Pointing FE2", + "refs": [ + "#/tasks/FE 2/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/FE 2/specifications_doc/station_configuration/tile_beam" + ] + }, + { + "name": "Description FE3", + "refs": [ + "#/tasks/FE 3/short_description" + ] + }, { "name": "Duration FE3", "refs": [ "#/tasks/FE 3/specifications_doc/duration" ] }, + { + "name": "Pointing FE3", + "refs": [ + "#/tasks/FE 3/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/FE 3/specifications_doc/station_configuration/tile_beam" + ] + }, + { + "name": "Description FE4", + "refs": [ + "#/tasks/FE 4/short_description" + ] + }, { "name": "Duration FE4", "refs": [ "#/tasks/FE 4/specifications_doc/duration" ] + }, + { + "name": "Pointing FE4", + "refs": [ + "#/tasks/FE 4/specifications_doc/station_configuration/SAPs/0/digital_pointing", + "#/tasks/FE 4/specifications_doc/station_configuration/tile_beam" + ] } ], "scheduling_constraints_doc": { @@ -12839,20 +11495,20 @@ "require_day": false, "require_night": false }, - "scheduler": "fixed_time", + "scheduler": "dynamic", "sky": { "min_distance": { - "jupiter": 0.5, - "moon": 0.5, - "sun": 0.5 + "jupiter": 0, + "moon": 0, + "sun": 0 }, "min_elevation": { - "calibrator": 0.5, - "target": 0.5 + "calibrator": 0.1745329252, + "target": 0.1745329252 }, "transit_offset": { - "from": -7200, - "to": 7200 + "from": -43200, + "to": 43200 } }, "time": { @@ -12862,7 +11518,7 @@ }, "scheduling_constraints_template": { "name": "constraints", - "version": 7 + "version": 8 }, "task_relations": [ { @@ -12917,7 +11573,9 @@ }, "producer": "IM+BF", "selection_doc": { - "sap": [] + "sap": [ + "calibrator" + ] }, "selection_template": { "name": "SAP", @@ -13055,9 +11713,13 @@ "role": "beamformer" }, "producer": "IM+BF", - "selection_doc": {}, + "selection_doc": { + "sap": [ + "IMBF_Sun" + ] + }, "selection_template": { - "name": "all", + "name": "SAP", "version": 4 } }, @@ -13136,6 +11798,63 @@ "name": "all", "version": 4 } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "output": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "producer": "IM+BF", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 4 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "output": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "producer": "BF 1 station HBA", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 4 + } + }, + { + "consumer": "Ingest", + "input": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "output": { + "dataformat": "Beamformed", + "datatype": "time series", + "role": "beamformer" + }, + "producer": "BF 1 station LBA", + "selection_doc": {}, + "selection_template": { + "name": "all", + "version": 4 + } } ], "task_scheduling_relations": [ @@ -13178,8 +11897,8 @@ ], "tasks": { "BF 1 station HBA": { - "description": "Beamformed observation with a single station HBA", - "short_description": "BF 1 station HBA", + "description": "Beamformed observation with a single station in HBA on the Sun, 105-188 MHz, 16 ch/SB, 0.01s", + "short_description": "Sun_spectrum_HBA-202303??-run1", "specifications_doc": { "beamformer": { "pipelines": [ @@ -13658,7 +12377,7 @@ { "max_nr_missing": 0, "stations": [ - "RS210" + "RS508" ] } ] @@ -13666,7 +12385,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 660, "station_configuration": { "SAPs": [ { @@ -14087,7 +12806,7 @@ { "max_nr_missing": 0, "stations": [ - "RS210" + "RS508" ] } ], @@ -14101,12 +12820,12 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "BF 1 station LBA": { - "description": "Beamformed observation with a single station LBA", - "short_description": "BF 1 station LBA", + "description": "Beamformed observation with a single station LBA on the Sun with a calibrator beam (default CasA), 5-88 MHz, 16 ch/SB, 0.01s", + "short_description": "Sun_spectrum_LBA-202303??-run1", "specifications_doc": { "beamformer": { "pipelines": [ @@ -14114,7 +12833,430 @@ "coherent": { "SAPs": [ { - "name": "SAP_Sun", + "name": "SAP_Sun", + "subbands": { + "list": [ + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450, + 451, + 452, + 453 + ], + "method": "copy" + }, + "tab_rings": { + "count": 0, + "width": 0.01 + }, + "tabs": [ + { + "pointing": { + "angle1": 0, + "angle2": 0, + "direction_type": "SUN", + "target": "Sun" + }, + "relative": true + } + ] + }, + { + "name": "SAP_Cal", "subbands": { "list": [ 54, @@ -14529,8 +13671,8 @@ "pointing": { "angle1": 0, "angle2": 0, - "direction_type": "SUN", - "target": "Sun" + "direction_type": "J2000", + "target": "Calibrator" }, "relative": true } @@ -14593,7 +13735,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 660, "station_configuration": { "SAPs": [ { @@ -15006,6 +14148,103 @@ 452, 453 ] + }, + { + "digital_pointing": { + "angle1": 6.123487680622106, + "angle2": 1.026515399560465, + "direction_type": "J2000", + "target": "CasA" + }, + "name": "SAP_Cal", + "subbands": [ + 54, + 80, + 84, + 88, + 92, + 96, + 100, + 104, + 108, + 112, + 116, + 120, + 124, + 128, + 132, + 136, + 140, + 144, + 148, + 152, + 156, + 160, + 164, + 168, + 172, + 176, + 180, + 184, + 188, + 192, + 196, + 200, + 204, + 208, + 212, + 216, + 220, + 224, + 228, + 232, + 236, + 240, + 244, + 248, + 252, + 256, + 260, + 264, + 268, + 272, + 276, + 280, + 284, + 288, + 292, + 296, + 300, + 304, + 308, + 312, + 316, + 320, + 324, + 328, + 332, + 336, + 340, + 344, + 348, + 352, + 356, + 360, + 364, + 368, + 372, + 376, + 380, + 384, + 388, + 392, + 394, + 396, + 400, + 404, + 408, + 412 + ] } ], "antenna_set": "LBA_OUTER", @@ -15028,7 +14267,7 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "Cleanup": { @@ -15037,16 +14276,16 @@ "specifications_doc": {}, "specifications_template": { "name": "cleanup", - "version": 7 + "version": 4 } }, "FE 1": { - "description": "First Fly's Eye observation with International and some Remote stations", + "description": "First Fly's Eye observation with International and some Remote stations with conversion to dynspec enabled, 105-188 MHz, 64ch/SB, 0.04s", "short_description": "IPS FE1", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -15054,7 +14293,7 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "beamformer": { @@ -15078,7 +14317,7 @@ "flys eye": { "enabled": true, "settings": { - "channels_per_subband": 16, + "channels_per_subband": 64, "quantisation": { "bits": 8, "enabled": false, @@ -15108,15 +14347,10 @@ "name": "FE", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -15138,7 +14372,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 120, "station_configuration": { "SAPs": [ { @@ -15557,15 +14791,10 @@ "filter": "HBA_110_190", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -15593,16 +14822,16 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "FE 2": { - "description": "Second Fly's Eye observation with International and some Remote stations", + "description": "Second Fly's Eye observation with International and some Remote stations with conversion to dynspec enabled, 105-188 MHz, 64ch/SB, 0.04s", "short_description": "IPS FE2", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -15610,7 +14839,7 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "beamformer": { @@ -15634,7 +14863,7 @@ "flys eye": { "enabled": true, "settings": { - "channels_per_subband": 16, + "channels_per_subband": 64, "quantisation": { "bits": 8, "enabled": false, @@ -15664,15 +14893,10 @@ "name": "FE", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -15694,7 +14918,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 120, "station_configuration": { "SAPs": [ { @@ -16113,15 +15337,10 @@ "filter": "HBA_110_190", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -16149,16 +15368,16 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "FE 3": { - "description": "Third Fly's Eye observation with International and some Remote stations", + "description": "Third Fly's Eye observation with International and some Remote stations with conversion to dynspec enabled, 105-188 MHz, 64ch/SB, 0.04s", "short_description": "IPS FE3", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -16166,7 +15385,7 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "beamformer": { @@ -16190,7 +15409,7 @@ "flys eye": { "enabled": true, "settings": { - "channels_per_subband": 16, + "channels_per_subband": 64, "quantisation": { "bits": 8, "enabled": false, @@ -16220,15 +15439,10 @@ "name": "FE", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -16250,7 +15464,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 120, "station_configuration": { "SAPs": [ { @@ -16669,15 +15883,10 @@ "filter": "HBA_110_190", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -16705,16 +15914,16 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "FE 4": { - "description": "Fourth Fly's Eye observation with International and some Remote stations", + "description": "Fourth Fly's Eye observation with International and some Remote stations with conversion to dynspec enabled, 105-188 MHz, 64ch/SB, 0.04s", "short_description": "IPS FE4", "specifications_doc": { "QA": { "file_conversion": { - "enabled": true, + "enabled": false, "nr_of_subbands": -1, "nr_of_timestamps": 256 }, @@ -16722,7 +15931,7 @@ "plots": { "autocorrelation": true, "crosscorrelation": true, - "enabled": true + "enabled": false } }, "beamformer": { @@ -16746,7 +15955,7 @@ "flys eye": { "enabled": true, "settings": { - "channels_per_subband": 16, + "channels_per_subband": 64, "quantisation": { "bits": 8, "enabled": false, @@ -16776,15 +15985,10 @@ "name": "FE", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -16806,7 +16010,7 @@ ], "ppf": false }, - "duration": 300, + "duration": 120, "station_configuration": { "SAPs": [ { @@ -17225,15 +16429,10 @@ "filter": "HBA_110_190", "station_groups": [ { - "max_nr_missing": 2, + "max_nr_missing": 14, "stations": [ "RS310", - "RS509" - ] - }, - { - "max_nr_missing": 12, - "stations": [ + "RS509", "DE601", "DE602", "DE603", @@ -17261,12 +16460,12 @@ }, "specifications_template": { "name": "beamforming observation", - "version": 8 + "version": 6 } }, "IM+BF": { - "description": "IM+BF Observation", - "short_description": "IM+BF", + "description": "Imaging + Beamformed Observation on the Sun with a calibrator beam. LBA_OUTER, 19-80 MHz (sparse), 127 TABs, IM 12.2kHz, 0.17s, BF: 12.2 kHz, 0.01s", + "short_description": "Sun-202303??-run1", "specifications_doc": { "QA": { "file_conversion": { @@ -17274,7 +16473,7 @@ "nr_of_subbands": -1, "nr_of_timestamps": 256 }, - "inspection_plots": "dynspec", + "inspection_plots": "msplots", "plots": { "autocorrelation": true, "crosscorrelation": true, @@ -17291,248 +16490,64 @@ "subbands": { "list": [ 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, 104, - 105, 106, - 107, - 108, - 109, 110, - 111, - 112, - 113, - 114, - 115, - 116, 117, - 118, - 119, - 120, 121, - 122, - 123, - 124, - 125, 126, - 127, - 128, - 129, - 130, 131, - 132, - 133, - 134, - 135, 136, - 137, - 138, - 139, - 140, 141, - 142, - 143, - 144, - 145, 146, - 147, - 148, - 149, 150, - 151, - 152, - 153, - 154, - 155, 156, - 157, - 158, - 159, - 160, 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, 172, - 173, - 174, - 175, - 176, - 177, 178, - 179, - 180, - 181, - 182, 183, - 184, - 185, - 186, - 187, - 188, 189, - 190, - 191, - 192, - 193, 194, - 195, - 196, - 197, - 198, - 199, - 200, 201, - 202, - 203, - 204, - 205, 206, - 207, - 208, - 209, - 210, 211, - 212, - 213, - 214, - 215, 216, - 217, - 218, - 219, - 220, 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, 232, - 233, - 234, - 235, - 236, 237, - 238, - 239, - 240, - 241, - 242, - 243, 244, - 245, - 246, - 247, - 248, 249, - 250, - 251, - 252, - 253, - 254, 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, 263, - 264, - 265, - 266, - 267, - 268, 269, - 270, - 271, - 272, - 273, 274, - 282, - 284, - 286, - 288, - 290, - 292, - 294, - 296, - 298, + 279, + 283, + 295, 300, 302, - 304, - 306, - 308, - 310, 312, - 314, 316, - 318, - 320, - 322, - 324, - 326, - 328, - 330, - 332, - 334, - 336, - 338, - 340, - 342, - 344, - 346, - 348, - 350, - 352, - 354, + 320, + 328, + 330, + 333, + 338, + 340, + 347, + 351, 356, - 358, 360, - 362, - 364, 366, - 368, 370, - 372, - 374, 376, - 378, 380, - 382, - 384, - 386, - 388, - 390, - 392, + 385, + 389, + 391, 394, - 396, - 398, 400, - 402, 404, - 406, - 408, 410 ], "method": "copy" @@ -17590,9 +16605,8 @@ "name": "MultiRings_Beamformer", "station_groups": [ { - "max_nr_missing": 1, + "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -17607,11 +16621,14 @@ "CS026", "CS028", "CS030", - "CS031", "CS032", + "CS031", "CS301", "CS302", "CS401", + "CS101", + "CS103", + "CS201", "CS501" ] } @@ -17627,16 +16644,16 @@ "angle1": 0.6624317181687094, "angle2": 1.5579526427549426, "direction_type": "J2000", - "target": "_target_name_" + "target": "_calibrator_name_" } }, "correlator": { "channels_per_subband": 16, - "integration_time": 0.25, + "integration_time": 0.166666, "storage_cluster": "CEP4", "topocentric_frequency_correction": false }, - "duration": 600, + "duration": 660, "station_configuration": { "SAPs": [ { @@ -17649,259 +16666,74 @@ "name": "IMBF_Sun", "subbands": [ 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, 104, - 105, 106, - 107, - 108, - 109, 110, - 111, - 112, - 113, - 114, - 115, - 116, 117, - 118, - 119, - 120, 121, - 122, - 123, - 124, - 125, 126, - 127, - 128, - 129, - 130, 131, - 132, - 133, - 134, - 135, 136, - 137, - 138, - 139, - 140, 141, - 142, - 143, - 144, - 145, 146, - 147, - 148, - 149, 150, - 151, - 152, - 153, - 154, - 155, 156, - 157, - 158, - 159, - 160, 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, 172, - 173, - 174, - 175, - 176, - 177, 178, - 179, - 180, - 181, - 182, 183, - 184, - 185, - 186, - 187, - 188, 189, - 190, - 191, - 192, - 193, 194, - 195, - 196, - 197, - 198, - 199, - 200, 201, - 202, - 203, - 204, - 205, 206, - 207, - 208, - 209, - 210, 211, - 212, - 213, - 214, - 215, 216, - 217, - 218, - 219, - 220, 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, 232, - 233, - 234, - 235, - 236, 237, - 238, - 239, - 240, - 241, - 242, - 243, 244, - 245, - 246, - 247, - 248, 249, - 250, - 251, - 252, - 253, - 254, 255, - 256, - 257, - 258, - 259, - 260, - 261, - 262, 263, - 264, - 265, - 266, - 267, - 268, 269, - 270, - 271, - 272, - 273, 274, - 282, - 284, - 286, - 288, - 290, - 292, - 294, - 296, - 298, + 279, + 283, + 295, 300, 302, - 304, - 306, - 308, - 310, 312, - 314, 316, - 318, 320, - 322, - 324, - 326, 328, 330, - 332, - 334, - 336, + 333, 338, 340, - 342, - 344, - 346, - 348, - 350, - 352, - 354, + 347, + 351, 356, - 358, 360, - 362, - 364, 366, - 368, 370, - 372, - 374, 376, - 378, 380, - 382, - 384, - 386, - 388, - 390, - 392, + 385, + 389, + 391, 394, - 396, - 398, 400, - 402, 404, - 406, - 408, 410 ] } ], - "antenna_set": "HBA_DUAL", - "filter": "HBA_110_190", + "antenna_set": "LBA_OUTER", + "filter": "LBA_10_90", "station_groups": [ { - "max_nr_missing": 1, + "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -17917,7 +16749,6 @@ "CS028", "CS030", "CS031", - "CS032", "CS101", "CS103", "CS201", @@ -17957,12 +16788,12 @@ "specifications_doc": {}, "specifications_template": { "name": "ingest", - "version": 7 + "version": 4 } }, "Preprocessing of Calibrator": { - "description": "Preprocessing of Calibrator", - "short_description": "PPCal", + "description": "Preprocessing of Calibrator for beamformed + imaging observation. 195kHz, 0.17s.", + "short_description": "_Cal_/1.0/CPT", "specifications_doc": { "average": { "frequency_steps": 16, @@ -17985,18 +16816,18 @@ "flag": { "autocorrelations": false, "outerchannels": true, - "rfi_strategy": "none" + "rfi_strategy": "LBAdefault" }, "storagemanager": "dysco" }, "specifications_template": { "name": "preprocessing pipeline", - "version": 8 + "version": 5 } }, "Preprocessing of Target": { - "description": "Preprocessing of Target Sun", - "short_description": "PPTgt", + "description": "Preprocessing of Target Sun for beamformed + imaging observation. No flagging. 195kHz, 0.17s", + "short_description": "Sun/1.0/TP", "specifications_doc": { "average": { "frequency_steps": 16, @@ -18025,14 +16856,14 @@ }, "specifications_template": { "name": "preprocessing pipeline", - "version": 8 + "version": 5 } } } }, - "version": 4, - "id": 13, - "state_value": "development", + "version": 11, + "id": 11, + "state_value": "active", "purpose_value": "technical_commissioning" } ] diff --git a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates_test_data.json b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates_test_data.json deleted file mode 100644 index 55391aac9af363c74f8e7ade9289f2bca0440d10..0000000000000000000000000000000000000000 --- a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/observing_strategy_templates_test_data.json +++ /dev/null @@ -1,1867 +0,0 @@ -{ "LBA_Strategy_Group": ["IM LBA Survey - 3 Beams","IM LBA LoDSS - 5 Beams","IM LBA - 2 Beams", "IM LBA - 1 Beam"], - "HBA_Strategy_Group": ["IM HBA Deep - 4 Beams","IM HBA LoTSS - 2 Beams"], - "HBA_Strategy_Group_1": ["IM HBA - 1 Beam"], - "HBA_Strategy_Group_2": ["IM RT HBA LoTSS"], - "Simple_Strategy_Group": ["Simple Beamforming Observation","Simple Observation"], - "Pulsar_Strategy_Group": ["BF Pulsar Timing", "BF CV Pulsar Timing Scintillation"], - "BF_Strategy_Group": ["IM BF Cal&Tgt", "BF CV FRB", "BF CV 8-bit"], - "COBALT_Strategy_Group": ["COM COBALT2 BF test"], - "SOLAR_CAMPAIGN_GROUP": ["Solar Campaign"], - "FE_MONITORING_GROUP": ["FE monitoring"], - "IM LBA - 1 Beam": [ - { - "purpose": "production", - "state": "development", - "version": 7, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_SPARSE_EVEN", - "validationType": "select" - }, - "Filter": { - "value": "LBA_10_90", - "validationType": "select" - }, - "Subbands": "110..353", - "Run ADDER QA": true, - "Observation description": "OOO.O _Target_name_", - "Pipeline description": "oOOO.O _Target_name_", - "Pipeline Calibrator description": "oOOO.O 3Cabc", - "total_direction_type": 3, - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Target_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Time averaging steps": "2", - "Frequency averaging steps": "4", - "Demix Pipeline Target": { - "sources" : { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "time_steps": "8" - }, - "Demix Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - }, - { - "purpose": "production", - "state": "development", - "version": 5, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_SPARSE_EVEN", - "validationType": "select" - }, - "Filter": { - "value": "LBA_10_90", - "validationType": "select" - }, - "Subbands": "110..353", - "Run ADDER QA": true, - "Observation description": "OOO.O _Target_name_", - "Pipeline description": "oOOO.O _Target_name_", - "Pipeline Calibrator description": "oOOO.O 3Cabc", - "total_direction_type": 3, - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Target_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Time averaging steps": "2", - "Frequency averaging steps": "4", - "Demix Pipeline Target": { - "sources" : { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "time_steps": "8" - }, - "Demix Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - }, - { - "purpose": "technical_commissioning", - "state": "development", - "version": 2, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_SPARSE_EVEN", - "validationType": "select" - }, - "Filter": { - "value": "LBA_10_90", - "validationType": "select" - }, - "Subbands": "110..353", - "Run ADDER QA": true, - "Observation description": "OOO.O _Target_name_", - "Pipeline description": "oOOO.O _Target_name_", - "Pipeline Calibrator description": "oOOO.O 3Cabc", - "total_direction_type": 3, - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Target_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Time averaging steps": "2", - "Frequency averaging steps": "4", - "Demix Pipeline Target": { - "sources" : { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "time_steps": "8" - }, - "Demix Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - }, - { - "purpose": "technical_commissioning", - "state": "legacy", - "version": 1, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_SPARSE_EVEN", - "validationType": "select" - }, - "Filter": { - "value": "LBA_10_90", - "validationType": "select" - }, - "Subbands": "110..353", - "Run ADDER QA": true, - "Observation description": "OOO.O _Target_name_", - "Pipeline description": "oOOO.O _Target_name_", - "Pipeline Calibrator description": "oOOO.O 3Cabc", - "total_direction_type": 3, - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Target_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Time averaging steps": "2", - "Frequency averaging steps": "4", - "Demix Pipeline Target": { - "sources" : { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "time_steps": "8" - }, - "Demix Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - } - ], - "IM LBA Survey - 3 Beams": [ - { - "state": "development", - "purpose": "production", - "version": 26, - "Scheduling Constraints": { - "from": "-04:00:00", - "to": "04:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "15.00", - "calibrator": "30.00", - "target": "50.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - - "Duration": "00:02:00", - "Run ADDER QA": true, - "Observation description": "OOO.O Paaa+01 Paaa+02 Paaa+03", - "Pipeline 1 description": "c17 oOOO.O Paaa+01", - "Pipeline 2 description": "c17 oOOO.O Paaa+02", - "Pipeline 3 description": "c17 oOOO.O Paaa+03", - "Pipeline Calibrator description": "c17 oOOO.O 3Cabc", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "total_direction_type": 5, - "Time averaging steps": "4", - "Frequency averaging steps": "8", - "Demix ignore target Pipeline Target 1": false, - "Demix ignore target Pipeline Target 2": false, - "Demix ignore target Pipeline Target 3": false, - "Demix sources Pipeline Target 1": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 2": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 3": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "parameterToSkip": [] - }, - { - "version": 19, - "Scheduling Constraints": { - "from": "-04:00:00", - "to": "04:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "15.00", - "calibrator": "30.00", - "target": "50.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - - "Duration": "00:02:00", - "Run ADDER QA": true, - "Observation description": "OOO.O Paaa+01 Paaa+02 Paaa+03", - "Pipeline 1 description": "c17 oOOO.O Paaa+01", - "Pipeline 2 description": "c17 oOOO.O Paaa+02", - "Pipeline 3 description": "c17 oOOO.O Paaa+03", - "Pipeline Calibrator description": "c17 oOOO.O 3Cabc", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "total_direction_type": 5, - "Time averaging steps": "4", - "Frequency averaging steps": "8", - "Demix ignore target Pipeline Target 1": false, - "Demix ignore target Pipeline Target 2": false, - "Demix ignore target Pipeline Target 3": false, - "Demix sources Pipeline Target 1": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 2": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 3": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "parameterToSkip": [] - }, - { - "version": 2, - "Scheduling Constraints": { - "from": "-04:00:00", - "to": "04:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "15.00", - "calibrator": "30.00", - "target": "50.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - - "Duration": "00:02:00", - "Run ADDER QA": true, - "Observation description": "OOO.O Paaa+01 Paaa+02 Paaa+03", - "Pipeline 1 description": "c17 oOOO.O Paaa+01", - "Pipeline 2 description": "c17 oOOO.O Paaa+02", - "Pipeline 3 description": "c17 oOOO.O Paaa+03", - "Pipeline Calibrator description": "c17 oOOO.O 3Cabc", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "total_direction_type": 5, - "Time averaging steps": "4", - "Frequency averaging steps": "8", - "Demix ignore target Pipeline Target 1": false, - "Demix ignore target Pipeline Target 2": false, - "Demix ignore target Pipeline Target 3": false, - "Demix sources Pipeline Target 1": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 2": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Target 3": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "Demix sources Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": ["CasA","CygA","HerA","HydraA","TauA","VirA"] - }, - "parameterToSkip": [] - } - ], - "IM LBA LoDSS - 5 Beams": [ - { - "state": "development", - "purpose": "technical_commissioning", - "version": 44, - "Scheduling Constraints": { - "from": "-04:00:00", - "to": "04:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "50.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Run ADDER QA": false, - "Observation description": "oXXX Paaa+01 3Cabc", - "Pipeline 1 description": "Paaa+01/1.0/TP", - "Pipeline 2 description": "Paaa+02/1.1/TP", - "Pipeline 3 description": "Paaa+03/1.2/TP", - "Pipeline 4 description": "Paaa+04/1.3/TP", - "Pipeline 5 description": "Paaa+05/1.4/TP", - "Pipeline Calibrator description": "3Cabc/1.0/CP", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Target Pointing 4": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+04", - "direction_type": "J2000" - }, - "Target Pointing 5": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+05", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_calibrator_name_", - "direction_type": "J2000" - }, - "total_direction_type": 7, - "Time averaging steps": "1", - "Frequency averaging steps": "1", - "parameterToSkip": [] - }, - { - "state": "development", - "purpose": "technical_commissioning", - "version": 35, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Run ADDER QA": true, - "Observation description": "oXXX Paaa+01 3Cabc", - "Pipeline 1 description": "Paaa+01/1.0/PP", - "Pipeline 2 description": "Paaa+02/1.1/PP", - "Pipeline 3 description": "Paaa+03/1.2/PP", - "Pipeline 4 description": "Paaa+04/1.3/PP", - "Pipeline 5 description": "Paaa+05/1.4/PP", - "Pipeline Calibrator description": "3Cabc/1.0/CP", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Target Pointing 4": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+04", - "direction_type": "J2000" - }, - "Target Pointing 5": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+05", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_calibrator_name_", - "direction_type": "J2000" - }, - "total_direction_type": 7, - "Time averaging steps": "1", - "Frequency averaging steps": "1", - "parameterToSkip": [] - }, - { - "state": "legacy", - "purpose": "technical_commissioning", - "Scheduling Constraints": { - "from": "-04:00:00", - "to": "04:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "15.00", - "calibrator": "30.00", - "target": "50.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Run ADDER QA": true, - "Observation description": "oXXX Paaa+01 3Cabc", - "Pipeline 1 description": "Paaa+01/1.0/TP", - "Pipeline 2 description": "Paaa+02/1.1/TP", - "Pipeline 3 description": "Paaa+03/1.2/TP", - "Pipeline 4 description": "Paaa+04/1.3/TP", - "Pipeline 5 description": "Paaa+05/1.4/TP", - "Pipeline Calibrator description": "3Cabc/1.0/CP", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Pointing 3": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+03", - "direction_type": "J2000" - }, - "Target Pointing 4": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+04", - "direction_type": "J2000" - }, - "Target Pointing 5": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+05", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_calibrator_name_", - "direction_type": "J2000" - }, - "total_direction_type": 7, - "Time averaging steps": "1", - "Frequency averaging steps": "1", - "parameterToSkip": [] - } - ], - "IM LBA - 2 Beams": [ - { - "state": "development", - "purpose": "technical_commissioning", - "version": 4, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_OUTER", - "validationType": "select" - }, - "Filter": { - "value": "LBA_30_90", - "validationType": "select" - }, - "Subbands": "177..338", - "Run ADDER QA": true, - "Observation description": "_observation_name_", - "Pipeline 1 description": "_target_1_name_/1.0/TP", - "Pipeline 2 description": "_target_2_name_/1.1/TP", - "Pipeline Calibrator description": "3Cabc/1.0/CP", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_1_name_", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_2_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "total_direction_type": 4, - "Time averaging steps": "4", - "Time averaging steps demix": "8", - "Frequency averaging steps": "16", - "Frequency averaging steps demix": "64", - "Demix sources Pipeline Target 1": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "Demix sources Pipeline Target 2": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "Demix sources Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - }, - { - "state": "development", - "purpose": "technical_commissioning", - "version": 2, - "Scheduling Constraints": { - "from": "-02:00:00", - "to": "02:00:00", - "sun": "30.00", - "moon": "30.00", - "jupiter": "30.00", - "calibrator": "30.00", - "target": "40.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "missingStation-0": "1", - "missingStation-1": "0" - }, - "Duration": "00:02:00", - "Antenna Set": { - "value": "LBA_OUTER", - "validationType": "select" - }, - "Filter": { - "value": "LBA_30_90", - "validationType": "select" - }, - "Subbands": "177..338", - "Run ADDER QA": true, - "Observation description": "_observation_name_", - "Pipeline 1 description": "_target_1_name_/1.0/TP", - "Pipeline 2 description": "_target_2_name_/1.1/TP", - "Pipeline Calibrator description": "3Cabc/1.0/CP", - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_1_name_", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_2_name_", - "direction_type": "J2000" - }, - "Calibrator Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "total_direction_type": 4, - "Time averaging steps": "4", - "Time averaging steps demix": "8", - "Frequency averaging steps": "16", - "Frequency averaging steps demix": "64", - "Demix sources Pipeline Target 1": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "Demix sources Pipeline Target 2": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "Demix sources Pipeline Calibrator": { - "validationType": "checkbox", - "type": "array", - "value": [] - }, - "parameterToSkip": [] - } - ], - "IM HBA LoTSS - 2 Beams": [ - { - "version": 5, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Duration": "28800", - "Observation Description": "Paaa+01 & Paaa+02", - "Pipeline 1 Description": "Paaa+01/TP", - "Pipeline 2 Description": "Paaa+02/TP", - "Calibrator Observation 1 Description": "Cal1 3Cabc", - "Calibrator Observation 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Calibrator Pipeline 1 Description": "Cal1 3Cabc/PP", - "Calibrator Observation 2 Description": "Cal2 3Cdef", - "Calibrator Observation 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cdef", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01Paaa+02REF" - }, - "Calibrator Pipeline 2 Description": "Cal2 3Cdef/PP", - "total_direction_type": 6, - "parameterToSkip": [] - }, - { - "version": 6, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Duration": "28800", - "Observation Description": "Paaa+01 & Paaa+02", - "Pipeline 1 Description": "Paaa+01/TP", - "Pipeline 2 Description": "Paaa+02/TP", - "Calibrator Observation 1 Description": "Cal1 3Cabc", - "Calibrator Observation 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Calibrator Pipeline 1 Description": "Cal1 3Cabc/PP", - "Calibrator Observation 2 Description": "Cal2 3Cdef", - "Calibrator Observation 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cdef", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01Paaa+02REF" - }, - "Calibrator Pipeline 2 Description": "Cal2 3Cdef/PP", - "total_direction_type": 6, - "parameterToSkip": [] - }, - { - "version": 10, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Pointing 1": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01", - "direction_type": "J2000" - }, - "Target Pointing 2": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+02", - "direction_type": "J2000" - }, - "Target Duration": "28800", - "Observation Description": "Paaa+01 & Paaa+02", - "Pipeline 1 Description": "Paaa+01/TP", - "Pipeline 2 Description": "Paaa+02/TP", - "Calibrator Observation 1 Description": "Cal1 3Cabc", - "Calibrator Observation 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Calibrator Pipeline 1 Description": "Cal1 3Cabc/PP", - "Calibrator Observation 2 Description": "Cal2 3Cdef", - "Calibrator Observation 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cdef", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "Paaa+01Paaa+02REF" - }, - "Calibrator Pipeline 2 Description": "Cal2 3Cdef/PP", - "total_direction_type": 6, - "Run Adder": false, - "parameterToSkip": [] - } - ], - "BF CV Pulsar Timing Scintillation": [ - { - "version": 4, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Observation Short Description": "Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Duration": "00:02:00", - "Optimise period & DM": false, - "Subintegration time": "-1", - "Raw output (8bit)": true, - "Subbands per file": "20", - "Frequency channels per file (multiple of subbands per file)": "120", - "parameterToSkip": ["Frequency channels per file (multiple of subbands per file)"] - }, - { - "version": 9, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Observation Short Description": "Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Duration": "00:02:00", - "Optimise period & DM": false, - "Subintegration time": "-1", - "Raw output (8bit)": true, - "Subbands per file": "20", - "Frequency channels per file (multiple of subbands per file)": "120", - "parameterToSkip": ["Frequency channels per file (multiple of subbands per file)"] - }, - { - "version": 10, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Observation Short Description": "Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Duration": "00:02:00", - "Optimise period & DM": false, - "Subintegration time": "10", - "Raw output (8bit)": true, - "Subbands per file": "20", - "Frequency channels per file (multiple of subbands per file)": "120", - "parameterToSkip": ["Frequency channels per file (multiple of subbands per file)"] - } - ], - "BF CV FRB": [ - { - "version": 19, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "30.00", - "target": "30.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "FRB YYYYMMDDA", - "direction_type": "J2000" - }, - "total_direction_type": 2, - "Duration": "00:02:00", - "Digifil options": { - "dm": "0.0001", - "channels_per_part": "320", - "coherent_dedispersion": true, - "integration_time_factor": "4" - }, - "Observation Name": "FRB YYYYMMDDA", - "Pipeline Name": "FRB YYYYMMDDA/pulp", - "Observation Short Description": "Baaaa+bb", - "Raw output (8bit)": false, - "Subbands per file": "20", - "parameterToSkip": [] - }, - { - "version": 13, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "30.00", - "target": "30.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "FRB YYYYMMDDA", - "direction_type": "J2000" - }, - "total_direction_type": 2, - "Duration": "00:02:00", - "Digifil options": { - "dm": "0.001", - "frequency_channels": "320", - "coherent_dedispersion": true, - "integration_time": "4" - }, - "Observation Name": "", - "Pipeline Name": "", - "Observation Short Description": "Baaaa+bb", - "Raw output (8bit)": false, - "Subbands per file": "20", - "parameterToSkip": [] - } - ], - "BF CV 8-bit": [ - { - "version": 12, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "total_direction_type": 2, - "Duration": "00:02:00", - "Digifil options": { - "dm": "0", - "channels_per_part": "320", - "coherent_dedispersion": true, - "integration_time_factor": "4" - }, - "Observation Short Description": "Baaaa+bb", - "Pipeline Short Description":"Baaaa+bb/PULP", - "Raw output (8bit)": false, - "Subbands per file": "20", - "parameterToSkip": [] - }, - { - "version": 13, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "total_direction_type": 2, - "Duration": "00:02:00", - "Digifil options": { - "dm": "0", - "channels_per_part": "320", - "coherent_dedispersion": true, - "integration_time_factor": "4" - }, - "Observation Short Description": "Baaaa+bb", - "Pipeline Short Description":"Baaaa+bb/PULP", - "Raw output (8bit)": false, - "Subbands per file": "20", - "parameterToSkip": [] - } - ], - "IM HBA Deep - 4 Beams": [ - { - "version": 10, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Duration": "120", - "Target Observation Description": "_target_name_ Run _nr_", - "Pipeline Central Target Description": "_target_field_name_/1.0/TP", - "Pipeline Offset A Description": "_target_field_name_-IS-A/1.1/TP", - "Pipeline Offset B Description": "_target_field_name_-IS-B/1.2/TP", - "Pipeline Offset C Description": "_target_field_name_-IS-C/1.3/TP", - "Central Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_", - "direction_type": "J2000" - }, - "Pointing Offset A": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-A", - "direction_type": "J2000" - }, - "Pointing Offset B": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-B", - "direction_type": "J2000" - }, - "Pointing Offset C": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-C", - "direction_type": "J2000" - }, - "Calibrator 1 Description": "3Cabc", - "Calibrator Pipeline 1 Description": "3Cabc/PP", - "Calibrator 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab1", - "direction_type": "J2000" - }, - "Calibrator 2 Description": "3Cabc", - "Calibrator Pipeline 2 Description": "3Cabc/PP", - "Calibrator 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab2", - "direction_type": "J2000" - }, - "Run ADDER QA": true, - "total_direction_type": 7, - "parameterToSkip": [] - }, - { - "version": 6, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Duration": "120", - "Target Observation Description": "_target_name_ Run _nr_", - "Pipeline Central Target Description": "_target_field_name_/1.0/TP", - "Pipeline Offset A Description": "_target_field_name_-IS-A/1.1/TP", - "Pipeline Offset B Description": "_target_field_name_-IS-B/1.2/TP", - "Pipeline Offset C Description": "_target_field_name_-IS-C/1.3/TP", - "Central Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_", - "direction_type": "J2000" - }, - "Pointing Offset A": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-A", - "direction_type": "J2000" - }, - "Pointing Offset B": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-B", - "direction_type": "J2000" - }, - "Pointing Offset C": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-C", - "direction_type": "J2000" - }, - "Calibrator 1 Description": "3Cabc", - "Calibrator Pipeline 1 Description": "3Cabc/PP", - "Calibrator 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab1", - "direction_type": "J2000" - }, - "Calibrator 2 Description": "3Cabc", - "Calibrator Pipeline 2 Description": "3Cabc/PP", - "Calibrator 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab2", - "direction_type": "J2000" - }, - "Run ADDER QA": true, - "total_direction_type": 7, - "parameterToSkip": [] - }, - { - "version": 7, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Duration": "120", - "Target Observation Description": "_target_name_ Run _nr_", - "Pipeline Central Target Description": "_target_field_name_/1.0/TP", - "Pipeline Offset A Description": "_target_field_name_-IS-A/1.1/TP", - "Pipeline Offset B Description": "_target_field_name_-IS-B/1.2/TP", - "Pipeline Offset C Description": "_target_field_name_-IS-C/1.3/TP", - "Central Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_", - "direction_type": "J2000" - }, - "Pointing Offset A": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-A", - "direction_type": "J2000" - }, - "Pointing Offset B": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-B", - "direction_type": "J2000" - }, - "Pointing Offset C": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_field_name_-IS-C", - "direction_type": "J2000" - }, - "Calibrator 1 Description": "3Cabc", - "Calibrator Pipeline 1 Description": "3Cabc/PP", - "Calibrator 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab1", - "direction_type": "J2000" - }, - "Calibrator 2 Description": "3Cabc", - "Calibrator Pipeline 2 Description": "3Cabc/PP", - "Calibrator 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cab2", - "direction_type": "J2000" - }, - "Run ADDER QA": true, - "total_direction_type": 7, - "parameterToSkip": [] - } - ], - "Simple Observation": [ - { - "version": 2, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.00", - "moon": "0.00", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "5.73" - }, - "Station_Group": { - "missingStation-0": "1" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "total_direction_type": 3, - "parameterToSkip": [] - } - ], - "BF Pulsar Timing": [ - { - "version": 12, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "target1", - "direction_type": "J2000" - }, - "Observation Short Description":"Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Optimise period & DM": false, - "Subintegration time": "-1", - "parameterToSkip": [] - }, - { - "version": 13, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "target1", - "direction_type": "J2000" - }, - "Observation Short Description":"Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Optimise period & DM": false, - "Subintegration time": "-1", - "parameterToSkip": [] - }, - { - "version": 20, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "missingStation-0": "4" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "Baaaa+bb", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "target1", - "direction_type": "J2000" - }, - "Observation Short Description":"Baaaa+bb", - "Pipeline Short Description": "Baaaa+bb/PULP", - "total_direction_type": 2, - "Optimise period & DM": false, - "Subintegration time": "10", - "parameterToSkip": [] - } - ], - "Simple Beamforming Observation": [ - { - "version": 2, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.00", - "moon": "0.00", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "5.73" - }, - "Station_Group": { - "missingStation-0": "1" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "target1", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "03h32m59.368s", - "angle2": "54d34m43.57s", - "target": "target1", - "direction_type": "J2000" - }, - "total_direction_type": 3, - "parameterToSkip": ["Beamformers"] - } - ], - "IM RT HBA LoTSS": [ - { - "version": 28, - "Scheduling Constraints": { - "from": "-24:00:00", - "to": "24:00:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "sg_missingstation_0": "4" - }, - "Target Name": "target", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Triggered_Target_", - "direction_type": "J2000" - }, - "Subbands": "104..136,138..163,165..180,182..184,187..209,212..213,215..240,242..255,257..273,275..300,302..328,330..347,349,364,372,380,388,396,404,413,421,430,438,447", - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "PXXX+YY", - "direction_type": "J2000" - }, - "Observation Description": "_Triggered_Observation_Name_", - "Pipeline Description": "_Triggered_Observation_Name_/TP", - "Calibrator Observation Description": "_Calibrator_Name_", - "Calibrator Pipeline Description": "_Calibrator_Name_/CP", - "Run ADDER": false, - "total_direction_type": 3, - "Target Duration": "7200", - "parameterToSkip": ["Calibrator Name","Calibrator Observation Pointing","Calibrator Duration", "Station Groups - Target Observation"] - }, - { - "version": 23, - "Scheduling Constraints": { - "from": "-24:00:00", - "to": "24:00:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4" - }, - "Target Name": "target", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_Triggered_Target_", - "direction_type": "J2000" - }, - "Subbands": "104..347", - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "PXXX+YY", - "direction_type": "J2000" - }, - "Observation Description": "_Triggered_Observation_Name_", - "Pipeline Description": "_Triggered_Observation_Name_/TP", - "Calibrator Observation Description": "_Calibrator_Name_", - "Calibrator Pipeline Description": "_Calibrator_Name_/CP", - "total_direction_type": 3, - "Target Duration": "7200", - "parameterToSkip": ["Calibrator Name","Calibrator Observation Pointing","Calibrator Duration", "Station Groups - Target Observation"] - } - ], - "IM HBA - 1 Beam": [ - { - "version": 29, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0", - "target": "0" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Observation Description": "_Target_Name_", - "Target Pipeline Description": "_Target_Name_/PP", - "Target Name": "target", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Subbands": "104..136,138..163,165..180,182..184,187..209,212..213,215..240,242..255,257..273,275..300,302..328,330..347,349,364,372,380,388,396,404,413,421,430,438,447", - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Target Duration": "28800", - "Calibrator Observation 1 Description": "Cal1 3Cabc", - "Calibrator Pipeline 1 Description":"Cal1 3Cabc/PP", - "Calibrator Observation 1 Name": "calibrator1", - "Calibrator Observation 1 Pointing ": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cabc", - "direction_type": "J2000" - }, - "Calibrator Observation 1 Duration": "600", - "Calibrator Observation 2 Description":"Cal2 3Cdef", - "Calibrator Pipeline 2 Description":"Cal2 3Cdef/PP", - "Calibrator Observation 2 Name": "calibrator2", - "Calibrator Observation 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "3Cdef", - "direction_type": "J2000" - }, - "total_direction_type": 4, - "Calibrator Observation 2 Duration": "600", - "Run Adder": false, - "parameterToSkip": ["Station Groups - Target Observation"] - }, - { - "version": 21, - "Scheduling Constraints": { - "from": "-00:24:00", - "to": "00:24:00", - "sun": "28.65", - "moon": "28.65", - "jupiter": "28.65", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "sg_missingstation_0": "4", - "sg_missingstation_1": "4", - "missingStation-0": "2" - }, - "Target Name": "target", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Subbands": "20..502", - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Target Duration": "28800", - "Calibrator 1 Name": "calibrator1", - "Calibrator 1 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "Calibrator 1 Duration": "600", - "Calibrator 2 Name": "calibrator2", - "Calibrator 2 Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "target1", - "direction_type": "J2000" - }, - "total_direction_type": 5, - "Calibrator 2 Duration": "600", - "parameterToSkip": ["Station Groups - Target Observation"] - } - ], - "COM COBALT2 BF test": [ - { - "version": 4, - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.50", - "moon": "0.50", - "jupiter": "0.00", - "calibrator": "0.00", - "target": "0.00" - }, - "Station_Group": { - "missingStation-0": "0" - }, - "Duration": "00:02:00", - "Target Pointing": { - "angle1": "0h0m0s", - "angle2": "90d00m00s", - "target": "NEP", - "direction_type": "J2000" - }, - "total_direction_type": 2, - "parameterToSkip": [] - } - ], - "IM BF Cal&Tgt": { - "Scheduling Constraints": { - "from": "-06:00:00", - "to": "06:00:00", - "sun": "0.00", - "moon": "0.00", - "jupiter": "0.00", - "calibrator": "28.65", - "target": "5.73" - }, - "Station_Group": { - "missingStation-0": "1" - }, - "Duration": "00:10:00", - "Target Pointing": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_name_", - "direction_type": "J2000" - }, - "Tile Beam": { - "angle1": "02h31m49.09s", - "angle2": "89d15m50.8s", - "target": "_target_name_", - "direction_type": "J2000" - }, - "total_direction_type": 3, - "parameterToSkip": ["Beamformers"] - }, - "Solar Campaign": { - - }, - "FE monitoring": { - - } -} \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/scheduleunit.service.data.js b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/scheduleunit.service.data.js index c8588d2d398a0bfae2c69e8e5941498013b29476..fab87d78df12fe130e313907cde40ae6bbf0f59b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/scheduleunit.service.data.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/scheduleunit.service.data.js @@ -1511,10 +1511,6 @@ const SUServiceMock= { const templates = require("../../../tmss_webapp/src/__mocks__/observing_strategy_templates.json"); return templates.strategies; }, - getObservStrategiesDataMapper: () => { - const dataMapper = require("../../../tmss_webapp/src/__mocks__/observing_strategy_templates_test_data.json"); - return dataMapper; - }, getObservStrategy: (name) => { // const templates = require("../../../tmss_webapp/src/__mocks__/observing_strategy_templates.json"); // return templates.strategies.find(strategy=> { return strategy.name === name }); @@ -1556,7 +1552,7 @@ const SUServiceMock= { "url": "http://localhost:3000/api/template_state/obsolete" } ], - getSchedulingUnitFromObservStrategy: (observStrategy, schedulingUnit) => { + getSchedulingUnitFromObservStrategy: (observStrategy) => { const strategyId = SUServiceMock.getObservStrategy(observStrategy.name)['id']; return {data: { "id": 1, @@ -7876,7 +7872,7 @@ const SUServiceMock= { const templateFiles = await getTemplateFiles("../tmss_webapp/build/schemas/scheduling_constraints_template"); let constraintTemplates = []; for (const template of templateFiles) { - constraintTemplates.push(require(template)); + constraintTemplates.push(fs.readFileSync(template, 'utf8')); } return constraintTemplates; }, diff --git a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/task_templates.json b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/task_templates.json index e9a513bde7204b47892e0d46b8ca17713a321097..bafe0b5c162353be89576e72eb9bd5567c0d6cf4 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/task_templates.json +++ b/SAS/TMSS/frontend/tmss_webapp/src/__mocks__/task_templates.json @@ -5,7 +5,7 @@ "name": "cleanup", "purpose": "technical_commissioning", "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/cleanup-7.json#", + "$id": "http://localhost:3000/schemas/task_template/cleanup-7.json#", "$schema": "http://json-schema.org/draft-06/schema#", "additionalProperties": false, "description": "This schema defines the parameters to setup a dataproduct(s) cleanup task.", @@ -23,6 +23,108 @@ "id": 1, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -257,7 +359,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -664,106 +765,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, - "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", - "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" - }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Create a QA file for the observation", "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -911,7 +977,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -1015,7 +1081,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -1050,7 +1115,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -1145,7 +1209,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -1194,7 +1257,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -1334,7 +1396,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -1397,7 +1458,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -1465,7 +1525,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -1483,14 +1543,43 @@ ], "title": "Custom", "type": "object" - } - ], - "default": { - "max_nr_missing": 1, - "stations": [ - "CS002", - "CS003", - "CS004", + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" + } + ], + "default": { + "max_nr_missing": 1, + "stations": [ + "CS002", + "CS003", + "CS004", "CS005", "CS006", "CS007" @@ -1535,74 +1624,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -1666,7 +1687,7 @@ "name": "ingest", "purpose": "technical_commissioning", "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/ingest-7.json#", + "$id": "http://localhost:3000/schemas/task_template/ingest-7.json#", "$schema": "http://json-schema.org/draft-06/schema#", "additionalProperties": false, "description": "This schema defines the parameters to setup an ingest task.", @@ -1684,6 +1705,108 @@ "id": 2, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -1918,7 +2041,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -2325,106 +2447,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" - }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -2572,7 +2659,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -2676,7 +2763,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -2711,7 +2797,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -2806,7 +2891,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -2855,7 +2939,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -2995,7 +3078,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -3058,7 +3140,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -3126,7 +3207,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -3144,6 +3225,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -3196,74 +3306,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -3379,71 +3421,173 @@ "id": 3, "ref_resolved_schema": { "definitions": { - "beamformer": { + "QA": { "additionalProperties": false, "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "pipelines": { - "additionalItems": false, - "default": [ - {} - ], - "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", - "items": { - "$ref": "#/definitions/beamformer_pipeline" - }, - "maxItems": 1, - "minItems": 1, - "title": "Pipelines", - "type": "array" + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} }, - "ppf": { - "default": false, - "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", - "title": "Use PPF when beamforming", - "type": "boolean" + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} } }, "required": [ - "pipelines", - "ppf" + "file_conversion", + "plots", + "inspection_plots" ], - "title": "Beamformer", + "title": "QA", "type": "object" }, - "beamformer_pipeline": { + "file_conversion": { "additionalProperties": false, "default": {}, - "headerTemplate": "Beamformer Pipeline {{ self.index }}", + "description": "Create a QA file for the observation", "properties": { - "coherent": { - "additionalProperties": false, - "default": {}, - "properties": { - "SAPs": { - "additionalItems": false, - "default": [ - { - "name": "_SAP_name_", - "tabs": [] - } - ], - "description": "Which SAPs in the observation to beamform.", - "items": { - "additionalProperties": false, - "properties": { - "name": { - "default": "_SAP_to_beamform_", - "description": "Name of the SAP to beamform", - "minLength": 1, - "title": "SAP name", - "type": "string" - }, - "subbands": { - "$ref": "#/definitions/subband_selection", - "default": {} - }, - "tab_rings": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, + "beamformer": { + "additionalProperties": false, + "default": {}, + "properties": { + "pipelines": { + "additionalItems": false, + "default": [ + {} + ], + "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", + "items": { + "$ref": "#/definitions/beamformer_pipeline" + }, + "maxItems": 1, + "minItems": 1, + "title": "Pipelines", + "type": "array" + }, + "ppf": { + "default": false, + "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", + "title": "Use PPF when beamforming", + "type": "boolean" + } + }, + "required": [ + "pipelines", + "ppf" + ], + "title": "Beamformer", + "type": "object" + }, + "beamformer_pipeline": { + "additionalProperties": false, + "default": {}, + "headerTemplate": "Beamformer Pipeline {{ self.index }}", + "properties": { + "coherent": { + "additionalProperties": false, + "default": {}, + "properties": { + "SAPs": { + "additionalItems": false, + "default": [ + { + "name": "_SAP_name_", + "tabs": [] + } + ], + "description": "Which SAPs in the observation to beamform.", + "items": { + "additionalProperties": false, + "properties": { + "name": { + "default": "_SAP_to_beamform_", + "description": "Name of the SAP to beamform", + "minLength": 1, + "title": "SAP name", + "type": "string" + }, + "subbands": { + "$ref": "#/definitions/subband_selection", + "default": {} + }, + "tab_rings": { "additonalProperties": false, "default": {}, "description": "Rings of TABs around the center of the beam.", @@ -3613,7 +3757,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -4020,112 +4163,77 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "File Conversion", + "title": "station_configuration", "type": "object" }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" - }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" - }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" - } - }, - "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" - ], - "title": "Plots", - "type": "object" - }, - "SAPs": { - "additionalItems": false, - "default": [ - {} + "SAPs": { + "additionalItems": false, + "default": [ + {} ], "description": "Station beams", "items": { @@ -4267,7 +4375,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -4371,7 +4479,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -4406,7 +4513,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -4501,7 +4607,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -4550,7 +4655,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -4690,7 +4794,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -4753,7 +4856,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -4821,7 +4923,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -4839,6 +4941,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -4891,74 +5022,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -5051,7 +5114,7 @@ "name": "calibrator observation", "purpose": "technical_commissioning", "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/calibrator%20observation-8.json#", + "$id": "http://localhost:3000/schemas/tasktemplate/calibrator%20observation-9.json#", "$schema": "http://json-schema.org/draft-06/schema#", "additionalProperties": false, "default": {}, @@ -5082,13 +5145,115 @@ "duration" ], "title": "calibrator observation", - "version": 8 + "version": 9 }, "state": "active", - "version": 8, + "version": 9, "id": 4, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -5323,7 +5488,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -5730,106 +5894,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" - }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" - }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -5977,7 +6106,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -6081,7 +6210,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -6116,7 +6244,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -6211,7 +6338,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -6260,7 +6386,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -6400,7 +6525,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -6463,7 +6587,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -6531,7 +6654,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -6549,6 +6672,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -6601,74 +6753,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -6802,42 +6886,144 @@ "id": 5, "ref_resolved_schema": { "definitions": { - "beamformer": { + "QA": { "additionalProperties": false, "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "pipelines": { - "additionalItems": false, - "default": [ - {} - ], - "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", - "items": { - "$ref": "#/definitions/beamformer_pipeline" - }, - "maxItems": 1, - "minItems": 1, - "title": "Pipelines", - "type": "array" + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} }, - "ppf": { - "default": false, - "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", - "title": "Use PPF when beamforming", - "type": "boolean" + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} } }, "required": [ - "pipelines", - "ppf" + "file_conversion", + "plots", + "inspection_plots" ], - "title": "Beamformer", + "title": "QA", "type": "object" }, - "beamformer_pipeline": { + "file_conversion": { "additionalProperties": false, "default": {}, - "headerTemplate": "Beamformer Pipeline {{ self.index }}", + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, + "beamformer": { + "additionalProperties": false, + "default": {}, + "properties": { + "pipelines": { + "additionalItems": false, + "default": [ + {} + ], + "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", + "items": { + "$ref": "#/definitions/beamformer_pipeline" + }, + "maxItems": 1, + "minItems": 1, + "title": "Pipelines", + "type": "array" + }, + "ppf": { + "default": false, + "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", + "title": "Use PPF when beamforming", + "type": "boolean" + } + }, + "required": [ + "pipelines", + "ppf" + ], + "title": "Beamformer", + "type": "object" + }, + "beamformer_pipeline": { + "additionalProperties": false, + "default": {}, + "headerTemplate": "Beamformer Pipeline {{ self.index }}", "properties": { "coherent": { "additionalProperties": false, @@ -7036,7 +7222,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -7443,106 +7628,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, - "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", - "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" - }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Create a QA file for the observation", "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -7690,7 +7840,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -7794,7 +7944,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -7829,7 +7978,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -7924,7 +8072,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -7973,7 +8120,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -8113,7 +8259,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -8176,7 +8321,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -8244,7 +8388,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -8262,8 +8406,37 @@ ], "title": "Custom", "type": "object" - } - ], + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" + } + ], "default": { "max_nr_missing": 1, "stations": [ @@ -8314,74 +8487,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -8474,7 +8579,7 @@ "name": "parallel calibrator target observation", "purpose": "technical_commissioning", "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/parallel%20calibrator%20target%20observation-8.json#", + "$id": "http://localhost:3000/schemas/tasktemplate/parallel%20calibrator%20target%20observation-9.json#", "$schema": "http://json-schema.org/draft-06/schema#", "additionalProperties": false, "description": "This schema combines the calibrator and target observation task schema's for parallel observing.", @@ -8515,13 +8620,115 @@ ], "title": "parallel calibrator target observation", "type": "object", - "version": 8 + "version": 9 }, "state": "active", - "version": 8, + "version": 9, "id": 6, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -8756,7 +8963,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -9163,106 +9369,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" - }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -9410,7 +9581,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -9514,7 +9685,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -9549,7 +9719,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -9644,7 +9813,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -9693,7 +9861,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -9833,7 +10000,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -9896,7 +10062,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -9964,7 +10129,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -9982,6 +10147,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -10034,74 +10228,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -10238,75 +10364,177 @@ "id": 7, "ref_resolved_schema": { "definitions": { - "beamformer": { + "QA": { "additionalProperties": false, "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "pipelines": { - "additionalItems": false, - "default": [ - {} - ], - "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", - "items": { - "$ref": "#/definitions/beamformer_pipeline" - }, - "maxItems": 1, - "minItems": 1, - "title": "Pipelines", - "type": "array" + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} }, - "ppf": { - "default": false, - "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", - "title": "Use PPF when beamforming", - "type": "boolean" + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} } }, "required": [ - "pipelines", - "ppf" + "file_conversion", + "plots", + "inspection_plots" ], - "title": "Beamformer", + "title": "QA", "type": "object" }, - "beamformer_pipeline": { + "file_conversion": { "additionalProperties": false, "default": {}, - "headerTemplate": "Beamformer Pipeline {{ self.index }}", + "description": "Create a QA file for the observation", "properties": { - "coherent": { - "additionalProperties": false, - "default": {}, - "properties": { - "SAPs": { - "additionalItems": false, - "default": [ - { - "name": "_SAP_name_", - "tabs": [] - } - ], - "description": "Which SAPs in the observation to beamform.", - "items": { - "additionalProperties": false, - "properties": { - "name": { - "default": "_SAP_to_beamform_", - "description": "Name of the SAP to beamform", - "minLength": 1, - "title": "SAP name", - "type": "string" - }, - "subbands": { - "$ref": "#/definitions/subband_selection", - "default": {} - }, - "tab_rings": { - "additonalProperties": false, - "default": {}, - "description": "Rings of TABs around the center of the beam.", - "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, + "beamformer": { + "additionalProperties": false, + "default": {}, + "properties": { + "pipelines": { + "additionalItems": false, + "default": [ + {} + ], + "description": "This array of beamformer pipelines is currently restricted to exactly 1 item. Support for handling multiple pipelines (in cobalt) will be added in the future.", + "items": { + "$ref": "#/definitions/beamformer_pipeline" + }, + "maxItems": 1, + "minItems": 1, + "title": "Pipelines", + "type": "array" + }, + "ppf": { + "default": false, + "description": "Use a PPF for the channellisation for beamforming. If not, an FFT is used.", + "title": "Use PPF when beamforming", + "type": "boolean" + } + }, + "required": [ + "pipelines", + "ppf" + ], + "title": "Beamformer", + "type": "object" + }, + "beamformer_pipeline": { + "additionalProperties": false, + "default": {}, + "headerTemplate": "Beamformer Pipeline {{ self.index }}", + "properties": { + "coherent": { + "additionalProperties": false, + "default": {}, + "properties": { + "SAPs": { + "additionalItems": false, + "default": [ + { + "name": "_SAP_name_", + "tabs": [] + } + ], + "description": "Which SAPs in the observation to beamform.", + "items": { + "additionalProperties": false, + "properties": { + "name": { + "default": "_SAP_to_beamform_", + "description": "Name of the SAP to beamform", + "minLength": 1, + "title": "SAP name", + "type": "string" + }, + "subbands": { + "$ref": "#/definitions/subband_selection", + "default": {} + }, + "tab_rings": { + "additonalProperties": false, + "default": {}, + "description": "Rings of TABs around the center of the beam.", + "properties": { "count": { "default": 0, "maximum": 11, @@ -10472,7 +10700,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -10879,112 +11106,77 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "File Conversion", + "title": "station_configuration", "type": "object" }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" - }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" - }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" - } - }, - "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" - ], - "title": "Plots", - "type": "object" - }, - "SAPs": { - "additionalItems": false, - "default": [ - {} + "SAPs": { + "additionalItems": false, + "default": [ + {} ], "description": "Station beams", "items": { @@ -11126,7 +11318,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -11230,7 +11422,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -11265,7 +11456,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -11360,7 +11550,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -11409,7 +11598,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -11549,7 +11737,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -11612,7 +11799,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -11680,7 +11866,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -11698,6 +11884,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -11750,74 +11965,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -11864,90 +12011,192 @@ } }, "required": [ - "role", - "datatype", - "dataformat" + "role", + "datatype", + "dataformat" + ], + "type": "object" + } + }, + "properties": { + "QA": { + "$ref": "#/definitions/QA", + "default": {} + }, + "beamformer": { + "$ref": "#/definitions/beamformer", + "default": {} + }, + "correlator": { + "$ref": "#/definitions/correlator", + "default": {} + }, + "duration": { + "$id": "#duration", + "$ref": "#/definitions/timedelta", + "default": 600, + "description": "Duration of this observation (seconds)", + "minimum": 1, + "title": "Duration" + }, + "station_configuration": { + "$ref": "#/definitions/station_configuration", + "default": {} + } + } + }, + "type": "http://localhost:3000/api/task_type/observation", + "type_value": "observation" + }, + { + "description": "This schema defines the parameters to setup a target observation task.", + "name": "target observation", + "purpose": "technical_commissioning", + "schema": { + "$id": "http://localhost:3000/schemas/tasktemplate/target%20observation-8.json#", + "$schema": "http://json-schema.org/draft-06/schema#", + "additionalProperties": false, + "description": "This schema defines the parameters to setup a target observation task.", + "patternProperties": { + "^[$]schema$": {} + }, + "properties": { + "QA": { + "$ref": "#/definitions/QA", + "default": {} + }, + "correlator": { + "$ref": "#/definitions/correlator", + "default": {} + }, + "duration": { + "$id": "#duration", + "$ref": "#/definitions/timedelta", + "default": 600, + "description": "Duration of this observation (seconds)", + "minimum": 1, + "title": "Duration" + }, + "station_configuration": { + "$ref": "#/definitions/station_configuration", + "default": {} + } + }, + "required": [ + "correlator", + "duration", + "station_configuration" + ], + "title": "target observation", + "version": 8 + }, + "state": "active", + "version": 8, + "id": 8, + "ref_resolved_schema": { + "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" ], + "title": "Plots", "type": "object" - } - }, - "properties": { - "QA": { - "$ref": "#/definitions/QA", - "default": {} - }, - "beamformer": { - "$ref": "#/definitions/beamformer", - "default": {} - }, - "correlator": { - "$ref": "#/definitions/correlator", - "default": {} - }, - "duration": { - "$id": "#duration", - "$ref": "#/definitions/timedelta", - "default": 600, - "description": "Duration of this observation (seconds)", - "minimum": 1, - "title": "Duration" - }, - "station_configuration": { - "$ref": "#/definitions/station_configuration", - "default": {} - } - } - }, - "type": "http://localhost:3000/api/task_type/observation", - "type_value": "observation" - }, - { - "description": "This schema defines the parameters to setup a target observation task.", - "name": "target observation", - "purpose": "technical_commissioning", - "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/target%20observation-7.json#", - "$schema": "http://json-schema.org/draft-06/schema#", - "additionalProperties": false, - "description": "This schema defines the parameters to setup a target observation task.", - "patternProperties": { - "^[$]schema$": {} - }, - "properties": { - "QA": { - "$ref": "#/definitions/QA", - "default": {} - }, - "correlator": { - "$ref": "#/definitions/correlator", - "default": {} - }, - "duration": { - "$id": "#duration", - "$ref": "#/definitions/timedelta", - "default": 600, - "description": "Duration of this observation (seconds)", - "minimum": 1, - "title": "Duration" }, - "station_configuration": { - "$ref": "#/definitions/station_configuration", - "default": {} - } - }, - "required": [ - "correlator", - "duration", - "station_configuration" - ], - "title": "target observation", - "version": 7 - }, - "state": "active", - "version": 7, - "id": 8, - "ref_resolved_schema": { - "definitions": { "beamformer": { "additionalProperties": false, "default": {}, @@ -12182,7 +12431,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -12589,106 +12837,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, - "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", - "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" - }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Create a QA file for the observation", "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -12836,7 +13049,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -12940,7 +13153,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -12975,7 +13187,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -13070,7 +13281,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -13119,7 +13329,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -13259,7 +13468,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -13322,7 +13530,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -13382,7 +13589,31 @@ "stations", "max_nr_missing" ], - "title": "All", + "title": "All", + "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS002" + ] + }, + "description": "A custom group of stations which can be defined by the user", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list" + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "Custom", "type": "object" }, { @@ -13393,20 +13624,25 @@ "CS001" ] }, - "description": "A custom group of stations which can be defined by the user", + "description": "All LOFAR2 stations", "properties": { "max_nr_missing": { "$ref": "#/definitions/max_number_of_missing_stations" }, "stations": { - "$ref": "#/definitions/station_list" + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] } }, "required": [ "stations", "max_nr_missing" ], - "title": "Custom", + "title": "LOFAR2", "type": "object" } ], @@ -13460,74 +13696,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -13612,7 +13780,7 @@ "name": "preprocessing pipeline", "purpose": "technical_commissioning", "schema": { - "$id": "http://localhost:3000/schemas/tasktemplate/preprocessing%20pipeline-8.json#", + "$id": "http://localhost:3000/schemas/tasktemplate/preprocessing%20#", "$schema": "http://json-schema.org/draft-06/schema#", "additionalProperties": false, "description": "This schema defines the parameters for a preprocessing pipeline.", @@ -13750,6 +13918,108 @@ "id": 9, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -13984,7 +14254,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -14391,106 +14660,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, - "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", - "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" - }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, - "default": {}, - "description": "Create a QA file for the observation", - "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" - }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" - }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Create dynamic spectrum plots", "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" + }, + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] + }, + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -14638,7 +14872,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -14742,7 +14976,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -14777,7 +15010,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -14872,7 +15104,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -14921,7 +15152,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -15061,7 +15291,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -15124,7 +15353,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -15192,7 +15420,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -15210,6 +15438,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -15262,74 +15519,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, @@ -15821,6 +16010,108 @@ "id": 10, "ref_resolved_schema": { "definitions": { + "QA": { + "additionalProperties": false, + "default": {}, + "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", + "properties": { + "file_conversion": { + "$ref": "#/definitions/file_conversion", + "default": {} + }, + "inspection_plots": { + "$ref": "#/definitions/inspection_plots", + "default": "msplots" + }, + "plots": { + "$ref": "#/definitions/plots", + "default": {} + } + }, + "required": [ + "file_conversion", + "plots", + "inspection_plots" + ], + "title": "QA", + "type": "object" + }, + "file_conversion": { + "additionalProperties": false, + "default": {}, + "description": "Create a QA file for the observation", + "properties": { + "enabled": { + "default": true, + "description": "Do/Don't create a QA file for the observation", + "title": "enabled", + "type": "boolean" + }, + "nr_of_subbands": { + "default": -1, + "description": "Keep this number of subbands from the observation in the QA file, or all if -1", + "title": "#subbands", + "type": "integer" + }, + "nr_of_timestamps": { + "default": 256, + "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", + "minimum": 1, + "title": "#timestamps", + "type": "integer" + } + }, + "required": [ + "enabled", + "nr_of_subbands", + "nr_of_timestamps" + ], + "title": "File Conversion", + "type": "object" + }, + "inspection_plots": { + "decription": "Type of inspection plots to run", + "default": "msplots", + "enum": [ + "msplots", + "dynspec", + "none" + ], + "title": "Inspection Plots", + "type": "string" + }, + "plots": { + "additionalProperties": false, + "default": {}, + "description": "Create dynamic spectrum plots", + "properties": { + "autocorrelation": { + "default": true, + "description": "Create autocorrelation plots for all stations", + "title": "autocorrelation", + "type": "boolean" + }, + "crosscorrelation": { + "default": true, + "description": "Create crosscorrelation plots for all baselines", + "title": "crosscorrelation", + "type": "boolean" + }, + "enabled": { + "default": true, + "description": "Do/Don't create plots from the QA file from the observation", + "title": "enabled", + "type": "boolean" + } + }, + "required": [ + "enabled", + "autocorrelation", + "crosscorrelation" + ], + "title": "Plots", + "type": "object" + }, "beamformer": { "additionalProperties": false, "default": {}, @@ -16055,7 +16346,6 @@ { "max_nr_missing": 1, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -16462,106 +16752,71 @@ ], "type": "string" }, - "QA": { - "additionalProperties": false, - "default": {}, - "description": "Perform all Quality Assurance (QA) tasks, including file conversion and plotting.", - "properties": { - "file_conversion": { - "$ref": "#/definitions/file_conversion", - "default": {} - }, - "inspection_plots": { - "$ref": "#/definitions/inspection_plots", - "default": "msplots" - }, - "plots": { - "$ref": "#/definitions/plots", - "default": {} - } - }, - "required": [ - "file_conversion", - "plots", - "inspection_plots" - ], - "title": "QA", - "type": "object" - }, - "file_conversion": { - "additionalProperties": false, + "station_configuration": { "default": {}, - "description": "Create a QA file for the observation", "properties": { - "enabled": { - "default": true, - "description": "Do/Don't create a QA file for the observation", - "title": "enabled", - "type": "boolean" + "SAPs": { + "$ref": "#/definitions/SAPs", + "default": [ + {} + ], + "minItems": 1 }, - "nr_of_subbands": { - "default": -1, - "description": "Keep this number of subbands from the observation in the QA file, or all if -1", - "title": "#subbands", - "type": "integer" + "antenna_set": { + "$ref": "#/definitions/antenna_set", + "default": "HBA_DUAL" }, - "nr_of_timestamps": { - "default": 256, - "description": "Extract this number of timestamps from the observation in the QA file (equidistantanly sampled, no averaging/interpolation)", - "minimum": 1, - "title": "#timestamps", - "type": "integer" - } - }, - "required": [ - "enabled", - "nr_of_subbands", - "nr_of_timestamps" - ], - "title": "File Conversion", - "type": "object" - }, - "inspection_plots": { - "decription": "Type of inspection plots to run", - "default": "msplots", - "enum": [ - "msplots", - "dynspec", - "none" - ], - "title": "Inspection Plots", - "type": "string" - }, - "plots": { - "additionalProperties": false, - "default": {}, - "description": "Create dynamic spectrum plots", - "properties": { - "autocorrelation": { - "default": true, - "description": "Create autocorrelation plots for all stations", - "title": "autocorrelation", - "type": "boolean" + "filter": { + "$ref": "#/definitions/filter", + "default": "HBA_110_190" }, - "crosscorrelation": { - "default": true, - "description": "Create crosscorrelation plots for all baselines", - "title": "crosscorrelation", - "type": "boolean" + "station_groups": { + "$ref": "#/definitions/station_groups", + "default": [ + { + "max_nr_missing": 4, + "stations": [ + "CS002", + "CS003", + "CS004", + "CS005", + "CS006", + "CS007", + "CS011", + "CS013", + "CS017", + "CS021", + "CS024", + "CS026", + "CS028", + "CS030", + "CS031", + "CS032", + "CS101", + "CS103", + "CS201", + "CS301", + "CS302", + "CS401", + "CS501" + ] + } + ] }, - "enabled": { - "default": true, - "description": "Do/Don't create plots from the QA file from the observation", - "title": "enabled", - "type": "boolean" + "tile_beam": { + "$ref": "#/definitions/pointing", + "default": {}, + "description": "HBA only", + "title": "Tile beam" } }, "required": [ - "enabled", - "autocorrelation", - "crosscorrelation" + "station_groups", + "antenna_set", + "filter", + "SAPs" ], - "title": "Plots", + "title": "station_configuration", "type": "object" }, "SAPs": { @@ -16709,7 +16964,7 @@ "type": "integer" }, "station": { - "description": "These are the LOFAR stations", + "description": "These are all LOFAR (1 and 2) stations", "enum": [ "CS001", "CS002", @@ -16813,7 +17068,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -16848,7 +17102,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -16943,7 +17196,6 @@ "default": { "max_nr_missing": 4, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -16992,7 +17244,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -17132,7 +17383,6 @@ "default": { "max_nr_missing": 6, "stations": [ - "CS001", "CS002", "CS003", "CS004", @@ -17195,7 +17445,6 @@ "$ref": "#/definitions/station_list", "enum": [ [ - "CS001", "CS002", "CS003", "CS004", @@ -17263,7 +17512,7 @@ "default": { "max_nr_missing": 0, "stations": [ - "CS001" + "CS002" ] }, "description": "A custom group of stations which can be defined by the user", @@ -17281,6 +17530,35 @@ ], "title": "Custom", "type": "object" + }, + { + "additionalProperties": false, + "default": { + "max_nr_missing": 0, + "stations": [ + "CS001" + ] + }, + "description": "All LOFAR2 stations", + "properties": { + "max_nr_missing": { + "$ref": "#/definitions/max_number_of_missing_stations" + }, + "stations": { + "$ref": "#/definitions/station_list", + "enum": [ + [ + "CS001" + ] + ] + } + }, + "required": [ + "stations", + "max_nr_missing" + ], + "title": "LOFAR2", + "type": "object" } ], "default": { @@ -17333,74 +17611,6 @@ "type": "array", "uniqueItems": true }, - "station_configuration": { - "default": {}, - "properties": { - "SAPs": { - "$ref": "#/definitions/SAPs", - "default": [ - {} - ], - "minItems": 1 - }, - "antenna_set": { - "$ref": "#/definitions/antenna_set", - "default": "HBA_DUAL" - }, - "filter": { - "$ref": "#/definitions/filter", - "default": "HBA_110_190" - }, - "station_groups": { - "$ref": "#/definitions/station_groups", - "default": [ - { - "max_nr_missing": 4, - "stations": [ - "CS001", - "CS002", - "CS003", - "CS004", - "CS005", - "CS006", - "CS007", - "CS011", - "CS013", - "CS017", - "CS021", - "CS024", - "CS026", - "CS028", - "CS030", - "CS031", - "CS032", - "CS101", - "CS103", - "CS201", - "CS301", - "CS302", - "CS401", - "CS501" - ] - } - ] - }, - "tile_beam": { - "$ref": "#/definitions/pointing", - "default": {}, - "description": "HBA only", - "title": "Tile beam" - } - }, - "required": [ - "station_groups", - "antenna_set", - "filter", - "SAPs" - ], - "title": "station_configuration", - "type": "object" - }, "task_connector": { "additionalProperties": false, "default": {}, diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppFooter.test.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppFooter.test.js index fed16b1eb682162af3c51f16a5cf79527fb3ab19..7fc4f18ad9d058d2cd66b38f51746cf0f0b6febd 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppFooter.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppFooter.test.js @@ -1,6 +1,9 @@ import React from 'react'; import { render } from '@testing-library/react'; import AppFooter from './AppFooter'; +import {removeReact18ConsoleErrors} from "../../utils/test.helper"; + +removeReact18ConsoleErrors() test('renders ASTRON in footer', () => { const { getByText } = render(<AppFooter />); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.test.js index 62924fd5f847b27b832391bfa1f63c9254b6a22d..90803e32cf8672309193d2588ec703bb716a4fa2 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.test.js @@ -130,7 +130,7 @@ it("renders Project details if found", async () => { expect(content.getByTitle("Click to Close Project View")).toBeInTheDocument(); // Ensure that SU table is loaded and no rows displayed except header expect(content.queryByTestId('viewtable')).toBeInTheDocument(); - expect(content.queryAllByRole('row').length).toBe(2); + expect(content.queryAllByRole('row').length).toBe(1); // Ensure SU actions are not permitted. Once permission mock is added correctly, this should be updated expect(content.getByTitle("Don't have permission to add new Scheduling Unit")).toBeInTheDocument(); expect(content.getByTitle("Don't have permission to add/view Scheduling Set")).toBeInTheDocument(); diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.js new file mode 100644 index 0000000000000000000000000000000000000000..3a433fdd362519aa6f616721d35eb610e46cbacf --- /dev/null +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.js @@ -0,0 +1,37 @@ +export function getTaskTemplateForTask(taskTemplates, task) { + let taskTemplate = taskTemplates.filter(t => t.name === task?.specifications_template?.name) + if (taskTemplate[0] && taskTemplate.length > 1) { + taskTemplate = taskTemplates.filter(t => t.version === task?.specifications_template?.version) + } + + if (!taskTemplate[0]) { + throw new TypeError("Cannot load task for SU since there is no task template found for task '" + + task?.specifications_template?.name + "' version: " + task?.specifications_template?.version) + } + return taskTemplate[0]; +} + +export function getConstraintTemplate(constraintTemples, name = undefined, version = undefined) { + let constraintTemplate; + + if (name && version) { + for (let constraint of constraintTemples) { + if (typeof constraint === 'string') { + constraint = JSON.parse(constraint) + } + if (constraint.name === name && constraint.version === version) { + constraintTemplate = constraint + break; + } + } + } + + if (!constraintTemplate) { + if (!constraintTemples[0]) { + throw new TypeError("A constraint template should've been set but has not.") + } + constraintTemplate = constraintTemples[0] + } + + return constraintTemplate +} \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.test.js new file mode 100644 index 0000000000000000000000000000000000000000..2056c234829dde90e407d037dc8d8118d36001c4 --- /dev/null +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.helper.test.js @@ -0,0 +1,90 @@ +import {getConstraintTemplate, getTaskTemplateForTask} from "./create.helper"; +import {removeReact18ConsoleErrors} from "../../utils/test.helper"; + +removeReact18ConsoleErrors() +describe('getConstraintTemplate', () => { + const constraintTemplateOne = {"name": "x-men", "version": "8", "heroes": ["x-men", "cyclops"]} + const name = "batman"; + const version = "1"; + const constraintTemplateTwo = {"name": name, "version": version, "heroes": ["batman", "robin"]} + + test("first from props when no name+version", () => { + const constraintTemplates = [constraintTemplateOne, constraintTemplateTwo]; + const actualConstraintTemplate = getConstraintTemplate(constraintTemplates) + expect(actualConstraintTemplate).toBe(constraintTemplateOne) + }); + test("first from props when name+version not found", () => { + const constraintTemplates = [constraintTemplateOne, constraintTemplateTwo]; + const actualConstraintTemplate = getConstraintTemplate(constraintTemplates, "does-not", "exist") + expect(actualConstraintTemplate).toBe(constraintTemplateOne) + }); + test("with name and version", () => { + const constraintTemplates = [constraintTemplateOne, constraintTemplateTwo]; + const actualConstraintTemplate = getConstraintTemplate(constraintTemplates, name, version) + expect(actualConstraintTemplate).toBe(constraintTemplateTwo) + }); + test("with a constraint template as JSON string", () => { + const templateString = JSON.stringify(constraintTemplateTwo) + const constraintTemplates = [templateString]; + const actualConstraintTemplate = getConstraintTemplate(constraintTemplates, name, version) + expect(actualConstraintTemplate).toEqual(constraintTemplateTwo) + }); + test("fail when no templates are set", () => { + expect(() => { + getConstraintTemplate([]) + }).toThrow(TypeError); + }); +}); + +describe('getTaskTemplateForTask', () => { + const taskTemplateOne = {"name": "x-men", "version": "8", "heroes": ["x-men", "cyclops"]} + const name = "batman"; + const version = "1"; + const taskTemplateTwo = {"name": name, "version": 1337, "heroes": ["batman", "robin"]} + const taskTemplateThree = {"name": name, "version": version, "heroes": ["batman", "robin"]} + + test("found single template on name", () => { + const task = {specifications_template: {name: name, version: version}} + const taskTemplates = [taskTemplateOne, taskTemplateThree]; + const actualTaskTemplate = getTaskTemplateForTask(taskTemplates, task) + expect(actualTaskTemplate).toBe(taskTemplateThree) + }); + test("found multiple on name, single on version", () => { + const task = {specifications_template: {name: name, version: version}} + const taskTemplates = [taskTemplateTwo, taskTemplateThree]; + const actualTaskTemplate = getTaskTemplateForTask(taskTemplates, task) + expect(actualTaskTemplate).toBe(taskTemplateThree) + }); + test("fail when no templates are found on name", () => { + const task = {specifications_template: {name: "does-not-exist", version: version}} + const taskTemplates = [taskTemplateOne, taskTemplateTwo, taskTemplateThree]; + expect(() => { + getTaskTemplateForTask(taskTemplates, task) + }).toThrow(TypeError); + }); + test("fail when multiple template found on name but none on version", () => { + const task = {specifications_template: {name: name, version: "does-not-exist"}} + const taskTemplates = [taskTemplateOne, taskTemplateTwo, taskTemplateThree]; + expect(() => { + getTaskTemplateForTask(taskTemplates, task) + }).toThrow(TypeError); + }); + test("fail when no templates are set", () => { + expect(() => { + getTaskTemplateForTask([]) + }).toThrow(TypeError); + }); + test("fail when no task is specified", () => { + const taskTemplates = [taskTemplateOne, taskTemplateTwo, taskTemplateThree]; + expect(() => { + getTaskTemplateForTask(taskTemplates) + }).toThrow(TypeError); + }); + test("fail when necessary task parameters for retrieval of template are not set", () => { + const task = {redundant: {name: name, version: version}} + const taskTemplates = [taskTemplateOne, taskTemplateTwo, taskTemplateThree]; + expect(() => { + getTaskTemplateForTask(taskTemplates, task) + }).toThrow(TypeError); + }); +}); \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js index c141d3ef658d7d1f377aea70c76fcf50b73ea903..8c8910245be265d3ad212f7cd6d9c90037bf8be9 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js @@ -1,16 +1,16 @@ -import React, { Component } from 'react'; -import { Redirect } from 'react-router-dom'; +import React, {Component} from 'react'; +import {Redirect} from 'react-router-dom'; import _ from 'lodash'; import $RefParser from "@apidevtools/json-schema-ref-parser"; import moment from 'moment'; -import { publish } from '../../App'; +import {publish} from '../../App'; -import { Checkbox } from 'primereact/checkbox'; -import { InputText } from 'primereact/inputtext'; -import { InputTextarea } from 'primereact/inputtextarea'; -import { Dropdown } from 'primereact/dropdown'; -import { Button } from 'primereact/button'; -import { Toast } from 'primereact/toast'; +import {Checkbox} from 'primereact/checkbox'; +import {InputText} from 'primereact/inputtext'; +import {InputTextarea} from 'primereact/inputtextarea'; +import {Dropdown} from 'primereact/dropdown'; +import {Button} from 'primereact/button'; +import {Toast} from 'primereact/toast'; import AppLoader from '../../layout/components/AppLoader'; import Jeditor from '../../components/JSONEditor/JEditor'; import UnitConversion from '../../utils/unit.converter'; @@ -23,14 +23,15 @@ import ParserUtility from '../../utils/parser.utility'; import PageHeader from '../../layout/components/PageHeader'; import SchedulingConstraint from './Scheduling.Constraints'; import Stations from './Stations'; -import { CustomDialog } from '../../layout/components/CustomDialog'; +import {CustomDialog} from '../../layout/components/CustomDialog'; import SchedulingSet from './schedulingset.create'; import UtilService from '../../services/util.service'; import ReactTooltip from "react-tooltip"; import AuthUtil from '../../utils/auth.util'; -import { MultiSelect } from 'primereact/multiselect'; -import { appGrowl, setAppGrowl } from '../../layout/components/AppGrowl'; +import {MultiSelect} from 'primereact/multiselect'; +import {appGrowl, setAppGrowl} from '../../layout/components/AppGrowl'; import FormActionbar from '../../components/FormActionbar'; +import {getConstraintTemplate, getTaskTemplateForTask} from "./create.helper"; /** * Component to create a new SchedulingUnit from Observation strategy template @@ -42,14 +43,14 @@ export class SchedulingUnitCreate extends Component { observStrategyFilters: { states: ['active'], purpose: [] - }, + }, userrole: {}, selectedProject: {}, showAddSet: false, showDialog: false, isDirty: false, isLoading: true, // Flag for loading spinner - dialog: { header: '', detail: ''}, // Dialog properties + dialog: {header: '', detail: ''}, // Dialog properties touched: {}, redirect: null, // URL to redirect errors: [], // Form Validation errors @@ -58,21 +59,21 @@ export class SchedulingUnitCreate extends Component { stationOptions: [], stationGroups: {}, customSelectedStations: [], // custom stations - selectedStationsOfTask : {}, + selectedStationsOfTask: {}, missingStationsofTask: {}, missingStnErorsofTask: {}, customStationsOfTask: {}, stationsCollapsed: false, - schedulingUnit: { + schedulingUnit: { name: '', description: '', - project: (props.match?props.match.params.project:null) || null, + project: (props.match ? props.match.params.project : null) || null, rank: '', }, - projectDisabled: (props.match?(props.match.params.project? true:false):false), // Disable project selection if + projectDisabled: (props.match ? (props.match.params.project ? true : false) : false), // Disable project selection if observStrategy: {}, // Selected strategy to create SU paramsSchema: null, // JSON Schema to be generated from strategy template to pass to JSOn editor - constraintSchema:null, + constraintSchema: null, validEditor: false, // For JSON editor validation validFields: {}, // For Form Validation newSet: null, @@ -87,8 +88,8 @@ export class SchedulingUnitCreate extends Component { this.observStrategies = []; // All Observing strategy templates this.taskTemplates = []; // All task templates to be filtered based on tasks in selected strategy template this.tooltipOptions = UIConstants.tooltipOptions; - this.constraintTemplates = []; - this.myRoles = {}; + this.constraintTemplates = []; + this.myRoles = {}; this.nameInput = React.createRef(); // Ref to Name field for auto focus this.formRules = { // Form validation rules name: {required: true, message: "Name can not be empty"}, @@ -96,7 +97,7 @@ export class SchedulingUnitCreate extends Component { project: {required: true, message: "Select project to get Scheduling Sets"}, scheduling_set_id: {required: true, message: "Select the Scheduling Set"}, }; - + this.setEditorOutput = this.setEditorOutput.bind(this); this.setConstraintsEditorOutput = this.setConstraintsEditorOutput.bind(this); this.setConstraintEditorFun = this.setConstraintEditorFun.bind(this); @@ -123,34 +124,36 @@ export class SchedulingUnitCreate extends Component { async componentDidMount() { const permission = await AuthUtil.getUserPermissionByModule('scheduleunit_draft'); this.setState({userrole: permission}); - const promises = [ ProjectService.getProjectList(false, 'name,url'), - TaskService.getTaskTemplates(), - ScheduleService.getSchedulingConstraintTemplates(), - ScheduleService.getStationGroup(), - UtilService.getPriorityQueueType(), - TaskService.getTaskFilterDefinition('draft'), - ScheduleService.getStrategyPurpose(), - ScheduleService.getStrategyState(), - ProjectService.getMyRoles(), - ]; - Promise.all(promises).then(async(responses) => { + const promises = [ProjectService.getProjectList(false, 'name,url'), + TaskService.getTaskTemplates(), + ScheduleService.getSchedulingConstraintTemplates(), + ScheduleService.getStationGroup(), + UtilService.getPriorityQueueType(), + TaskService.getTaskFilterDefinition('draft'), + ScheduleService.getStrategyPurpose(), + ScheduleService.getStrategyState(), + ProjectService.getMyRoles(), + ]; + Promise.all(promises).then(async (responses) => { this.projects = responses[0]; this.taskTemplates = responses[1]; - this.constraintTemplates = responses[2]; + this.constraintTemplates = responses[2]; this.stations = responses[3]; this.priorityQueueTypes = responses[4]; this.taskFilters = responses[5]; this.templatePurposes = this.getStrategyFilterOptions(responses[6], 'purpose'); this.templateState = this.getStrategyFilterOptions(responses[7], 'state'); this.myRoles = responses[8]; - const systemRoles = this.myRoles.system_roles.map(role => { return role.toLowerCase()}); + const systemRoles = this.myRoles.system_roles.map(role => { + return role.toLowerCase() + }); const projectRoles = Object.fromEntries( Object.entries(this.myRoles.project_roles).map(([project, roles]) => [project.toLowerCase(), roles]) ); // Users with system_roles other than superuser, operator & support can view the projects for which they have shared_support project_role - if(_.intersection(systemRoles, ['superuser', 'operator', 'support']).length < 1) { - this.projects = _.filter(this.projects, (project)=>{ - return _.includes(projectRoles[project.name.toLowerCase()], 'shared_support') + if (_.intersection(systemRoles, ['superuser', 'operator', 'support']).length < 1) { + this.projects = _.filter(this.projects, (project) => { + return _.includes(projectRoles[project.name.toLowerCase()], 'shared_support') }) } if (this.state.schedulingUnit.project) { @@ -158,27 +161,28 @@ export class SchedulingUnitCreate extends Component { const projectSchedSets = await ScheduleService.getSchedulingSets(`project=${encodeURIComponent(this.state.schedulingUnit.project)}`); let tmpSU = this.state.schedulingUnit; tmpSU['output_pinned'] = selectedProject[0].auto_pin; - this.setState({isLoading: false, + this.setState({ + isLoading: false, schedulingSets: projectSchedSets, - selectedProject:selectedProject, - schedulingUnit:tmpSU + selectedProject: selectedProject, + schedulingUnit: tmpSU }); - } else { + } else { this.setState({isLoading: false}); } this.setObservStrateyFilters(); - }); + }); } - getStrategyFilterOptions(filterValues, filterId) { + getStrategyFilterOptions(filterValues, filterId) { if (filterValues) { let optionList = []; filterValues.forEach(choice => { const tmpVar = {name: choice.value, value: choice.value}; - if(filterId === 'purpose') { + if (filterId === 'purpose') { optionList.push(tmpVar); } - if(filterId === 'state' && tmpVar.value !== 'obsolete') { + if (filterId === 'state' && tmpVar.value !== 'obsolete') { optionList.push(tmpVar); } }); @@ -188,7 +192,7 @@ export class SchedulingUnitCreate extends Component { /** * Function to call on change of project and reload scheduling set dropdown - * @param {string} projectName + * @param {string} projectName */ async changeProject(projectName) { const projectSchedSets = await ScheduleService.getSchedulingSets(`project=${encodeURIComponent(projectName)}`); @@ -197,29 +201,40 @@ export class SchedulingUnitCreate extends Component { schedulingUnit.scheduling_set_id = null; const selectedProject = _.filter(this.projects, {'name': projectName}); schedulingUnit['output_pinned'] = selectedProject[0].auto_pin; - if(!this.state.isDirty) { + if (!this.state.isDirty) { publish('edit-dirty', true); } - this.setState({selectedProject: selectedProject, schedulingUnit: schedulingUnit, schedulingSets: projectSchedSets, validForm: this.validateForm('project'), isDirty: true}); + this.setState({ + selectedProject: selectedProject, + schedulingUnit: schedulingUnit, + schedulingSets: projectSchedSets, + validForm: this.validateForm('project'), + isDirty: true + }); } /** - * Function called when observation strategy template is changed. + * Function called when observation strategy template is changed. * It generates the JSON schema for JSON editor and defult vales for the parameters to be captured - * @param {number} strategyId + * @param {number} strategyId */ - async changeStrategy (strategyId) { + async changeStrategy(strategyId) { const observStrategy = _.cloneDeep(_.find(this.observStrategies, {'id': strategyId})); if (ParserUtility.addStationParameters(observStrategy)) { - await this.setState({observStrategies: this.observStrategies, observStrategy: observStrategy, constraintSchema:null}); + await this.setState({ + observStrategies: this.observStrategies, + observStrategy: observStrategy, + constraintSchema: null + }); } let stationGroups = {}; const tasks = observStrategy.template.tasks; const parameters = observStrategy.template.parameters; let paramsOutput = {}; - let schema = { type: 'object', additionalProperties: false, - properties: {}, definitions:{} - }; + let schema = { + type: 'object', additionalProperties: false, + properties: {}, definitions: {} + }; let observationType = null; let bandPassFilter = null; // Take the constraint template schema as mentioned in the observing strategy @@ -228,50 +243,57 @@ export class SchedulingUnitCreate extends Component { // TODo: This schema reference resolving code has to be moved to common file and needs to rework for (const param of parameters) { // TODO: make parameter handling more generic, instead of task specific. - if (!param.refs[0].startsWith("#/tasks/")) { continue; } + if (!param.refs[0].startsWith("#/tasks/")) { + continue; + } let taskPaths = param.refs[0].split("/"); const taskName = taskPaths[2]; /** * For Short_Description, the task path length will be 4, so added below condition to get short_description details * #/tasks/Combined Observation/short_description - */ - taskPaths = taskPaths.slice((taskPaths.length===4?3:4), taskPaths.length); + */ + taskPaths = taskPaths.slice((taskPaths.length === 4 ? 3 : 4), taskPaths.length); const task = tasks[taskName]; if (task) { if (taskPaths.includes("station_groups")) { stationGroups[param.name] = $strategyRefs.get(param.refs[0]); - } else { - const taskTemplate = _.find(this.taskTemplates, {'name': task.specifications_template.name, - 'version': task.specifications_template.version || 1}); + } else { + let taskTemplate = getTaskTemplateForTask(this.taskTemplates, task); + if (['target observation', 'beamforming observation'].indexOf(taskTemplate.name.toLowerCase()) >= 0) { observationType = taskTemplate.name; } // Get the default Bandpass filter and pass to the editor for frequency calculation from subband list if (taskTemplate.type_value === 'observation' && task.specifications_doc.station_configuration?.filter) { bandPassFilter = task.specifications_doc.station_configuration?.filter; - } else if (taskTemplate.type_value === 'observation' && taskTemplate.ref_resolved_schema.definitions.filter) { + } else if (taskTemplate.type_value === 'observation' && taskTemplate.ref_resolved_schema.definitions.filter) { bandPassFilter = taskTemplate.ref_resolved_schema.definitions.filter.default; } - schema.definitions = {...schema.definitions, ...taskTemplate.ref_resolved_schema.definitions}; + schema.definitions = {...schema.definitions, ...taskTemplate?.ref_resolved_schema.definitions}; taskPaths.reverse(); const paramProp = await ParserUtility.getParamProperty($strategyRefs, taskPaths, taskTemplate.ref_resolved_schema, this.taskFilters); schema.properties[param.name] = _.cloneDeep(paramProp); if (schema.properties[param.name]) { schema.properties[param.name].title = param.name; - try { schema.properties[param.name].default = $strategyRefs.get(param.refs[0]); } catch(err) {} + try { + schema.properties[param.name].default = $strategyRefs.get(param.refs[0]); + } catch (err) { + } paramsOutput[param.name] = schema.properties[param.name].default || ParserUtility.getDefaultParamValue(schema.properties[param.name].type); } } } } - if(!this.state.isDirty) { + if (!this.state.isDirty) { publish('edit-dirty', true); } - this.setState({observStrategy: observStrategy, paramsSchema: _.cloneDeep(schema), constraintParamsOutput: null, - observationType: observationType, stationsCollapsed: false, - paramsOutput: paramsOutput, stationGroups: stationGroups, - bandPassFilter:bandPassFilter, isDirty: true}); + this.setState({ + observStrategy: observStrategy, paramsSchema: _.cloneDeep(schema), constraintParamsOutput: null, + observationType: observationType, stationsCollapsed: false, + paramsOutput: paramsOutput, stationGroups: stationGroups, + bandPassFilter: bandPassFilter, isDirty: true + }); // Function called to clear the JSON Editor fields and reload with new schema if (this.state.editorFunction) { this.state.editorFunction(); @@ -279,22 +301,24 @@ export class SchedulingUnitCreate extends Component { } /** - * This is the callback method to be passed to the JSON editor. + * This is the callback method to be passed to the JSON editor. * JEditor will call this function when there is change in the editor. - * @param {Object} jsonOutput - * @param {Array} errors + * @param {Object} jsonOutput + * @param {Array} errors */ setEditorOutput(jsonOutput, errors) { this.paramsOutput = jsonOutput; this.validEditor = errors.length === 0; this.updateParameters(); - this.setState({ paramsOutput: jsonOutput, - validEditor: errors.length === 0, - validForm: this.validateForm()}); + this.setState({ + paramsOutput: jsonOutput, + validEditor: errors.length === 0, + validForm: this.validateForm() + }); } /** - * Common function validate specification docs + * Common function validate specification * @param {String} template Template url * @param {Object} updatedSpecificationDoc Object which needs to be validated */ @@ -303,13 +327,15 @@ export class SchedulingUnitCreate extends Component { const promises = []; promises.push(ScheduleService.validateSpecificationsDoc(updatedObservStrategy.scheduling_unit_template, updatedObservStrategy.template)) const validation_result = await Promise.all(promises); - if(validation_result.length > 0) { + if (validation_result.length > 0) { let validationMessage = validation_result[0]['message']; - if(validation_result[0]['valid']) { + if (validation_result[0]['valid']) { validationMessage = "Task Parameters specification is valid" } - this.setState({validSpecification: validation_result[0]['valid'], - validSpecificationMessage: validationMessage}); + this.setState({ + validSpecification: validation_result[0]['valid'], + validSpecificationMessage: validationMessage + }); } } } @@ -325,73 +351,83 @@ export class SchedulingUnitCreate extends Component { const promises = []; promises.push(ScheduleService.validateSpecificationsDoc(updatedConstraintParmas.constraint.url, schedulingConstraintsDoc)) const validation_result = await Promise.all(promises); - if(validation_result.length > 0) { + if (validation_result.length > 0) { let validationMessage = validation_result[0]['message']; - if(validation_result[0]['valid']) { + if (validation_result[0]['valid']) { validationMessage = "Constraints specification is valid" } - this.setState({validConstraints: validation_result[0]['valid'], - validConstraintMessage: validationMessage}); + this.setState({ + validConstraints: validation_result[0]['valid'], + validConstraintMessage: validationMessage + }); } } } loadConstraints(properties, parentProps, defaultValues) { - parentProps = parentProps?parentProps: _.cloneDeep(this.defaultConstraints); + parentProps = parentProps ? parentProps : _.cloneDeep(this.defaultConstraints); for (const key in properties) { let propertyValue = properties[key]; - if (propertyValue instanceof Object && key!=="reference_pointing") { - if(defaultValues) { + if (propertyValue instanceof Object && key !== "reference_pointing") { + if (defaultValues) { parentProps[key] = propertyValue; this.loadConstraints(propertyValue, parentProps[key], true); - } - else { + } else { this.loadConstraints(propertyValue, parentProps[key], false); } - } - else { - if(_.includes(['from', 'to'], key)) { - propertyValue = (propertyValue<0?'-':'')+UnitConverter.getSecsToHHmmss(propertyValue); + } else { + if (_.includes(['from', 'to'], key)) { + propertyValue = (propertyValue < 0 ? '-' : '') + UnitConverter.getSecsToHHmmss(propertyValue); } - if(!_.includes(_.keys(parentProps), "angle1") && _.includes(['sun', 'moon', 'jupiter', 'target', 'calibrator'], key) && !defaultValues) { + if (!_.includes(_.keys(parentProps), "angle1") && _.includes(['sun', 'moon', 'jupiter', 'target', 'calibrator'], key) && !defaultValues) { propertyValue = ((propertyValue * 180) / Math.PI).toFixed(2); } - if(_.includes(['between', 'not_between'], key)) { + if (_.includes(['between', 'not_between'], key)) { propertyValue = []; } parentProps[key] = propertyValue; } } - if(defaultValues) { + if (defaultValues) { this.defaultConstraints = parentProps; } else { - this.setState({constraintInitParams : parentProps}); + this.setState({constraintInitParams: parentProps}); } // After converting the sky values, set the value directly in the JSON editor using the function passed from the editor if (this.state.constraintEditorFunction) { - this.state.constraintEditorFunction("setValue", [ parentProps]); + this.state.constraintEditorFunction("setValue", [parentProps]); } } + setConstraintsEditorOutput(jsonOutput, errors) { - let err = [ ...errors ]; + let err = [...errors]; if (jsonOutput.scheduler === 'online' || jsonOutput.scheduler === 'dynamic') { err = err.filter(e => e.path !== 'root.time.at'); } this.constraintParamsOutput = jsonOutput; // When the constraint template is changed, get the default values from the template and overwrite with values from strategy - if(!this.state.constraintParamsOutput) { + if (!this.state.constraintParamsOutput) { this.loadConstraints(_.cloneDeep(this.state.observStrategy.template.scheduling_constraints_doc), _.cloneDeep(jsonOutput), false); } this.constraintValidEditor = err.length === 0; - if ( !this.state.isDirty && this.state.constraintParamsOutput && !_.isEqual(this.state.constraintParamsOutput, jsonOutput) ) { + if (!this.state.isDirty && this.state.constraintParamsOutput && !_.isEqual(this.state.constraintParamsOutput, jsonOutput)) { if (!_.isEmpty(this.state.observStrategy)) { - if(!this.state.isDirty) { + if (!this.state.isDirty) { publish('edit-dirty', true); } - this.setState({ constraintParamsOutput: jsonOutput, constraintValidEditor: err.length === 0, validForm: this.validateForm(), isDirty: true}); + this.setState({ + constraintParamsOutput: jsonOutput, + constraintValidEditor: err.length === 0, + validForm: this.validateForm(), + isDirty: true + }); } - } else { - this.setState({ constraintParamsOutput: jsonOutput, constraintValidEditor: err.length === 0, validForm: this.validateForm()}); + } else { + this.setState({ + constraintParamsOutput: jsonOutput, + constraintValidEditor: err.length === 0, + validForm: this.validateForm() + }); } this.updateConstraintsParams(); } @@ -402,15 +438,15 @@ export class SchedulingUnitCreate extends Component { validateEditor() { return this.validEditor && this.constraintValidEditor ? true : false; } - + /** * Function to set form values to the SU object - * @param {string} key - * @param {object} value + * @param {string} key + * @param {object} value */ async setSchedUnitParams(key, value) { - this.setState({ - touched: { + this.setState({ + touched: { ...this.state.touched, [key]: true } @@ -422,27 +458,26 @@ export class SchedulingUnitCreate extends Component { const match = /(\d{0,1})[^.]*((?:\.\d{0,4})?)/g.exec(value); const val = match[1] + match[2]; if (val === '' || (val >= 0 && val <= 1)) { - schedulingUnit[key] = val === ''? '':Number(val); - } else { + schedulingUnit[key] = val === '' ? '' : Number(val); + } else { schedulingUnit[key] = previousValue; } } else if (key === 'scheduling_set_id') { schedulingUnit[key] = value; - let schedulingUnitList= await ScheduleService.getSchedulingBySet(value, 'observation_strategy_template_id'); + let schedulingUnitList = await ScheduleService.getSchedulingBySet(value, 'observation_strategy_template_id'); let observationIdSet = _.uniq(_.map(schedulingUnitList, 'observation_strategy_template_id')); this.setState({observationIdSet: observationIdSet}); - } - else { + } else { schedulingUnit[key] = value; } - - if ( !this.state.isDirty && !_.isEqual(this.state.schedulingUnit, schedulingUnit) ) { - if(!this.state.isDirty) { + + if (!this.state.isDirty && !_.isEqual(this.state.schedulingUnit, schedulingUnit)) { + if (!this.state.isDirty) { publish('edit-dirty', true); } await this.setState({schedulingUnit: schedulingUnit}); this.setState({validForm: this.validateForm(key), validEditor: this.validateEditor(), isDirty: true}); - } else { + } else { await this.setState({schedulingUnit: schedulingUnit}); this.setState({validForm: this.validateForm(key), validEditor: this.validateEditor()}); } @@ -451,7 +486,7 @@ export class SchedulingUnitCreate extends Component { /** * JEditor's function that to be called when parent wants to trigger change in the JSON Editor - * @param {Function} editorFunction + * @param {Function} editorFunction */ setEditorFunction(editorFunction) { this.setState({editorFunction: editorFunction}); @@ -464,7 +499,7 @@ export class SchedulingUnitCreate extends Component { /** * Validation function to validate the form or field based on the form rules. * If no argument passed for fieldName, validates all fields in the form. - * @param {string} fieldName + * @param {string} fieldName */ validateForm(fieldName) { let validForm = false; @@ -478,13 +513,13 @@ export class SchedulingUnitCreate extends Component { const fieldValue = this.state.schedulingUnit[fieldName]; if (rule.required) { if (!fieldValue) { - errors[fieldName] = rule.message?rule.message:`${fieldName} is required`; - } else { + errors[fieldName] = rule.message ? rule.message : `${fieldName} is required`; + } else { validFields[fieldName] = true; } } } - } else { + } else { errors = {}; validFields = {}; for (const fieldName in this.formRules) { @@ -492,8 +527,8 @@ export class SchedulingUnitCreate extends Component { const fieldValue = this.state.schedulingUnit[fieldName]; if (rule.required) { if (!fieldValue) { - errors[fieldName] = rule.message?rule.message:`${fieldName} is required`; - } else { + errors[fieldName] = rule.message ? rule.message : `${fieldName} is required`; + } else { validFields[fieldName] = true; } } @@ -504,7 +539,7 @@ export class SchedulingUnitCreate extends Component { validForm = true; } const validStations = this.validateStations(); - return validForm && validStations && _.sum(_.values(this.state.missingStnErorsofTask))<=0; + return validForm && validStations && _.sum(_.values(this.state.missingStnErorsofTask)) <= 0; } /** @@ -524,44 +559,44 @@ export class SchedulingUnitCreate extends Component { if (stationsList.length === 0) { validStations = false; break; - } else { + } else { //If predefined station group(Dutch, Remote, etc.,) is/are selected, validate if max_nr_missing is entered - if (this.state.selectedStationsOfTask[stationGroup].length>0) { + if (this.state.selectedStationsOfTask[stationGroup].length > 0) { for (const selectedStations of this.state.selectedStationsOfTask[stationGroup]) { const selectedGroup = this.state.missingStationsofTask[stationGroup][selectedStations] if (selectedGroup) { if (selectedGroup.max_nr_missing === "") { validStations = false; break; - } else { + } else { validStations = true; } - } + } } if (!validStations) { break; - } else { + } else { validStations = true; } } //If custom station group(s) is/are selected, validate if max_nr_missing is entered - if (this.state.customStationsOfTask[stationGroup].length>0) { + if (this.state.customStationsOfTask[stationGroup].length > 0) { for (const customStations of this.state.customStationsOfTask[stationGroup]) { if (customStations.max_nr_missing === "") { validStations = false; break; - } else { + } else { validStations = true; - } + } } if (!validStations) { break; - } else { + } else { validStations = true; } } } - } else { + } else { validStations = false; break; } @@ -570,12 +605,12 @@ export class SchedulingUnitCreate extends Component { } /** - * Function to update task parameters + * Function to update task parameters */ async updateParameters() { let observStrategy = _.cloneDeep(this.state.observStrategy); const $refs = await $RefParser.resolve(observStrategy.template); - observStrategy.template.parameters.forEach(async(param, index) => { + observStrategy.template.parameters.forEach(async (param, index) => { // $refs.set(observStrategy.template.parameters[index]['refs'][0], this.state.paramsOutput[param.name]); let refIndex = 0; for (const ref of param.refs) { @@ -583,27 +618,35 @@ export class SchedulingUnitCreate extends Component { if (ref.includes("station_groups")) { for (const selectedGroup of this.state.selectedStationsOfTask[param.name]) { const stnGroup = this.state.missingStationsofTask[param.name][selectedGroup]; - station_groups.push({stations: stnGroup.stations, max_nr_missing: parseInt(stnGroup.max_nr_missing)}); + station_groups.push({ + stations: stnGroup.stations, + max_nr_missing: parseInt(stnGroup.max_nr_missing) + }); } for (const customGroup of this.state.customStationsOfTask[param.name]) { - station_groups.push({stations: customGroup.stations, max_nr_missing: parseInt(customGroup.max_nr_missing)}); + station_groups.push({ + stations: customGroup.stations, + max_nr_missing: parseInt(customGroup.max_nr_missing) + }); } $refs.set(observStrategy.template.parameters[index]['refs'][refIndex], station_groups); - } else { + } else { $refs.set(observStrategy.template.parameters[index]['refs'][refIndex], this.state.paramsOutput[param.name]); } refIndex++; } }); - if(this.state.validEditor) { + if (this.state.validEditor) { this.validateSpecificationsDoc(observStrategy); - } - else { - this.setState({validSpecification: false, validSpecificationMessage: 'Task Parameters specification is not valid' }) + } else { + this.setState({ + validSpecification: false, + validSpecificationMessage: 'Task Parameters specification is not valid' + }) } this.setState({updatedObservStrategy: observStrategy}); } - + /** * Function to update constraints */ @@ -619,15 +662,15 @@ export class SchedulingUnitCreate extends Component { if (!constStrategy.time.before) { delete constStrategy.time.before; } - if (constStrategy.time[type] && constStrategy.time[type].length>0) { + if (constStrategy.time[type] && constStrategy.time[type].length > 0) { if (typeof constStrategy.time[type] === 'string') { - constStrategy.time[type] = `${moment(constStrategy.time[type]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", { trim: false })}Z`; + constStrategy.time[type] = `${moment(constStrategy.time[type]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", {trim: false})}Z`; } else { constStrategy.time[type].forEach(time => { for (let key in time) { - time[key] = `${moment(time[key] ).format("YYYY-MM-DDTHH:mm:ss.SSSSS", { trim: false })}Z`; + time[key] = `${moment(time[key]).format("YYYY-MM-DDTHH:mm:ss.SSSSS", {trim: false})}Z`; } - }) + }) } } } @@ -636,16 +679,19 @@ export class SchedulingUnitCreate extends Component { constStrategy.sky.transit_offset.to = UnitConversion.getHHmmssToSecs(constStrategy.sky.transit_offset.to); } UnitConversion.degreeToRadians(constStrategy.sky); - const const_strategy = {scheduling_constraints_doc: constStrategy, id: this.state.constraintSchema.id, constraint: this.state.constraintSchema}; - if(this.state.constraintValidEditor) { + const const_strategy = { + scheduling_constraints_doc: constStrategy, + id: this.state.constraintSchema.id, + constraint: this.state.constraintSchema + }; + if (this.state.constraintValidEditor) { this.validateSchedulingConstraints(const_strategy) - } - else { - this.setState({validConstraints: false, validConstraintMessage: 'Constraints specification is not valid' }) + } else { + this.setState({validConstraints: false, validConstraintMessage: 'Constraints specification is not valid'}) } this.setState({updatedConstraintParmas: const_strategy}); } - + /** * Function to create Scheduling unit */ @@ -653,49 +699,61 @@ export class SchedulingUnitCreate extends Component { await this.updateParameters(); let observStrategy = _.cloneDeep(this.state.updatedObservStrategy); let newSpecificationDoc = {} - for ( const parameter of observStrategy.template.parameters) { - for (const ref of parameter.refs) { - let paramPath = ref.replace(new RegExp('#/',"g"), ""); - paramPath = paramPath.replace(new RegExp('/',"g"), '.'); + for (const parameter of observStrategy.template.parameters) { + for (const ref of parameter.refs) { + let paramPath = ref.replace(new RegExp('#/', "g"), ""); + paramPath = paramPath.replace(new RegExp('/', "g"), '.'); const value = _.get(observStrategy.template, paramPath); - if (value !== undefined) { - newSpecificationDoc = _.set(newSpecificationDoc, paramPath, value); + if (value !== undefined) { + newSpecificationDoc = _.set(newSpecificationDoc, paramPath, value); } } } newSpecificationDoc['scheduling_constraints_doc'] = _.cloneDeep(this.state.updatedConstraintParmas).scheduling_constraints_doc; let schedulingUnit = this.state.schedulingUnit; schedulingUnit.observation_strategy_template_id = observStrategy.id; - schedulingUnit.rank = schedulingUnit.rank === undefined || schedulingUnit.rank === '' ? 0: schedulingUnit.rank.toFixed(4); + schedulingUnit.rank = schedulingUnit.rank === undefined || schedulingUnit.rank === '' ? 0 : schedulingUnit.rank.toFixed(4); schedulingUnit = await ScheduleService.saveSchedulingUnit(schedulingUnit, newSpecificationDoc); if (schedulingUnit.isSUUpdated) { if (appGrowl === null) { setAppGrowl(this.growl); } - appGrowl.show({severity: 'success', summary: 'Success', detail: 'Scheduling Unit and Tasks are created successfully'}); - if (this.state.createAnother) { + appGrowl.show({ + severity: 'success', + summary: 'Success', + detail: 'Scheduling Unit and Tasks are created successfully' + }); + if (this.state.createAnother) { this.setState({schedulingUnit: schedulingUnit.data, isDirty: false}); this.reset(); - } else { - this.setState({schedulingUnit: schedulingUnit.data, isDirty: false, redirect: `/schedulingunit/view/draft/${schedulingUnit.data.id}`}); + } else { + this.setState({ + schedulingUnit: schedulingUnit.data, + isDirty: false, + redirect: `/schedulingunit/view/draft/${schedulingUnit.data.id}` + }); } publish('edit-dirty', false); - } else { - this.growl.show({severity: 'error', summary: 'Error Occured', detail: schedulingUnit.message || 'Unable to save Scheduling Unit/Tasks'}); + } else { + this.growl.show({ + severity: 'error', + summary: 'Error Occured', + detail: schedulingUnit.message || 'Unable to save Scheduling Unit/Tasks' + }); } } /** - * warn before cancel the page if any changes detected + * warn before cancel the page if any changes detected */ checkIsDirty() { - if( this.state.isDirty ){ + if (this.state.isDirty) { this.setState({showDialog: true}); } else { this.cancelCreate(); } } - + close() { this.setState({showDialog: false}); } @@ -708,27 +766,27 @@ export class SchedulingUnitCreate extends Component { if (this.state.multiCreateCount > 1) { if (this.state.isDirty) { this.props.history.push(`/schedulingunit`); - } else { - this.props.history.go(this.state.multiCreateCount*-1); + } else { + this.props.history.go(this.state.multiCreateCount * -1); } - } else { - this.props.history.length>1?this.state.isDirty?this.props.history.go(-2):this.props.history.go(-1):this.props.history.push(`/schedulingunit`); + } else { + this.props.history.length > 1 ? this.state.isDirty ? this.props.history.go(-2) : this.props.history.go(-1) : this.props.history.push(`/schedulingunit`); } this.setState({showDialog: false}); } - async setStrategyConstraint(name, version){ - let strategyConstraint = (name && version)? _.find(this.constraintTemplates, {'name': name, 'version': version}):this.constraintTemplates[0]; - let schedulingUnit = { ...this.state.schedulingUnit }; - schedulingUnit.scheduling_constraints_template_id = strategyConstraint?strategyConstraint.id:''; + async setStrategyConstraint(name, version) { + let strategyConstraint = getConstraintTemplate(this.constraintTemplates, name, version) + let schedulingUnit = {...this.state.schedulingUnit}; + schedulingUnit.scheduling_constraints_template_id = strategyConstraint ? strategyConstraint.id : ''; strategyConstraint.ref_resolved_schema.properties.sky.properties.transit_offset.properties.from.default = UnitConversion.getSecsToHHmmssWithSign(strategyConstraint.ref_resolved_schema.properties.sky.properties.transit_offset.properties.from.default); strategyConstraint.ref_resolved_schema.properties.sky.properties.transit_offset.properties.to.default = UnitConversion.getSecsToHHmmssWithSign(strategyConstraint.ref_resolved_schema.properties.sky.properties.transit_offset.properties.to.default); strategyConstraint.ref_resolved_schema.properties.sky.properties.min_distance.properties.sun.propertyOrder = 1; strategyConstraint.ref_resolved_schema.properties.sky.properties.min_distance.properties.moon.propertyOrder = 2; strategyConstraint.ref_resolved_schema.properties.sky.properties.min_distance.properties.jupiter.propertyOrder = 3; - this.setState({ constraintSchema: strategyConstraint, schedulingUnit}); - } - + this.setState({constraintSchema: strategyConstraint, schedulingUnit}); + } + /** * Reset function to be called when user wants to create new SU */ @@ -739,18 +797,18 @@ export class SchedulingUnitCreate extends Component { let multiCreateCount = this.state.multiCreateCount; this.setState({ isDirty: false, - dialog: { header: '', detail: ''}, + dialog: {header: '', detail: ''}, errors: [], - schedulingSets: this.props.match?.params?.project?schedulingSets:[], + schedulingSets: this.props.match?.params?.project ? schedulingSets : [], schedulingUnit: { name: '', description: '', project: selectedProject || null, scheduling_constraints_template_id: this.constraintTemplates[0].id, rank: '', - output_pinned: this.props.match?.params?.project?((_.find(this.projects, {'name': selectedProject}))?.auto_pin):null - }, - projectDisabled: (this.props.match?.params?.project? true:false), + output_pinned: this.props.match?.params?.project ? ((_.find(this.projects, {'name': selectedProject}))?.auto_pin) : null + }, + projectDisabled: (this.props.match?.params?.project ? true : false), observStrategy: {}, paramsSchema: null, paramsOutput: null, @@ -761,13 +819,13 @@ export class SchedulingUnitCreate extends Component { selectedStations: null, selectedStationsOfTask: {}, customStationsOfTask: {}, - touched:false, + touched: false, stationGroups: {}, multiCreateCount: ++multiCreateCount - }); - + }); + this.state.editorFunction(); - + } onUpdateStations = (state, selectedStations, missing_StationFieldsErrors, customSelectedStations, taskName) => { @@ -781,27 +839,42 @@ export class SchedulingUnitCreate extends Component { customStationsOfTask[taskName] = customSelectedStations; missingStationsofTask[taskName] = state; missingStnErorsofTask[taskName] = missing_StationFieldsErrors; - if ( !this.state.isDirty ) { + if (!this.state.isDirty) { if (!_.isEqual(taskStations, selectedStations) || !_.isEqual(taskCustomStations, customSelectedStations)) { - this.setState({missingStationsofTask, selectedStationsOfTask, missingStnErorsofTask, customStationsOfTask }, () => { - this.setState({ validForm: this.validateForm(), isDirty: true }); - if(!this.state.isDirty) { + this.setState({ + missingStationsofTask, + selectedStationsOfTask, + missingStnErorsofTask, + customStationsOfTask + }, () => { + this.setState({validForm: this.validateForm(), isDirty: true}); + if (!this.state.isDirty) { publish('edit-dirty', true); } }); - } else { - this.setState({missingStationsofTask, selectedStationsOfTask, missingStnErorsofTask, customStationsOfTask }, () => { - this.setState({ validForm: this.validateForm() }); + } else { + this.setState({ + missingStationsofTask, + selectedStationsOfTask, + missingStnErorsofTask, + customStationsOfTask + }, () => { + this.setState({validForm: this.validateForm()}); }); } - } else { - this.setState({missingStationsofTask, selectedStationsOfTask, missingStnErorsofTask, customStationsOfTask }, () => { - this.setState({ validForm: this.validateForm() }); + } else { + this.setState({ + missingStationsofTask, + selectedStationsOfTask, + missingStnErorsofTask, + customStationsOfTask + }, () => { + this.setState({validForm: this.validateForm()}); }); } }; - async refreshSchedulingSet(){ + async refreshSchedulingSet() { let tmpSU = _.cloneDeep(this.state.schedulingUnit); const schedulingSets = await ScheduleService.getSchedulingSets(`project=${encodeURIComponent(this.state.schedulingUnit.project)}`); if (this.state.newSet) { @@ -816,14 +889,17 @@ export class SchedulingUnitCreate extends Component { /** * Observation Strategy Template Dropdown option Component to display the description in tooltip - * @param {any} option - * @returns + * @param {any} option + * @returns */ - observOptionTemplate(option) { - if(this.state.observationIdSet) { + observOptionTemplate(option) { + if (this.state.observationIdSet) { return ( - <div title={option.description} style={{display:"flex", fontWeight: _.includes(this.state.observationIdSet, option.id)? 'bold': 'normal'}}> - {`${option.name} (${option.purpose_value}, ${option.state_value}, v${option.version})` } + <div title={option.description} style={{ + display: "flex", + fontWeight: _.includes(this.state.observationIdSet, option.id) ? 'bold' : 'normal' + }}> + {`${option.name} (${option.purpose_value}, ${option.state_value}, v${option.version})`} </div> ); } @@ -831,24 +907,24 @@ export class SchedulingUnitCreate extends Component { /** * Set newly created as current SU Set - * @param {SU Set Name} suSet + * @param {SU Set Name} suSet */ setSUSet(suSet) { this.setState({newSet: suSet}); } async setObservStrateyFilters(selectedFilter, filterId) { - let observStrategyFilters = UtilService.localStore({ type: 'get', key: 'strategyFilterSUCreate' }); - if(_.isEmpty(observStrategyFilters)) { + let observStrategyFilters = UtilService.localStore({type: 'get', key: 'strategyFilterSUCreate'}); + if (_.isEmpty(observStrategyFilters)) { observStrategyFilters = { states: ['active'], purpose: [] } } - if(filterId === 'purpose') { + if (filterId === 'purpose') { observStrategyFilters.purpose = selectedFilter; } - if(filterId === 'state') { + if (filterId === 'state') { observStrategyFilters.states = selectedFilter; } let filterQry = ''; @@ -860,180 +936,236 @@ export class SchedulingUnitCreate extends Component { }) let observStrategies = await ScheduleService.getObservationStrategies(filterQry) this.observStrategies = observStrategies; - UtilService.localStore({ type: 'set', key: 'strategyFilterSUCreate', value: observStrategyFilters}); - this.setState({observStrategyFilters: observStrategyFilters, observStrategies: observStrategies, paramsSchema: null, observStrategy: {}}) + UtilService.localStore({type: 'set', key: 'strategyFilterSUCreate', value: observStrategyFilters}); + this.setState({ + observStrategyFilters: observStrategyFilters, + observStrategies: observStrategies, + paramsSchema: null, + observStrategy: {} + }) } - - /** + + /** * Select/Unselect the create another check box - * @param {*} e + * @param {*} e */ setCreateAnother(e) { this.setState({'createAnother': e.target.checked}) } - + render() { if (this.state.redirect) { - return <Redirect to={ {pathname: this.state.redirect} }></Redirect> + return <Redirect to={{pathname: this.state.redirect}}></Redirect> } const schema = this.state.paramsSchema; const {scheduleunit_draft} = this.state.userrole; let jeditor = null; if (schema) { - jeditor = React.createElement(Jeditor, {title: "Task Parameters", - schema: schema, - initValue: this.state.paramsOutput, - callback: this.setEditorOutput, - parentFunction: this.setEditorFunction, - bandPassFilter: this.state.bandPassFilter, - observationType: this.state.observationType, - theme: 'bootstrap4' - }); + jeditor = React.createElement(Jeditor, { + title: "Task Parameters", + schema: schema, + initValue: this.state.paramsOutput, + callback: this.setEditorOutput, + parentFunction: this.setEditorFunction, + bandPassFilter: this.state.bandPassFilter, + observationType: this.state.observationType, + theme: 'bootstrap4' + }); } return ( <React.Fragment> - <Toast ref={(el) => this.growl = el} /> - <PageHeader location={this.props.location} title={'Scheduling Unit - Add'} - actions={[{icon: 'fa-window-close', title:'Click to close Scheduling Unit creation', - type: 'button', actOn: 'click', props:{ callback: this.checkIsDirty }}]}/> - { this.state.isLoading ? <AppLoader /> : - <> - <div> - <div className="p-fluid"> - <div className="p-field p-grid"> - <label htmlFor="schedUnitName" className="col-lg-2 col-md-2 col-sm-12">Name <span style={{color:'red'}}>*</span></label> - <div className="col-lg-3 col-md-3 col-sm-12" data-testid="namediv"> - <InputText className={(this.state.errors.name && this.state.touched.name) ?'input-error':''} id="name" data-testid="name" - tooltip="Enter name of the Scheduling Unit" tooltipOptions={this.tooltipOptions} maxLength="128" - ref={input => {this.nameInput = input;}} + <Toast ref={(el) => this.growl = el}/> + <PageHeader location={this.props.location} title={'Scheduling Unit - Add'} + actions={[{ + icon: 'fa-window-close', title: 'Click to close Scheduling Unit creation', + type: 'button', actOn: 'click', props: {callback: this.checkIsDirty} + }]}/> + {this.state.isLoading ? <AppLoader/> : + <> + <div> + <div className="p-fluid"> + <div className="p-field p-grid"> + <label htmlFor="schedUnitName" className="col-lg-2 col-md-2 col-sm-12">Name <span + style={{color: 'red'}}>*</span></label> + <div className="col-lg-3 col-md-3 col-sm-12" data-testid="namediv"> + <InputText + className={(this.state.errors.name && this.state.touched.name) ? 'input-error' : ''} + id="name" data-testid="name" + tooltip="Enter name of the Scheduling Unit" + tooltipOptions={this.tooltipOptions} maxLength="128" + ref={input => { + this.nameInput = input; + }} value={this.state.schedulingUnit.name} autoFocus onChange={(e) => this.setSchedUnitParams('name', e.target.value)} onBlur={(e) => this.setSchedUnitParams('name', e.target.value)}/> - <label className={(this.state.errors.name && this.state.touched.name)?"error":"info"}> - {this.state.errors.name && this.state.touched.name ? this.state.errors.name : "Max 128 characters"} - </label> - </div> - <div className="col-lg-1 col-md-1 col-sm-12"></div> - <label htmlFor="description" className="col-lg-2 col-md-2 col-sm-12">Description <span style={{color:'red'}}>*</span></label> - <div className="col-lg-3 col-md-3 col-sm-12"> - <InputTextarea className={(this.state.errors.description && this.state.touched.description) ?'input-error':''} rows={3} cols={30} - tooltip="Longer description of the scheduling unit" tooltipOptions={this.tooltipOptions} maxLength="128" - data-testid="description" value={this.state.schedulingUnit.description} + <label + className={(this.state.errors.name && this.state.touched.name) ? "error" : "info"}> + {this.state.errors.name && this.state.touched.name ? this.state.errors.name : "Max 128 characters"} + </label> + </div> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <label htmlFor="description" + className="col-lg-2 col-md-2 col-sm-12">Description <span + style={{color: 'red'}}>*</span></label> + <div className="col-lg-3 col-md-3 col-sm-12"> + <InputTextarea + className={(this.state.errors.description && this.state.touched.description) ? 'input-error' : ''} + rows={3} cols={30} + tooltip="Longer description of the scheduling unit" + tooltipOptions={this.tooltipOptions} maxLength="128" + data-testid="description" value={this.state.schedulingUnit.description} onChange={(e) => this.setSchedUnitParams('description', e.target.value)} onBlur={(e) => this.setSchedUnitParams('description', e.target.value)}/> - <label className={(this.state.errors.description && this.state.touched.description) ?"error":"info"}> - {(this.state.errors.description && this.state.touched.description) ? this.state.errors.description : "Max 255 characters"} - </label> - </div> - </div> - <div className="p-field p-grid"> - <label htmlFor="project" className="col-lg-2 col-md-2 col-sm-12">Project <span style={{color:'red'}}>*</span></label> - <div className="col-lg-3 col-md-3 col-sm-12" data-testid="projectdiv" > - <Dropdown inputId="project" optionLabel="name" optionValue="name" data-testid="project" testid="project" - tooltip="Project" tooltipOptions={this.tooltipOptions} className="projectDropdown" - value={this.state.schedulingUnit.project} disabled={this.state.projectDisabled} - options={this.projects} - onChange={(e) => {this.changeProject(e.value)}} - placeholder="Select Project" /> - <label className={(this.state.errors.project && this.state.touched.project) ?"error":"info"}> - {(this.state.errors.project && this.state.touched.project) ? this.state.errors.project : "Select Project to get Scheduling Sets"} - </label> - </div> - <div className="col-lg-1 col-md-1 col-sm-12"></div> - <label htmlFor="schedSet" className="col-lg-2 col-md-2 col-sm-12">Scheduling Set <span style={{color:'red'}}>*</span></label> - <div className="col-lg-3 col-md-3 col-sm-10"> - <Dropdown data-testid="schedSet" id="schedSet" optionLabel="name" optionValue="id" - tooltip="Scheduling set of the project" tooltipOptions={this.tooltipOptions} - value={this.state.schedulingUnit.scheduling_set_id} - options={this.state.schedulingSets} - onChange={(e) => {this.setSchedUnitParams('scheduling_set_id',e.value)}} - placeholder="Select Scheduling Set" /> - <label className={(this.state.errors.scheduling_set_id && this.state.touched.scheduling_set_id) ?"error":"info"}> - {(this.state.errors.scheduling_set_id && this.state.touched.scheduling_set_id) ? this.state.errors.scheduling_set_id : "Scheduling Set of the Project"} - </label> - </div> - <div className="col-lg-1 col-md-1 col-sm-2"> - <Button label="" className="p-button-primary" icon="pi pi-plus" - onClick={() => {this.setState({showAddSet: true})}} - tooltip="Add new Scheduling Set" - style={{marginLeft: '-10px'}} - disabled={this.state.schedulingUnit.project !== null && scheduleunit_draft.scheduling_set? false : true }/> + <label + className={(this.state.errors.description && this.state.touched.description) ? "error" : "info"}> + {(this.state.errors.description && this.state.touched.description) ? this.state.errors.description : "Max 255 characters"} + </label> + </div> + </div> + <div className="p-field p-grid"> + <label htmlFor="project" className="col-lg-2 col-md-2 col-sm-12">Project <span + style={{color: 'red'}}>*</span></label> + <div className="col-lg-3 col-md-3 col-sm-12" data-testid="projectdiv"> + <Dropdown inputId="project" optionLabel="name" optionValue="name" + data-testid="project" testid="project" + tooltip="Project" tooltipOptions={this.tooltipOptions} + className="projectDropdown" + value={this.state.schedulingUnit.project} + disabled={this.state.projectDisabled} + options={this.projects} + onChange={(e) => { + this.changeProject(e.value) + }} + placeholder="Select Project"/> + <label + className={(this.state.errors.project && this.state.touched.project) ? "error" : "info"}> + {(this.state.errors.project && this.state.touched.project) ? this.state.errors.project : "Select Project to get Scheduling Sets"} + </label> + </div> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <label htmlFor="schedSet" className="col-lg-2 col-md-2 col-sm-12">Scheduling + Set <span style={{color: 'red'}}>*</span></label> + <div className="col-lg-3 col-md-3 col-sm-10"> + <Dropdown data-testid="schedSet" id="schedSet" optionLabel="name" + optionValue="id" + tooltip="Scheduling set of the project" + tooltipOptions={this.tooltipOptions} + value={this.state.schedulingUnit.scheduling_set_id} + options={this.state.schedulingSets} + onChange={(e) => { + this.setSchedUnitParams('scheduling_set_id', e.value) + }} + placeholder="Select Scheduling Set"/> + <label + className={(this.state.errors.scheduling_set_id && this.state.touched.scheduling_set_id) ? "error" : "info"}> + {(this.state.errors.scheduling_set_id && this.state.touched.scheduling_set_id) ? this.state.errors.scheduling_set_id : "Scheduling Set of the Project"} + </label> + </div> + <div className="col-lg-1 col-md-1 col-sm-2"> + <Button label="" className="p-button-primary" icon="pi pi-plus" + onClick={() => { + this.setState({showAddSet: true}) + }} + tooltip="Add new Scheduling Set" + style={{marginLeft: '-10px'}} + disabled={!(this.state.schedulingUnit.project !== null && scheduleunit_draft?.scheduling_set !== undefined)}/> - - </div> - </div> - <div className="p-field p-grid"> - <label htmlFor="rank" className="col-lg-2 col-md-2 col-sm-12">Rank</label> - <div className="col-lg-3 col-md-3 col-sm-12" data-testid="rank" > - <input type="number" - data-for="reacttooltip" - data-iscapture="true" - data-tip="Priority of this scheduling unit w.r.t. other scheduling units within the same queue and project.. Min-0.0000, Max-1.0000" - inputid="proj-rank" name="rank" data-testid="rank" - className="p-inputtext p-component p-filled" - value={this.state.schedulingUnit.rank} - step="0.0001" - onChange={(e)=> this.setSchedUnitParams('rank', e.target.value)}/> - </div> - <div className="col-lg-1 col-md-1 col-sm-12"></div> - <label htmlFor="priority_queue" className="col-lg-2 col-md-2 col-sm-12">Priority Queue</label> - <div className="col-lg-3 col-md-3 col-sm-10"> - <Dropdown data-testid="priority_queue" id="priority_queue" optionLabel="value" optionValue="value" - tooltip="Priority queue of this scheduling unit. Queues provide a strict ordering between scheduling units." - tooltipOptions={this.tooltipOptions} - value={this.state.schedulingUnit.priority_queue} - options={this.priorityQueueTypes} - onChange={(e) => {this.setSchedUnitParams('priority_queue',e.value)}} - placeholder="Select Priority Queue" /> - - </div> - </div> - <div className="p-field p-grid"> - <label htmlFor="observStrategy" className="col-lg-2 col-md-2 col-sm-12">Observation Strategy <span style={{color:'red'}}>*</span></label> - <div className="col-lg-3 col-md-3 col-sm-12" > - <div className='p-field p-grid'> - <MultiSelect inputId="observStrategyPurpose" optionLabel="name" optionValue="value" className="observ_strategy_purpose" - tooltip="Filter Observation Strategy by Purpose" tooltipOptions={this.tooltipOptions} - value={this.state.observStrategyFilters.purpose} - options={this.templatePurposes} - maxSelectedLabels="1" - selectedItemsLabel="{0} Selected" - onChange={(e) => {this.setObservStrateyFilters(e.value, 'purpose')}} - placeholder="Purpose" /> - {/* <div className="col-lg-1 col-md-1 col-sm-12"></div> */} - <MultiSelect inputId="observStrategyState" optionLabel="name" optionValue="value" className="observ_strategy_state" - tooltip="Filter Observation Strategy by State" tooltipOptions={this.tooltipOptions} - value={this.state.observStrategyFilters.states} - options={this.templateState} - onChange={(e) => {this.setObservStrateyFilters(e.value, 'state')}} - maxSelectedLabels="1" - selectedItemsLabel="{0} Selected" - placeholder= "State" /> + + </div> </div> - <div> - <Dropdown inputId="observStrategy" optionLabel="uniqueId" optionValue="id" style={{width: "100%"}} data-testid="observStrategy" - tooltip="Observation Strategy Template to be used to create the Scheduling Unit and Tasks. Strategies already used are highlighted in bold" tooltipOptions={this.tooltipOptions} - value={this.state.observStrategy.id} - options={this.state.observStrategies} filter - itemTemplate={this.observOptionTemplate} - onChange={(e) => {this.changeStrategy(e.value)}} - placeholder="Select Strategy" /> - <label className="info"> - { this.state.observStrategy ? this.state.observStrategy.description : ""} - </label> + <div className="p-field p-grid"> + <label htmlFor="rank" className="col-lg-2 col-md-2 col-sm-12">Rank</label> + <div className="col-lg-3 col-md-3 col-sm-12" data-testid="rank"> + <input type="number" + data-for="reacttooltip" + data-iscapture="true" + data-tip="Priority of this scheduling unit w.r.t. other scheduling units within the same queue and project.. Min-0.0000, Max-1.0000" + inputid="proj-rank" name="rank" data-testid="rank" + className="p-inputtext p-component p-filled" + value={this.state.schedulingUnit.rank} + step="0.0001" + onChange={(e) => this.setSchedUnitParams('rank', e.target.value)}/> + </div> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <label htmlFor="priority_queue" className="col-lg-2 col-md-2 col-sm-12">Priority + Queue</label> + <div className="col-lg-3 col-md-3 col-sm-10"> + <Dropdown data-testid="priority_queue" id="priority_queue" optionLabel="value" + optionValue="value" + tooltip="Priority queue of this scheduling unit. Queues provide a strict ordering between scheduling units." + tooltipOptions={this.tooltipOptions} + value={this.state.schedulingUnit.priority_queue} + options={this.priorityQueueTypes} + onChange={(e) => { + this.setSchedUnitParams('priority_queue', e.value) + }} + placeholder="Select Priority Queue"/> + + </div> </div> - </div> - <div className="col-lg-1 col-md-1 col-sm-12"></div> - <label htmlFor="autodeletion" className="col-lg-2 col-md-2 col-sm-12">Pin Data</label> - <div className="col-lg-3 col-md-3 col-sm-12" data-testid="autodeletion" > - <Checkbox inputId="trigger" role="trigger" - tooltip="Do not delete data automatically after successful ingest" - tooltipOptions={this.tooltipOptions} - checked={this.state.schedulingUnit.output_pinned} - onChange={(e) => this.setSchedUnitParams('output_pinned', e.target.checked)} - ></Checkbox> - </div> - {/* + <div className="p-field p-grid"> + <label htmlFor="observStrategy" className="col-lg-2 col-md-2 col-sm-12">Observation + Strategy <span style={{color: 'red'}}>*</span></label> + <div className="col-lg-3 col-md-3 col-sm-12"> + <div className='p-field p-grid'> + <MultiSelect inputId="observStrategyPurpose" optionLabel="name" + optionValue="value" className="observ_strategy_purpose" + tooltip="Filter Observation Strategy by Purpose" + tooltipOptions={this.tooltipOptions} + value={this.state.observStrategyFilters.purpose} + options={this.templatePurposes} + maxSelectedLabels="1" + selectedItemsLabel="{0} Selected" + data-testid="strategy-purpose" + onChange={(e) => { + this.setObservStrateyFilters(e.value, 'purpose') + }} + placeholder="Purpose"/> + {/* <div className="col-lg-1 col-md-1 col-sm-12"></div> */} + <MultiSelect inputId="observStrategyState" optionLabel="name" + optionValue="value" className="observ_strategy_state" + tooltip="Filter Observation Strategy by State" + tooltipOptions={this.tooltipOptions} + value={this.state.observStrategyFilters.states} + options={this.templateState} + onChange={(e) => { + this.setObservStrateyFilters(e.value, 'state') + }} + maxSelectedLabels="1" + selectedItemsLabel="{0} Selected" + data-testid="strategy-state" + placeholder="State"/> + </div> + <div> + <Dropdown inputId="observStrategy" optionLabel="uniqueId" optionValue="id" + style={{width: "100%"}} data-testid="observStrategy" + tooltip="Observation Strategy Template to be used to create the Scheduling Unit and Tasks. Strategies already used are highlighted in bold" + tooltipOptions={this.tooltipOptions} + value={this.state.observStrategy.id} + options={this.state.observStrategies} filter + itemTemplate={this.observOptionTemplate} + onChange={(e) => { + this.changeStrategy(e.value) + }} + placeholder="Select Strategy"/> + <label className="info"> + {this.state.observStrategy ? this.state.observStrategy.description : ""} + </label> + </div> + </div> + <div className="col-lg-1 col-md-1 col-sm-12"></div> + <label htmlFor="autodeletion" className="col-lg-2 col-md-2 col-sm-12">Pin + Data</label> + <div className="col-lg-3 col-md-3 col-sm-12" data-testid="autodeletion"> + <Checkbox inputId="trigger" role="trigger" + tooltip="Do not delete data automatically after successful ingest" + tooltipOptions={this.tooltipOptions} + checked={this.state.schedulingUnit.output_pinned} + onChange={(e) => this.setSchedUnitParams('output_pinned', e.target.checked)} + ></Checkbox> + </div> + {/* <label htmlFor="schedulingConstraintsTemp" className="col-lg-2 col-md-2 col-sm-12 hide">Scheduling Constraints Template</label> <div className="col-lg-3 col-md-3 col-sm-12 hide" data-testid="schedulingConstraintsTemp"> <Dropdown inputId="schedulingConstraintsTemp" optionLabel="name" optionValue="id" @@ -1046,89 +1178,107 @@ export class SchedulingUnitCreate extends Component { </div> */} - </div> - {_.keys(this.state.stationGroups).length >0 && - <div className='grouping'> - <fieldset> - <h3 className="card-title level-1 je-object__title" style={{display: "inline-block"}}> - <button type="button" title={this.state.stationsCollapsed?"Expand":"Collapse"} - className="btn btn-secondary btn-sm json-editor-btn-collapse json-editor-btntype-toggle" - onClick={e => this.setState({stationsCollapsed: !this.state.stationsCollapsed})}> - <i className={this.state.stationsCollapsed?"fas fa-caret-right":"fas fa-caret-down"}></i> - </button> - <label>Station specification</label> - </h3> - {!this.state.stationsCollapsed && - <> - { _.keys(this.state.stationGroups).map((stnGroup,index) => { - return <Stations - taskName={stnGroup} - stationGroup={this.state.stationGroups[stnGroup]} - onUpdateStations={this.onUpdateStations.bind(this)} - height={'auto'} - /> - })} - </> + </div> + {_.keys(this.state.stationGroups).length > 0 && + <div className='grouping'> + <fieldset> + <h3 className="card-title level-1 je-object__title" + style={{display: "inline-block"}}> + <button type="button" + title={this.state.stationsCollapsed ? "Expand" : "Collapse"} + className="btn btn-secondary btn-sm json-editor-btn-collapse json-editor-btntype-toggle" + onClick={e => this.setState({stationsCollapsed: !this.state.stationsCollapsed})}> + <i className={this.state.stationsCollapsed ? "fas fa-caret-right" : "fas fa-caret-down"}></i> + </button> + <label>Station specification</label> + </h3> + {!this.state.stationsCollapsed && + <> + {_.keys(this.state.stationGroups).map((stnGroup, index) => { + return <Stations + taskName={stnGroup} + stationGroup={this.state.stationGroups[stnGroup]} + onUpdateStations={this.onUpdateStations.bind(this)} + height={'auto'} + key={stnGroup} + /> + })} + </> + } + </fieldset> + </div> } - </fieldset> - </div> - } - </div> - {this.state.constraintSchema && <div className="p-fluid"> - <fieldset className="border-style"> - <div className="p-col-12"> - <SchedulingConstraint - constraintTemplate={this.state.constraintSchema} - // initValue={this.state.constraintInitParams} // No need to pass this value as the values are set with callback - callback={this.setConstraintsEditorOutput} parentFunction={this.setConstraintEditorFun}/> - </div> - </fieldset> - <div className="p-col-12" style={{marginLeft: '0.4em', marginTop: '-10px', paddingTop:'0px'}}> - <label className={this.state.validConstraints ? "info" : "error"}> - {this.state.validConstraintMessage ? this.state.validConstraintMessage : ""} - </label> </div> - </div>} - <div></div> - {this.state.paramsSchema && - <div className="p-fluid"> - <fieldset className="border-style"> - <div style={{marginLeft: '-0.5em'}}> + {this.state.constraintSchema && <div className="p-fluid"> + <fieldset className="border-style"> <div className="p-col-12"> - {jeditor} + <SchedulingConstraint + constraintTemplate={this.state.constraintSchema} + // initValue={this.state.constraintInitParams} // No need to pass this value as the values are set with callback + callback={this.setConstraintsEditorOutput} + parentFunction={this.setConstraintEditorFun}/> </div> + </fieldset> + <div className="p-col-12" + style={{marginLeft: '0.4em', marginTop: '-10px', paddingTop: '0px'}}> + <label className={this.state.validConstraints ? "info" : "error"}> + {this.state.validConstraintMessage ? this.state.validConstraintMessage : ""} + </label> </div> - </fieldset> - <div className="p-col-12" style={{marginLeft: '0.4em', marginTop: '-10px', paddingTop:'0px', marginBottom: "2em"}}> - <label className={this.state.validSpecification ? "info" : "error"}> - {this.state.validSpecificationMessage ? this.state.validSpecificationMessage : ""} - </label> - </div> + </div>} + <div></div> + {this.state.paramsSchema && + <div className="p-fluid"> + <fieldset className="border-style"> + <div style={{marginLeft: '-0.5em'}}> + <div className="p-col-12"> + {jeditor} + </div> + </div> + </fieldset> + <div className="p-col-12" style={{ + marginLeft: '0.4em', + marginTop: '-10px', + paddingTop: '0px', + marginBottom: "2em" + }}> + <label className={this.state.validSpecification ? "info" : "error"}> + {this.state.validSpecificationMessage ? this.state.validSpecificationMessage : ""} + </label> + </div> + </div> + } </div> - } - </div> - <div className="footer-long-div p-breadcrumb" style={{marginLeft: '2em !important'}} > - <FormActionbar createAnotherCallBack={this.setCreateAnother} createAnother={this.state.createAnother} - tooltip="Select checkbox to create another Scheduling Unit after saving this Scheduling Unit" - submitTitle={(!this.state.constraintValidEditor || !this.state.validEditor || !this.state.validForm || !this.state.validConstraints || !this.state.validSpecification)?"":"Save Scheduling Unit"} - onSubmit={this.saveSchedulingUnit} - enableSaveBtn={!this.state.constraintValidEditor || !this.state.validEditor || !this.state.validForm || !this.state.validConstraints || !this.state.validSpecification} - onCancel={this.checkIsDirty} /> - </div> - <ReactTooltip id="reacttooltip" place={'left'} type={'dark'} effect={'solid'} multiline={true} /> - </> + <div className="footer-long-div p-breadcrumb" style={{marginLeft: '2em !important'}}> + <FormActionbar createAnotherCallBack={this.setCreateAnother} + createAnother={this.state.createAnother} + tooltip="Select checkbox to create another Scheduling Unit after saving this Scheduling Unit" + submitTitle={(!this.state.constraintValidEditor || !this.state.validEditor || !this.state.validForm || !this.state.validConstraints || !this.state.validSpecification) ? "" : "Save Scheduling Unit"} + onSubmit={this.saveSchedulingUnit} + enableSaveBtn={!this.state.constraintValidEditor || !this.state.validEditor || !this.state.validForm || !this.state.validConstraints || !this.state.validSpecification} + onCancel={this.checkIsDirty}/> + </div> + <ReactTooltip id="reacttooltip" place={'left'} type={'dark'} effect={'solid'} multiline={true}/> + </> } - + {/* Dialog component to show messages and get input */} - <div className="p-grid" data-testid="confirm_dialog"> - {this.state.showAddSet && - <SchedulingSet callbackFunction={this.setSUSet} project={this.state.selectedProject[0]} onCancel={this.refreshSchedulingSet} /> + <div className="p-grid" data-testid="confirm_dialog"> + {this.state.showAddSet && + <SchedulingSet callbackFunction={this.setSUSet} project={this.state.selectedProject[0]} + onCancel={this.refreshSchedulingSet}/> } <CustomDialog type="confirmation" visible={this.state.showDialog} width="40vw" - header={'Add Scheduling Unit'} message={'Do you want to discard your changes? A new Scheduling Unit will not be created'} - content={''} onClose={this.close} actions={ [ {id:"yes", title: 'Discard', callback: this.cancelCreate, className:'act-btn-dispose'}, - {id:"no", title: 'Cancel', className:'act-btn-cancel', callback: this.close} ]} - > + header={'Add Scheduling Unit'} + message={'Do you want to discard your changes? A new Scheduling Unit will not be created'} + content={''} onClose={this.close} actions={[{ + id: "yes", + title: 'Discard', + callback: this.cancelCreate, + className: 'act-btn-dispose' + }, + {id: "no", title: 'Cancel', className: 'act-btn-cancel', callback: this.close}]} + > </CustomDialog> </div> </React.Fragment> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.test.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.test.js index 6f1a5fed4e1a857e1cb2dd51c02a4a7758428d03..8e0ad99a6c98287679a1ae07ec497cff06a1e7b5 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.test.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.test.js @@ -1,1566 +1,221 @@ import React from 'react'; -import { BrowserRouter as Router } from 'react-router-dom'; -import { act } from "react-dom/test-utils"; -import { render, screen, cleanup, fireEvent, waitForElement } from '@testing-library/react'; +import {BrowserRouter as Router} from 'react-router-dom'; +import {act} from "react-dom/test-utils"; +import {cleanup, fireEvent, render, screen} from '@testing-library/react'; import '@testing-library/jest-dom/extend-expect'; -import '@testing-library/jest-dom'; -import mockConsole from "jest-mock-console"; -// import renderer from 'react-test-renderer'; -import _ from 'lodash'; +import '@testing-library/jest-dom'; import {SchedulingUnitCreate} from './create'; import ScheduleService from '../../services/schedule.service'; import UtilService from '../../services/util.service'; import ProjectService from '../../services/project.service'; -import TaskService from '../../services/task.service'; -import AuthService from '../../services/auth.service'; - -import AuthUtil from '../../utils/auth.util'; +import TaskService from '../../services/task.service'; import SUServiceMock from '../../__mocks__/scheduleunit.service.data'; import ProjectServiceMock from '../../__mocks__/project.service.data'; import TaskServiceMock from '../../__mocks__/task.service.data'; import UtilServiceMock from '../../__mocks__/util.service.data'; -import AuthServiceMock from '../../__mocks__/auth.service.data'; - -let projectListSpy, scheduleSetListSpy, observStrategiesSpy, taskTemplatesSpy, saveSUFromStrategySpy, updateSUSpy, createSUTasksSpy, -utilSpy, utcSpy, taskFilterDefSpy, suConstraintTemplateSpy, suFilterDefSpy, allTaskRelationSpy, stationGroupSpy, stationSpy, -userPermissionSpy, authPermissionSpy, scheduleSetByIdSpy, templatePurposesSpy, templateStatesSpy, validatorSpy, rolesSpy; +import {clickItem, setMultiSelectValue, removeReact18ConsoleErrors} from "../../utils/test.helper"; -jest.setTimeout(1200000); -let restoreConsole; +let projectListSpy, observStrategiesSpy, taskTemplatesSpy, utilSpy, taskFilterDefSpy, suConstraintTemplateSpy, + stationGroupSpy, templatePurposesSpy, templateStatesSpy, rolesSpy, scheduleSetByIdSpy; -beforeEach(() => { - restoreConsole = mockConsole(); - setMockSpy(); -}); +jest.setTimeout(10000); +removeReact18ConsoleErrors(); -afterEach(() => { - restoreConsole(); - // cleanup on exiting - clearMockSpy(); - cleanup(); -}); -/** - * To set mock spy for Services that have API calls to the back end to fetch data - */ -const setMockSpy = async () => { - projectListSpy = jest.spyOn(ProjectService, 'getProjectList'); - projectListSpy.mockImplementation(() => { return Promise.resolve(ProjectServiceMock.projectList)}); - scheduleSetListSpy = jest.spyOn(ScheduleService, 'getSchedulingSets'); - scheduleSetListSpy.mockImplementation((filter) => { - let allSUSets = SUServiceMock.scheduleSetList; - let project = filter.replace("project=",""); - return Promise.resolve(_.filter(allSUSets, {project_id: project})); +function createStandardPageMocks() { + projectListSpy = jest.spyOn(ProjectService, 'getProjectList').mockImplementation(() => { + return Promise.resolve(ProjectServiceMock.projectList) }); - observStrategiesSpy = jest.spyOn(ScheduleService, 'getObservationStrategies'); - // observStrategiesSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.observStrategies)}); - observStrategiesSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.getObservStrategies())}); - taskTemplatesSpy = jest.spyOn(TaskService, 'getTaskTemplates'); - // taskTemplatesSpy.mockImplementation(() => { return Promise.resolve(TaskServiceMock.taskTemplates)}); - taskTemplatesSpy.mockImplementation(() => { return Promise.resolve(TaskServiceMock.getTaskTemplates())}); - saveSUFromStrategySpy = jest.spyOn(ScheduleService, 'saveSchedulingUnit'); - saveSUFromStrategySpy.mockImplementation((observStrategy, schedulingUnit) => { - console.log(observStrategy);console.log(schedulingUnit); - let schedulingUnitDraft = SUServiceMock.getSchedulingUnitFromObservStrategy(observStrategy, schedulingUnit); - schedulingUnitDraft["isSUUpdated"] = true; - return Promise.resolve(schedulingUnitDraft); + observStrategiesSpy = jest.spyOn(ScheduleService, 'getObservationStrategies').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getObservStrategies()) }); - updateSUSpy = jest.spyOn(ScheduleService, 'updateSchedulingUnitDraft'); - updateSUSpy.mockImplementation((schedulingUnit) => { - return Promise.resolve(SUServiceMock.getSchedulingUnitFromObservStrategy()); + taskTemplatesSpy = jest.spyOn(TaskService, 'getTaskTemplates').mockImplementation(() => { + return Promise.resolve(TaskServiceMock.getTaskTemplates()) }); - // createSUTasksSpy = jest.spyOn(ScheduleService, 'saveSchedulingUnit'); - // createSUTasksSpy.mockImplementation((schedulingUnit) => { - // return Promise.resolve(SUServiceMock.getSchedulingUnitFromObservStrategy()); - // }); - utilSpy = jest.spyOn(UtilService, 'getPriorityQueueType'); - utilSpy.mockImplementation(() => {return Promise.resolve(UtilServiceMock.getPriorityQueueType)}) - - taskFilterDefSpy = jest.spyOn(TaskService, 'getTaskFilterDefinition'); - taskFilterDefSpy.mockImplementation(() => { return Promise.resolve(TaskServiceMock.getTaskFilterDefinition)}); - - templatePurposesSpy = jest.spyOn(ScheduleService, 'getStrategyPurpose'); - templatePurposesSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.templatePurposes)}); - - templateStatesSpy = jest.spyOn(ScheduleService, 'getStrategyState'); - templateStatesSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.templateStates)}); - - suConstraintTemplateSpy = jest.spyOn(ScheduleService, 'getSchedulingConstraintTemplates'); - suConstraintTemplateSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.getSUCTemplates()); }); - - utcSpy = jest.spyOn(UtilService, 'getUTC'); - utcSpy.mockImplementation(() => { return Promise.resolve(UtilServiceMock.getUTC)}); - - suFilterDefSpy = jest.spyOn(ScheduleService, 'getSchedulingUnitFilterDefinition'); - suFilterDefSpy.mockImplementation((type) => { return Promise.resolve(SUServiceMock.getSchedulingUnitFilterDefinition)}); - - allTaskRelationSpy = jest.spyOn(ScheduleService, 'getAllTaskRelation'); - allTaskRelationSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.getAllTaskRelation)}); - - stationGroupSpy = jest.spyOn(ScheduleService, 'getStationGroup'); - stationGroupSpy.mockImplementation(() => { return Promise.resolve(SUServiceMock.getStationGroup)}); - - stationSpy = jest.spyOn(ScheduleService, 'getStations'); - stationSpy.mockImplementation((group) => { return Promise.resolve(SUServiceMock.getStations)}); - - userPermissionSpy = jest.spyOn(AuthUtil, 'getUserPermissionByModule'); - userPermissionSpy.mockImplementation((model) => { return Promise.resolve(AuthServiceMock.scheduleunit_draft)}); - - authPermissionSpy = jest.spyOn(AuthService, 'getAccessControlMethod'); - authPermissionSpy.mockImplementation((module, id) => { - return Promise.resolve(AuthServiceMock.scheduleunit_draft) + suConstraintTemplateSpy = jest.spyOn(ScheduleService, 'getSchedulingConstraintTemplates').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getSUCTemplates()); }); - - scheduleSetByIdSpy = jest.spyOn(ScheduleService, 'getSchedulingBySet'); - scheduleSetByIdSpy.mockImplementation((value) => { return Promise.resolve(SUServiceMock.getSchedulingBySet())}); - validatorSpy = jest.spyOn(ScheduleService, 'validateSpecificationsDoc'); - validatorSpy.mockImplementation(() =>{ - return Promise.resolve({valid: true, message: "validation_result['message']"}) + rolesSpy = jest.spyOn(ProjectService, 'getMyRoles').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getMyRoles) + }); + stationGroupSpy = jest.spyOn(ScheduleService, 'getStationGroup').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getStationGroup) + }); + utilSpy = jest.spyOn(UtilService, 'getPriorityQueueType').mockImplementation(() => { + return Promise.resolve(UtilServiceMock.getPriorityQueueType) + }) + taskFilterDefSpy = jest.spyOn(TaskService, 'getTaskFilterDefinition').mockImplementation(() => { + return Promise.resolve(TaskServiceMock.getTaskFilterDefinition) + }); + templatePurposesSpy = jest.spyOn(ScheduleService, 'getStrategyPurpose').mockImplementation(() => { + return Promise.resolve(SUServiceMock.templatePurposes) + }); + templateStatesSpy = jest.spyOn(ScheduleService, 'getStrategyState').mockImplementation(() => { + return Promise.resolve(SUServiceMock.templateStates) + }); + scheduleSetByIdSpy = jest.spyOn(ScheduleService, 'getSchedulingBySet').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getSchedulingBySet()) }); - rolesSpy = jest.spyOn(ProjectService, 'getMyRoles'); - rolesSpy.mockImplementation((model) => { return Promise.resolve(SUServiceMock.getMyRoles)}); -} - -const clearMockSpy = () => { - projectListSpy.mockRestore(); - scheduleSetListSpy.mockRestore(); - observStrategiesSpy.mockRestore(); - taskTemplatesSpy.mockRestore(); - saveSUFromStrategySpy.mockRestore(); - updateSUSpy.mockRestore(); - // createSUTasksSpy.mockRestore(); - utilSpy.mockRestore(); - taskFilterDefSpy.mockRestore(); - suConstraintTemplateSpy.mockRestore(); - utcSpy.mockRestore(); - suFilterDefSpy.mockRestore(); - allTaskRelationSpy.mockRestore(); - stationGroupSpy.mockRestore(); - stationSpy.mockRestore(); - scheduleSetByIdSpy.mockRestore(); - templatePurposesSpy.mockRestore(); - templateStatesSpy.mockRestore(); - validatorSpy.mockRestore(); - rolesSpy.mockRestore(); - //authPermissionSpy.mockRestore(); - //userPermissionSpy.mockRestore(); } - -it(" 1. renders SU create page with all fields and default values", async() => { - console.log("renders create page with all fields and default values ------------------------"); +async function renderSchedulingUnitCreatePage() { let content; await act(async () => { - content = render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/create'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); - }); - expect(content.queryByText('Scheduling Unit - Add')).not.toBe(null); // Page loaded successfully - expect(projectListSpy).toHaveBeenCalled(); // Mock Spy called successfully - expect(observStrategiesSpy).toHaveBeenCalled(); // Mock Spy called successfully - expect(taskTemplatesSpy).toHaveBeenCalled(); // Mock Spy called successfully - - const nameInputEl = content.queryByTestId('name'); - fireEvent.change(nameInputEl, { target: { value: 'SU High 1' } }); - expect(nameInputEl.value).toBe("SU High 1"); - - const descInputEl = content.queryByTestId('description'); - fireEvent.change(descInputEl, { target: { value: 'SU High 1 Desc' } }); - expect(descInputEl.value).toBe("SU High 1 Desc"); - - fireEvent.click(screen.getAllByText("Select Project")[1]); - - const projInputEl = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInputEl); + content = render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/create'}}/></Router>); await new Promise((r) => setTimeout(r, 500)); }); - expect(content.queryAllByText("high").length).toBe(2); - expect(scheduleSetListSpy).toHaveBeenCalled(); // Mock Spy called successfully - - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - expect(content.queryAllByText("Test Scheduling Set").length).toBe(1); - const suSetInputEl = screen.getByText("Test Scheduling Set"); - fireEvent.click(suSetInputEl); - expect(content.queryAllByText("Test Scheduling Set").length).toBe(1); - - expect(content.queryByTestId('save-btn')).toHaveAttribute("disabled"); - -}); + console.error = () => { + }; + return content; +} -it(" 2. Check all Strategy templates are exist in test data file", async() => { - console.log("Check all Strategy templates are exist in test data file ------------------------"); - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()); - let strategyTemplates = [...strategy_Templates_Group.LBA_Strategy_Group, ...strategy_Templates_Group.HBA_Strategy_Group]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.HBA_Strategy_Group_1]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.HBA_Strategy_Group_2]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.Simple_Strategy_Group]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.BF_Strategy_Group]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.Pulsar_Strategy_Group]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.COBALT_Strategy_Group]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.SOLAR_CAMPAIGN_GROUP]; - strategyTemplates = [...strategyTemplates, ...strategy_Templates_Group.FE_MONITORING_GROUP]; - console.log('Total Observation Strategy Template :',observationStrategTemplate.length); - console.log('Total Observation Strategy Template definied in test data file:',strategyTemplates.length); - for (const strategy of observationStrategTemplate) { - console.log('Checking template => ',strategy.name); - expect(_.includes(strategyTemplates,strategy.name)).toBeTruthy(); - console.log('Checked template => ',strategy.name); - } -}); +async function setSchedulingUnitBasics(pageContent) { + fireEvent.change(pageContent.queryByTestId('name'), {target: {value: "Wolverine"}}); + fireEvent.change(pageContent.queryByTestId('description'), {target: {value: "Big claws"}}); + await setMultiSelectValue(pageContent, "project", "high") + await setMultiSelectValue(pageContent, "schedSet", "Test Scheduling Set") +} -it(" 3. Test IM LBA Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); - }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - let strategyCount = 0; - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().LBA_Strategy_Group); - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name)) { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name, " - ", strategy.purpose_value, " - ", strategy.version, '] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - //console.log(expect(content.getByText("Not a valid input for Subband List")).not.toBeVisible()) - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - expect(content.queryByTestId(`${parameter.name}_stations`)).toBeInTheDocument(); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(objectMapper[key]) === 'object' ){ - if (objectMapper[key]["validationType"] && objectMapper[key]["validationType"] === 'checkbox' - && objectMapper[key]["type"] === 'array') { - for (const checkValue of objectMapper[key]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } - } - else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - // expect(content.queryByText('Success')).not.toBeInTheDocument(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); +async function createSchedulingUnit(strategy, pageContent) { + await setSchedulingUnitBasics(pageContent); + await setMultiSelectValue(pageContent, "strategy-purpose", strategy.purpose) + await setMultiSelectValue(pageContent, "strategy-state", strategy.state) + const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; + await setMultiSelectValue(pageContent, "observStrategy", optionLabel) +} +describe('Scheduling Unit create page default', () => { + let pageContent; -it(" 4. Test Simple Observation Strategy Group(s)", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); - }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); + beforeEach(async () => { + createStandardPageMocks(); + pageContent = await renderSchedulingUnitCreatePage(); + }) - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().Simple_Strategy_Group); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name)) { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); + afterEach(() => { + jest.clearAllMocks(); + cleanup(); + }); - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } + test("Renders with all standard service mocks", async () => { + expect(pageContent.queryByText('Scheduling Unit - Add')).not.toBe(null); + expect(projectListSpy).toHaveBeenCalled(); + expect(observStrategiesSpy).toHaveBeenCalled(); + expect(suConstraintTemplateSpy).toHaveBeenCalled(); + expect(rolesSpy).toHaveBeenCalled(); + expect(taskTemplatesSpy).toHaveBeenCalled(); + expect(stationGroupSpy).toHaveBeenCalled(); + expect(utilSpy).toHaveBeenCalled(); + expect(taskFilterDefSpy).toHaveBeenCalled(); + expect(templatePurposesSpy).toHaveBeenCalled(); + expect(templateStatesSpy).toHaveBeenCalled(); + }); - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - //expect(content.queryByText('Success')).not.toBeInTheDocument(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); + test("Changes a text field", async () => { + const nameInputEl = pageContent.queryByTestId('name'); + fireEvent.change(nameInputEl, {target: {value: 'SU High 1'}}); + expect(nameInputEl.value).toBe("SU High 1"); + }); -it(" 5. Test IM HBA Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); + test("Selects a project, loads the project's sets and selects the test scheduling set", async () => { + let scheduleSetListSpy = jest.spyOn(ScheduleService, 'getSchedulingSets').mockImplementation((filter) => { + let allSUSets = SUServiceMock.scheduleSetList; + let project = filter.replace("project=", ""); + return Promise.resolve(allSUSets.filter(set => set.project_id === project)); }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().HBA_Strategy_Group); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name)) { - console.log(strategy.purpose, ' - ', strategy.version); - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } + await setSchedulingUnitBasics(pageContent); + expect(scheduleSetListSpy).toHaveBeenCalled() + expect(pageContent.queryByTestId("project").textContent).toContain("high"); + expect(pageContent.queryByTestId("schedSet").textContent).toContain("Test Scheduling Set"); + expect(pageContent.queryByTestId('save-btn')).toHaveAttribute("disabled"); + }); }); -it(" 6. Test Pulsar Timing Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); - }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().Pulsar_Strategy_Group); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name)) { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); +describe('Scheduling Unit create page with an observation strategy template', () => { + let observationStrategyTemplates, pageContent, saveButton; + let scheduleSetListSpy, stationSpy, utcSpy, validatorSpy, stationGroupSpy; + const numberOfTemplates = 11 -it(" 7. Test Beamforming Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); + function createTemplatePageMocks() { + scheduleSetListSpy = jest.spyOn(ScheduleService, 'getSchedulingSets').mockImplementation((filter) => { + let allSUSets = SUServiceMock.scheduleSetList; + let project = filter.replace("project=", ""); + return Promise.resolve(allSUSets.filter(set => set.project_id === project)); }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().BF_Strategy_Group); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name) && strategy.state !== "obsolete") { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } else { - // if no data definied in test data json - // console.log('Parameter [', parameter.name,'] not definied'); - // throw error - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); - - -it(" 8. Test COBALT Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); + stationSpy = jest.spyOn(ScheduleService, 'getStations').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getStations) }); - // Check station group and constraints before selecting strategy - // expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - const strategy_Templates_Group = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper().COBALT_Strategy_Group); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (_.includes(strategy_Templates_Group, strategy.name) && strategy.state !== "obsolete") { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name); - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } else { - // if no data definied in test data json - // console.log('Parameter [', parameter.name,'] not definied'); - // throw error - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); + utcSpy = jest.spyOn(UtilService, 'getUTC').mockImplementation(() => { + return Promise.resolve(UtilServiceMock.getUTC) + }); + validatorSpy = jest.spyOn(ScheduleService, 'validateSpecificationsDoc').mockImplementation(() => { + return Promise.resolve({valid: true, message: "validation_result['message']"}) + }); + stationGroupSpy = jest.spyOn(ScheduleService, 'getStationGroup').mockImplementation(() => { + return Promise.resolve(SUServiceMock.getStationGroup) + }); + } -// Below two case executes induvidualy, when combined it fails + beforeAll(async () => { + observationStrategyTemplates = await Promise.resolve(SUServiceMock.getObservStrategies()) + }) -it(" 3.1 Test IM HBA Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); - }); - // Check station group and constraints before selecting strategy - //expect(screen.getAllByText("Dutch").length).toBe(1); - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (strategy.name === 'IM HBA - 1 Beam' ) { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name); - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } + beforeEach(async () => { + createStandardPageMocks(); + createTemplatePageMocks(); + pageContent = await renderSchedulingUnitCreatePage(); + saveButton = pageContent.queryByTestId('save-btn'); + }) - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } -}); + afterEach(() => { + jest.clearAllMocks(); + cleanup() + }); -it(" 3.2 Test IM HBA Strategy Group(s) ", async() => { - const observationStrategTemplate = await Promise.resolve(SUServiceMock.getObservStrategies()); - if (observationStrategTemplate) { - let content; - await act(async () => { - content =render(<Router><SchedulingUnitCreate location={{pathname: '/schedulingunit/'}}/></Router>); - await new Promise((r) => setTimeout(r, 1000)); + function checkTemplateMocks() { + expect(scheduleSetListSpy).toHaveBeenCalled(); + expect(stationSpy).toHaveBeenCalled(); + expect(utcSpy).toHaveBeenCalled(); + expect(validatorSpy).toHaveBeenCalled(); + expect(scheduleSetByIdSpy).toHaveBeenCalled(); + expect(stationGroupSpy).toHaveBeenCalled(); + } + + function checkCorrectSpecifications() { + expect(pageContent.queryByTestId('Stations_stations'), "No stations defined").toBeDefined() + expect(screen.getByText("Constraints specification is valid")).toBeDefined(); + expect(screen.getByText("Task Parameters specification is valid")).toBeDefined(); + } + + /** + * Jest issue: https://github.com/jestjs/jest/issues/9709 + * Cannot use the initialized variable 'observationStrategyTemplates' since + * the before methods upon building the test cases have not been called yet. + * Therefore, this test case contains the first check to not miss test cases + * because the template's file is constructed from the JSON schemas in the back-end + */ + test.each([...Array(numberOfTemplates).keys()].reverse())('Correctly creates, saves and checks constraints for template %i', async (index) => { + //TODO: increase test coverage to include previous tests https://support.astron.nl/jira/browse/TMSS-2537 + expect(observationStrategyTemplates.length).toBe(numberOfTemplates) + let observationStrategy = observationStrategyTemplates[index] + + await createSchedulingUnit(observationStrategy, pageContent); + + checkTemplateMocks(); + checkCorrectSpecifications(); + + expect(saveButton.hasAttribute("disabled"), + "Saving is disabled, but shouldn't for template: " + observationStrategy.name).toBeFalsy(); + let saveSUFromStrategySpy = jest.spyOn(ScheduleService, 'saveSchedulingUnit').mockImplementation(() => { + let schedulingUnitDraft = SUServiceMock.getSchedulingUnitFromObservStrategy(observationStrategy); + schedulingUnitDraft["isSUUpdated"] = true; + return Promise.resolve(schedulingUnitDraft); }); - // Check station group and constraints before selecting strategy - // expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - // expect(screen.getByLabelText("specification[time][at]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][after]").value).toBe(""); - // expect(screen.getByLabelText("specification[time][before]").value).toBe(""); - const nameInput = content.queryByTestId('name'); - const descInput = content.queryByTestId('description'); - const createAnother = content.queryByTestId('createAnother'); - fireEvent.click(createAnother); - - let strategyCount = 0; - for (const strategy of observationStrategTemplate) { - if (strategy.name === 'IM RT HBA LoTSS' ) { - let observStategiesData = await Promise.resolve(SUServiceMock.getObservStrategiesDataMapper()[(strategy.name)]); - const dataMapper = await _.find(observStategiesData, { 'version': strategy.version}) - console.log('Is the strategy template [',strategy.name,'] defined?') - expect(dataMapper).not.toBeUndefined(); - console.log('Strategy template [',strategy.name,'] is defined') - if (strategy.state !== "obsolete" && dataMapper) { - strategyCount++; - const optionLabel = `${strategy.name} (${strategy.purpose}, ${strategy.state}, v${strategy.version})`; - console.log("************************ (",strategyCount,") Testing the Strategy - ", optionLabel,' ***********************') - - // Set values for all mandatory input - fireEvent.change(nameInput, { target: { value: strategy.name } }); - fireEvent.change(descInput, { target: { value: strategy.name } }); - fireEvent.click(screen.getAllByText("Select Project")[1]); - const projInput = screen.getByText("high"); - await act(async () => { - fireEvent.click(projInput); - }); - fireEvent.click(screen.getAllByText("Select Scheduling Set")[1]); - const schedulingSetInput = screen.getByText("Test Scheduling Set"); - await act(async () => { - fireEvent.click(schedulingSetInput); - }); - - fireEvent.click(screen.getAllByText("Purpose")[0]); - const templatePurpose = screen.getAllByText(strategy.purpose)[0]; - await act( async() => { - fireEvent.click(templatePurpose); - await new Promise((r) => setTimeout(r, 500)); - }); - // fireEvent.click(screen.getAllByText("State")[0]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[1]); - const templateState = screen.getAllByText(strategy.state)[0]; - await act( async() => { - fireEvent.click(templateState); - await new Promise((r) => setTimeout(r, 200)); - }); - - // expect(content.queryAllByText(optionLabel).length).toBe(1); - fireEvent.click(screen.getAllByText("Select Strategy")[0]); - const observStrategyInput = screen.getAllByText(optionLabel); - await act( async() => { - fireEvent.click(observStrategyInput[0].parentElement); - await new Promise((r) => setTimeout(r, 1000)); - }); - - console.log("Checking Station Groups..."); - // Check station group section - - // Check constraints - console.log("Checking strategy constraints ..."); - expect(screen.getByDisplayValue("dynamic")).toBeInTheDocument(); - expect(screen.getByLabelText("specification[sky][transit_offset][from]").value).toBe(dataMapper['Scheduling Constraints']['from']); - expect(screen.getByLabelText("specification[sky][transit_offset][to]").value).toBe(dataMapper['Scheduling Constraints']['to']); - expect(screen.getByLabelText("specification[sky][min_distance][sun]").value).toBe(dataMapper['Scheduling Constraints']['sun']); - expect(screen.getByLabelText("specification[sky][min_distance][moon]").value).toBe(dataMapper['Scheduling Constraints']['moon']); - expect(screen.getByLabelText("specification[sky][min_distance][jupiter]").value).toBe(dataMapper['Scheduling Constraints']['jupiter']); - expect(screen.getByLabelText("specification[sky][min_elevation][calibrator]").value).toBe(dataMapper['Scheduling Constraints']['calibrator']); - expect(screen.getByLabelText("specification[sky][min_elevation][target]").value).toBe(dataMapper['Scheduling Constraints']['target']); - // Check Task parameters - console.log("Checking Task Parameters ..."); - for (const parameter of strategy.template.parameters) { - if (parameter.name !== 'Scheduling Constraints' && !dataMapper["parameterToSkip"].includes(parameter.name)) { - console.log("-----------------> Testing Parameter - ", parameter.name) - if (parameter.refs && parameter.refs[0].includes("station_group")) { - console.log("Checking Station Groups..."); - // Check station group section - if (dataMapper['Station_Group']) { - const keys = Object.keys(dataMapper['Station_Group']); - for (const key of keys) { - console.log("-----------------> Testing Parameter - ", 'Station_Group.',key); - let stationSVariable = content.queryByTestId(key); - expect(stationSVariable.value).toBe(dataMapper['Station_Group'][key]); - console.log("-----------------> Tested Parameter - ", 'Station_Group.',key); - } - } - } else if (typeof(dataMapper[parameter.name]) === 'boolean') { - const booleanSelect = screen.getAllByDisplayValue(dataMapper[parameter.name]).find(select => select.name===`specification[${parameter.name}]`); - expect(booleanSelect).not.toBeUndefined(); - } else if (typeof(dataMapper[parameter.name]) === 'object') { - if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'checkbox' - && dataMapper[parameter.name]["type"] === 'array') { - for (const checkValue of dataMapper[parameter.name]["value"]) { - const cygAChecks = screen.getAllByText(checkValue); - for (const checkbox of cygAChecks) { - expect(checkbox.parentElement.firstChild.checked).toBeFalsy(); - } - } - } else if (dataMapper[parameter.name]["validationType"] && dataMapper[parameter.name]["validationType"] === 'select') { - const value = dataMapper[parameter.name]['value']; - expect(content.queryAllByText(value).length).toBe(1); - } else { - const objectMapper = dataMapper[parameter.name]; - const keys = Object.keys(dataMapper[parameter.name]); - for (const key of keys) { - if (key === 'direction_type') { - expect(content.queryAllByText(objectMapper[key]).length).toBe(dataMapper['total_direction_type']); - } else { - const id = `specification[${parameter.name}][${key}]`; - if (typeof(objectMapper[key]) === 'boolean' ){ - const value = dataMapper[parameter.name][key]; - const booleanSelect = screen.getAllByDisplayValue(value).find(select => select.name=== id); - expect(booleanSelect).not.toBeUndefined(); - } else { - expect(screen.getByLabelText(id).value).toBe(objectMapper[key]); - } - } - } - } - - } else { - const id = `specification[${parameter.name}]`; - expect(screen.getByLabelText(id).value).toBe(dataMapper[parameter.name]); - } - } - console.log("-----------------> Tested Parameter - ", parameter.name) - } - // Check save button state and click to save - console.log("Checking Save button..."); - expect(content.queryByTestId('save-btn').hasAttribute("disabled")).toBeFalsy(); - console.log("Firing Click Event..."); - await act(async () => { - fireEvent.click(content.queryByTestId('save-btn')); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("Checking service calls.."); - expect(saveSUFromStrategySpy).toHaveBeenCalled(); - // Reset the purpose and state filter selection - await act( async() => { - fireEvent.click(screen.getAllByText(strategy.purpose)[0]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.purpose)[1]); - fireEvent.click(screen.getAllByRole("listbox")[1].parentElement.parentElement.children[2]); - await new Promise((r) => setTimeout(r, 200)); - fireEvent.click(screen.getAllByText(strategy.state)[0]); - await new Promise((r) => setTimeout(r, 1000)); - }); - console.log("************************ (",strategyCount,") Tested the Strategy - ", optionLabel,' ***********************') - } - } // tmp => strategy name check - } //Strategy Loop - } + await clickItem(saveButton) + expect(saveSUFromStrategySpy).toHaveBeenCalled(); + }); }); \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/setupTests.js b/SAS/TMSS/frontend/tmss_webapp/src/setupTests.js index 74b1a275a0ea7df518f17bcea5375abf003abe55..3614d0d42bc9178499251a0999dd1f66f4fe3209 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/setupTests.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/setupTests.js @@ -3,3 +3,5 @@ // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom import '@testing-library/jest-dom/extend-expect'; +import 'jest-canvas-mock'; +import 'jest-expect-message'; \ No newline at end of file diff --git a/SAS/TMSS/frontend/tmss_webapp/src/utils/test.helper.js b/SAS/TMSS/frontend/tmss_webapp/src/utils/test.helper.js new file mode 100644 index 0000000000000000000000000000000000000000..6d771983caa2fd35b794b99764da8b6e5e220073 --- /dev/null +++ b/SAS/TMSS/frontend/tmss_webapp/src/utils/test.helper.js @@ -0,0 +1,34 @@ +import {act} from "react-dom/test-utils"; +import {fireEvent, screen} from "@testing-library/react"; + +const TIMEOUT = 300 + +export async function clickItem(item, timeout = TIMEOUT) { + await act(async () => { + fireEvent.click(item); + await new Promise((r) => setTimeout(r, timeout)); + }); +} + +export async function setMultiSelectValue(pageContent, multiSelectTestId, multiSelectValue, timeout = TIMEOUT) { + await clickItem(pageContent.queryByTestId(multiSelectTestId)); + const items = screen.getAllByText(multiSelectValue); + if (!items.length) { + throw new ReferenceError("No items found to select for multi selection element " + multiSelectValue) + } + for (let item of items) { + await clickItem(item, timeout); + } +} + +/** + * Since the current version is React 17 but it has been patched to React 18, the behaviour is still the older version. + * Therefore these specific warnings should be ignored until the app has been fully upgraded + */ +export function removeReact18ConsoleErrors() { + jest.spyOn(global.console, 'error').mockImplementationOnce((message) => { + if (!message.includes(' ReactDOM.render is no longer supported in React 18')) { + global.console.error(message); + } + }); +} \ No newline at end of file