{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84969,"databundleVersionId":10033515,"sourceType":"competition"}],"dockerImageVersionId":31192,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install awscli --break-system-packages\n!pip install zarr","metadata":{"_uuid":"bd83c8df-6652-48a3-9ef8-d91c0bb897da","_cell_guid":"83d983d5-c8d9-4547-8d4a-649acffe6c98","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-12-09T17:47:49.434157Z","iopub.execute_input":"2025-12-09T17:47:49.435418Z","iopub.status.idle":"2025-12-09T17:47:53.526050Z","shell.execute_reply.started":"2025-12-09T17:47:49.435377Z","shell.execute_reply":"2025-12-09T17:47:53.524696Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# denoised tomogram \n# source https://cryoetdataportal.czscience.com/runs/16463?table-tab=Tomograms&metadata=tomogram&tab=metadata\n!aws s3 --no-sign-request sync s3://cryoet-data-portal-public/10440/TS_5_4/Reconstructions/VoxelSpacing10.012/Tomograms/100/TS_5_4.zarr TS_5_4.zarr","metadata":{"_uuid":"9c31b741-2838-458e-b024-0d2ccad9ef12","_cell_guid":"7c4f3692-c858-4960-97e0-e37f6f6b582a","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-12-09T17:47:57.725886Z","iopub.execute_input":"2025-12-09T17:47:57.726184Z","iopub.status.idle":"2025-12-09T17:47:59.351844Z","shell.execute_reply.started":"2025-12-09T17:47:57.726155Z","shell.execute_reply":"2025-12-09T17:47:59.350342Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"kaggle_original_tomogram_path = \"/kaggle/input/czii-cryo-et-object-identification/test/static/ExperimentRuns/TS_5_4/VoxelSpacing10.000/denoised.zarr\"\ndata_porta_denoised_tomogram_path = \"/kaggle/working/TS_5_4.zarr\"","metadata":{"_uuid":"d840aed3-e3d6-4992-8983-789b5eaecbe7","_cell_guid":"b5d3b292-e4d3-4c80-9b18-9ae3fee99f73","trusted":true,"collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2025-12-09T17:47:59.354536Z","iopub.execute_input":"2025-12-09T17:47:59.354907Z","iopub.status.idle":"2025-12-09T17:47:59.360839Z","shell.execute_reply.started":"2025-12-09T17:47:59.354864Z","shell.execute_reply":"2025-12-09T17:47:59.359847Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import zarr\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nkaggle = zarr.open(kaggle_original_tomogram_path, mode=\"r\")[\"0\"][:]\nportal = zarr.open(data_porta_denoised_tomogram_path, mode=\"r\")[\"0\"][:]\n\n# middle slice\nidx = kaggle.shape[0] // 2\n\nslice_kaggle = kaggle[idx]\nslice_portal = portal[idx]\n\n# rotate portal tomogram by 180 degrees \nslice_portal_rotated = np.rot90(slice_portal, 2)","metadata":{"_uuid":"c1637f35-39e5-4dcf-8cf0-34070348821c","_cell_guid":"2305ab2a-583d-453c-aedd-08b6c7fd07f9","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-12-09T17:47:59.361788Z","iopub.execute_input":"2025-12-09T17:47:59.362120Z","iopub.status.idle":"2025-12-09T17:48:00.300619Z","shell.execute_reply.started":"2025-12-09T17:47:59.362091Z","shell.execute_reply":"2025-12-09T17:48:00.299257Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(14, 6))\nplt.subplot(1, 2, 1)\nplt.imshow(slice_kaggle, cmap=\"gray\")\nplt.title(\"Kaggle Tomogram (middle slice)\")\nplt.axis(\"off\")\n\nplt.subplot(1, 2, 2)\nplt.imshow(slice_portal, cmap=\"gray\")\nplt.title(\"Data Portal Tomogram (middle slice)\")\nplt.axis(\"off\")\n\nplt.show()\n\nplt.figure(figsize=(6, 6))\nplt.imshow(slice_portal_rotated, cmap=\"gray\")\nplt.title(\"Data Portal Rotated 180°\")\nplt.axis(\"off\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-12-09T17:48:00.301745Z","iopub.execute_input":"2025-12-09T17:48:00.302036Z","iopub.status.idle":"2025-12-09T17:48:01.184516Z","shell.execute_reply.started":"2025-12-09T17:48:00.302012Z","shell.execute_reply":"2025-12-09T17:48:01.183537Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(12, 5))\nplt.hist(slice_kaggle.flatten(), bins=100, alpha=0.5, label=\"Kaggle\", density=True)\nplt.hist(slice_portal.flatten(), bins=100, alpha=0.2, label=\"Portal\", density=True) # same histogram \nplt.hist(slice_portal_rotated.flatten(), bins=100, alpha=0.5, label=\"Portal Rot 180°\", density=True) # same histogram\nplt.title(\"Intensity Histograms Comparison\")\nplt.legend()\nplt.show()\n\nprint(\"Kaggle tomogram intensity range:\", kaggle.min(), kaggle.max())\nprint(\"Portal tomogram intensity range:\", portal.min(), portal.max())","metadata":{"_uuid":"17c38586-4528-46f1-9cf1-7ddb8c795d14","_cell_guid":"386046a8-334c-4d09-aade-37a4ebb1407a","trusted":true,"collapsed":false,"execution":{"iopub.status.busy":"2025-12-09T17:49:57.402835Z","iopub.execute_input":"2025-12-09T17:49:57.403272Z","iopub.status.idle":"2025-12-09T17:49:58.362889Z","shell.execute_reply.started":"2025-12-09T17:49:57.403217Z","shell.execute_reply":"2025-12-09T17:49:58.361682Z"},"jupyter":{"outputs_hidden":false}},"outputs":[],"execution_count":null}]}