diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5839b91..720160e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ test: script: - source $VIRTUAL_ENV/bin/activate - pip install -r requirements.txt - - export PYTHONPATH=$PYTHONPATH:/home/gitlab-runner/builds/t3_38ooWt/0/mx/heidi-v2/backend + - export PYTHONPATH=$PYTHONPATH:/home/gitlab-runner/builds/t3_38ooWt/0/mx/aaredb/backend - cd /home/gitlab-runner/builds/t3_38ooWt/0/mx/heidi-v2 # Change to the project root - pytest --cov=app --cov-report=xml # Run tests and generate coverage report diff --git a/backend/app/schemas.py b/backend/app/schemas.py index 1566b42..8dc30a8 100644 --- a/backend/app/schemas.py +++ b/backend/app/schemas.py @@ -363,6 +363,11 @@ class SampleEventResponse(SampleEventCreate): from_attributes = True +class CurvePoint(BaseModel): + resolution: float + value: float + + class Results(BaseModel): pipeline: str resolution: float @@ -371,8 +376,8 @@ class Results(BaseModel): rmerge: float rmeas: float isig: float - cc: float - cchalf: float + cc: List[CurvePoint] + cchalf: List[CurvePoint] completeness: float multiplicity: float nobs: int diff --git a/config_prod.json b/config_prod.json index 121d2a8..71046ea 100644 --- a/config_prod.json +++ b/config_prod.json @@ -5,6 +5,6 @@ "SCHEMA_PATH": "./src/openapi.json", "OUTPUT_DIRECTORY": "./openapi", "PORT": 1492, - "SSL_KEY_PATH": "/home/jungfrau/heidi-v2/backend/ssl/mx-aare-test.psi.ch.key", - "SSL_CERT_PATH": "/home/jungfrau/heidi-v2/backend/ssl/mx-aare-test.psi.ch.pem" + "SSL_KEY_PATH": "/home/jungfrau/aaredb/backend/ssl/mx-aare-test.psi.ch.key", + "SSL_CERT_PATH": "/home/jungfrau/aaredb/backend/ssl/mx-aare-test.psi.ch.pem" } \ No newline at end of file diff --git a/config_test.json b/config_test.json index ddefdba..009ad6e 100644 --- a/config_test.json +++ b/config_test.json @@ -5,6 +5,6 @@ "SCHEMA_PATH": "./src/openapi.json", "OUTPUT_DIRECTORY": "./openapi", "PORT": 8081, - "SSL_KEY_PATH": "/home/jungfrau/heidi-v2/backend/ssl/mx-aare-test.psi.ch.key", - "SSL_CERT_PATH": "/home/jungfrau/heidi-v2/backend/ssl/mx-aare-test.psi.ch.pem" + "SSL_KEY_PATH": "/home/jungfrau/aaredb/backend/ssl/mx-aare-test.psi.ch.key", + "SSL_CERT_PATH": "/home/jungfrau/aaredb/backend/ssl/mx-aare-test.psi.ch.pem" } \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 25f3510..7055e5d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -22,8 +22,9 @@ "@mui/lab": "^6.0.0-beta.29", "@mui/material": "^6.1.6", "@mui/system": "^6.1.6", + "@mui/x-charts": "^7.28.0", "@mui/x-data-grid-premium": "^7.27.2", - "@mui/x-tree-view": "^7.26.0", + "@mui/x-tree-view": "^7.28.0", "axios": "^1.7.7", "chokidar": "^4.0.1", "dayjs": "^1.11.13", @@ -1790,6 +1791,84 @@ } } }, + "node_modules/@mui/x-charts": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.28.0.tgz", + "integrity": "sha512-TNfq/rQfGKnjTaEITkY6l09NpMxwMwRTgLiDw+JQsS/7gwBBJUmMhEOj67BaFeYTsroFLUYeggiAj+RTSryd4A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/x-charts-vendor": "7.20.0", + "@mui/x-internals": "7.28.0", + "@react-spring/rafz": "^9.7.5", + "@react-spring/web": "^9.7.5", + "clsx": "^2.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-charts-vendor": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-7.20.0.tgz", + "integrity": "sha512-pzlh7z/7KKs5o0Kk0oPcB+sY0+Dg7Q7RzqQowDQjpy5Slz6qqGsgOB5YUzn0L+2yRmvASc4Pe0914Ao3tMBogg==", + "license": "MIT AND ISC", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@types/d3-color": "^3.1.3", + "@types/d3-delaunay": "^6.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.8", + "@types/d3-shape": "^3.1.6", + "@types/d3-time": "^3.0.3", + "d3-color": "^3.1.0", + "d3-delaunay": "^6.0.4", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "delaunator": "^5.0.1", + "robust-predicates": "^3.0.2" + } + }, + "node_modules/@mui/x-charts/node_modules/@mui/x-internals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.28.0.tgz", + "integrity": "sha512-p4GEp/09bLDumktdIMiw+OF4p+pJOOjTG0VUvzNxjbHB9GxbBKoMcHrmyrURqoBnQpWIeFnN/QAoLMFSpfwQbw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/@mui/x-data-grid": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.27.2.tgz", @@ -2088,14 +2167,14 @@ } }, "node_modules/@mui/x-tree-view": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-7.26.0.tgz", - "integrity": "sha512-adZwVj6/edNowi2RIeyGPTcfdP4EXtMGo0mk2LQogG8m8bZkZRjOQoQ7pkBF0UPMaIAwzCadq2OWj3MPH4DP5A==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-7.28.0.tgz", + "integrity": "sha512-L41Vo/rAdchRQIVfFyCf92hRtHrVoiuA6E1vf9Ie3IgXRLznj6CMUicOctB+hO2/uQZPuc7WVfvLZFZ/7ur6HA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", - "@mui/utils": "^5.16.6 || ^6.0.0", - "@mui/x-internals": "7.26.0", + "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/x-internals": "7.28.0", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -2111,8 +2190,8 @@ "peerDependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", - "@mui/material": "^5.15.14 || ^6.0.0", - "@mui/system": "^5.15.14 || ^6.0.0", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -2126,13 +2205,13 @@ } }, "node_modules/@mui/x-tree-view/node_modules/@mui/x-internals": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.26.0.tgz", - "integrity": "sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.28.0.tgz", + "integrity": "sha512-p4GEp/09bLDumktdIMiw+OF4p+pJOOjTG0VUvzNxjbHB9GxbBKoMcHrmyrURqoBnQpWIeFnN/QAoLMFSpfwQbw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", - "@mui/utils": "^5.16.6 || ^6.0.0" + "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0 || ^7.0.0-beta" }, "engines": { "node": ">=14.0.0" @@ -2203,6 +2282,78 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@react-spring/animated": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", + "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", + "license": "MIT", + "dependencies": { + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", + "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", + "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", + "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", + "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", + "license": "MIT" + }, + "node_modules/@react-spring/web": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz", + "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.7.5", + "@react-spring/core": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@redocly/ajv": { "version": "8.11.2", "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", @@ -2900,6 +3051,57 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -3923,6 +4125,121 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/date-arithmetic": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-arithmetic/-/date-arithmetic-4.1.0.tgz", @@ -3970,6 +4287,15 @@ "dev": true, "license": "MIT" }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -4910,6 +5236,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -6371,6 +6706,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, "node_modules/rollup": { "version": "4.30.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 19d8c0e..2eca0f7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,8 +29,9 @@ "@mui/lab": "^6.0.0-beta.29", "@mui/material": "^6.1.6", "@mui/system": "^6.1.6", + "@mui/x-charts": "^7.28.0", "@mui/x-data-grid-premium": "^7.27.2", - "@mui/x-tree-view": "^7.26.0", + "@mui/x-tree-view": "^7.28.0", "axios": "^1.7.7", "chokidar": "^4.0.1", "dayjs": "^1.11.13", diff --git a/frontend/src/components/RunDetails.tsx b/frontend/src/components/RunDetails.tsx index b837854..94d0a41 100644 --- a/frontend/src/components/RunDetails.tsx +++ b/frontend/src/components/RunDetails.tsx @@ -4,7 +4,10 @@ import { } from '@mui/material'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import './SampleImage.css'; -import { DataGridPremium, GridColDef } from "@mui/x-data-grid-premium"; +import { DataGridPremium, GridColDef, GridValueGetterParams } from "@mui/x-data-grid-premium"; +import { LineChart } from '@mui/x-charts/LineChart'; + + import { SamplesService } from "../../openapi"; interface RunDetailsProps { @@ -15,6 +18,10 @@ interface RunDetailsProps { onHeightChange?: (height: number) => void; } +interface CCPoint { + resolution: number; + value: number; +} interface ExperimentParameters { run_number: number; @@ -26,6 +33,7 @@ interface ExperimentParameters { interface ProcessingResults { + id: number; pipeline: string; resolution: number; unit_cell: string; @@ -33,8 +41,8 @@ interface ProcessingResults { rmerge: number; rmeas: number; isig: number; - cc: number; - cchalf: number; + cc: CCPoint[]; + cchalf: CCPoint[]; completeness: number; multiplicity: number; nobs: number; @@ -43,6 +51,7 @@ interface ProcessingResults { comments?: string | null; } + const RunDetails: React.FC = ({ run, onHeightChange, basePath, runId, sample_id }) => { const containerRef = useRef(null); const [currentHeight, setCurrentHeight] = useState(0); @@ -71,8 +80,8 @@ const RunDetails: React.FC = ({ run, onHeightChange, basePath, rmerge: res.result?.rmerge ?? 0, rmeas: res.result?.rmeas ?? 0, isig: res.result?.isig ?? 0, - cc: res.result?.cc ?? 0, - cchalf: res.result?.cchalf ?? 0, + cc: res.result?.cc || [], + cchalf: res.result?.cchalf || [], completeness: res.result?.completeness ?? 0, multiplicity: res.result?.multiplicity ?? 0, nobs: res.result?.nobs ?? 0, @@ -88,22 +97,38 @@ const RunDetails: React.FC = ({ run, onHeightChange, basePath, }; - const resultColumns: GridColDef[] = [ - {field: 'pipeline', headerName: 'Pipeline', flex: 1}, - {field: 'resolution', headerName: 'Resolution (Å)', flex: 1}, - {field: 'unit_cell', headerName: 'Unit Cell (Å)', flex: 1.5}, - {field: 'spacegroup', headerName: 'Spacegroup', flex: 1}, - {field: 'rmerge', headerName: 'Rmerge', flex: 1}, - {field: 'rmeas', headerName: 'Rmeas', flex: 1}, - {field: 'isig', headerName: 'I/sig(I)', flex: 1}, - {field: 'cc', headerName: 'CC', flex: 1}, - {field: 'cchalf', headerName: 'CC(1/2)', flex: 1}, - {field: 'completeness', headerName: 'Completeness (%)', flex: 1}, - {field: 'multiplicity', headerName: 'Multiplicity', flex: 1}, - {field: 'nobs', headerName: 'N obs.', flex: 1}, - {field: 'total_refl', headerName: 'Total Reflections', flex: 1}, - {field: 'unique_refl', headerName: 'Unique Reflections', flex: 1}, - {field: 'comments', headerName: 'Comments', flex: 2}, + const resultColumns: GridColDef[] = [ + { field: 'pipeline', headerName: 'Pipeline', flex: 1 }, + { field: 'resolution', headerName: 'Resolution (Å)', flex: 1 }, + { field: 'unit_cell', headerName: 'Unit Cell (Å)', flex: 1.5 }, + { field: 'spacegroup', headerName: 'Spacegroup', flex: 1 }, + { field: 'rmerge', headerName: 'Rmerge', flex: 1 }, + { field: 'rmeas', headerName: 'Rmeas', flex: 1 }, + { field: 'isig', headerName: 'I/sig(I)', flex: 1 }, + { + field: 'cc', + headerName: 'CC', + flex: 1, + valueGetter: (params: GridValueGetterParams) => + Array.isArray(params.row?.cc) + ? params.row.cc.map((point: CCPoint) => `${point.value.toFixed(2)}@${point.resolution.toFixed(2)}`).join(', ') + : '', + }, + { + field: 'cchalf', + headerName: 'CC(1/2)', + flex: 1, + valueGetter: (params: GridValueGetterParams) => + Array.isArray(params.row?.cchalf) + ? params.row.cchalf.map((point: CCPoint) => `${point.value.toFixed(2)}@${point.resolution.toFixed(2)}`).join(', ') + : '', + }, + { field: 'completeness', headerName: 'Completeness (%)', flex: 1 }, + { field: 'multiplicity', headerName: 'Multiplicity', flex: 1 }, + { field: 'nobs', headerName: 'N obs.', flex: 1 }, + { field: 'total_refl', headerName: 'Total Reflections', flex: 1 }, + { field: 'unique_refl', headerName: 'Unique Reflections', flex: 1 }, + { field: 'comments', headerName: 'Comments', flex: 2 }, ]; const updateHeight = () => { @@ -260,12 +285,12 @@ const RunDetails: React.FC = ({ run, onHeightChange, basePath, {processingResult ? (
- ({id: idx, ...res}))} + + rows={processingResult.map((res, idx) => ({ id: idx, ...res }))} columns={resultColumns} autoHeight hideFooter - columnVisibilityModel={{id: false}} + columnVisibilityModel={{ id: false }} disableColumnResize={false} />
@@ -276,6 +301,38 @@ const RunDetails: React.FC = ({ run, onHeightChange, basePath, + {processingResult && processingResult.length > 0 && ( +
+ CC and CC(1/2) vs Resolution + point.resolution) // Grab the resolution values + .reverse(), // Reverse the data for resolution + label: 'Resolution (Å)', + reverse: true, // This ensures the visual flip on the chart, low-res to right and high-res to left + }, + ]} + series={[ + { + data: processingResult[0].cc + .map((point) => point.value) + .reverse(), // Reverse the CC values to match the reversed resolution + label: 'CC', + }, + { + data: processingResult[0].cchalf + .map((point) => point.value) + .reverse(), // Reverse the CC(1/2) values to match the reversed resolution + label: 'CC(1/2)', + }, + ]} + height={300} + /> +
+ )} + {/* Modal for Zoomed Image */} value ~1, Lower resolution (big number) -> value ~0\n", + " decay_factor = (res - max_res) / (min_res - max_res) # Normalize res to [0,1]\n", + " value = max_value - ( math.exp(- 20 * decay_factor ) ) # Exponential decay\n", + "\n", + " # Add small random noise for realism\n", + " noise_value = random.uniform(-noise, noise)\n", + " value = min(max(value + noise_value, min_value), max_value) # Clamp between min_value and max_value\n", + "\n", + " curve.append(CurvePoint(resolution=res, value=round(value, decimals)))\n", + "\n", + " return curve\n", + "\n", "# Create random Results payload\n", "results_data = Results(\n", - " pipeline=\"fastproc\",\n", + " pipeline=\"autoproc\",\n", " resolution=round(random.uniform(1.0, 4.0), 2),\n", " unit_cell=f\"{random.uniform(20, 120):.2f}, {random.uniform(20, 120):.2f}, \"\n", " f\"{random.uniform(20, 120):.2f}, {random.uniform(60, 120):.2f}, \"\n", @@ -764,8 +784,8 @@ " rmerge=round(random.uniform(0.02, 0.10), 3),\n", " rmeas=round(random.uniform(0.02, 0.15), 3),\n", " isig=round(random.uniform(1.0, 30.0), 2),\n", - " cc=round(random.uniform(0.7, 1.0), 3),\n", - " cchalf=round(random.uniform(0.7, 1.0), 3),\n", + " cc=logarithmic_decay_curve(100), # List of CurvePoint for CC curve\n", + " cchalf=logarithmic_decay_curve(100), # List of CurvePoint for CC(1/2) curve\n", " completeness=round(random.uniform(85.0, 100.0), 2),\n", " multiplicity=round(random.uniform(1.0, 10.0), 2),\n", " nobs=random.randint(10000, 500000),\n", @@ -806,7 +826,7 @@ "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", "/Users/gotthardg/PycharmProjects/aaredb/.venv/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n", - "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/processing-results HTTP/1.1\" 200 367\n" + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"POST /samples/processing-results HTTP/1.1\" 200 7218\n" ] }, { @@ -814,17 +834,17 @@ "output_type": "stream", "text": [ "API call successful:\n", - "ResultResponse(id=4, sample_id=247, run_id=1, result=Results(pipeline='fastproc', resolution=3.93, unit_cell='56.27, 40.58, 26.64, 93.74, 90.52, 99.53', spacegroup='C2', rmerge=0.097, rmeas=0.13, isig=21.29, cc=0.989, cchalf=0.802, completeness=98.46, multiplicity=6.35, nobs=273232, total_refl=217336, unique_refl=11189, comments='Random auto-generated test entry'))\n" + "ResultResponse(id=36, sample_id=247, run_id=1, result=Results(pipeline='autoproc', resolution=1.81, unit_cell='56.82, 75.31, 82.06, 91.76, 79.97, 79.75', spacegroup='P1', rmerge=0.097, rmeas=0.122, isig=13.86, cc=[CurvePoint(resolution=3.979, value=1.0), CurvePoint(resolution=3.964, value=0.997), CurvePoint(resolution=3.879, value=1.0), CurvePoint(resolution=3.814, value=0.999), CurvePoint(resolution=3.787, value=0.997), CurvePoint(resolution=3.767, value=1.0), CurvePoint(resolution=3.706, value=0.998), CurvePoint(resolution=3.68, value=1.0), CurvePoint(resolution=3.678, value=0.998), CurvePoint(resolution=3.677, value=0.998), CurvePoint(resolution=3.627, value=1.0), CurvePoint(resolution=3.619, value=1.0), CurvePoint(resolution=3.614, value=1.0), CurvePoint(resolution=3.598, value=0.998), CurvePoint(resolution=3.568, value=1.0), CurvePoint(resolution=3.477, value=0.999), CurvePoint(resolution=3.46, value=1.0), CurvePoint(resolution=3.44, value=1.0), CurvePoint(resolution=3.414, value=0.999), CurvePoint(resolution=3.341, value=0.997), CurvePoint(resolution=3.315, value=0.998), CurvePoint(resolution=3.258, value=0.995), CurvePoint(resolution=3.204, value=0.997), CurvePoint(resolution=3.182, value=0.996), CurvePoint(resolution=3.168, value=0.997), CurvePoint(resolution=3.07, value=0.997), CurvePoint(resolution=3.044, value=1.0), CurvePoint(resolution=3.037, value=0.999), CurvePoint(resolution=3.037, value=0.997), CurvePoint(resolution=3.024, value=0.996), CurvePoint(resolution=3.014, value=0.996), CurvePoint(resolution=3.009, value=0.998), CurvePoint(resolution=2.882, value=0.998), CurvePoint(resolution=2.798, value=0.997), CurvePoint(resolution=2.728, value=1.0), CurvePoint(resolution=2.722, value=0.998), CurvePoint(resolution=2.713, value=0.996), CurvePoint(resolution=2.712, value=1.0), CurvePoint(resolution=2.703, value=1.0), CurvePoint(resolution=2.587, value=0.998), CurvePoint(resolution=2.586, value=0.996), CurvePoint(resolution=2.57, value=0.996), CurvePoint(resolution=2.553, value=1.0), CurvePoint(resolution=2.539, value=0.999), CurvePoint(resolution=2.493, value=0.997), CurvePoint(resolution=2.483, value=0.998), CurvePoint(resolution=2.454, value=0.997), CurvePoint(resolution=2.435, value=1.0), CurvePoint(resolution=2.431, value=0.998), CurvePoint(resolution=2.418, value=1.0), CurvePoint(resolution=2.396, value=0.995), CurvePoint(resolution=2.36, value=1.0), CurvePoint(resolution=2.332, value=0.996), CurvePoint(resolution=2.323, value=0.998), CurvePoint(resolution=2.299, value=0.998), CurvePoint(resolution=2.294, value=1.0), CurvePoint(resolution=2.271, value=0.999), CurvePoint(resolution=2.267, value=1.0), CurvePoint(resolution=2.234, value=0.998), CurvePoint(resolution=2.216, value=1.0), CurvePoint(resolution=2.108, value=1.0), CurvePoint(resolution=2.028, value=0.994), CurvePoint(resolution=2.012, value=0.996), CurvePoint(resolution=2.007, value=0.996), CurvePoint(resolution=1.964, value=0.996), CurvePoint(resolution=1.92, value=1.0), CurvePoint(resolution=1.883, value=0.995), CurvePoint(resolution=1.824, value=0.996), CurvePoint(resolution=1.818, value=0.993), CurvePoint(resolution=1.817, value=0.993), CurvePoint(resolution=1.812, value=0.991), CurvePoint(resolution=1.769, value=0.99), CurvePoint(resolution=1.743, value=0.988), CurvePoint(resolution=1.732, value=0.992), CurvePoint(resolution=1.729, value=0.995), CurvePoint(resolution=1.689, value=0.993), CurvePoint(resolution=1.658, value=0.988), CurvePoint(resolution=1.654, value=0.984), CurvePoint(resolution=1.634, value=0.987), CurvePoint(resolution=1.608, value=0.984), CurvePoint(resolution=1.586, value=0.975), CurvePoint(resolution=1.559, value=0.974), CurvePoint(resolution=1.512, value=0.971), CurvePoint(resolution=1.485, value=0.965), CurvePoint(resolution=1.482, value=0.964), CurvePoint(resolution=1.479, value=0.963), CurvePoint(resolution=1.477, value=0.962), CurvePoint(resolution=1.434, value=0.948), CurvePoint(resolution=1.43, value=0.942), CurvePoint(resolution=1.401, value=0.931), CurvePoint(resolution=1.373, value=0.922), CurvePoint(resolution=1.333, value=0.889), CurvePoint(resolution=1.305, value=0.873), CurvePoint(resolution=1.253, value=0.814), CurvePoint(resolution=1.252, value=0.81), CurvePoint(resolution=1.216, value=0.765), CurvePoint(resolution=1.041, value=0.235), CurvePoint(resolution=1.04, value=0.23), CurvePoint(resolution=1.033, value=0.197), CurvePoint(resolution=1.015, value=0.096)], cchalf=[CurvePoint(resolution=3.985, value=1.0), CurvePoint(resolution=3.984, value=1.0), CurvePoint(resolution=3.974, value=1.0), CurvePoint(resolution=3.934, value=1.0), CurvePoint(resolution=3.895, value=0.998), CurvePoint(resolution=3.884, value=0.998), CurvePoint(resolution=3.833, value=0.996), CurvePoint(resolution=3.817, value=0.997), CurvePoint(resolution=3.794, value=0.995), CurvePoint(resolution=3.783, value=1.0), CurvePoint(resolution=3.782, value=1.0), CurvePoint(resolution=3.728, value=0.996), CurvePoint(resolution=3.728, value=0.999), CurvePoint(resolution=3.685, value=0.999), CurvePoint(resolution=3.637, value=1.0), CurvePoint(resolution=3.607, value=0.999), CurvePoint(resolution=3.606, value=1.0), CurvePoint(resolution=3.599, value=1.0), CurvePoint(resolution=3.549, value=0.995), CurvePoint(resolution=3.543, value=1.0), CurvePoint(resolution=3.464, value=1.0), CurvePoint(resolution=3.34, value=0.998), CurvePoint(resolution=3.295, value=1.0), CurvePoint(resolution=3.257, value=0.999), CurvePoint(resolution=3.254, value=1.0), CurvePoint(resolution=3.251, value=1.0), CurvePoint(resolution=3.251, value=1.0), CurvePoint(resolution=3.228, value=1.0), CurvePoint(resolution=3.227, value=1.0), CurvePoint(resolution=3.226, value=1.0), CurvePoint(resolution=3.184, value=0.995), CurvePoint(resolution=3.173, value=0.997), CurvePoint(resolution=3.08, value=1.0), CurvePoint(resolution=3.062, value=1.0), CurvePoint(resolution=3.04, value=1.0), CurvePoint(resolution=3.013, value=1.0), CurvePoint(resolution=2.965, value=1.0), CurvePoint(resolution=2.913, value=0.998), CurvePoint(resolution=2.876, value=1.0), CurvePoint(resolution=2.866, value=0.998), CurvePoint(resolution=2.849, value=1.0), CurvePoint(resolution=2.839, value=0.998), CurvePoint(resolution=2.816, value=1.0), CurvePoint(resolution=2.773, value=1.0), CurvePoint(resolution=2.747, value=0.995), CurvePoint(resolution=2.737, value=1.0), CurvePoint(resolution=2.733, value=0.998), CurvePoint(resolution=2.723, value=1.0), CurvePoint(resolution=2.713, value=1.0), CurvePoint(resolution=2.626, value=0.997), CurvePoint(resolution=2.583, value=0.996), CurvePoint(resolution=2.501, value=1.0), CurvePoint(resolution=2.493, value=1.0), CurvePoint(resolution=2.411, value=0.998), CurvePoint(resolution=2.31, value=1.0), CurvePoint(resolution=2.287, value=0.997), CurvePoint(resolution=2.246, value=0.995), CurvePoint(resolution=2.233, value=1.0), CurvePoint(resolution=2.191, value=0.998), CurvePoint(resolution=2.167, value=0.995), CurvePoint(resolution=2.149, value=0.996), CurvePoint(resolution=2.127, value=1.0), CurvePoint(resolution=2.114, value=1.0), CurvePoint(resolution=2.046, value=1.0), CurvePoint(resolution=2.004, value=0.996), CurvePoint(resolution=1.987, value=0.995), CurvePoint(resolution=1.908, value=0.993), CurvePoint(resolution=1.899, value=1.0), CurvePoint(resolution=1.856, value=0.995), CurvePoint(resolution=1.822, value=0.993), CurvePoint(resolution=1.812, value=0.997), CurvePoint(resolution=1.802, value=0.992), CurvePoint(resolution=1.796, value=0.995), CurvePoint(resolution=1.773, value=0.996), CurvePoint(resolution=1.767, value=0.991), CurvePoint(resolution=1.76, value=0.989), CurvePoint(resolution=1.742, value=0.991), CurvePoint(resolution=1.725, value=0.996), CurvePoint(resolution=1.723, value=0.995), CurvePoint(resolution=1.718, value=0.987), CurvePoint(resolution=1.687, value=0.989), CurvePoint(resolution=1.639, value=0.984), CurvePoint(resolution=1.598, value=0.982), CurvePoint(resolution=1.592, value=0.985), CurvePoint(resolution=1.494, value=0.963), CurvePoint(resolution=1.475, value=0.961), CurvePoint(resolution=1.449, value=0.954), CurvePoint(resolution=1.427, value=0.946), CurvePoint(resolution=1.402, value=0.929), CurvePoint(resolution=1.377, value=0.918), CurvePoint(resolution=1.324, value=0.889), CurvePoint(resolution=1.296, value=0.859), CurvePoint(resolution=1.253, value=0.814), CurvePoint(resolution=1.227, value=0.784), CurvePoint(resolution=1.225, value=0.773), CurvePoint(resolution=1.146, value=0.619), CurvePoint(resolution=1.118, value=0.547), CurvePoint(resolution=1.03, value=0.179), CurvePoint(resolution=1.013, value=0.087), CurvePoint(resolution=1.011, value=0.07)], completeness=86.92, multiplicity=5.46, nobs=48062, total_refl=73724, unique_refl=93185, comments='Random auto-generated test entry'))\n" ] } ], - "execution_count": 3 + "execution_count": 36 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-03-14T16:09:47.444375Z", - "start_time": "2025-03-14T16:09:47.402508Z" + "end_time": "2025-03-17T21:11:17.101900Z", + "start_time": "2025-03-17T21:11:17.053250Z" } }, "cell_type": "code", @@ -869,9 +889,9 @@ "output_type": "stream", "text": [ "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 127.0.0.1:8000\n", - "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", + "/Users/gotthardg/PycharmProjects/aaredb/.venv/lib/python3.12/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings\n", " warnings.warn(\n", - "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"GET /samples/results?active_pgroup=p20003 HTTP/1.1\" 200 4243\n" + "DEBUG:urllib3.connectionpool:https://127.0.0.1:8000 \"GET /samples/results?active_pgroup=p20003 HTTP/1.1\" 200 7927\n" ] }, { @@ -910,11 +930,11 @@ " SampleResult(sample_id=244, sample_name='Sample244', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", " SampleResult(sample_id=245, sample_name='Sample245', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", " SampleResult(sample_id=246, sample_name='Sample246', puck_name='PKK007', dewar_name='Dewar Five', images=[], experiment_runs=[]),\n", - " SampleResult(sample_id=247, sample_name='Sample247', puck_name='PKK007', dewar_name='Dewar Five', images=[ImageInfo(id=1, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Mounting_2025-03-13_13-39-00/mount.jpeg.jpg', comment=None, event_type='Mounting')], experiment_runs=[])]\n" + " SampleResult(sample_id=247, sample_name='Sample247', puck_name='PKK007', dewar_name='Dewar Five', images=[ImageInfo(id=1, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Mounting_2025-03-13_13-39-00/mount.jpeg.jpg', comment=None, event_type='Mounting'), ImageInfo(id=2, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Centering_2025-03-14_20-35-49/0_200.jpg', comment=None, event_type='Centering'), ImageInfo(id=3, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Centering_2025-03-14_20-35-49/90_200.jpg', comment=None, event_type='Centering'), ImageInfo(id=4, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Centering_2025-03-14_20-35-49/0_700.jpg', comment=None, event_type='Centering'), ImageInfo(id=5, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Centering_2025-03-14_20-35-49/90_700.jpg', comment=None, event_type='Centering'), ImageInfo(id=6, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Collecting_2025-03-14_20-37-45/bb_raster_0.jpg', comment=None, event_type='Collecting'), ImageInfo(id=7, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Collecting_2025-03-14_20-54-05/bb_raster_90.jpg', comment=None, event_type='Collecting'), ImageInfo(id=8, filepath='images/p20003/2025-03-14/Dewar Five/PKK007/16/Collecting_2025-03-14_20-54-48/after_dc.jpeg.jpg', comment=None, event_type='Collecting')], experiment_runs=[ExperimentParametersRead(run_number=1, beamline_parameters=BeamlineParameters(synchrotron='Swiss Light Source', beamline='PXIII', detector=Detector(manufacturer='DECTRIS', model='PILATUS4 2M', type='photon-counting', serial_number='16684dscsd668468', detector_distance_mm=95.0, beam_center_x_px=512.0, beam_center_y_px=512.0, pixel_size_x_um=150.0, pixel_size_y_um=150.0), wavelength=1.0, ring_current_a=0.0, ring_mode='Machine Down', undulator=None, undulatorgap_mm=None, monochromator='Si111', transmission=1.0, focusing_optic='Kirkpatrick-Baez', beamline_flux_at_sample_ph_s=0.0, beam_size_width=30.0, beam_size_height=30.0, characterization=None, rotation=None, grid_scan=GridScanParamers(x_start=0.0, x_step=0.1, y_start=0.0, y_step=0.1, z_start=0.0, z_step=0.0, number_of_images=4600, exposure_time_s=0.001), jet=None, cryojet_temperature_k=None, humidifier_temperature_k=None, humidifier_humidity=None), sample_id=247, id=1), ExperimentParametersRead(run_number=2, beamline_parameters=BeamlineParameters(synchrotron='Swiss Light Source', beamline='PXIII', detector=Detector(manufacturer='DECTRIS', model='PILATUS4 2M', type='photon-counting', serial_number='16684dscsd668468', detector_distance_mm=95.0, beam_center_x_px=512.0, beam_center_y_px=512.0, pixel_size_x_um=150.0, pixel_size_y_um=150.0), wavelength=1.0, ring_current_a=0.0, ring_mode='Machine Down', undulator=None, undulatorgap_mm=None, monochromator='Si111', transmission=1.0, focusing_optic='Kirkpatrick-Baez', beamline_flux_at_sample_ph_s=0.0, beam_size_width=30.0, beam_size_height=30.0, characterization=None, rotation=None, grid_scan=GridScanParamers(x_start=90.0, x_step=0.1, y_start=0.0, y_step=0.1, z_start=0.0, z_step=0.0, number_of_images=4600, exposure_time_s=0.001), jet=None, cryojet_temperature_k=None, humidifier_temperature_k=None, humidifier_humidity=None), sample_id=247, id=2), ExperimentParametersRead(run_number=3, beamline_parameters=BeamlineParameters(synchrotron='Swiss Light Source', beamline='PXIII', detector=Detector(manufacturer='DECTRIS', model='PILATUS4 2M', type='photon-counting', serial_number='16684dscsd668468', detector_distance_mm=95.0, beam_center_x_px=512.0, beam_center_y_px=512.0, pixel_size_x_um=150.0, pixel_size_y_um=150.0), wavelength=1.0, ring_current_a=0.0, ring_mode='Machine Down', undulator=None, undulatorgap_mm=None, monochromator='Si111', transmission=1.0, focusing_optic='Kirkpatrick-Baez', beamline_flux_at_sample_ph_s=0.0, beam_size_width=30.0, beam_size_height=30.0, characterization=None, rotation=RotationParameters(omega_start_deg=0.0, omega_step=0.1, chi=0.0, phi=10.0, number_of_images=3600, exposure_time_s=0.02), grid_scan=None, jet=None, cryojet_temperature_k=None, humidifier_temperature_k=None, humidifier_humidity=None), sample_id=247, id=3)])]\n" ] } ], - "execution_count": 2 + "execution_count": 6 } ], "metadata": {