From 01bfff64c3e1346cb4504c21afeccfacd70625ca Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Tue, 30 Sep 2025 07:50:28 -0400 Subject: [PATCH 01/39] Prune dependencies --- Project.toml | 18 +- web/Manifest.toml | 686 ++++++++++++++++------------------------------ 2 files changed, 240 insertions(+), 464 deletions(-) diff --git a/Project.toml b/Project.toml index aedcb47..4818e05 100644 --- a/Project.toml +++ b/Project.toml @@ -6,7 +6,6 @@ version = "1.0.0-DEV" [deps] BSplineKit = "093aae92-e908-43d7-9660-e50ee39d5a0a" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -CircStats = "2f6764a1-d620-4564-9394-76eb7c776766" ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" CoordinateTransformations = "150eb455-5306-5404-9cee-2592286d6298" @@ -14,21 +13,15 @@ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" FixedPointNumbers = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -ImageContrastAdjustment = "f332f351-ec65-5f6a-b3d1-319c6670881a" -ImageCore = "a09fc81d-aa75-5fe9-8630-4744c3626534" -ImageFiltering = "6a3955dd-da59-5b1f-98d4-e7296123deb5" -IndirectArrays = "9b13fd28-a010-5f03-acff-a1bbcff69959" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" LRUCache = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" Missings = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" Observables = "510215fc-4207-5dde-b226-833fc4488ee2" Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" @@ -36,25 +29,22 @@ PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" QuadGK = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -Rotations = "6038ab10-8711-5258-84ad-4b1120ba62dc" +Sockets = "6462fe0b-24de-5631-8697-dd941f90decc" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" ThinPlateSplines = "1d861738-f48e-4029-b1d3-81ce6bc7f5ab" TiffImages = "731e570b-9d59-4bfa-96dc-6df516fadf69" -UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" [compat] BSplineKit = "0.18, 0.19" -CircStats = "1" Dates = "1.11.0" -FiniteDifferences = "0.12" +GeometryBasics = "0.4.11, 0.5" HDF5 = "0.17.2" -ImageContrastAdjustment = "0.3" -ImageCore = "0.10" Interpolations = "0.15, 0.16" -MakieCore = "0.8, 0.9" +Makie = "0.24.6" ProgressMeter = "1" +Sockets = "1.11.0" ThinPlateSplines = "0.1, 0.2.0" julia = "1" diff --git a/web/Manifest.toml b/web/Manifest.toml index f6c1924..a19f421 100644 --- a/web/Manifest.toml +++ b/web/Manifest.toml @@ -1,6 +1,6 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.5" +julia_version = "1.11.7" manifest_format = "2.0" project_hash = "b6de7f73656daa59cf3ddd435064a84acb8999d5" @@ -20,35 +20,11 @@ git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] -git-tree-sha1 = "3b86719127f50670efe356bc11073d84b4ed7a5d" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.42" - - [deps.Accessors.extensions] - AxisKeysExt = "AxisKeys" - IntervalSetsExt = "IntervalSets" - LinearAlgebraExt = "LinearAlgebra" - StaticArraysExt = "StaticArrays" - StructArraysExt = "StructArrays" - TestExt = "Test" - UnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "f7817e2e585aa6d924fd714df1e2a84be7896c60" +git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.3.0" +version = "4.4.0" weakdeps = ["SparseArrays", "StaticArrays"] [deps.Adapt.extensions] @@ -76,43 +52,11 @@ version = "0.4.2" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.2" -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "9606d7832795cbef89e06a550475be300364a8aa" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.19.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" - ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceSparseArraysExt = "SparseArrays" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - [[deps.ArrayLayouts]] -deps = ["FillArrays", "LinearAlgebra"] -git-tree-sha1 = "4e25216b8fea1908a0ce0f5d87368587899f75be" +deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "120e392af69350960b1d3b89d41dcc1d66543858" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.11.1" +version = "1.11.2" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -136,15 +80,15 @@ version = "1.1.0" [[deps.AxisArrays]] deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] -git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" -version = "0.4.7" +version = "0.4.8" [[deps.BSplineKit]] deps = ["ArrayLayouts", "BandedMatrices", "FastGaussQuadrature", "ForwardDiff", "LinearAlgebra", "PrecompileTools", "Random", "Reexport", "SparseArrays", "Static", "StaticArrays", "StaticArraysCore", "StatsAPI"] -git-tree-sha1 = "8950181792e94c20b204b4d25cba7f2399c5b386" +git-tree-sha1 = "48b9300555c54256c12a539a3025f8d2075bea6a" uuid = "093aae92-e908-43d7-9660-e50ee39d5a0a" -version = "0.19.0" +version = "0.19.1" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] @@ -165,9 +109,9 @@ uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" [[deps.BaseDirs]] -git-tree-sha1 = "03fea4a4efe25d2069c2d5685155005fc251c0a1" +git-tree-sha1 = "bca794632b8a9bbe159d56bf9e31c422671b35e0" uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" -version = "1.3.0" +version = "1.3.2" [[deps.BitFlags]] git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" @@ -176,9 +120,9 @@ version = "0.1.9" [[deps.Bonito]] deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MsgPack", "Observables", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] -git-tree-sha1 = "548dd16e479145c8ba8f8545b854ccc898a43ff6" +git-tree-sha1 = "fba5fbd21c53c731c1a291e27d50edee096950a3" uuid = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" -version = "4.0.5" +version = "4.1.3" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -221,9 +165,9 @@ version = "1.1.1" [[deps.CairoMakie]] deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] -git-tree-sha1 = "0afa2b4ac444b9412130d68493941e1af462e26a" +git-tree-sha1 = "f8caabc5a1c1fb88bcbf9bc4078e5656a477afd0" uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -version = "0.12.18" +version = "0.15.6" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] @@ -231,28 +175,16 @@ git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.18.5+0" -[[deps.CatIndices]] -deps = ["CustomUnitRanges", "OffsetArrays"] -git-tree-sha1 = "a0f80a09780eed9b1d106a1bf62041c2efc995bc" -uuid = "aafaddc9-749c-510e-ac4f-586e18779b91" -version = "0.2.2" - [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "1713c74e00545bfe14605d2a2be1712de8fbcb58" +git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.25.1" +version = "1.26.0" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] ChainRulesCoreSparseArraysExt = "SparseArrays" -[[deps.CircStats]] -deps = ["Distributions", "HypothesisTests", "LinearAlgebra", "SpecialFunctions", "Statistics"] -git-tree-sha1 = "ecfe2e9a260c4723026b4a71460cf0420def9e40" -uuid = "2f6764a1-d620-4564-9394-76eb7c776766" -version = "1.0.4" - [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" @@ -267,21 +199,25 @@ version = "0.4.1" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "403f2d8e209681fcbd9468a8514efff3ea08452e" +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.29.0" +version = "3.31.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.5" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] -git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.10.0" +version = "0.11.0" weakdeps = ["SpecialFunctions"] [deps.ColorVectorSpace.extensions] @@ -293,16 +229,6 @@ git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.13.1" -[[deps.Combinatorics]] -git-tree-sha1 = "8010b6bb3388abe68d95743dcbea77650bb2eddf" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.3" - -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - [[deps.CommonSubexpressions]] deps = ["MacroTools"] git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" @@ -316,9 +242,9 @@ version = "1.0.0" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +git-tree-sha1 = "0037835448781bb46feb39866934e243886d756a" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.16.0" +version = "4.18.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -329,19 +255,11 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.1+0" -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ComputationalResources]] -git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" -uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" -version = "0.3.2" +[[deps.ComputePipeline]] +deps = ["Observables", "Preferences"] +git-tree-sha1 = "cb1299fee09da21e65ec88c1ff3a259f8d0b5802" +uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" +version = "0.1.4" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -376,11 +294,6 @@ git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" version = "4.1.1" -[[deps.CustomUnitRanges]] -git-tree-sha1 = "1a3f97f907e6dd8983b744d2642651bb162a3f7a" -uuid = "dc8bdbbb-1ca9-579f-8c36-e416f6a65cce" -version = "1.0.2" - [[deps.DataAPI]] git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" @@ -388,15 +301,15 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6" +git-tree-sha1 = "c967271c27a95160e30432e011b58f42cd7501b5" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.7.0" +version = "1.8.0" [[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0" +deps = ["OrderedCollections"] +git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.22" +version = "0.19.1" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -488,9 +401,9 @@ version = "0.0.20230411+1" [[deps.ExactPredicates]] deps = ["IntervalArithmetic", "Random", "StaticArrays"] -git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" +git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" -version = "2.2.8" +version = "2.2.9" [[deps.ExceptionUnwrapping]] deps = ["Test"] @@ -500,9 +413,9 @@ version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d55dffd9ae73ff72f1c0482454dcf2ec6c6c4a63" +git-tree-sha1 = "7bb1361afdb33c7f2b085aa49ea8fe1b0fb14e58" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.5+0" +version = "2.7.1+0" [[deps.Extents]] git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4" @@ -511,27 +424,21 @@ version = "0.1.6" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] -git-tree-sha1 = "53ebe7511fa11d33bec688a9178fac4e49eeee00" +git-tree-sha1 = "83dc665d0312b41367b7263e8a4d172eac1897f4" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.2" +version = "0.4.4" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" +git-tree-sha1 = "eaa040768ea663ca695d442be1bc97edfe6824f2" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "4.4.4+1" - -[[deps.FFTViews]] -deps = ["CustomUnitRanges", "FFTW"] -git-tree-sha1 = "cbdf14d1e8c7c8aacbe8b19862e0179fd08321c2" -uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" -version = "0.3.2" +version = "6.1.3+0" [[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "797762812ed063b9b94f6cc7742bc8883bb5e69e" +deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.9.0" +version = "1.10.0" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -578,9 +485,9 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" +version = "1.14.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -588,12 +495,6 @@ weakdeps = ["PDMats", "SparseArrays", "Statistics"] FillArraysSparseArraysExt = "SparseArrays" FillArraysStatisticsExt = "Statistics" -[[deps.FiniteDifferences]] -deps = ["ChainRulesCore", "LinearAlgebra", "Printf", "Random", "Richardson", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "06d76c780d657729cf20821fb5832c6cc4dfd0b5" -uuid = "26cc04aa-876d-5657-8c51-4c34ba976000" -version = "0.12.32" - [[deps.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" @@ -602,9 +503,9 @@ version = "0.8.5" [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "301b5d5d731a0654825f1f2e906990f7141a106b" +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.16.0+0" +version = "2.17.1+0" [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" @@ -613,9 +514,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "910febccb28d493032495b7009dce7d7f7aee554" +git-tree-sha1 = "dc41303865a16274ecb8450c220021ce1e0cf05f" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.0.1" +version = "1.2.1" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -652,9 +553,9 @@ version = "1.11.0" [[deps.GLFW]] deps = ["GLFW_jll"] -git-tree-sha1 = "13c52cdd876a31240da16dfb51363aed42740325" +git-tree-sha1 = "40412e58ec374029de3d4ad7c13e1a52aa1e149f" uuid = "f7f18e0c-5ee9-5ccd-a5bf-e8befd85ed98" -version = "3.4.4" +version = "3.4.5" [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] @@ -664,32 +565,27 @@ version = "3.4.0+2" [[deps.GLMakie]] deps = ["ColorTypes", "Colors", "FileIO", "FixedPointNumbers", "FreeTypeAbstraction", "GLFW", "GeometryBasics", "LinearAlgebra", "Makie", "Markdown", "MeshIO", "ModernGL", "Observables", "PrecompileTools", "Printf", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "8753fba3356131357b5cd02500fe80c3668535d0" +git-tree-sha1 = "0d27753bf95dc7c5e3952189a1bec78b5ac7b784" uuid = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -version = "0.10.18" - -[[deps.GeoFormatTypes]] -git-tree-sha1 = "8e233d5167e63d708d41f87597433f59a0f213fe" -uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" -version = "0.4.4" - -[[deps.GeoInterface]] -deps = ["DataAPI", "Extents", "GeoFormatTypes"] -git-tree-sha1 = "294e99f19869d0b0cb71aef92f19d03649d028d5" -uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" -version = "1.4.1" +version = "0.13.6" [[deps.GeometryBasics]] -deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "1f5a80f4ed9f5a4aada88fc2db456e637676414b" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.11" +version = "0.5.10" + + [deps.GeometryBasics.extensions] + GeometryBasicsGeoInterfaceExt = "GeoInterface" -[[deps.Gettext_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" -uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" -version = "0.21.0+0" + [deps.GeometryBasics.weakdeps] + GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" [[deps.Giflib_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -698,10 +594,10 @@ uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" version = "5.2.3+0" [[deps.Glib_jll]] -deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "fee60557e4f19d0fe5cd169211fdda80e494f4e8" +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "50c11ffab2a3d50192a228c313f05b5b5dc5acb2" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.84.0+0" +version = "2.86.0+0" [[deps.Glob]] git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" @@ -722,9 +618,9 @@ version = "1.3.15+0" [[deps.GridLayoutBase]] deps = ["GeometryBasics", "InteractiveUtils", "Observables"] -git-tree-sha1 = "dc6bed05c15523624909b3953686c5f5ffa10adc" +git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f" uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" -version = "0.11.1" +version = "0.11.2" [[deps.Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" @@ -751,9 +647,9 @@ version = "1.14.6+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "f93655dc73d7a0b4a368e3c0bce296ae035ad76e" +git-tree-sha1 = "ed5e9c58612c4e081aecdb6e1a479e18462e041e" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.16" +version = "1.10.17" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -762,10 +658,10 @@ uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "8.5.1+0" [[deps.Hwloc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "92f65c4d78ce8cdbb6b68daf88889950b0a99d11" +deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "3d468106a05408f9f7b6f161d9e7715159af247b" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.12.1+0" +version = "2.12.2+0" [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] @@ -779,12 +675,6 @@ git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4" uuid = "47d2ed2b-36de-50cf-bf87-49c2cf4b8b91" version = "0.0.5" -[[deps.HypothesisTests]] -deps = ["Combinatorics", "Distributions", "LinearAlgebra", "Printf", "Random", "Roots", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "15319d5a767eb386bc4b702d5e025a0be62be293" -uuid = "09f84164-cd44-5f33-b23f-e6b0d136a0d5" -version = "0.11.5" - [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -802,24 +692,12 @@ git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" uuid = "c817782e-172a-44cc-b673-b171935fbb9e" version = "0.1.7" -[[deps.ImageContrastAdjustment]] -deps = ["ImageBase", "ImageCore", "ImageTransformations", "Parameters"] -git-tree-sha1 = "eb3d4365a10e3f3ecb3b115e9d12db131d28a386" -uuid = "f332f351-ec65-5f6a-b3d1-319c6670881a" -version = "0.3.12" - [[deps.ImageCore]] deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" version = "0.10.5" -[[deps.ImageFiltering]] -deps = ["CatIndices", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageBase", "ImageCore", "LinearAlgebra", "OffsetArrays", "PrecompileTools", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "TiledIteration"] -git-tree-sha1 = "eea3a5095c0c5f143e62773164ab11f67e43c4bb" -uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" -version = "0.7.10" - [[deps.ImageIO]] deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" @@ -832,12 +710,6 @@ git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" version = "0.9.10" -[[deps.ImageTransformations]] -deps = ["AxisAlgorithms", "CoordinateTransformations", "ImageBase", "ImageCore", "Interpolations", "OffsetArrays", "Rotations", "StaticArrays"] -git-tree-sha1 = "dfde81fafbe5d6516fb864dc79362c5c6b973c82" -uuid = "02fcd773-0e25-5acc-982a-7f6622650795" -version = "0.10.2" - [[deps.Imath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" @@ -855,9 +727,9 @@ uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" version = "0.1.5" [[deps.InlineStrings]] -git-tree-sha1 = "6a9fde685a7ac1eb3495f8e812c5a7c3711c2d5e" +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" -version = "1.4.3" +version = "1.4.5" [deps.InlineStrings.extensions] ArrowTypesExt = "ArrowTypes" @@ -869,9 +741,9 @@ version = "1.4.3" [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "0f14a5456bdc6b9731a5682f439a672750a09e48" +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2025.0.4+0" +version = "2025.2.0+0" [[deps.InteractiveUtils]] deps = ["Markdown"] @@ -879,23 +751,24 @@ uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" version = "1.11.0" [[deps.Interpolations]] -deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] -git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "65d505fa4c0d7072990d659ef3fc086eb6da8208" uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" -version = "0.15.1" -weakdeps = ["Unitful"] +version = "0.16.2" +weakdeps = ["ForwardDiff", "Unitful"] [deps.Interpolations.extensions] + InterpolationsForwardDiffExt = "ForwardDiff" InterpolationsUnitfulExt = "Unitful" [[deps.IntervalArithmetic]] -deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Random", "RoundingEmulator"] -git-tree-sha1 = "694c52705f8b23dc5b39eeac629dc3059a168a40" +deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "815e74f416953c348c9da1d1bc977bbc97c84e18" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.22.35" -weakdeps = ["DiffRules", "ForwardDiff", "IntervalSets", "LinearAlgebra", "RecipesBase", "SparseArrays"] +version = "1.0.0" [deps.IntervalArithmetic.extensions] + IntervalArithmeticArblibExt = "Arblib" IntervalArithmeticDiffRulesExt = "DiffRules" IntervalArithmeticForwardDiffExt = "ForwardDiff" IntervalArithmeticIntervalSetsExt = "IntervalSets" @@ -903,6 +776,15 @@ weakdeps = ["DiffRules", "ForwardDiff", "IntervalSets", "LinearAlgebra", "Recipe IntervalArithmeticRecipesBaseExt = "RecipesBase" IntervalArithmeticSparseArraysExt = "SparseArrays" + [deps.IntervalArithmetic.weakdeps] + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + [[deps.IntervalSets]] git-tree-sha1 = "5fbb102dcb8b1a858111ae81d56682376130517d" uuid = "8197267c-284f-5f27-9208-e0e47529a953" @@ -952,9 +834,9 @@ version = "1.0.0" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.0" +version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] @@ -982,21 +864,21 @@ version = "0.1.6" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "eac1206917768cb54957c65a615460d87b455fc1" +git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.1+0" +version = "3.1.3+0" [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] -git-tree-sha1 = "7d703202e65efa1369de1279c162b915e245eed1" +git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7" uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" -version = "0.6.9" +version = "0.6.10" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" -version = "3.100.2+0" +version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1089,21 +971,21 @@ version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a31572773ac1b745e0343fe5e2c8ddda7a37e997" +git-tree-sha1 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.0+0" +version = "2.41.2+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "4ab7581296671007fc33f07a721631b8855f4b1d" +git-tree-sha1 = "f04133fe05eff1667d2054c53d59f9122383fe05" uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.7.1+0" +version = "4.7.2+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "321ccef73a96ba828cd51f2ab5b9f917fa73945a" +git-tree-sha1 = "2a7a12fc0a4e7fb773450d17975322aa77142106" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.0+0" +version = "2.41.2+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -1138,15 +1020,15 @@ version = "1.1.0" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] -git-tree-sha1 = "5de60bc6cb3899cd318d80d627560fae2e2d99ae" +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2025.0.1+1" +version = "2025.2.0+0" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "3aa3210044138a1749dbd350a9ba8680869eb503" +git-tree-sha1 = "d72d0ecc3f76998aac04e446547259b9ae4c265f" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.0+1" +version = "4.3.1+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -1156,9 +1038,9 @@ version = "0.1.11" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "ff91ca13c7c472cef700f301c8d752bc2aaff1a8" +git-tree-sha1 = "e214f2a20bdd64c04cd3e4ff62d3c9be7e969a59" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.3+0" +version = "5.5.4+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" @@ -1166,28 +1048,16 @@ uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.16" [[deps.Makie]] -deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] -git-tree-sha1 = "be3051d08b78206fb5e688e8d70c9e84d0264117" +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "368542cde25d381e44d84c3c4209764f05f4ef19" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.21.18" - -[[deps.MakieCore]] -deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] -git-tree-sha1 = "9019b391d7d086e841cbeadc13511224bd029ab3" -uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" -version = "0.8.12" +version = "0.24.6" [[deps.MappedArrays]] git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" version = "0.4.2" -[[deps.MarchingCubes]] -deps = ["PrecompileTools", "StaticArrays"] -git-tree-sha1 = "0e893025924b6becbae4109f8020ac0e12674b01" -uuid = "299715c1-40a9-479a-aaf9-4a633d36f717" -version = "0.1.11" - [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" @@ -1195,9 +1065,9 @@ version = "1.11.0" [[deps.MathTeXEngine]] deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] -git-tree-sha1 = "31a99cb7537f812e1d6be893a71804c35979f1be" +git-tree-sha1 = "a370fef694c109e1950836176ed0d5eabbb65479" uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -version = "0.6.4" +version = "0.6.6" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] @@ -1212,9 +1082,9 @@ version = "2.28.6+0" [[deps.MeshIO]] deps = ["ColorTypes", "FileIO", "GeometryBasics", "Printf"] -git-tree-sha1 = "14a12d9153b1a1a22d669eede58b2ea2164ff138" +git-tree-sha1 = "c009236e222df68e554c7ce5c720e4a33cc0c23f" uuid = "7269a6da-0436-5bbc-96c2-40638cbb6118" -version = "0.4.13" +version = "0.5.3" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1285,10 +1155,10 @@ weakdeps = ["Adapt"] OffsetArraysAdaptExt = "Adapt" [[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.5+1" +version = "1.3.6+0" [[deps.OpenBLASConsistentFPCSR_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1320,9 +1190,9 @@ version = "0.8.5+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "047b66eb62f3cae59ed260ebb9075a32a04350f1" +git-tree-sha1 = "ec764453819f802fc1e144bfe750c454181bd66d" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.7+2" +version = "5.0.8+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] @@ -1332,9 +1202,9 @@ version = "1.5.0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "9216a80ff3682833ac4b733caa8c00390620ba5d" +git-tree-sha1 = "2ae7d4ddec2e13ad3bddf5c0796f7547cf682391" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.0+0" +version = "3.5.2+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1344,9 +1214,9 @@ version = "0.5.6+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +git-tree-sha1 = "c392fc5dd032381919e3b22dd32d6443760ce7ea" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.3+0" +version = "1.5.2+0" [[deps.OrderedCollections]] git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" @@ -1384,15 +1254,9 @@ version = "0.5.12" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "275a9a6d85dc86c24d03d1837a0010226a96f540" +git-tree-sha1 = "1f7f9bbd5f7a2e5a9f7d96e51c9754454ea7f60b" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.56.3+0" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" +version = "1.56.4+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -1446,15 +1310,15 @@ version = "1.2.1" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" +version = "1.5.0" [[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "5e9fe23c86d3ca630baa1efcad78575a27f158b2" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.4.0" +version = "3.0.11" [[deps.Printf]] deps = ["Unicode"] @@ -1463,9 +1327,9 @@ version = "1.11.0" [[deps.ProgressMeter]] deps = ["Distributed", "Printf"] -git-tree-sha1 = "13c5103482a8ed1536a54c08d0e742ae3dca2d42" +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" uuid = "92933f4c-e287-5a05-a399-4b506db050ca" -version = "1.10.4" +version = "1.11.0" [[deps.PtrArrays]] git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" @@ -1490,12 +1354,6 @@ version = "2.11.2" [deps.QuadGK.weakdeps] Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" -[[deps.Quaternions]] -deps = ["LinearAlgebra", "Random", "RealDot"] -git-tree-sha1 = "994cc27cdacca10e68feb291673ec3a76aa2fae9" -uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" -version = "0.7.6" - [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" @@ -1521,12 +1379,6 @@ weakdeps = ["FixedPointNumbers"] [deps.Ratios.extensions] RatiosFixedPointNumbersExt = "FixedPointNumbers" -[[deps.RealDot]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" -uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" -version = "0.1.0" - [[deps.RecipesBase]] deps = ["PrecompileTools"] git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" @@ -1550,12 +1402,6 @@ git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" -[[deps.Richardson]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "48f038bfd83344065434089c2a79417f38715c41" -uuid = "708f8203-808e-40c0-ba2d-98a6953ed40d" -version = "1.4.2" - [[deps.Rmath]] deps = ["Random", "Rmath_jll"] git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" @@ -1568,36 +1414,6 @@ git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" version = "0.5.1+0" -[[deps.Roots]] -deps = ["Accessors", "CommonSolve", "Printf"] -git-tree-sha1 = "3ac13765751ffc81e3531223782d9512f6023f71" -uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.2.7" - - [deps.Roots.extensions] - RootsChainRulesCoreExt = "ChainRulesCore" - RootsForwardDiffExt = "ForwardDiff" - RootsIntervalRootFindingExt = "IntervalRootFinding" - RootsSymPyExt = "SymPy" - RootsSymPyPythonCallExt = "SymPyPythonCall" - - [deps.Roots.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" - SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" - SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" - -[[deps.Rotations]] -deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] -git-tree-sha1 = "5680a9276685d392c87407df00d57c9924d9f11e" -uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" -version = "1.7.1" -weakdeps = ["RecipesBase"] - - [deps.Rotations.extensions] - RotationsRecipesBaseExt = "RecipesBase" - [[deps.RoundingEmulator]] git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" @@ -1613,11 +1429,16 @@ git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" version = "3.7.1" +[[deps.SciMLPublic]] +git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.0" + [[deps.Scratch]] deps = ["Dates"] -git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.1" +version = "1.3.0" [[deps.SentinelArrays]] deps = ["Dates", "Random"] @@ -1630,10 +1451,10 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" [[deps.ShaderAbstractions]] -deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "79123bc60c5507f035e6d1d9e563bb2971954ec8" +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" uuid = "65257c39-d410-5151-9873-9b3e5be5013e" -version = "0.4.1" +version = "0.5.0" [[deps.SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] @@ -1647,7 +1468,7 @@ uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[deps.ShroffCelegansModels]] -deps = ["BSplineKit", "CSV", "CircStats", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "FFTW", "FileIO", "FiniteDifferences", "FixedPointNumbers", "GeometryBasics", "HDF5", "ImageContrastAdjustment", "ImageCore", "ImageFiltering", "IndirectArrays", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "MakieCore", "Missings", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Rotations", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages", "UnicodePlots"] +deps = ["BSplineKit", "CSV", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "FFTW", "FileIO", "FixedPointNumbers", "GeometryBasics", "HDF5", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "Missings", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Sockets", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages"] path = ".." uuid = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" version = "1.0.0-DEV" @@ -1665,15 +1486,15 @@ version = "1.2.0" [[deps.SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb" uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" +version = "0.9.5" [[deps.Sixel]] deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] -git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743" uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" -version = "0.1.3" +version = "0.1.5" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" @@ -1681,9 +1502,9 @@ version = "1.11.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.1" +version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] @@ -1713,27 +1534,16 @@ uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" version = "0.1.2" [[deps.Static]] -deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] -git-tree-sha1 = "f737d444cb0ad07e61b3c1bef8eb91203c321eff" +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "1e44e7b1dbb5249876d84c32466f8988a6b41bbb" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.2.0" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] -git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.8.0" -weakdeps = ["OffsetArrays", "StaticArrays"] - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" +version = "1.3.0" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "0feb6b9031bd5c51f9072393eb5ab3efd31bf9e4" +git-tree-sha1 = "b8693004b385c842357406e3af647701fe783f98" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.13" +version = "1.9.15" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -1763,9 +1573,9 @@ version = "1.7.1" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "b81c5035922cc89c2d9523afc6c54be512411466" +git-tree-sha1 = "2c962245732371acd51700dbb268af311bddd719" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.5" +version = "0.34.6" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] @@ -1786,9 +1596,9 @@ version = "0.4.1" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "9537ef82c42cdd8c5d443cbc359110cbb36bae10" +git-tree-sha1 = "8ad2e38cbb812e29348719cc63580ec1dfeb9de4" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.21" +version = "0.7.1" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1859,11 +1669,11 @@ version = "1.11.0" [[deps.ThinPlateSplines]] deps = ["LinearAlgebra", "Test", "Tullio"] -git-tree-sha1 = "82fbbf52cf7ed71d9bb9336b1d308e34426c3714" +git-tree-sha1 = "d89e50bd102d3d0b63a65007f4c04fca488541b1" repo-rev = "mkitti-geometrybasics-ext" repo-url = "https://github.com/mkitti/ThinPlateSplines.jl.git" uuid = "1d861738-f48e-4029-b1d3-81ce6bc7f5ab" -version = "0.2.0" +version = "0.2.1" weakdeps = ["GeometryBasics"] [deps.ThinPlateSplines.extensions] @@ -1877,15 +1687,9 @@ version = "2.1.1" [[deps.TiffImages]] deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] -git-tree-sha1 = "02aca429c9885d1109e58f400c333521c13d48a0" +git-tree-sha1 = "98b9352a24cb6a2066f9ababcc6802de9aed8ad8" uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" -version = "0.11.4" - -[[deps.TiledIteration]] -deps = ["OffsetArrays", "StaticArrayInterface"] -git-tree-sha1 = "1176cc31e867217b06928e2f140c90bd1bc88283" -uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" -version = "0.5.0" +version = "0.11.6" [[deps.TranscodingStreams]] git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" @@ -1916,20 +1720,15 @@ version = "0.3.8" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" [[deps.URIs]] -git-tree-sha1 = "cbbebadbcc76c5ca1cc4b4f3b0614b3e603b5000" +git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.5.2" +version = "1.6.1" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" version = "1.11.0" -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" version = "1.11.0" @@ -1940,63 +1739,44 @@ git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" -[[deps.UnicodePlots]] -deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "LinearAlgebra", "MarchingCubes", "NaNMath", "PrecompileTools", "Printf", "SparseArrays", "StaticArrays", "StatsBase"] -git-tree-sha1 = "24c0e2df19eb3f894d28a64e7486926f38de8a49" -uuid = "b8865327-cd53-5732-bb35-84acbb429228" -version = "3.7.2" - - [deps.UnicodePlots.extensions] - FreeTypeExt = ["FileIO", "FreeType"] - ImageInTerminalExt = "ImageInTerminal" - IntervalSetsExt = "IntervalSets" - TermExt = "Term" - UnitfulExt = "Unitful" - - [deps.UnicodePlots.weakdeps] - FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" - FreeType = "b38be410-82b0-50bf-ab77-7b57e271db43" - ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - Term = "22787eb5-b846-44ae-b979-8e399b8463ab" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d2282232f8a4d71f79e85dc4dd45e5b12a6297fb" +git-tree-sha1 = "cec2df8cf14e0844a8c4d770d12347fda5931d72" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.23.1" -weakdeps = ["ConstructionBase", "ForwardDiff", "InverseFunctions", "Printf"] +version = "1.25.0" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" ForwardDiffExt = "ForwardDiff" InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] PrintfExt = "Printf" + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" + [[deps.VideoIO]] deps = ["ColorTypes", "Dates", "Downloads", "FFMPEG", "FFMPEG_jll", "FileIO", "Glob", "ImageCore", "PrecompileTools", "Scratch"] -git-tree-sha1 = "4b1cbd724eda8ea7316a3379b0b36c5116d67ed9" +git-tree-sha1 = "6b765689dbcc4f5d4b66469ea5d88a0cc26615ce" uuid = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" -version = "1.1.1" +version = "1.2.0" [[deps.WGLMakie]] deps = ["Bonito", "Colors", "FileIO", "FreeTypeAbstraction", "GeometryBasics", "Hyperscript", "LinearAlgebra", "Makie", "Observables", "PNGFiles", "PrecompileTools", "RelocatableFolders", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "676bd14390033825be847e138108a1c53701407d" +git-tree-sha1 = "2e3a387f0f71ffb9b1cf5dd48e81581010d667dd" uuid = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" -version = "0.10.18" +version = "0.13.6" [[deps.Wayland_jll]] -deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "XML2_jll"] -git-tree-sha1 = "49be0be57db8f863a902d59c0083d73281ecae8e" +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.23.1+0" - -[[deps.Wayland_protocols_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "54b8a029ac145ebe8299463447fd1590b2b1d92f" -uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" -version = "1.44.0+0" +version = "1.24.0+0" [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] @@ -2029,9 +1809,9 @@ version = "1.6.1" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "b8b243e47228b4a3877f1dd6aee0c5d56db7fcf4" +git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.6+1" +version = "2.13.9+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2071,9 +1851,9 @@ version = "1.3.7+0" [[deps.Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "9caba99d38404b285db8801d5c45ef4f4f425a6d" +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "6.0.1+0" +version = "6.0.2+0" [[deps.Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] @@ -2099,6 +1879,12 @@ git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" version = "0.9.12+0" +[[deps.Xorg_libpciaccess_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "4909eb8f1cbf6bd4b1c30dd18b2ead9019ef2fad" +uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" +version = "0.18.1+0" + [[deps.Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" @@ -2148,21 +1934,21 @@ version = "0.2.3+0" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f5733a5a9047722470b95a81e1b172383971105c" +git-tree-sha1 = "1aa23f01927b2dac46db77a56b31088feee0a491" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.3+0" +version = "1.1.4+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "522c1df09d05a71785765d19c9524661234738e9" +git-tree-sha1 = "4bba74fa59ab0755167ad24f98800fe5d727175b" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.11.0+0" +version = "3.12.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.2+0" +version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] @@ -2177,15 +1963,15 @@ version = "0.2.2+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.3+0" +version = "2.0.4+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "002748401f7b520273e2b506f61cab95d4701ccf" +git-tree-sha1 = "07b6a107d926093898e82b3b1db657ebe33134ec" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.48+0" +version = "1.6.50+0" [[deps.libsixel_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] @@ -2194,16 +1980,16 @@ uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" version = "1.10.5+0" [[deps.libvorbis_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] -git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" -version = "1.3.7+2" +version = "1.3.8+0" [[deps.libwebp_jll]] deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] -git-tree-sha1 = "d2408cac540942921e7bd77272c32e58c33d8a77" +git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" -version = "1.5.0+0" +version = "1.6.0+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] @@ -2222,19 +2008,19 @@ uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+2" [[deps.x264_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" -version = "2021.5.5+0" +version = "10164.0.1+0" [[deps.x265_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" -version = "3.5.0+0" +version = "4.1.0+0" [[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "c950ae0a3577aec97bfccf3381f66666bc416729" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "fbf139bce07a534df0e699dbb5f5cc9346f95cc1" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.8.1+0" +version = "1.9.2+0" From ba17756d0eb63d7d8a39a5ff14312fd77f147218 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Tue, 30 Sep 2025 07:52:43 -0400 Subject: [PATCH 02/39] Qualify dependencies under ShroffCelegansModels --- scripts/launch_show_average_annotations.jl | 10 +- src/ShroffCelegansModels.jl | 104 ++++++++++-------- src/animate_untwist.jl | 6 +- src/demo_averaging/average_sliders.jl | 6 +- .../get_cell_trajectory_dict.jl | 4 +- ...et_group_annotation_positions_over_time.jl | 2 +- src/demo_averaging/modelio.jl | 10 +- src/demo_averaging/seam_cell_pts.jl | 4 +- .../show_average_annotations.jl | 8 +- src/demo_averaging/smooth_polar_dct1.jl | 6 +- src/demo_averaging/stretched_analysis.jl | 4 +- src/makie.jl | 32 +++--- 12 files changed, 106 insertions(+), 90 deletions(-) diff --git a/scripts/launch_show_average_annotations.jl b/scripts/launch_show_average_annotations.jl index 58cfbd9..816065f 100644 --- a/scripts/launch_show_average_annotations.jl +++ b/scripts/launch_show_average_annotations.jl @@ -1,12 +1,12 @@ using Pkg #using Revise cd(dirname(@__DIR__)) -Pkg.activate(dirname(@__DIR__)) -using JSON3 +#Pkg.activate(dirname(@__DIR__)) using ShroffCelegansModels -using Printf -using HDF5 -using ThinPlateSplines # tps_solve +using ShroffCelegansModels.JSON3 +using ShroffCelegansModels.Printf +using ShroffCelegansModels.HDF5 +using ShroffCelegansModels.ThinPlateSplines # tps_solve using InteractiveUtils @info "Loading demo_averaging.jl..." diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index 0becc40..9d9484e 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -1,47 +1,63 @@ module ShroffCelegansModels - using CSV - #using Makie - using Makie - using DataFrames - using GeometryBasics - #using ColorSchemes - using LinearAlgebra - using BSplineKit - using QuadGK - using LRUCache - using FFTW - using Dates - using PrecompileTools: @setup_workload, @compile_workload - - include("datasets.jl") - include("MIPAVIO.jl") - - include("util.jl") - include("ParametricSplines.jl") - include("types.jl") - - using .ParametricSplines - using .Types - - include("build_model.jl") - include("mesh.jl") - include("straighten.jl") - - include("average.jl") - - using .Datasets - - include("show.jl") - include("points.jl") - - using .Points - - include("model_time_series.jl") - include("area.jl") - - include("annotation_untwist.jl") - include("parse_worm_dataset_path.jl") - - include("precompile.jl") + using BSplineKit + using CSV + using ColorSchemes: ColorSchemes + using Colors: Colors + using CoordinateTransformations: CoordinateTransformations + using DataFrames + using Dates + using FFTW + using FileIO: FileIO + using FixedPointNumbers: FixedPointNumbers + using GeometryBasics + using HDF5: HDF5 + using Interpolations: Interpolations + using JSON3: JSON3 + using LRUCache + using LinearAlgebra + using Makie + using Missings: Missings + using Observables: Observables + using Pkg: Pkg + using PrecompileTools: @setup_workload, @compile_workload + using ProgressMeter: ProgressMeter + using QuadGK + using Sockets: Sockets + using StaticArrays: StaticArrays + using Statistics: Statistics + using StatsBase: StatsBase + using ThinPlateSplines: ThinPlateSplines + using TiffImages: TiffImages + + include("datasets.jl") + include("MIPAVIO.jl") + + include("util.jl") + include("ParametricSplines.jl") + include("types.jl") + + using .ParametricSplines + using .Types + + include("build_model.jl") + include("mesh.jl") + include("straighten.jl") + + include("average.jl") + + using .Datasets + + include("show.jl") + include("points.jl") + + using .Points + + include("model_time_series.jl") + include("area.jl") + + include("annotation_untwist.jl") + include("parse_worm_dataset_path.jl") + + include("precompile.jl") end diff --git a/src/animate_untwist.jl b/src/animate_untwist.jl index 11e4cca..f1a4e5d 100644 --- a/src/animate_untwist.jl +++ b/src/animate_untwist.jl @@ -147,7 +147,7 @@ function animate_untwist(smodel; fig = nothing) sleep(1) for rep in 1:3 - mesh!(ax, M; shading = MakieCore.automatic, color = [i for c in 1:length(model) for i in 1:3], colormap = :buda) + mesh!(ax, M; shading = Makie.automatic, color = [i for c in 1:length(model) for i in 1:3], colormap = :buda) sleep(1) for i in 0:10:100 @@ -257,7 +257,7 @@ function controllable_untwist(smodel; fig = nothing) # for rep in 1:3 time = Observable(0) - mesh!(ax, M; shading = MakieCore.automatic, color = [i for c in 1:length(model) for i in 1:3], colormap = :buda) + mesh!(ax, M; shading = Makie.automatic, color = [i for c in 1:length(model) for i in 1:3], colormap = :buda) # sleep(1) on(time) do t @@ -356,4 +356,4 @@ function record_untwist(smodel) record(untwist_fig, "untwist.mp4", 0:600) do t untwist_time[] = t end -end \ No newline at end of file +end diff --git a/src/demo_averaging/average_sliders.jl b/src/demo_averaging/average_sliders.jl index e30acb1..9006a40 100644 --- a/src/demo_averaging/average_sliders.jl +++ b/src/demo_averaging/average_sliders.jl @@ -13,7 +13,7 @@ function average_sliders(models::Vector{<:AbstractCelegansModel}) n_ellipse_pts = length(transverse_splines(model)) colorscheme = :cyclic_wrwbw_40_90_c42_n256 - shading = MakieCore.automatic + shading = Makie.automatic color=colorschemes[colorscheme][1:256÷n_ellipse_pts:256] colorrange = (1,n_ellipse_pts) @@ -92,7 +92,7 @@ function average_sliders(smts::ShroffCelegansModels.StraightenedModelTimeSeries) n_ellipse_pts = length(transverse_splines(model)) colorscheme = :cyclic_wrwbw_40_90_c42_n256 - shading = MakieCore.automatic + shading = Makie.automatic color=colorschemes[colorscheme][1:256÷n_ellipse_pts:256] colorrange = (1,n_ellipse_pts) @@ -173,4 +173,4 @@ function record_average_sliders(smts::ShroffCelegansModels.StraightenedModelTime set_close_to!(sg.sliders[1], i) println(i) end -end \ No newline at end of file +end diff --git a/src/demo_averaging/get_cell_trajectory_dict.jl b/src/demo_averaging/get_cell_trajectory_dict.jl index 06da757..79e2775 100644 --- a/src/demo_averaging/get_cell_trajectory_dict.jl +++ b/src/demo_averaging/get_cell_trajectory_dict.jl @@ -1,4 +1,4 @@ -using BSplineKit +using ShroffCelegansModels.BSplineKit function get_cell_trajectory_dict(dataset::ShroffCelegansModels.Datasets.NormalizedDataset; use_myuntwist = false) annotations = load_straightened_annotations_over_time(dataset; use_myuntwist) @@ -31,4 +31,4 @@ function get_cell_trajectory_dict(dataset::ShroffCelegansModels.Datasets.Normali end |> Dict return cell_trajectory_dict -end \ No newline at end of file +end diff --git a/src/demo_averaging/get_group_annotation_positions_over_time.jl b/src/demo_averaging/get_group_annotation_positions_over_time.jl index bd4f157..3d1d4fe 100644 --- a/src/demo_averaging/get_group_annotation_positions_over_time.jl +++ b/src/demo_averaging/get_group_annotation_positions_over_time.jl @@ -53,4 +53,4 @@ function get_group_annotation_positions_over_time(datasets, cache) end end # Vector{Vector{Dict{String, Point3{Float64}}}} # dataset, normalized time, name => position return group_annotation_positions_over_time -end \ No newline at end of file +end diff --git a/src/demo_averaging/modelio.jl b/src/demo_averaging/modelio.jl index cd6aa9e..8f376f0 100644 --- a/src/demo_averaging/modelio.jl +++ b/src/demo_averaging/modelio.jl @@ -1,8 +1,8 @@ -using HDF5 -using Printf -using BSplineKit: SplineInterpolation -using GeometryBasics: Point3f, Point3 -using Makie +using ShroffCelegansModels.HDF5 +using ShroffCelegansModels.Printf +using ShroffCelegansModels.BSplineKit: SplineInterpolation +using ShroffCelegansModels.GeometryBasics: Point3f, Point3 +using ShroffCelegansModels.Makie function save_celegans_model( parent::Union{HDF5.File, HDF5.Group}, diff --git a/src/demo_averaging/seam_cell_pts.jl b/src/demo_averaging/seam_cell_pts.jl index 5c26023..40d3f61 100644 --- a/src/demo_averaging/seam_cell_pts.jl +++ b/src/demo_averaging/seam_cell_pts.jl @@ -1,7 +1,7 @@ -using BSplineKit.SplineInterpolations: interpolation_points +using ShroffCelegansModels.BSplineKit.SplineInterpolations: interpolation_points function seam_cell_pts(model, n_upsample) pts = interpolation_points(model)[1:2^n_upsample:end] _transverse_splines = transverse_splines(model) [_transverse_splines[1].(pts); _transverse_splines[17].(pts)] -end \ No newline at end of file +end diff --git a/src/demo_averaging/show_average_annotations.jl b/src/demo_averaging/show_average_annotations.jl index 0c5d26d..a5796ba 100644 --- a/src/demo_averaging/show_average_annotations.jl +++ b/src/demo_averaging/show_average_annotations.jl @@ -1,7 +1,7 @@ -using ProgressMeter -using Statistics: mean, var -using CoordinateTransformations -using FFTW: fftfreq, fft, ifft +using ShroffCelegansModels.ProgressMeter +using ShroffCelegansModels.Statistics: mean, var +using ShroffCelegansModels.CoordinateTransformations +using ShroffCelegansModels.FFTW: fftfreq, fft, ifft include("../makie.jl") include("get_group_annotation_positions_over_time.jl") diff --git a/src/demo_averaging/smooth_polar_dct1.jl b/src/demo_averaging/smooth_polar_dct1.jl index 5487688..ccbf7cd 100644 --- a/src/demo_averaging/smooth_polar_dct1.jl +++ b/src/demo_averaging/smooth_polar_dct1.jl @@ -1,5 +1,5 @@ -using CoordinateTransformations -using FFTW: fftfreq, fft, ifft +using ShroffCelegansModels.CoordinateTransformations +using ShroffCelegansModels.FFTW: fftfreq, fft, ifft function smooth_polar_dct1(positions_over_time, σ_r, σ_θ, σ_z = 0) G(σ,s) = exp.(-fftfreq(s,s).^2 ./2 ./ σ^2) @@ -48,4 +48,4 @@ function smooth_polar_dct1(positions_over_time, σ_r, σ_θ, σ_z = 0) end return positions_over_time # return @view positions_over_time[1:N] -end \ No newline at end of file +end diff --git a/src/demo_averaging/stretched_analysis.jl b/src/demo_averaging/stretched_analysis.jl index 67823c0..49e61e3 100644 --- a/src/demo_averaging/stretched_analysis.jl +++ b/src/demo_averaging/stretched_analysis.jl @@ -1,4 +1,4 @@ -using CircStats +# using CircStats function stretched_analysis(smodel) model = parent(smodel) @@ -12,4 +12,4 @@ function stretched_analysis(smodel) st1_pts = t1_pts .- cs_pts .+ scs_pts to_cylindrical = CoordinateTransformations.CylindricalFromCartesian() θ = to_cylindrical.(st1_pts) .|> x->x.θ -end \ No newline at end of file +end diff --git a/src/makie.jl b/src/makie.jl index fa64fb4..92dbd77 100644 --- a/src/makie.jl +++ b/src/makie.jl @@ -1,9 +1,9 @@ using ShroffCelegansModels: AbstractCelegansModel, transverse_splines, get_model_contour_mesh, num_transverse_splines -using ColorSchemes: colorschemes -using MakieCore: MakieCore -using GeometryBasics: Point3, Point3f +using ShroffCelegansModels.ColorSchemes: colorschemes +using ShroffCelegansModels.Makie: Makie +using ShroffCelegansModels.GeometryBasics: Point3, Point3f using ShroffCelegansModels.Points: cross_sections -using Observables: throttle +using ShroffCelegansModels.Observables: throttle function plot_celegans_model(model::AbstractCelegansModel) r = LinRange(0, 1, length(model)) @@ -39,10 +39,10 @@ const cyclic_colorschemes = [ ] -function MakieCore.mesh( +function Makie.mesh( model::AbstractCelegansModel; colorscheme = :cyclic_tritanopic_cwrk_40_100_c20_n256, - shading = MakieCore.automatic, + shading = Makie.automatic, n_ellipse_pts = num_transverse_splines(model), color=repeat(colorschemes[colorscheme][1:256÷n_ellipse_pts:256], length(model)), colorrange = (1,n_ellipse_pts), @@ -61,11 +61,11 @@ function MakieCore.mesh( ) end -function MakieCore.mesh!( +function Makie.mesh!( axis, model::AbstractCelegansModel; colorscheme = :cyclic_wrwbw_40_90_c42_n256, - shading = MakieCore.automatic, + shading = Makie.automatic, n_ellipse_pts = num_transverse_splines(model), color=repeat(colorschemes[colorscheme][1:256÷n_ellipse_pts:256], length(model)), colorrange = (1,n_ellipse_pts), @@ -85,12 +85,12 @@ function MakieCore.mesh!( ) end -MakieCore.convert_arguments(P::Type{<: MakieCore.Mesh}, model::AbstractCelegansModel) = - MakieCore.convert_arguments(P, get_model_contour_mesh(model)) -MakieCore.convert_arguments(P::Type{<: MakieCore.Mesh}, model::AbstractCelegansModel, f::Function) = - MakieCore.convert_arguments(P, get_model_contour_mesh(model, transform_points = f)) +Makie.convert_arguments(P::Type{<: Makie.Mesh}, model::AbstractCelegansModel) = + Makie.convert_arguments(P, get_model_contour_mesh(model)) +Makie.convert_arguments(P::Type{<: Makie.Mesh}, model::AbstractCelegansModel, f::Function) = + Makie.convert_arguments(P, get_model_contour_mesh(model, transform_points = f)) -function MakieCore.convert_arguments(P::Type{<: MakieCore.Lines}, model::AbstractCelegansModel, f::Function = identity) +function Makie.convert_arguments(P::Type{<: Makie.Lines}, model::AbstractCelegansModel, f::Function = identity) splines = transverse_splines(model) r = LinRange(0, 1, length(model)) pts = map(splines) do spline @@ -106,11 +106,11 @@ function MakieCore.convert_arguments(P::Type{<: MakieCore.Lines}, model::Abstrac pts = permutedims(hcat(pts, gaps), [2,1]) |> vec pts = vcat(pts...) pts = f.(pts) - MakieCore.convert_arguments(P, pts) + Makie.convert_arguments(P, pts) end -#function MakieCore.convert_arguments(P::Type{<: MakieCore.Text}, model::AbstractCelegansModel, f::Function = identity) -function MakieCore.text!(ax, model::AbstractCelegansModel, f::Function = identity) +#function Makie.convert_arguments(P::Type{<: Makie.Text}, model::AbstractCelegansModel, f::Function = identity) +function Makie.text!(ax, model::AbstractCelegansModel, f::Function = identity) pts = ShroffCelegansModels.interpolation_points(model) splines = transverse_splines(model) # This probably swapped. 1 should be right, 17 should be left From 66c7464cb1fe36d2c9fdf4973aa85d17d2e3e32c Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Tue, 30 Sep 2025 07:53:10 -0400 Subject: [PATCH 03/39] Update fix_annotation_ap_axis.jl for Makie 0.24 --- src/demo_averaging/fix_annotation_ap_axis.jl | 108 +++++++++++++------ web/scripts/web_fix_annotation_ap_axis.jl | 3 +- 2 files changed, 75 insertions(+), 36 deletions(-) diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index 5741430..4742d42 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -1,10 +1,12 @@ -using Makie using ShroffCelegansModels -using Printf -using GeometryBasics -using JSON3 -using Dates -using Sockets +using ShroffCelegansModels.Makie +using ShroffCelegansModels.Printf +using ShroffCelegansModels.GeometryBasics +using ShroffCelegansModels.JSON3 +using ShroffCelegansModels.Dates +using ShroffCelegansModels.Sockets +using ShroffCelegansModels.HDF5 + const ANNOTATION_PERSIST_SERVER_PORT = 3129 @@ -223,6 +225,7 @@ function fix_annotation_ap_axis( twisted_seam_cell_text = Observable(String.([tmodel.names[2:2:end]; tmodel.names[1:2:end]])) + twisted_mesh_plot = mesh!( ax_twisted, twisted_mesh; @@ -232,18 +235,31 @@ function fix_annotation_ap_axis( alpha = 0.5, inspectable = false ) - connect!(twisted_mesh_plot.visible, contour_mesh_toggle.active) + #connect!(twisted_mesh_plot.visible, contour_mesh_toggle.active) + twisted_mesh_plot.visible = false + on(contour_mesh_toggle.active) do v + twisted_mesh_plot.visible = v + end lines!(ax_twisted, twisted_central_spline) scatter!(ax_twisted, twisted_central_pts) cs_lines = lines!(ax_twisted, twisted_central_line_match) - connect!(cs_lines.visible, central_spline_lines_toggle.active) + #connect!(cs_lines.visible, central_spline_lines_toggle.active) + cs_lines.visible = false + on(central_spline_lines_toggle.active) do v + cs_lines.visible = v + end meshscatter!(ax_twisted, twisted_seam_cells; markersize = 1.0, color = :gray, alpha = 0.5, transparency = true) ms_annotation_cells = meshscatter!(ax_twisted, twisted_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 0.5, transparency = true) text!(ax_twisted, twisted_seam_cell_labels; text = twisted_seam_cell_text, align = (:right, :bottom)) ann_txt = text!(ax_twisted, twisted_annotation_cells; text = twisted_annotation_text, align = (:right, :bottom)) - connect!(ann_txt.visible, annotation_text_toggle.active) + #connect!(ann_txt.visible, annotation_text_toggle.active) + annotation_text_toggle.active = false + on(annotation_text_toggle.active) do v + ann_txt.visible = v + end @info "twisted_seam_cell_labels" twisted_seam_cell_labels[] tmodel.names + distances = Observable(Float64[]) selected_distance = Observable(0.0) distance_central_pts = Observable(Point3f[]) @@ -254,21 +270,26 @@ function fix_annotation_ap_axis( Npts = length(tmodel) z = LinRange(0, 1, Npts) max_distance = Observable(Float64[]) - lines!(ax_distance, central_spline_arc_lengths, distances) + distances_lines = lines!(ax_distance, central_spline_arc_lengths[], distances[]) hlines!(ax_distance, selected_distance) - lines!(ax_distance, central_spline_arc_lengths, max_distance) - scatter!(ax_distance, central_spline_arc_lengths, distances, color = distances, colormap = Reverse(:viridis)) - scatter!(ax_twisted, distance_central_pts, color = distances, colormap = Reverse(:viridis)) + max_distance_lines = lines!(ax_distance, central_spline_arc_lengths[], max_distance) + distances_scatter = scatter!(ax_distance, central_spline_arc_lengths[], distances[], color = distances[], colormap = Reverse(:viridis)) + distance_central_pts_scatter = scatter!(ax_twisted, distance_central_pts, color = distances[], colormap = Reverse(:viridis)) selected_twisted_annotation_cell = Observable([twisted_annotation_cells[][selected_annotation_idx[]]]) meshscatter!(ax_twisted, selected_twisted_annotation_cell, color = :red, markersize=1.1) + + #= ratio = @lift try $distances ./ $max_distance catch err ones(size($max_distance)) end - lines!(ax_ratio, central_spline_arc_lengths, ratio) - hlines!(ax_ratio, 1.0, linestyle = :dash) + =# + ratio = Observable(distances[]) + ratio_lines = lines!(ax_ratio, central_spline_arc_lengths[], ratio) + # hlines!(ax_ratio, 1.0, linestyle = :dash) + hlines!(ax_ratio, 1.0, linestyle = :solid) nt_obs = Observable(0.0) @@ -344,7 +365,8 @@ function fix_annotation_ap_axis( on(throttle(0.1, expansion_factor_slider.value)) do expansion_factor_value # TODO compute value from timepoint slider - value = time_normalized_slider.value[] + # value = time_normalized_slider.value[] + value = nt_obs[] tmodel = mts_nt(value) annotation_positions = twisted_annotation_positions(value) if !ismissing(tmodel) @@ -365,6 +387,7 @@ function fix_annotation_ap_axis( function plot_distance(idx) + println("plot_distance") selected_annotation_idx[] = idx #println(idx) try @@ -376,19 +399,32 @@ function fix_annotation_ap_axis( Npts = length(tmodel) z = LinRange(0, 1, Npts) central_pts = swapyz_scale.(cs.(z)) - central_spline_arc_lengths.val = [0; cumsum(norm.(diff(central_pts)))] - distance_central_pts[] = central_pts + # central_spline_arc_lengths.val = [0; cumsum(norm.(diff(central_pts)))] + _central_spline_arc_lengths = [0; cumsum(norm.(diff(central_pts)))] + central_spline_arc_lengths[] = _central_spline_arc_lengths + # distance_central_pts[] = central_pts max_r = ShroffCelegansModels.max_radius_function(tmodel) expansion_factor_value = expansion_factor_slider.value[] - max_distance[] = max_r.(z) .* voxel_size .* expansion_factor_value + _max_distance = max_r.(z) .* voxel_size .* expansion_factor_value + # max_distance[] = max_r.(z) .* voxel_size .* expansion_factor_value + Makie.update!(max_distance_lines, arg1 = _central_spline_arc_lengths, arg2 = _max_distance) pt = twisted_annotation_cells[][idx] - distances[] = norm.(central_pts .- pt) + _distances = norm.(central_pts .- pt) + distances[] = _distances + #distances[] = norm.(central_pts .- pt) + Makie.update!(distances_lines, arg1 = _central_spline_arc_lengths, arg2 = _distances) + Makie.update!(distances_scatter, arg1 = _central_spline_arc_lengths, arg2 = _distances, color = _distances) + Makie.update!(distance_central_pts_scatter, arg1 = central_pts, color = _distances) + + _ratio = _distances ./ _max_distance + Makie.update!(ratio_lines, arg1 = _central_spline_arc_lengths, arg2 = _ratio) + #autolimits!(ax_distance) #ylims!(ax_distance, nothing) - limits!(ax_distance, (0, 200), (0, maximum(distances[]))) - limits!(ax_ratio, (0, 200), (0, maximum(ratio[]))) + limits!(ax_distance, (0, 200), (0, maximum(_distances))) + limits!(ax_ratio, (0, 200), (0, maximum(_ratio))) selected_distance[] = norm(twisted_central_pts[][idx] - pt) selected_annotation_name[] = twisted_annotation_text[][idx] @@ -414,14 +450,15 @@ function fix_annotation_ap_axis( original_z_positions = let idx=1 Observable((x->x[idx][2]).(original_annotation_positions_over_time)) end - lines!(ax_z, cell_key_range, original_z_positions; color = :gray, linestyle = :dash, label = "Original Z positions") + lines!(ax_z, cell_key_range, original_z_positions; color = :gray, linestyle = :solid, label = "Original Z positions") + z_lines = lines!(ax_z, cell_key_range, z_positions) vlines!(ax_z, timepoint_slider.value, color = :red) DataInspector(ax_z) selected_z_position = Observable(z_positions[][timepoint_slider.value[]-first(cell_key_range)+1]) - vlines!(ax_distance, selected_z_position; color = :red, linestyle = :dash) - vlines!(ax_ratio, selected_z_position; color = :red, linestyle = :dash) + vlines!(ax_distance, selected_z_position; color = :red, linestyle = :solid) + vlines!(ax_ratio, selected_z_position; color = :red, linestyle = :solid) #common_annotations_text = collect(keys(annotation_dict)) common_annotations_text = _annotation_text @@ -435,13 +472,17 @@ function fix_annotation_ap_axis( group_name = annotation_change_group_name(dataset.path, timepoint, annotation_name) if haskey(h5f, group_name) @info "Loading annotation changes from annotations_changes.h5" group_name annotation_idx annotation_name - new_position = h5f[group_name]["new_position"][:,end] - straight_annotation_positions_over_time[time_idx][annotation_idx] = Point3f( - new_position[1], - new_position[2], - new_position[3] - ) - @info "Loaded" new_position + try + new_position = h5f[group_name]["new_position"][:,end] + straight_annotation_positions_over_time[time_idx][annotation_idx] = Point3f( + new_position[1], + new_position[2], + new_position[3] + ) + @info "Loaded" new_position + catch err + println(err) + end end end end @@ -570,9 +611,6 @@ function fix_annotation_ap_axis( f end -using Sockets -using HDF5 - @kwdef struct AnnotationChange ip_address::UInt64 dataset_path::String diff --git a/web/scripts/web_fix_annotation_ap_axis.jl b/web/scripts/web_fix_annotation_ap_axis.jl index 3a329ad..7c5ac5b 100644 --- a/web/scripts/web_fix_annotation_ap_axis.jl +++ b/web/scripts/web_fix_annotation_ap_axis.jl @@ -1,5 +1,6 @@ using WGLMakie using Bonito +using Revise if abspath(PROGRAM_FILE) == @__FILE__ @@ -22,7 +23,7 @@ function web_debug_annotation_ap_axis(datasets = datasets) ) ) server = Server( - "shroff-data.int.janelia.org", 9381; + string(Sockets.getaddrinfo("shroff-data.int.janelia.org")), 9381; proxy_url="https://shroff-data.int.janelia.org/fix_annotation_ap_axis/" ) route!(server, "/" => App(menu)) From 4540214525d32ee07c7b096d1243f0124b78dfc9 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Tue, 30 Sep 2025 08:00:59 -0400 Subject: [PATCH 04/39] Fix CI --- .github/workflows/CI.yml | 6 ++++-- Project.toml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index d616f7c..5c6eb6d 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -18,8 +18,10 @@ jobs: fail-fast: false matrix: version: - - '1.0' - - '1.9' + - '1' + - '1.10' + - '1.11' + - '1.12' - 'nightly' os: - ubuntu-latest diff --git a/Project.toml b/Project.toml index 4818e05..cc1532d 100644 --- a/Project.toml +++ b/Project.toml @@ -44,7 +44,7 @@ HDF5 = "0.17.2" Interpolations = "0.15, 0.16" Makie = "0.24.6" ProgressMeter = "1" -Sockets = "1.11.0" +Sockets = "1" ThinPlateSplines = "0.1, 0.2.0" julia = "1" From 6f525b4660d7ae7ba60663d77056a9e43a5840bf Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 9 Oct 2025 11:43:50 -0400 Subject: [PATCH 05/39] Make cache loading optional --- src/parse_worm_dataset_path.jl | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/parse_worm_dataset_path.jl b/src/parse_worm_dataset_path.jl index fdf4651..44e523f 100644 --- a/src/parse_worm_dataset_path.jl +++ b/src/parse_worm_dataset_path.jl @@ -43,11 +43,18 @@ include("demo_averaging/get_cell_trajectory_dict.jl") include("demo_averaging/save_cache.jl") # initialize my_annotation_position_cache -@info "Loading straightened annotation positions..." -load_annotation_cache() +try + @info "Loading straightened annotation positions..." + load_annotation_cache() +catch err + @warn "There was an issue loading the annotation cache" err +end @info "Loading warped annotation positions..." -load_annotations_cache() - +try + load_annotations_cache() +catch err + @warn "There was an issue loading the my annotation cache" err +end function save_annotation_position_cache( filename::String, From 10a6ceccfa87182f8a52dd02ef62ae52ddd271f9 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 13 Nov 2025 17:54:17 -0500 Subject: [PATCH 06/39] Working web apps --- .../debug_annotation_ap_axis.jl | 56 ++- .../debug_average_models_with_annotations.jl | 5 +- .../show_average_annotations.jl | 42 ++- web/Manifest.toml | 348 ++++++++---------- web/Project.toml | 2 +- web/scripts/web_debug_annotation_ap_axis.jl | 5 +- .../web_debug_annotation_ap_axis_live.jl | 4 +- ...b_debug_annotation_ap_axis_retrack_live.jl | 4 +- web/scripts/web_meshscatter_average_dev.jl | 5 +- web/scripts/web_meshscatter_average_edited.jl | 4 +- ...b_meshscatter_average_edited_2024_10_24.jl | 4 +- web/scripts/web_show_average_annotations.jl | 7 +- 12 files changed, 237 insertions(+), 249 deletions(-) diff --git a/src/demo_averaging/debug_annotation_ap_axis.jl b/src/demo_averaging/debug_annotation_ap_axis.jl index f2350b0..e5adbb3 100644 --- a/src/demo_averaging/debug_annotation_ap_axis.jl +++ b/src/demo_averaging/debug_annotation_ap_axis.jl @@ -203,16 +203,24 @@ function debug_annotation_ap_axis( alpha = 0.5, inspectable = false ) - connect!(twisted_mesh_plot.visible, contour_mesh_toggle.active) + # connect!(twisted_mesh_plot.visible, contour_mesh_toggle.active) + on(contour_mesh_toggle.active) do s + twisted_mesh_plot.visible = s + end lines!(ax_twisted, twisted_central_spline) scatter!(ax_twisted, twisted_central_pts) cs_lines = lines!(ax_twisted, twisted_central_line_match) - connect!(cs_lines.visible, central_spline_lines_toggle.active) + # connect!(cs_lines.visible, central_spline_lines_toggle.active) + on(central_spline_lines_toggle.active) do s + central_spline_lines_toggle.visible = s + end meshscatter!(ax_twisted, twisted_seam_cells; markersize = 1.0, color = :gray, alpha = 0.5, transparency = true) ms_annotation_cells = meshscatter!(ax_twisted, twisted_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 0.5, transparency = true) text!(ax_twisted, twisted_seam_cell_labels; text = twisted_seam_cell_text, align = (:right, :bottom)) ann_txt = text!(ax_twisted, twisted_annotation_cells; text = twisted_annotation_text, align = (:right, :bottom)) - connect!(ann_txt.visible, annotation_text_toggle.active) + on(annotation_text_toggle.active) do s + ann_txt.visible = s + end @info "twisted_seam_cell_labels" twisted_seam_cell_labels[] tmodel.names distances = Observable(Float64[]) @@ -226,21 +234,17 @@ function debug_annotation_ap_axis( z = LinRange(0, 1, Npts) # max_distance = Observable(max_r.(z) .* voxel_size .* first(sliders.sliders[2].range[])) max_distance = Observable(Float64[]) - lines!(ax_distance, central_spline_arc_lengths, distances) + distances_lines = lines!(ax_distance, central_spline_arc_lengths[], distances[]) hlines!(ax_distance, selected_distance) - lines!(ax_distance, central_spline_arc_lengths, max_distance) - scatter!(ax_distance, central_spline_arc_lengths, distances, color = distances, colormap = Reverse(:viridis)) - scatter!(ax_twisted, distance_central_pts, color = distances, colormap = Reverse(:viridis)) + max_distance_lines = lines!(ax_distance, central_spline_arc_lengths[], max_distance) + distances_scatter = scatter!(ax_distance, central_spline_arc_lengths[], distances[], color = distances[], colormap = Reverse(:viridis)) + distance_central_pts_scatter = scatter!(ax_twisted, distance_central_pts, color = distances[], colormap = Reverse(:viridis)) selected_twisted_annotation_cell = Observable([twisted_annotation_cells[][selected_annotation_idx[]]]) meshscatter!(ax_twisted, selected_twisted_annotation_cell, color = :red, markersize=1.1) - ratio = @lift try - $distances ./ $max_distance - catch err - ones(size($max_distance)) - end - lines!(ax_ratio, central_spline_arc_lengths, ratio) - hlines!(ax_ratio, 1.0, linestyle = :dash) + ratio = Observable(distances[]) + ratio_lines = lines!(ax_ratio, central_spline_arc_lengths[], ratio) + hlines!(ax_ratio, 1.0, linestyle = :solid) nt_obs = Observable(0.0) @@ -342,19 +346,31 @@ function debug_annotation_ap_axis( Npts = length(tmodel) z = LinRange(0, 1, Npts) central_pts = swapyz_scale.(cs.(z)) - central_spline_arc_lengths.val = [0; cumsum(norm.(diff(central_pts)))] - distance_central_pts[] = central_pts + _central_spline_arc_lengths = [0; cumsum(norm.(diff(central_pts)))] + central_spline_arc_lengths[] = _central_spline_arc_lengths + # distance_central_pts[] = central_pts max_r = ShroffCelegansModels.max_radius_function(tmodel) expansion_factor_value = sliders.sliders[3].value[] - max_distance[] = max_r.(z) .* voxel_size .* expansion_factor_value + _max_distance = max_r.(z) .* voxel_size .* expansion_factor_value + # max_distance[] = max_r.(z) .* voxel_size .* expansion_factor_value + Makie.update!(max_distance_lines, arg1 = _central_spline_arc_lengths, arg2 = _max_distance) pt = twisted_annotation_cells[][idx] - distances[] = norm.(central_pts .- pt) + _distances = norm.(central_pts .- pt) + distances[] = _distances + # distances[] = norm.(central_pts .- pt) + Makie.update!(distances_lines, arg1 = _central_spline_arc_lengths, arg2 = _distances) + Makie.update!(distances_scatter, arg1 = _central_spline_arc_lengths, arg2 = _distances, color = _distances) + Makie.update!(distance_central_pts_scatter, arg1 = central_pts, color = _distances) + + _ratio = _distances ./ _max_distance + Makie.update!(ratio_lines, arg1 = _central_spline_arc_lengths, arg2 = _ratio) + #autolimits!(ax_distance) #ylims!(ax_distance, nothing) - limits!(ax_distance, (0, 200), (0, maximum(distances[]))) - limits!(ax_ratio, (0, 200), (0, maximum(ratio[]))) + limits!(ax_distance, (0, 200), (0, maximum(_distances))) + limits!(ax_ratio, (0, 200), (0, maximum(_ratio))) selected_distance[] = norm(twisted_central_pts[][idx] - pt) selected_annotation_name[] = twisted_annotation_text[][idx] diff --git a/src/demo_averaging/debug_average_models_with_annotations.jl b/src/demo_averaging/debug_average_models_with_annotations.jl index e39e75c..3aefe2c 100644 --- a/src/demo_averaging/debug_average_models_with_annotations.jl +++ b/src/demo_averaging/debug_average_models_with_annotations.jl @@ -183,7 +183,8 @@ function debug_average_models_with_annotations( meshscatter!(ax, _annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 1) text!(ax, _seam_cell_labels; text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]], align = (:right, :bottom)) ann_txt = text!(ax, _annotation_cells; text = _annotation_text, align = (:right, :bottom)) - connect!(ann_txt.visible, annotation_text_toggle.active) + #connect!(ann_txt.visible, annotation_text_toggle.active) + ann_txt.visible = annotation_text_toggle.active #lines!(ax, _lines, color = :black) ylims!(ax, (0, 200)) @@ -528,4 +529,4 @@ function debug_average_models_with_annotations( display(f) f -end \ No newline at end of file +end diff --git a/src/demo_averaging/show_average_annotations.jl b/src/demo_averaging/show_average_annotations.jl index a5796ba..ea4dd1e 100644 --- a/src/demo_averaging/show_average_annotations.jl +++ b/src/demo_averaging/show_average_annotations.jl @@ -35,8 +35,7 @@ function show_average_annotations( xlims!(ax_2d_3, (0,1)) ylims!(ax_2d_3, (0, 250)) # xlabel!("Time (Normalized)") - - + N_timepoints = 200 r = LinRange(0.0, 1.0, N_timepoints + 1) sliders = SliderGrid(f[4,1:3], @@ -51,25 +50,24 @@ function show_average_annotations( annotation_text_toggle = Toggle(f) pre_warp_toggle = Toggle(f) polar_view_toggle = Toggle(f) - menu_options = Observable(String[""]) - annotation_menu = Menu(f; options = menu_options) - f[5, 1:3] = grid!( - [1,1] => Label(f, "Annnotation text"), - [1,2] => annotation_text_toggle, - [1,3] => Label(f, "Pre-warp"), - [1,4] => pre_warp_toggle, - [1,5] => Label(f, "Annotation"), - [1,6] => annotation_menu, - [1,7] => Label(f, "Polar View"), - [1,8] => polar_view_toggle, - ) + #menu_options = Observable(String["temp"]) + #annotation_menu = Menu(f; options = menu_options) + + f[5, 1:3] = toggles = GridLayout() + toggles[1, 1:7] = [ + Label(f, "Annnotation text"), + annotation_text_toggle, + Label(f, "Pre-warp"), + pre_warp_toggle, + Label(f, "Polar View"), + polar_view_toggle, + Label(f, "Annotation"), + ] _common_path = common_path(datasets) _path = Observable(_common_path) Label(f[6, 1:3], _path) - - n_upsample = 2 # dataset = first(datasets) @@ -149,15 +147,18 @@ function show_average_annotations( =# model = avg_models[end] - + seam_cell_text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]] - menu_options[] = [common_annotations; seam_cell_text] + #menu_options[] = [common_annotations; seam_cell_text] + annotation_menu = Menu(f; options = [common_annotations; seam_cell_text]) + toggles[1,8] = annotation_menu _mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(model; transform_points=swapyz_scale)) #_lines = Observable(swapyz.(cross_sections_at_knots(model))) _seam_cells = Observable(swapyz_scale.(seam_cell_pts(model, n_upsample))) _seam_cell_labels = Observable(_seam_cells[] .- Ref(Point3f(2,0,0))) + function annotation_positions(smts_nt, annotation_dict, nt) _smodel = smts_nt(nt) idx = round(Int, nt*N_timepoints + 1) @@ -308,7 +309,10 @@ function show_average_annotations( meshscatter!(ax, _selected_annotation; markersize = 1.0, color = :red, alpha = 1, inspectable = false) text!(ax, _seam_cell_labels; text = seam_cell_text, align = (:right, :bottom)) ann_txt = text!(ax, _annotation_cells; text = _annotation_text, align = (:right, :bottom)) - connect!(ann_txt.visible, annotation_text_toggle.active) + ann_txt.visible=false + on(annotation_text_toggle.active) do status + ann_txt.visible = status + end #lines!(ax, _lines, color = :black) # ylims!(ax, (0, 200)) ranges_labels = ax.scene[OldAxis][:ticks, :ranges_labels][] diff --git a/web/Manifest.toml b/web/Manifest.toml index a19f421..b7b20d3 100644 --- a/web/Manifest.toml +++ b/web/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.7" +julia_version = "1.12.1" manifest_format = "2.0" -project_hash = "b6de7f73656daa59cf3ddd435064a84acb8999d5" +project_hash = "095481296a73ae4e60407eb3e5f24923c536313b" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -54,9 +54,9 @@ version = "1.1.2" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] -git-tree-sha1 = "120e392af69350960b1d3b89d41dcc1d66543858" +git-tree-sha1 = "355ab2d61069927d4247cd69ad0e1f140b31e30d" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.11.2" +version = "1.12.0" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -92,9 +92,9 @@ version = "0.19.1" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] -git-tree-sha1 = "e35c672b239c5105f597963c33e740eeb46cf0ab" +git-tree-sha1 = "4826c9fe6023a87029e54870ad1a9800c7ea6623" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "1.9.4" +version = "1.10.1" [deps.BandedMatrices.extensions] BandedMatricesSparseArraysExt = "SparseArrays" @@ -119,10 +119,10 @@ uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.9" [[deps.Bonito]] -deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MsgPack", "Observables", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] -git-tree-sha1 = "fba5fbd21c53c731c1a291e27d50edee096950a3" +deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MbedTLS", "MsgPack", "Observables", "OrderedCollections", "Random", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] +git-tree-sha1 = "0449f6f2f113f099c56665860242fbddf17ff991" uuid = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" -version = "4.1.3" +version = "4.1.8" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -185,6 +185,12 @@ weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] ChainRulesCoreSparseArraysExt = "SparseArrays" +[[deps.CodeTracking]] +deps = ["InteractiveUtils", "UUIDs"] +git-tree-sha1 = "980f01d6d3283b3dbdfd7ed89405f96b7256ad57" +uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" +version = "2.0.1" + [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" @@ -193,9 +199,9 @@ version = "0.7.8" [[deps.ColorBrewer]] deps = ["Colors", "JSON"] -git-tree-sha1 = "e771a63cc8b539eca78c85b0cabd9233d6c8f06f" +git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" uuid = "a2cac450-b92f-5266-8821-25eda20663c8" -version = "0.4.1" +version = "0.4.2" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] @@ -242,18 +248,23 @@ version = "1.0.0" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "0037835448781bb46feb39866934e243886d756a" +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.18.0" +version = "4.18.1" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] CompatLinearAlgebraExt = "LinearAlgebra" +[[deps.Compiler]] +git-tree-sha1 = "382d79bfe72a406294faca39ef0c3cef6e6ce1f1" +uuid = "807dbc54-b67e-4c79-8afb-eafe4df6f2e1" +version = "0.1.1" + [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" +version = "1.3.0+1" [[deps.ComputePipeline]] deps = ["Observables", "Preferences"] @@ -301,9 +312,9 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "c967271c27a95160e30432e011b58f42cd7501b5" +git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.0" +version = "1.8.1" [[deps.DataStructures]] deps = ["OrderedCollections"] @@ -321,12 +332,6 @@ deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" version = "1.11.0" -[[deps.Dbus_jll]] -deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "473e9afc9cf30814eb67ffa5f2db7df82c3ad9fd" -uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" -version = "1.16.2+0" - [[deps.DelaunayTriangulation]] deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] git-tree-sha1 = "5620ff4ee0084a6ab7097a27ba0c19290200b037" @@ -358,9 +363,9 @@ version = "1.11.0" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "3e6d038b77f22791b8e3472b7c633acea1ecac06" +git-tree-sha1 = "3bc002af51045ca3b47d2e1787d6ce02e68b943a" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.120" +version = "0.25.122" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -393,12 +398,6 @@ git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.5" -[[deps.EpollShim_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" -uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" -version = "0.0.20230411+1" - [[deps.ExactPredicates]] deps = ["IntervalArithmetic", "Random", "StaticArrays"] git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" @@ -413,9 +412,9 @@ version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7bb1361afdb33c7f2b085aa49ea8fe1b0fb14e58" +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.7.1+0" +version = "2.7.3+0" [[deps.Extents]] git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4" @@ -448,15 +447,15 @@ version = "3.3.11+0" [[deps.FastGaussQuadrature]] deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "fd923962364b645f3719855c88f7074413a6ad92" +git-tree-sha1 = "0044e9f5e49a57e88205e8f30ab73928b05fe5b6" uuid = "442a2c76-b920-505d-bb47-c5924d526838" -version = "1.0.2" +version = "1.1.0" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "b66970a70db13f45b7e57fbda1736e1cf72174ea" +git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.17.0" +version = "1.17.1" weakdeps = ["HTTP"] [deps.FileIO.extensions] @@ -514,9 +513,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "dc41303865a16274ecb8450c220021ce1e0cf05f" +git-tree-sha1 = "ba6ce081425d0afb2bedd00d9884464f764a9225" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.2.1" +version = "1.2.2" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -551,24 +550,6 @@ deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" version = "1.11.0" -[[deps.GLFW]] -deps = ["GLFW_jll"] -git-tree-sha1 = "40412e58ec374029de3d4ad7c13e1a52aa1e149f" -uuid = "f7f18e0c-5ee9-5ccd-a5bf-e8befd85ed98" -version = "3.4.5" - -[[deps.GLFW_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] -git-tree-sha1 = "fcb0584ff34e25155876418979d4c8971243bb89" -uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.0+2" - -[[deps.GLMakie]] -deps = ["ColorTypes", "Colors", "FileIO", "FixedPointNumbers", "FreeTypeAbstraction", "GLFW", "GeometryBasics", "LinearAlgebra", "Makie", "Markdown", "MeshIO", "ModernGL", "Observables", "PrecompileTools", "Printf", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "0d27753bf95dc7c5e3952189a1bec78b5ac7b784" -uuid = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -version = "0.13.6" - [[deps.GeometryBasics]] deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] git-tree-sha1 = "1f5a80f4ed9f5a4aada88fc2db456e637676414b" @@ -647,9 +628,9 @@ version = "1.14.6+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "ed5e9c58612c4e081aecdb6e1a479e18462e041e" +git-tree-sha1 = "5e6fe50ae7f23d171f44e311c2960294aaa0beb5" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.17" +version = "1.10.19" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -763,9 +744,9 @@ weakdeps = ["ForwardDiff", "Unitful"] [[deps.IntervalArithmetic]] deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] -git-tree-sha1 = "815e74f416953c348c9da1d1bc977bbc97c84e18" +git-tree-sha1 = "bf0210c01fb7d67c31fed97d7c1d1716b98ea689" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "1.0.0" +version = "1.0.1" [deps.IntervalArithmetic.extensions] IntervalArithmeticArblibExt = "Arblib" @@ -812,9 +793,9 @@ uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" version = "1.3.1" [[deps.IrrationalConstants]] -git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.4" +version = "0.2.6" [[deps.Isoband]] deps = ["isoband_jll"] @@ -839,10 +820,16 @@ uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.7.1" [[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "06ea418d0c95878c8f3031023951edcf25b9e0ef" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" +version = "1.2.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" [[deps.JSON3]] deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] @@ -868,6 +855,17 @@ git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "3.1.3+0" +[[deps.JuliaInterpreter]] +deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] +git-tree-sha1 = "277779adfedf4a30d66b64edc75dc6bb6d52a16e" +uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" +version = "0.10.6" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7" @@ -928,24 +926,24 @@ uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" version = "0.6.4" [[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" +version = "8.11.1+1" [[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" version = "1.11.0" [[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" +version = "1.9.0+0" [[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" +version = "1.11.3+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" @@ -990,7 +988,7 @@ version = "2.41.2+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" +version = "1.12.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] @@ -1014,9 +1012,15 @@ version = "1.11.0" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.1.0" +version = "1.2.0" + +[[deps.LoweredCodeUtils]] +deps = ["CodeTracking", "Compiler", "JuliaInterpreter"] +git-tree-sha1 = "e24491cb83551e44a69b9106c50666dea9d953ab" +uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" +version = "3.4.4" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] @@ -1026,9 +1030,9 @@ version = "2025.2.0+0" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "d72d0ecc3f76998aac04e446547259b9ae4c265f" +git-tree-sha1 = "9341048b9f723f2ae2a72a5269ac2f15f80534dc" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.1+0" +version = "4.3.2+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -1059,7 +1063,7 @@ uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" version = "0.4.2" [[deps.Markdown]] -deps = ["Base64"] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" version = "1.11.0" @@ -1076,15 +1080,10 @@ uuid = "739be429-bea8-5141-9913-cc70e7f3736d" version = "1.1.9" [[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3cce3511ca2c6f87b19c34ffc623417ed2798cbd" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" - -[[deps.MeshIO]] -deps = ["ColorTypes", "FileIO", "GeometryBasics", "Printf"] -git-tree-sha1 = "c009236e222df68e554c7ce5c720e4a33cc0c23f" -uuid = "7269a6da-0436-5bbc-96c2-40638cbb6118" -version = "0.5.3" +version = "2.28.10+0" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1102,12 +1101,6 @@ version = "1.2.0" uuid = "a63ad114-7e13-5084-954f-fe012c677804" version = "1.11.0" -[[deps.ModernGL]] -deps = ["Libdl"] -git-tree-sha1 = "ac6cb1d8807a05cf1acc9680e09d2294f9d33956" -uuid = "66fc600b-dfda-50eb-8b99-91cfa97b1301" -version = "1.1.8" - [[deps.MosaicViews]] deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" @@ -1116,7 +1109,7 @@ version = "0.3.4" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" +version = "2025.5.20" [[deps.MsgPack]] deps = ["Serialization"] @@ -1138,7 +1131,7 @@ version = "1.1.1" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" +version = "1.3.0" [[deps.Observables]] git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" @@ -1169,7 +1162,7 @@ version = "0.3.29+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" +version = "0.3.29+0" [[deps.OpenEXR]] deps = ["Colors", "FileIO", "OpenEXR_jll"] @@ -1186,7 +1179,7 @@ version = "3.2.4+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.5+0" +version = "0.8.7+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] @@ -1201,10 +1194,9 @@ uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" version = "1.5.0" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2ae7d4ddec2e13ad3bddf5c0796f7547cf682391" +deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.2+0" +version = "3.5.1+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1226,7 +1218,7 @@ version = "1.8.1" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" +version = "10.44.0+1" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] @@ -1273,7 +1265,7 @@ version = "0.44.2+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" +version = "1.12.0" weakdeps = ["REPL"] [deps.Pkg.extensions] @@ -1304,9 +1296,9 @@ version = "1.4.3" [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" +version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] @@ -1316,9 +1308,9 @@ version = "1.5.0" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "5e9fe23c86d3ca630baa1efcad78575a27f158b2" +git-tree-sha1 = "6b8e2f0bae3f678811678065c09571c1619da219" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.0.11" +version = "3.1.0" [[deps.Printf]] deps = ["Unicode"] @@ -1355,7 +1347,7 @@ version = "2.11.2" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" [[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "StyledStrings", "Unicode"] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" version = "1.11.0" @@ -1402,11 +1394,21 @@ git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" +[[deps.Revise]] +deps = ["CodeTracking", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] +git-tree-sha1 = "b7e5b731326a99431517b0b4c1f3902e842103a2" +uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" +version = "3.12.0" +weakdeps = ["Distributed"] + + [deps.Revise.extensions] + DistributedExt = "Distributed" + [[deps.Rmath]] deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.8.0" +version = "0.9.0" [[deps.Rmath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1425,9 +1427,9 @@ version = "0.7.0" [[deps.SIMD]] deps = ["PrecompileTools"] -git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87" +git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.7.1" +version = "3.7.2" [[deps.SciMLPublic]] git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" @@ -1509,13 +1511,13 @@ version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" +version = "1.12.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" +git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.5.1" +version = "2.6.1" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -1551,9 +1553,9 @@ weakdeps = ["ChainRulesCore", "Statistics"] StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" +version = "1.4.4" [[deps.Statistics]] deps = ["LinearAlgebra"] @@ -1573,15 +1575,15 @@ version = "1.7.1" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "2c962245732371acd51700dbb268af311bddd719" +git-tree-sha1 = "a136f98cefaf3e2924a66bd75173d1c891ab7453" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.6" +version = "0.34.7" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "8e45cecc66f3b42633b8ce14d431e8e57a3e242e" +git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.5.0" +version = "1.5.2" weakdeps = ["ChainRulesCore", "InverseFunctions"] [deps.StatsFuns.extensions] @@ -1596,9 +1598,9 @@ version = "0.4.1" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "8ad2e38cbb812e29348719cc63580ec1dfeb9de4" +git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.7.1" +version = "0.7.2" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1621,6 +1623,20 @@ git-tree-sha1 = "159331b30e94d7b11379037feeb9b690950cace8" uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" version = "1.11.0" +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "cd47aa083c9c7bdeb7b92de26deb46d6a33163c9" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.5.1" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + [[deps.StyledStrings]] uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" version = "1.11.0" @@ -1632,7 +1648,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" +version = "7.8.3+2" [[deps.TOML]] deps = ["Dates"] @@ -1741,9 +1757,9 @@ version = "0.4.1" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "cec2df8cf14e0844a8c4d770d12347fda5931d72" +git-tree-sha1 = "83360bda12f61c250835830cc40b64f487cc2230" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.25.0" +version = "1.25.1" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" @@ -1772,12 +1788,6 @@ git-tree-sha1 = "2e3a387f0f71ffb9b1cf5dd48e81581010d667dd" uuid = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" version = "0.13.6" -[[deps.Wayland_jll]] -deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] -git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" -uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.24.0+0" - [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" @@ -1831,12 +1841,6 @@ git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" version = "1.0.13+0" -[[deps.Xorg_libXcursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "6c74ca84bbabc18c4547014765d194ff0b4dc9da" -uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" -version = "1.2.4+0" - [[deps.Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" @@ -1849,30 +1853,6 @@ git-tree-sha1 = "a4c0ee07ad36bf8bbce1c3bb52d21fb1e0b987fb" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" version = "1.3.7+0" -[[deps.Xorg_libXfixes_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" -uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "6.0.2+0" - -[[deps.Xorg_libXi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] -git-tree-sha1 = "a376af5c7ae60d29825164db40787f15c80c7c54" -uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.8.3+0" - -[[deps.Xorg_libXinerama_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] -git-tree-sha1 = "a5bc75478d323358a90dc36766f3c99ba7feb024" -uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.6+0" - -[[deps.Xorg_libXrandr_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "aff463c82a773cb86061bce8d53a0d976854923e" -uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.5+0" - [[deps.Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" @@ -1891,24 +1871,6 @@ git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" version = "1.17.1+0" -[[deps.Xorg_libxkbfile_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "e3150c7400c41e207012b41659591f083f3ef795" -uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" -version = "1.1.3+0" - -[[deps.Xorg_xkbcomp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] -git-tree-sha1 = "801a858fc9fb90c11ffddee1801bb06a738bda9b" -uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" -version = "1.4.7+0" - -[[deps.Xorg_xkeyboard_config_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] -git-tree-sha1 = "00af7ebdc563c9217ecc67776d1bbf037dbcebf4" -uuid = "33bec58e-1273-512f-9401-5d533626f822" -version = "2.44.0+0" - [[deps.Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" @@ -1918,7 +1880,7 @@ version = "1.6.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" +version = "1.3.1+2" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1940,9 +1902,9 @@ version = "1.1.4+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4bba74fa59ab0755167ad24f98800fe5d727175b" +git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.12.1+0" +version = "3.13.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -1953,13 +1915,7 @@ version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" - -[[deps.libdecor_jll]] -deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] -git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" -uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" -version = "0.2.2+0" +version = "5.15.0+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1994,18 +1950,18 @@ version = "1.6.0+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" +version = "1.64.0+1" [[deps.oneTBB_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d5a767a3bb77135a99e433afe0eb14cd7f6914c3" +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2022.0.0+0" +version = "2022.0.0+1" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" +version = "17.5.0+2" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2018,9 +1974,3 @@ deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" version = "4.1.0+0" - -[[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "fbf139bce07a534df0e699dbb5f5cc9346f95cc1" -uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.9.2+0" diff --git a/web/Project.toml b/web/Project.toml index 2048813..16faeff 100644 --- a/web/Project.toml +++ b/web/Project.toml @@ -3,11 +3,11 @@ Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" Bonito = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" MbedTLS = "739be429-bea8-5141-9913-cc70e7f3736d" +Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" ShroffCelegansModels = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" ThinPlateSplines = "1d861738-f48e-4029-b1d3-81ce6bc7f5ab" VideoIO = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" diff --git a/web/scripts/web_debug_annotation_ap_axis.jl b/web/scripts/web_debug_annotation_ap_axis.jl index f531c0b..baf0c4b 100644 --- a/web/scripts/web_debug_annotation_ap_axis.jl +++ b/web/scripts/web_debug_annotation_ap_axis.jl @@ -1,6 +1,6 @@ using WGLMakie using Bonito - +using Sockets if abspath(PROGRAM_FILE) == @__FILE__ global run_web_main::Bool = true @@ -21,8 +21,9 @@ function web_debug_annotation_ap_axis(datasets = datasets) end ) ) + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string server = Server( - "shroff-data.int.janelia.org", 9180; + shroff_data_ip, 9180; proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis/" ) route!(server, "/" => App(menu)) diff --git a/web/scripts/web_debug_annotation_ap_axis_live.jl b/web/scripts/web_debug_annotation_ap_axis_live.jl index 19a0eb2..f5ecf57 100644 --- a/web/scripts/web_debug_annotation_ap_axis_live.jl +++ b/web/scripts/web_debug_annotation_ap_axis_live.jl @@ -1,5 +1,6 @@ using WGLMakie using Bonito +using Sockets if abspath(PROGRAM_FILE) == @__FILE__ @@ -21,8 +22,9 @@ function web_debug_annotation_ap_axis(datasets = datasets) end ) ) + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string server = Server( - "shroff-data.int.janelia.org", 9181; + shroff_data_ip, 9181; proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis_live/" ) route!(server, "/" => App(menu)) diff --git a/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl b/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl index 048aae1..b9a0fa8 100644 --- a/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl +++ b/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl @@ -1,6 +1,7 @@ using Revise using WGLMakie using Bonito +using Sockets if abspath(PROGRAM_FILE) == @__FILE__ @@ -65,8 +66,9 @@ function web_debug_annotation_ap_axis(datasets = retracked_datasets) end ) ) + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string server = Server( - "shroff-data.int.janelia.org", 9281; + shroff_data_ip, 9281; proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis_retrack_live/" ) route!(server, "/" => App(menu)) diff --git a/web/scripts/web_meshscatter_average_dev.jl b/web/scripts/web_meshscatter_average_dev.jl index 027a18e..ee9fa13 100644 --- a/web/scripts/web_meshscatter_average_dev.jl +++ b/web/scripts/web_meshscatter_average_dev.jl @@ -1,6 +1,7 @@ using WGLMakie using Bonito using ShroffCelegansModels +using Sockets #push!(LOAD_PATH, "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl") push!(LOAD_PATH, dirname(dirname(pathof(ShroffCelegansModels)))) @@ -24,7 +25,9 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - server = Server(app, "shroff-data.int.janelia.org", 8480; + + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string, + server = Server(app, shroff_data_ip, 8480; proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_dev/" ) route!(server, "/nerve_ring" => nerve_ring_app) diff --git a/web/scripts/web_meshscatter_average_edited.jl b/web/scripts/web_meshscatter_average_edited.jl index 115f5ee..5fba170 100644 --- a/web/scripts/web_meshscatter_average_edited.jl +++ b/web/scripts/web_meshscatter_average_edited.jl @@ -1,6 +1,7 @@ using WGLMakie using Bonito using ShroffCelegansModels +using Sockets #push!(LOAD_PATH, "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl") push!(LOAD_PATH, dirname(dirname(pathof(ShroffCelegansModels)))) @@ -24,7 +25,8 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - server = Server(app, "shroff-data.int.janelia.org", 8580; + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + server = Server(app, shroff_data_ip, 8580; proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_edited/" ) route!(server, "/nerve_ring" => nerve_ring_app) diff --git a/web/scripts/web_meshscatter_average_edited_2024_10_24.jl b/web/scripts/web_meshscatter_average_edited_2024_10_24.jl index d47e7ac..517f290 100644 --- a/web/scripts/web_meshscatter_average_edited_2024_10_24.jl +++ b/web/scripts/web_meshscatter_average_edited_2024_10_24.jl @@ -1,6 +1,7 @@ using WGLMakie using Bonito using ShroffCelegansModels +using Sockets #push!(LOAD_PATH, "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl") push!(LOAD_PATH, dirname(dirname(pathof(ShroffCelegansModels)))) @@ -24,7 +25,8 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - server = Server(app, "shroff-data.int.janelia.org", 8590; + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + server = Server(app, shroff_data_ip, 8590; proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_edited_2024_10_24/" ) route!(server, "/nerve_ring" => nerve_ring_app) diff --git a/web/scripts/web_show_average_annotations.jl b/web/scripts/web_show_average_annotations.jl index 01db435..d06bae1 100644 --- a/web/scripts/web_show_average_annotations.jl +++ b/web/scripts/web_show_average_annotations.jl @@ -1,5 +1,6 @@ using WGLMakie using Bonito +using Revise if abspath(PROGRAM_FILE) == @__FILE__ @@ -7,6 +8,7 @@ if abspath(PROGRAM_FILE) == @__FILE__ end includet("../../scripts/launch_show_average_annotations.jl") +#includet("../../src/demo_averaging/show_average_annotations.jl") function web_show_average_annotations(datasets = datasets) menu = DOM.div( @@ -16,14 +18,17 @@ function web_show_average_annotations(datasets = datasets) end ) ) + shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string server = Server( - "shroff-data.int.janelia.org", 8180; + shroff_data_ip, 8180; proxy_url="https://shroff-data.int.janelia.org/show_average_annotations/" ) route!(server, "/" => App(menu)) for k in keys(datasets) route!(server, "/$k" => App(; title="$k: Shroff C. elegans show average annotations") do return show_average_annotations(avg_models, datasets[k]; use_myuntwist=true); + #Revise.retry() + #return @invokelatest show_average_annotations(avg_models, datasets[k]; use_myuntwist=true); end) end return server From a97973b80465139f10c5270ec817c6073ca223ab Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 13 Nov 2025 17:56:39 -0500 Subject: [PATCH 07/39] Set compat with Dates to 1 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index cc1532d..45f30d1 100644 --- a/Project.toml +++ b/Project.toml @@ -38,7 +38,7 @@ TiffImages = "731e570b-9d59-4bfa-96dc-6df516fadf69" [compat] BSplineKit = "0.18, 0.19" -Dates = "1.11.0" +Dates = "1" GeometryBasics = "0.4.11, 0.5" HDF5 = "0.17.2" Interpolations = "0.15, 0.16" From da10d3cd334f63cb64e08892ffe0406088b4095c Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 13:30:40 -0400 Subject: [PATCH 08/39] Update web Manifest.toml --- web/Manifest.toml | 156 ++++++++++++++++++++++++++-------------------- 1 file changed, 88 insertions(+), 68 deletions(-) diff --git a/web/Manifest.toml b/web/Manifest.toml index b7b20d3..949dda8 100644 --- a/web/Manifest.toml +++ b/web/Manifest.toml @@ -54,9 +54,9 @@ version = "1.1.2" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] -git-tree-sha1 = "355ab2d61069927d4247cd69ad0e1f140b31e30d" +git-tree-sha1 = "122a06c8266e00035bfa572887ab52c344526eb4" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.12.0" +version = "1.12.1" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -92,9 +92,9 @@ version = "0.19.1" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] -git-tree-sha1 = "4826c9fe6023a87029e54870ad1a9800c7ea6623" +git-tree-sha1 = "3ecdc34639e1b8b8217820af18e5850e8e78f1a7" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "1.10.1" +version = "1.10.2" [deps.BandedMatrices.extensions] BandedMatricesSparseArraysExt = "SparseArrays" @@ -120,9 +120,9 @@ version = "0.1.9" [[deps.Bonito]] deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MbedTLS", "MsgPack", "Observables", "OrderedCollections", "Random", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] -git-tree-sha1 = "0449f6f2f113f099c56665860242fbddf17ff991" +git-tree-sha1 = "d93c02a93b1bda3fd9213935a2b9159043e0da63" uuid = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" -version = "4.1.8" +version = "4.1.11" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -165,9 +165,9 @@ version = "1.1.1" [[deps.CairoMakie]] deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] -git-tree-sha1 = "f8caabc5a1c1fb88bcbf9bc4078e5656a477afd0" +git-tree-sha1 = "1778fd03576b0b6f88d0eafe89c54a3fb8df96a3" uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -version = "0.15.6" +version = "0.15.7" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] @@ -187,9 +187,9 @@ weakdeps = ["SparseArrays"] [[deps.CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "980f01d6d3283b3dbdfd7ed89405f96b7256ad57" +git-tree-sha1 = "9ce926a33a8608421a4d45c012884165b3fcd3ee" uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "2.0.1" +version = "2.0.2" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -268,9 +268,9 @@ version = "1.3.0+1" [[deps.ComputePipeline]] deps = ["Observables", "Preferences"] -git-tree-sha1 = "cb1299fee09da21e65ec88c1ff3a259f8d0b5802" +git-tree-sha1 = "21f3ae106d1dcc20a66e96366012f7289ebba498" uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" -version = "0.1.4" +version = "0.1.5" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -318,9 +318,9 @@ version = "1.8.1" [[deps.DataStructures]] deps = ["OrderedCollections"] -git-tree-sha1 = "6c72198e6a101cccdd4c9731d3985e904ba26037" +git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.1" +version = "0.19.3" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -334,9 +334,9 @@ version = "1.11.0" [[deps.DelaunayTriangulation]] deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] -git-tree-sha1 = "5620ff4ee0084a6ab7097a27ba0c19290200b037" +git-tree-sha1 = "783b21581a051ac91a3921ee37e26a23ed7f57a6" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" -version = "1.6.4" +version = "1.6.5" [[deps.Deno_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -423,15 +423,15 @@ version = "0.1.6" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] -git-tree-sha1 = "83dc665d0312b41367b7263e8a4d172eac1897f4" +git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.4" +version = "0.4.5" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "eaa040768ea663ca695d442be1bc97edfe6824f2" +git-tree-sha1 = "3a948313e7a41eb1db7a1e733e6335f17b4ab3c4" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "6.1.3+0" +version = "7.1.1+0" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] @@ -462,10 +462,20 @@ weakdeps = ["HTTP"] HTTPExt = "HTTP" [[deps.FilePaths]] -deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"] -git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629" +deps = ["FilePathsBase", "MacroTools", "Reexport"] +git-tree-sha1 = "a1b2fbfe98503f15b665ed45b3d149e5d8895e4c" uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" -version = "0.8.3" +version = "0.9.0" + + [deps.FilePaths.extensions] + FilePathsGlobExt = "Glob" + FilePathsURIParserExt = "URIParser" + FilePathsURIsExt = "URIs" + + [deps.FilePaths.weakdeps] + Glob = "c27321d9-0574-5035-807b-f59d2c89b15c" + URIParser = "30578b45-9adc-5946-b283-645ec420af67" + URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" [[deps.FilePathsBase]] deps = ["Compat", "Dates"] @@ -484,9 +494,9 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78" +git-tree-sha1 = "5bfcd42851cf2f1b303f51525a54dc5e98d408a3" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.14.0" +version = "1.15.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -513,9 +523,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "ba6ce081425d0afb2bedd00d9884464f764a9225" +git-tree-sha1 = "cd33c7538e68650bd0ddbb3f5bd50a4a0fa95b50" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.2.2" +version = "1.3.0" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -744,9 +754,9 @@ weakdeps = ["ForwardDiff", "Unitful"] [[deps.IntervalArithmetic]] deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] -git-tree-sha1 = "bf0210c01fb7d67c31fed97d7c1d1716b98ea689" +git-tree-sha1 = "02b61501dbe6da3b927cc25dacd7ce32390ee970" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "1.0.1" +version = "1.0.2" [deps.IntervalArithmetic.extensions] IntervalArithmeticArblibExt = "Arblib" @@ -767,9 +777,9 @@ version = "1.0.1" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.IntervalSets]] -git-tree-sha1 = "5fbb102dcb8b1a858111ae81d56682376130517d" +git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.11" +version = "0.7.13" weakdeps = ["Random", "RecipesBase", "Statistics"] [deps.IntervalSets.extensions] @@ -821,9 +831,9 @@ version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "06ea418d0c95878c8f3031023951edcf25b9e0ef" +git-tree-sha1 = "5b6bb73f555bc753a6153deec3717b8904f5551c" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.2.0" +version = "1.3.0" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] @@ -857,9 +867,9 @@ version = "3.1.3+0" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "277779adfedf4a30d66b64edc75dc6bb6d52a16e" +git-tree-sha1 = "b6c76964c65ebf8309460fb8f0f437b4a59d809b" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.10.6" +version = "0.10.7" [[deps.JuliaSyntaxHighlighting]] deps = ["StyledStrings"] @@ -1053,9 +1063,15 @@ version = "0.5.16" [[deps.Makie]] deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] -git-tree-sha1 = "368542cde25d381e44d84c3c4209764f05f4ef19" +git-tree-sha1 = "7e6151c8432b91e76d9f9bc3adc6bbaecd00ec0a" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.24.6" +version = "0.24.7" + + [deps.Makie.extensions] + MakieDynamicQuantitiesExt = "DynamicQuantities" + + [deps.Makie.weakdeps] + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" [[deps.MappedArrays]] git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" @@ -1069,9 +1085,9 @@ version = "1.11.0" [[deps.MathTeXEngine]] deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] -git-tree-sha1 = "a370fef694c109e1950836176ed0d5eabbb65479" +git-tree-sha1 = "7eb8cdaa6f0e8081616367c10b31b9d9b34bb02a" uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -version = "0.6.6" +version = "0.6.7" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] @@ -1081,9 +1097,9 @@ version = "1.1.9" [[deps.MbedTLS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3cce3511ca2c6f87b19c34ffc623417ed2798cbd" +git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.10+0" +version = "2.28.1010+0" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1183,15 +1199,15 @@ version = "0.8.7+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "ec764453819f802fc1e144bfe750c454181bd66d" +git-tree-sha1 = "ab6596a9d8236041dcd59b5b69316f28a8753592" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.8+0" +version = "5.0.9+0" [[deps.OpenSSL]] -deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "f1a7e086c677df53e064e0fdd2c9d0b0833e3f6e" +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "386b47442468acfb1add94bf2d85365dea10cbab" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.5.0" +version = "1.6.0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "Libdl"] @@ -1222,9 +1238,13 @@ version = "10.44.0+1" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "f07c06228a1c670ae4c87d1276b92c7c597fdda0" +git-tree-sha1 = "d922b4d80d1e12c658da7785e754f4796cc1d60d" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.35" +version = "0.11.36" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" [[deps.PNGFiles]] deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] @@ -1246,9 +1266,9 @@ version = "0.5.12" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1f7f9bbd5f7a2e5a9f7d96e51c9754454ea7f60b" +git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.56.4+0" +version = "1.57.0+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -1279,9 +1299,9 @@ version = "0.3.3" [[deps.PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] -git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" +git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" -version = "1.4.3" +version = "1.4.4" [[deps.PolygonOps]] git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" @@ -1308,9 +1328,9 @@ version = "1.5.0" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "6b8e2f0bae3f678811678065c09571c1619da219" +git-tree-sha1 = "c5a07210bd060d6a8491b0ccdee2fa0235fc00bf" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.1.0" +version = "3.1.2" [[deps.Printf]] deps = ["Unicode"] @@ -1396,9 +1416,9 @@ version = "1.3.1" [[deps.Revise]] deps = ["CodeTracking", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "b7e5b731326a99431517b0b4c1f3902e842103a2" +git-tree-sha1 = "85d94c2be31f58728cd69d13f2e0bdd7ecf6dfe9" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.12.0" +version = "3.12.1" weakdeps = ["Distributed"] [deps.Revise.extensions] @@ -1525,9 +1545,9 @@ weakdeps = ["ChainRulesCore"] [[deps.StableRNGs]] deps = ["Random"] -git-tree-sha1 = "95af145932c2ed859b63329952ce8d633719f091" +git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" -version = "1.0.3" +version = "1.0.4" [[deps.StackViews]] deps = ["OffsetArrays"] @@ -1537,9 +1557,9 @@ version = "0.1.2" [[deps.Static]] deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] -git-tree-sha1 = "1e44e7b1dbb5249876d84c32466f8988a6b41bbb" +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.3.0" +version = "1.3.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] @@ -1575,9 +1595,9 @@ version = "1.7.1" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "a136f98cefaf3e2924a66bd75173d1c891ab7453" +git-tree-sha1 = "064b532283c97daae49e544bb9cb413c26511f8c" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.7" +version = "0.34.8" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] @@ -1625,9 +1645,9 @@ version = "1.11.0" [[deps.StructUtils]] deps = ["Dates", "UUIDs"] -git-tree-sha1 = "cd47aa083c9c7bdeb7b92de26deb46d6a33163c9" +git-tree-sha1 = "79529b493a44927dd5b13dde1c7ce957c2d049e4" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" -version = "2.5.1" +version = "2.6.0" [deps.StructUtils.extensions] StructUtilsMeasurementsExt = ["Measurements"] @@ -1778,15 +1798,15 @@ version = "1.25.1" [[deps.VideoIO]] deps = ["ColorTypes", "Dates", "Downloads", "FFMPEG", "FFMPEG_jll", "FileIO", "Glob", "ImageCore", "PrecompileTools", "Scratch"] -git-tree-sha1 = "6b765689dbcc4f5d4b66469ea5d88a0cc26615ce" +git-tree-sha1 = "7a941aab811996a0d84709a2cb1ad785f8e476d9" uuid = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" -version = "1.2.0" +version = "1.3.2" [[deps.WGLMakie]] deps = ["Bonito", "Colors", "FileIO", "FreeTypeAbstraction", "GeometryBasics", "Hyperscript", "LinearAlgebra", "Makie", "Observables", "PNGFiles", "PrecompileTools", "RelocatableFolders", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "2e3a387f0f71ffb9b1cf5dd48e81581010d667dd" +git-tree-sha1 = "0e67154430594be1357143f694e28a429abf0c77" uuid = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" -version = "0.13.6" +version = "0.13.7" [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] From 9ceb850c40c1dd8000c5ab02135fda70d7846062 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 13:32:57 -0400 Subject: [PATCH 09/39] Use 0.0.0.0 and SHROFF_HOST env var for portability Replace hardcoded shroff-data.int.janelia.org IPs and vm7249 hostname checks with "0.0.0.0" bind addresses and SHROFF_HOST environment variable for proxy URLs, and use relative config_path fallback. Co-Authored-By: Claude Sonnet 4.6 --- scripts/launch_show_average_annotations.jl | 3 +-- src/demo_averaging/loading.jl | 4 ++-- web/scripts/web_debug_annotation_ap_axis.jl | 4 ++-- web/scripts/web_debug_annotation_ap_axis_live.jl | 4 ++-- web/scripts/web_debug_annotation_ap_axis_retrack_live.jl | 4 ++-- web/scripts/web_fix_annotation_ap_axis.jl | 4 ++-- web/scripts/web_meshscatter_all.jl | 4 ++-- web/scripts/web_meshscatter_average.jl | 4 ++-- web/scripts/web_meshscatter_average_dev.jl | 4 ++-- web/scripts/web_meshscatter_average_edited.jl | 4 ++-- web/scripts/web_meshscatter_average_edited_2024_10_24.jl | 4 ++-- web/scripts/web_show_average_annotations.jl | 4 ++-- 12 files changed, 23 insertions(+), 24 deletions(-) diff --git a/scripts/launch_show_average_annotations.jl b/scripts/launch_show_average_annotations.jl index 816065f..6b18960 100644 --- a/scripts/launch_show_average_annotations.jl +++ b/scripts/launch_show_average_annotations.jl @@ -88,8 +88,7 @@ end if gethostname() == "KITTISOPIKULM-2" alias_cache("X") -elseif gethostname() == "vm7249" - # shroff-data.int.janelia.org +else alias_cache_unix("/nearline/shroff") end diff --git a/src/demo_averaging/loading.jl b/src/demo_averaging/loading.jl index 586c0a6..0aa3fc2 100644 --- a/src/demo_averaging/loading.jl +++ b/src/demo_averaging/loading.jl @@ -1,8 +1,8 @@ #const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_full.json" if gethostname() == "KITTISOPIKULM-2" const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2024_09_05_v1.json" -elseif gethostname() == "vm7249" - const config_path = "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl/config_2024_09_05_v1.json" +else + const config_path = joinpath(@__DIR__, "..", "..", "config_2024_09_05_v1.json") end const voxel_size = 0.1625 # um diff --git a/web/scripts/web_debug_annotation_ap_axis.jl b/web/scripts/web_debug_annotation_ap_axis.jl index baf0c4b..3c540bf 100644 --- a/web/scripts/web_debug_annotation_ap_axis.jl +++ b/web/scripts/web_debug_annotation_ap_axis.jl @@ -21,10 +21,10 @@ function web_debug_annotation_ap_axis(datasets = datasets) end ) ) - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server( shroff_data_ip, 9180; - proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/debug_annotation_ap_axis/" ) route!(server, "/" => App(menu)) for k in keys(datasets) diff --git a/web/scripts/web_debug_annotation_ap_axis_live.jl b/web/scripts/web_debug_annotation_ap_axis_live.jl index f5ecf57..44a6a5a 100644 --- a/web/scripts/web_debug_annotation_ap_axis_live.jl +++ b/web/scripts/web_debug_annotation_ap_axis_live.jl @@ -22,10 +22,10 @@ function web_debug_annotation_ap_axis(datasets = datasets) end ) ) - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server( shroff_data_ip, 9181; - proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis_live/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/debug_annotation_ap_axis_live/" ) route!(server, "/" => App(menu)) for k in keys(datasets) diff --git a/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl b/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl index b9a0fa8..a5da6d8 100644 --- a/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl +++ b/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl @@ -66,10 +66,10 @@ function web_debug_annotation_ap_axis(datasets = retracked_datasets) end ) ) - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server( shroff_data_ip, 9281; - proxy_url="https://shroff-data.int.janelia.org/debug_annotation_ap_axis_retrack_live/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/debug_annotation_ap_axis_retrack_live/" ) route!(server, "/" => App(menu)) for k in keys(datasets) diff --git a/web/scripts/web_fix_annotation_ap_axis.jl b/web/scripts/web_fix_annotation_ap_axis.jl index 7c5ac5b..a623358 100644 --- a/web/scripts/web_fix_annotation_ap_axis.jl +++ b/web/scripts/web_fix_annotation_ap_axis.jl @@ -23,8 +23,8 @@ function web_debug_annotation_ap_axis(datasets = datasets) ) ) server = Server( - string(Sockets.getaddrinfo("shroff-data.int.janelia.org")), 9381; - proxy_url="https://shroff-data.int.janelia.org/fix_annotation_ap_axis/" + "0.0.0.0", 9381; + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/fix_annotation_ap_axis/" ) route!(server, "/" => App(menu)) for k in keys(datasets) diff --git a/web/scripts/web_meshscatter_all.jl b/web/scripts/web_meshscatter_all.jl index e0e7ddd..95ed906 100644 --- a/web/scripts/web_meshscatter_all.jl +++ b/web/scripts/web_meshscatter_all.jl @@ -8,8 +8,8 @@ function meshscatter_all_webapp() app = App(; title="Shroff Lab: C. elegans meshscatter_all") do return with_theme(meshscatter_all, theme_black()) end - server = Server(app, "shroff-data.int.janelia.org", 8082; - proxy_url="https://shroff-data.int.janelia.org/meshscatter_all/" + server = Server(app, "0.0.0.0", 8082; + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/meshscatter_all/" ) return server end diff --git a/web/scripts/web_meshscatter_average.jl b/web/scripts/web_meshscatter_average.jl index 4fb1e06..d09640e 100644 --- a/web/scripts/web_meshscatter_average.jl +++ b/web/scripts/web_meshscatter_average.jl @@ -24,8 +24,8 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - server = Server(app, "shroff-data.int.janelia.org", 8380; - proxy_url="https://shroff-data.int.janelia.org/meshscatter_average/" + server = Server(app, "0.0.0.0", 8380; + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/meshscatter_average/" ) route!(server, "/nerve_ring" => nerve_ring_app) return server diff --git a/web/scripts/web_meshscatter_average_dev.jl b/web/scripts/web_meshscatter_average_dev.jl index ee9fa13..22619f9 100644 --- a/web/scripts/web_meshscatter_average_dev.jl +++ b/web/scripts/web_meshscatter_average_dev.jl @@ -26,9 +26,9 @@ function meshscatter_average_webapp() end end - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string, + shroff_data_ip = "0.0.0.0", server = Server(app, shroff_data_ip, 8480; - proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_dev/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/meshscatter_average_dev/" ) route!(server, "/nerve_ring" => nerve_ring_app) return server diff --git a/web/scripts/web_meshscatter_average_edited.jl b/web/scripts/web_meshscatter_average_edited.jl index 5fba170..bbb0ad9 100644 --- a/web/scripts/web_meshscatter_average_edited.jl +++ b/web/scripts/web_meshscatter_average_edited.jl @@ -25,9 +25,9 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server(app, shroff_data_ip, 8580; - proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_edited/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/meshscatter_average_edited/" ) route!(server, "/nerve_ring" => nerve_ring_app) return server diff --git a/web/scripts/web_meshscatter_average_edited_2024_10_24.jl b/web/scripts/web_meshscatter_average_edited_2024_10_24.jl index 517f290..570502d 100644 --- a/web/scripts/web_meshscatter_average_edited_2024_10_24.jl +++ b/web/scripts/web_meshscatter_average_edited_2024_10_24.jl @@ -25,9 +25,9 @@ function meshscatter_average_webapp() black_body(meshscatter_average(average_annotation_dict; nerve_ring=true)) end end - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server(app, shroff_data_ip, 8590; - proxy_url="https://shroff-data.int.janelia.org/meshscatter_average_edited_2024_10_24/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/meshscatter_average_edited_2024_10_24/" ) route!(server, "/nerve_ring" => nerve_ring_app) return server diff --git a/web/scripts/web_show_average_annotations.jl b/web/scripts/web_show_average_annotations.jl index d06bae1..12d8180 100644 --- a/web/scripts/web_show_average_annotations.jl +++ b/web/scripts/web_show_average_annotations.jl @@ -18,10 +18,10 @@ function web_show_average_annotations(datasets = datasets) end ) ) - shroff_data_ip = Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string + shroff_data_ip = "0.0.0.0" server = Server( shroff_data_ip, 8180; - proxy_url="https://shroff-data.int.janelia.org/show_average_annotations/" + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/show_average_annotations/" ) route!(server, "/" => App(menu)) for k in keys(datasets) From 28e4625f82eb000d254cd7fdfb1467c062c5e79b Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 14:04:55 -0400 Subject: [PATCH 10/39] Add resave_for_ben.jl --- ...et_group_annotation_positions_over_time.jl | 25 +++ src/demo_averaging/resave_for_ben.jl | 168 ++++++++++++++++++ 2 files changed, 193 insertions(+) create mode 100755 src/demo_averaging/resave_for_ben.jl diff --git a/src/demo_averaging/get_group_annotation_positions_over_time.jl b/src/demo_averaging/get_group_annotation_positions_over_time.jl index 3d1d4fe..504b202 100644 --- a/src/demo_averaging/get_group_annotation_positions_over_time.jl +++ b/src/demo_averaging/get_group_annotation_positions_over_time.jl @@ -28,6 +28,31 @@ function get_datasets_info(datasets) return datasets_info end + +function annotation_positions(smts_nt, annotation_dict, nt) + N_timepoints = 200 + _smodel = smts_nt(nt) +idx = round(Int, nt*N_timepoints + 1) + _model = avg_models[idx] + @info "annotation positions" nt + positions = missing + try + positions = swapyz_scale.(transform_annotations( + _smodel, _model, map(values(annotation_dict)) do ann + if ismissing(ann) + return Point3(NaN) + else + ann(nt) + end + end + )) + catch err + @error "A problem occured at $nt with avg_model[$idx]" exception=(err, Base.catch_backtrace()) + positions = [Point3(NaN) for i in eachindex(annotation_dict)] + end + return positions +end + function get_group_annotation_positions_over_time(datasets, cache) use_myuntwist = true r = LinRange(0,1,201) diff --git a/src/demo_averaging/resave_for_ben.jl b/src/demo_averaging/resave_for_ben.jl new file mode 100755 index 0000000..f10e29e --- /dev/null +++ b/src/demo_averaging/resave_for_ben.jl @@ -0,0 +1,168 @@ +using HDF5 +using Printf +using DataFrames +using CSV +using Statistics + +""" + resave_for_ben(filename; target_filename = replace(filename, ".h5" => "_for_ben.csv"), time_range=(381, 751)) + +Convert Mark's HDF5 format to Ben's CSV format for Transcriptome4D integration. + +# Arguments +- `filename`: Input HDF5 file path (e.g., "edited_smoothed_average_annotations_r020_theta020_z030_with_seam_cells.h5") +- `target_filename`: Output CSV file path (default: input filename with "_for_ben.csv" suffix) +- `time_range`: Tuple of (start_time, end_time) in minutes post first cleavage (mpfc) + - Default: (381, 751) for post-twitch based on Ryan's new timeline + - 381 mpfc: first post-twitch position + - 751 mpfc: hatching time + +# Output Format +CSV file with columns: cell, time, x, y, z +- One row per cell per timepoint +- Time in minutes post first cleavage (mpfc) + +# New Timeline (Ryan's Email - Dec 2025) +- Dataset starts at 0 mpfc +- First positional data: 20 mpfc (four cell stage) +- Last pre-twitch: 380 mpfc +- First post-twitch: 381 mpfc +- Hatching: 751 mpfc + +# Example +```julia +resave_for_ben("edited_smoothed_average_annotations_r020_theta020_z030_with_seam_cells.h5") +# Output: edited_smoothed_average_annotations_r020_theta020_z030_with_seam_cells_for_ben.csv +# Time range: 381-751 mpfc (post-twitch) +``` + +# Notes +- Based on resave_for_tosif() function structure +- Uses Ryan's new timeline scale (mpfc instead of old mpf) +- Cell names from HDF5 annotation labels +- **Auto-detects number of timepoints** from HDF5 structure (no hard-coding) +- Works with any number of timepoints (201, 371, etc.) +""" +function resave_for_ben(filename; + target_filename = replace(filename, ".h5" => "_for_ben.csv"), + time_range = (381, 751)) + + if isfile(target_filename) + error("$target_filename exists") + end + + println("Reading HDF5 file: $filename") + + # Extract data from HDF5 + ben_data = h5open(filename) do h5f + all_rows = [] + + for strain in keys(h5f) + if strain == "timepoint_range" + continue + end + println("Processing strain: $strain") + + # Get annotation labels (cell names) + labels = h5f[strain]["annotations"][] + num_cells = length(labels) + + # Auto-detect number of timepoints from HDF5 structure + strain_keys = keys(h5f[strain]) + timepoint_keys = filter(k -> startswith(k, "timepoint_"), strain_keys) + num_timepoints = length(timepoint_keys) + println(" Detected $num_timepoints timepoints") + + # Read all timepoints + matrices = Matrix{Float64}[] + for tp in 1:num_timepoints + tpk = @sprintf("timepoint_%03d", tp) + ds = h5f[strain][tpk] + push!(matrices, ds[]) + end + + # Stack into 3D array: [cells × timepoints × coordinates] + positions = stack(matrices, dims=2) + + # Generate time vector (dynamically based on detected timepoints) + start_time, end_time = time_range + minutes = range(start_time, end_time, length=num_timepoints) |> collect + println(" Time spacing: $(round((end_time - start_time) / (num_timepoints - 1), digits=4)) min/timepoint") + + # Create rows for each cell × timepoint combination + for (cell_idx, cell_name) in enumerate(labels) + for (tp_idx, time) in enumerate(minutes) + # Extract x, y, z coordinates + x = positions[cell_idx, tp_idx, 1] + y = positions[cell_idx, tp_idx, 2] + z = positions[cell_idx, tp_idx, 3] + + # Create row: strain, cell, time, x, y, z + push!(all_rows, (strain=strain, cell=cell_name, time=time, x=x, y=y, z=z)) + end + end + end + + all_rows + end + + println("Creating DataFrame with $(length(ben_data)) rows") + + # Convert to DataFrame (includes strain column) + df_full = DataFrame(ben_data) + + # Find cells that appear in multiple strains + cells_per_strain = combine(groupby(df_full, [:cell, :time]), :strain => (x -> length(unique(x))) => :n_strains) + duplicate_cells = unique(cells_per_strain[cells_per_strain.n_strains .> 1, :cell]) + println("Found $(length(duplicate_cells)) cells appearing in multiple strains") + + # 1. For Ben: Averaged positions (cell, time, x, y, z) + println("Creating averaged positions for Ben...") + df_averaged = combine(groupby(df_full, [:cell, :time]), + :x => mean => :x, + :y => mean => :y, + :z => mean => :z) + sort!(df_averaged, [:cell, :time]) + + println("Writing averaged CSV for Ben: $target_filename") + CSV.write(target_filename, df_averaged, writeheader=true) + + # 2. For Ryan: Raw data for duplicate cells only (strain, cell, time, x, y, z) + ryan_duplicates_filename = replace(target_filename, ".csv" => "_ryan_duplicates.csv") + df_duplicates = filter(row -> row.cell in duplicate_cells, df_full) + sort!(df_duplicates, [:cell, :time, :strain]) + + println("Writing duplicate cells CSV for Ryan: $ryan_duplicates_filename") + CSV.write(ryan_duplicates_filename, df_duplicates, writeheader=true) + + # 3. For Ryan: Summary statistics (cell, time, mean_x, mean_y, mean_z, std_x, std_y, std_z, n_strains) + ryan_stats_filename = replace(target_filename, ".csv" => "_ryan_stats.csv") + df_stats = combine(groupby(df_full, [:cell, :time]), + :x => mean => :mean_x, + :y => mean => :mean_y, + :z => mean => :mean_z, + :x => std => :std_x, + :y => std => :std_y, + :z => std => :std_z, + :strain => (x -> length(unique(x))) => :n_strains) + + # Only keep rows where n_strains > 1 + df_stats = filter(row -> row.n_strains > 1, df_stats) + sort!(df_stats, [:cell, :time]) + + println("Writing statistics CSV for Ryan: $ryan_stats_filename") + CSV.write(ryan_stats_filename, df_stats, writeheader=true) + + println("\n✓ Conversion complete!") + println(" For Ben (averaged): $(nrow(df_averaged)) rows → $target_filename") + println(" For Ryan (duplicates): $(nrow(df_duplicates)) rows → $ryan_duplicates_filename") + println(" For Ryan (statistics): $(nrow(df_stats)) rows → $ryan_stats_filename") + println(" Unique cells: $(length(unique(df_averaged.cell)))") + println(" Cells in multiple strains: $(length(duplicate_cells))") + println(" Time range: $(extrema(df_averaged.time))") + + return df_averaged +end + +# Example usage (commented out): +# resave_for_ben("edited_smoothed_average_annotations_r020_theta020_z030_with_seam_cells.h5") From a81429b4399f7a65b0e383bbcde76745c4db5cc7 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 14:08:29 -0400 Subject: [PATCH 11/39] Update loading.jl with config_2026_03_19_v2.json --- src/demo_averaging/loading.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/demo_averaging/loading.jl b/src/demo_averaging/loading.jl index 586c0a6..6a1c3a9 100644 --- a/src/demo_averaging/loading.jl +++ b/src/demo_averaging/loading.jl @@ -1,12 +1,13 @@ #const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_full.json" if gethostname() == "KITTISOPIKULM-2" - const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2024_09_05_v1.json" + const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2026_03_19_v2.json" elseif gethostname() == "vm7249" - const config_path = "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl/config_2024_09_05_v1.json" + const config_path = "/groups/scicompsoft/home/kittisopikulm/src/ShroffCelegansModels.jl/config_2025_12_17_v2.json" end const voxel_size = 0.1625 # um using LinearAlgebra +using JSON3 LinearAlgebra.BLAS.set_num_threads(12) @info "Reading Config JSON" From ecee33dd2b59900b0bd8ac4d70a4b94f596b101e Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 16:03:19 -0400 Subject: [PATCH 12/39] Updates from Windows local dev --- src/MIPAVIO.jl | 12 +- src/annotation_untwist.jl | 12 +- src/demo_averaging.jl | 2 +- src/demo_averaging/average_annotations.jl | 33 +- src/demo_averaging/explicit_export.jl | 39 ++ src/demo_averaging/fix_annotation_ap_axis.jl | 31 +- .../fix_average_models_with_annotations.jl | 535 ++++++++++++++++ src/demo_averaging/get_avg_models.jl | 29 + .../get_cell_trajectory_dict.jl | 7 +- ...et_group_annotation_positions_over_time.jl | 87 +-- ...load_straightened_annotations_over_time.jl | 10 +- src/demo_averaging/read_config_json.jl | 5 + src/demo_averaging/resave_for_ben.jl | 9 +- src/demo_averaging/save_cache.jl | 3 + src/demo_averaging/save_tosif.jl | 6 +- .../show_average_annotations.jl | 8 +- src/demo_averaging/transform_annotations.jl | 2 + src/demo_averaging/zscore_analysis.jl | 23 + src/makie.jl | 2 +- src/model_time_series.jl | 9 +- src/parse_worm_dataset_path.jl | 23 +- src/save_celegans_avg_models.jl | 10 +- src/seam_cell_to_lineage_map.jl | 573 ++++++++++++++++++ 23 files changed, 1380 insertions(+), 90 deletions(-) create mode 100644 src/demo_averaging/explicit_export.jl create mode 100644 src/demo_averaging/fix_average_models_with_annotations.jl create mode 100644 src/demo_averaging/zscore_analysis.jl create mode 100644 src/seam_cell_to_lineage_map.jl diff --git a/src/MIPAVIO.jl b/src/MIPAVIO.jl index dbe4d91..2b070c8 100644 --- a/src/MIPAVIO.jl +++ b/src/MIPAVIO.jl @@ -8,16 +8,20 @@ MIPAV is a Java program from the National Institutes of Health """ module MIPAVIO using DataFrames: DataFrame - using GeometryBasics: Point3, Point3f + using GeometryBasics: Point3, Point3f, Point3d using CSV: CSV using ShroffCelegansModels: Datasets using Statistics: mean export mipav_df_to_points, mipav_df_to_point_dict - function mipav_df_to_points(df::DataFrame) - map(df.x_voxels, df.y_voxels, df.z_voxels) do x,y,z - Point3(x,y,z) + function mipav_df_to_points(df::DataFrame)::Vector{Point3d} + map( + df.x_voxels::Vector{Float64}, + df.y_voxels::Vector{Float64}, + df.z_voxels::Vector{Float64} + ) do x,y,z + Point3d(x,y,z) end end diff --git a/src/annotation_untwist.jl b/src/annotation_untwist.jl index 6fff3d6..ffc65d8 100644 --- a/src/annotation_untwist.jl +++ b/src/annotation_untwist.jl @@ -159,7 +159,7 @@ function untwist_annotations( model::AbstractCelegansModel, pts::AbstractVector{<: Point}, central_spline_voxel_distances::Union{AbstractVector{<: Real},Nothing} = nothing -) +)::Vector{Point3d} thresholds = [1.0, 1.05, 1.10, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.5, 2.0, 2.5] # For each point, find the nearest point along the central spline @@ -211,8 +211,8 @@ function untwist_annotations( # The returned untwisted annotation points are computed using the angle and distance # between the central spline and the annotation point # The z-coordinate is the same as that of the nearest central point on the straightened model - return map(zip(angles,pts_norm,z)) do (angle, dist,z) - Point3(cos(angle)*dist, sin(angle)*dist, z) + return map(zip(angles,pts_norm,z)) do (angle, dist, z) + Point3d(cos(angle)*dist, sin(angle)*dist, z) end end @@ -250,12 +250,12 @@ dataset = ShroffCelegansModels.NormalizedDataset("X:/shrofflab/OD1599_NU/120619_ c3_pt = ShroffCelegansModels.untwist_annotations(dataset, 71)["C3"] ``` """ -function untwist_annotations(dataset::NormalizedDataset, timepoint::Int=1) +function untwist_annotations(dataset::NormalizedDataset, timepoint::Int=1)::Union{Missing, Dict{String, Point3d}} mts = ModelTimeSeries(dataset) try df = MIPAVIO.get_integrated_annotations(dataset, timepoint) - pts = MIPAVIO.mipav_df_to_points(df) - return Dict(df.name .=> untwist_annotations(mts(timepoint), pts)) + pts = MIPAVIO.mipav_df_to_points(df)::Vector{Point3d} + return Dict{String,Point3d}(Vector{String}(df.name)::Vector{String} .=> untwist_annotations(mts(timepoint), pts)) catch err return missing end diff --git a/src/demo_averaging.jl b/src/demo_averaging.jl index f5760a9..75a6f8f 100644 --- a/src/demo_averaging.jl +++ b/src/demo_averaging.jl @@ -4,7 +4,7 @@ using ShroffCelegansModels.Types: AbstractCelegansModel using JSON3 using Missings using StatsBase -includet("makie.jl") +include("makie.jl") using Makie using CSV using DataFrames diff --git a/src/demo_averaging/average_annotations.jl b/src/demo_averaging/average_annotations.jl index 9dacddf..220eaba 100644 --- a/src/demo_averaging/average_annotations.jl +++ b/src/demo_averaging/average_annotations.jl @@ -3,12 +3,23 @@ using GeometryBasics using ProgressMeter using CSV using DataFrames +using HDF5 include("get_group_annotation_positions_over_time.jl") +using ShroffCelegansModels: CelegansModel, get_datasets_info -function average_annotations(datasets::Vector{ShroffCelegansModels.Datasets.NormalizedDataset}) - cache = my_annotation_position_cache - group_annotation_positions_over_time = get_group_annotation_positions_over_time(datasets, cache) +function average_annotations( + datasets::Vector{ShroffCelegansModels.Datasets.NormalizedDataset}; + cache::Dict{String, Vector{Vector{Point3{Float64}}}} = my_annotation_position_cache, + timepoints::Union{AbstractVector{Float64}, Integer} = LinRange(0,1,201), + avg_models::Vector{<: CelegansModel} = avg_models +) + if isa(timepoints, Integer) + N_timepoints = timepoints + timepoints = LinRange(0, 1, N_timepoints) + end + group_annotation_positions_over_time = get_group_annotation_positions_over_time(datasets, cache, timepoints; avg_models = avg_models) + group_annotation_positions_over_time::Vector{Vector{Dict{String, Point3{Float64}}}} #common_annotations = intersect(map(datasets_info) do dataset_info # collect(keys(dataset_info.annotation_dict)) #end...) @@ -17,22 +28,28 @@ function average_annotations(datasets::Vector{ShroffCelegansModels.Datasets.Norm # common_annotations annotations = intersect(map(datasets_info) do dataset_info collect(keys(dataset_info.annotation_dict)) - end...) + end...)::Vector{String} positions = map(eachindex(first(group_annotation_positions_over_time))) do j map(annotations) do name mean(map(eachindex(group_annotation_positions_over_time)) do i group_annotation_positions_over_time[i][j][name] end) - end - end + end::Vector{Point3{Float64}} + end::Vector{Vector{Point3{Float64}}} return (; annotations, positions) end # average_annotations_dict = average_annotations(datasets) -function average_annotations(datasets::Dict{String, Vector{ShroffCelegansModels.Datasets.NormalizedDataset}}) +function average_annotations( + datasets::Dict{String, Vector{ShroffCelegansModels.Datasets.NormalizedDataset}}; + cache::Dict{String, Vector{Vector{Point3{Float64}}}} = my_annotation_position_cache, + timepoints::Union{AbstractVector{Float64}, Integer} = LinRange(0,1,201), + avg_models::Vector{<: CelegansModel} = avg_models + +) average_annotations_dict = Dict(keys(datasets) .=> map(collect(keys(datasets))) do k - average_annotations(datasets[k]) + average_annotations(datasets[k]; cache, timepoints, avg_models) end) return average_annotations_dict end diff --git a/src/demo_averaging/explicit_export.jl b/src/demo_averaging/explicit_export.jl new file mode 100644 index 0000000..e8465cc --- /dev/null +++ b/src/demo_averaging/explicit_export.jl @@ -0,0 +1,39 @@ +function get_seam_cells_explicit_df(avg_models=avg_models) + seam_cell_names = ["a0L", "a0R", "H0L", "H0R", "H1L", "H1R", "H2L", "H2R", "V1L", "V1R", "V2L", "V2R", "V3L", "V3R", "V4L", "V4R", "V5L", "V5R", "V6L", "V6R", "TL", "TR"] + # right then left + seam_cell_names = seam_cell_names[[2:2:end; 1:2:end]] + seam_cell_lineage_names = get.( + (positional_to_lineage_dict,), + seam_cell_names, + missing + ) + dfs = map(enumerate(avg_models)) do (i, model) + pts = seam_cell_pts(model, 2) + pts = swapyz_scale.(pts) + DataFrame( + lineage_name = seam_cell_lineage_names, + minutes_post_first_cleavage = (i - 1) * 370 / (length(avg_models) - 1) +381, + LR_micrometers = pts .|> x -> x[1], + DV_micrometers = pts .|> x -> x[3], + AP_micrometers = pts .|> x -> x[2], + ) + end + subset(vcat(dfs...), :lineage_name => ByRow(!ismissing)) +end + +pretwich_explicit_df = get_pretwitch_explicit_df() +CSV.write("2026_04_02_pretwitch.csv", pretwitch_explicit_df) + +annotation_name_translation_df = get_annotation_name_translation_df() +positional_to_lineage_dict = Dict(annotation_name_translation_df.var"Positional Model Cell Name" .=> annotation_name_translation_df.var"Lineage Name") +df = CSV.read("smoothed_average_annotations_r020_theta020_z030_for_ben.csv", DataFrame) +posttwitch_for_ben_explicit_df = select(df, :cell => ByRow(cell -> positional_to_lineage_dict[cell]) => :lineage_name, :time => :minutes_post_first_cleavage, :x => :LR_micrometers, :z => :DV_micrometers, :y=> :AP_micrometers) +posttwitch_for_ben_explicit_df = vcat(posttwitch_for_ben_explicit_df, get_seam_cells_explicit_df(avg_models)) +subset!(posttwitch_for_ben_explicit_df, :lineage_name => ByRow(!ismissing)) +CSV.write("2026_04_02_posttwitch.csv", posttwitch_for_ben_explicit_df) + + + + +single_df = vcat(pretwitch_explicit_df, posttwitch_for_ben_explicit_df) + diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index 4742d42..5d68379 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -856,7 +856,8 @@ Returns """ function update_annotations_cache( annotations_cache::Dict{Tuple{String, UnitRange, Bool}, Vector}, - annotations_changes::Dict{String, Pair{Point3{Float64},Point3{Float64}}} + annotations_changes::Dict{String, Pair{Point3{Float64},Point3{Float64}}}; + dry_run::Bool = false ) annotations_cache_keys = keys(annotations_cache) key_map_dict = Dict(first.(annotations_cache_keys) .=> annotations_cache_keys) @@ -875,21 +876,39 @@ function update_annotations_cache( annotation_name = change_key_parts[end-2] * "/" * change_key_parts[end-1] end # Could error if dataset_path is not in key_map_dict + if !haskey(key_map_dict, dataset_path) + @warn "Dataset path $dataset_path not found in annotations cache keys, skipping change for annotation $annotation_name at timepoint $timepoint" + continue + end annotations_cache_key = key_map_dict[dataset_path] dataset = ShroffCelegansModels.Dataset(dataset_path) annotation_symbol = findfirst(==(annotation_name), dataset.cell_key.mapping) + if isnothing(annotation_symbol) + @warn "Annotation $annotation_name not found in dataset $dataset_path, skipping change at timepoint $timepoint" + continue + end # timepoint above is the actual timepoint, but we need to adjust it to the dataset's range timepoint = timepoint - dataset.cell_key.start + 1 if ismissing(annotations_cache[annotations_cache_key][timepoint]) @warn("Annotation $annotation_name at timepoint $timepoint is missing in cache for $annotations_cache_key") - annotations_cache[annotations_cache_key][timepoint] = Dict{String, Point3{Float64}}() - annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] = swapyz_unscale(old_pt) + if !dry_run + annotations_cache[annotations_cache_key][timepoint] = Dict{String, Point3{Float64}}() + annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] = swapyz_unscale(new_pt) + end end # Check old_pt matches the cached point - if annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] != swapyz_unscale(old_pt) - @warn "Annotation point mismatch for $annotations_cache_key at timepoint $timepoint: $(annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)]) != $(swapyz_unscale(old_pt))" + try + if !isapprox(annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)], swapyz_unscale(old_pt)) + _norm = norm(annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] - swapyz_unscale(old_pt)) + @warn """Annotation point mismatch for $annotations_cache_key at timepoint $timepoint: $(annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)]) != $(swapyz_unscale(old_pt)), norm difference: $_norm. + This may indicate the cache is out of sync with the changes, or the change does not apply cleanly to the current cache state. Consider reviewing this change and the current cache state to ensure consistency.""" + end + catch e + @warn "Error checking annotation point for $annotations_cache_key at timepoint $timepoint with annotation $annotation_symbol: $e" + end + if !dry_run + annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] = swapyz_unscale(new_pt) end - annotations_cache[annotations_cache_key][timepoint][string(annotation_symbol)] = swapyz_unscale(new_pt) end return annotations_cache end diff --git a/src/demo_averaging/fix_average_models_with_annotations.jl b/src/demo_averaging/fix_average_models_with_annotations.jl new file mode 100644 index 0000000..56d14b4 --- /dev/null +++ b/src/demo_averaging/fix_average_models_with_annotations.jl @@ -0,0 +1,535 @@ +function fix_average_models_with_annotations( + avg_models, + dataset::ShroffCelegansModels.Datasets.NormalizedDataset; + use_myuntwist = false, + cache = use_myuntwist ? my_annotation_position_cache : annotation_position_cache +) + second(x) = x[2] + + f = Figure(size = (1920, 1080)) + + title_prewarp = Observable("Prewarp") + ax_prewarp = Axis3(f[1,2], aspect = (1, 10, 1); title = title_prewarp) + + title = Observable("Title") + ax = Axis3(f[2,2], aspect = (1, 10, 1); title) + + title_twisted = Observable("Twisted") + ax_twisted = Axis3(f[1:2,1]; title = title_twisted) + + N_timepoints = 200 + r = LinRange(0.0, 1.0, N_timepoints + 1) + sliders = SliderGrid(f[3,1:2], + (label="Time (Normalized)", range=r), + (label="Exp. Factor", range=1.0:0.01:4), + ) + slider_range = sliders.sliders[1].range[] + + annotation_text_toggle = Toggle(f) + central_spline_lines_toggle = Toggle(f) + f[4, 1:2] = grid!( + [Label(f, "Annnotation text") annotation_text_toggle Label(f, "Central spline lines") central_spline_lines_toggle] + ) + f[5, :] = buttongrid = GridLayout(tellwidth = false) + buttongrid[1, 1] = Button(f, label = "Previous") + buttongrid[1, 2] = Button(f, label = "Reset") + buttongrid[1, 3] = Button(f, label = "Next") + + + + n_upsample = 2 + + smts = ShroffCelegansModels.StraightenedModelTimeSeries(dataset) + smts_nt = let _length = length(range(dataset.cell_key)) + x -> begin + nt = x * (_length - 1) + 1.0 + smts(nt, 2) + end + end + + mts = smts.modelTimeSeries + mts_nt = let _range = range(dataset.cell_key) + x -> begin + nt = x * (length(_range) - 1) + 1.0 + nt = round(Int, nt) + title_twisted[] = "Twisted; idx = $nt, tp = $(_range[nt])" + mts(nt) + end + end + + + annotation_dict = get_cell_trajectory_dict(dataset; use_myuntwist) + + # precalculate the volumes + #= + volumes_and_lengths = map(models) do model + ShroffCelegansModels.volume_by_cross_section(model), ShroffCelegansModels.central_spline(model)(1.0)[3] + end + volumes = first.(volumes_and_lengths) + lines!(vol_ax, slider_range, volumes) + whole_idx = floor.(Int, 1:1/step(slider_range):length(slider_range)) + scatter!(vol_ax, slider_range[whole_idx], volumes[whole_idx]) + + current_volume = Observable(Point(sliders.sliders[1].value[], first(volumes))) + scatter!(vol_ax, current_volume, marker = '∘', color = :red, markersize = 50) + =# + + # lengths + #= + lengths = last.(volumes_and_lengths) + lines!(length_ax, slider_range, lengths, color = :green) + scatter!(length_ax, slider_range[whole_idx], lengths[whole_idx], color = :green) + + current_length = Observable(Point(sliders.sliders[1].value[], first(lengths))) + scatter!(length_ax, current_length, marker='∘', color = :red, markersize=50) + =# + + model = avg_models[1] + _mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(model; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + _seam_cells = Observable(swapyz_scale.(seam_cell_pts(model, n_upsample))) + _seam_cell_labels = Observable(_seam_cells[] .- Ref(Point3f(2,0,0))) + + smodel = smts_nt(0.0) + straight_mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(smodel; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + straight_seam_cells = Observable(swapyz_scale.(seam_cell_pts(smodel, n_upsample))) + straight_seam_cell_labels = Observable(straight_seam_cells[] .- Ref(Point3f(2,0,0))) + + tmodel = mts_nt(0.0) + twisted_mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(tmodel; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + twisted_seam_cells = Observable(swapyz_scale.(seam_cell_pts(tmodel, 0))) + twisted_seam_cell_labels = Observable(twisted_seam_cells[] .- Ref(Point3f(2,0,0))) + twisted_central_spline = Observable(swapyz_scale.(ShroffCelegansModels.central_spline(tmodel).(LinRange(0,1,length(tmodel))))) + + + function annotation_positions(nt) + _smodel = smts_nt(nt) + idx = round(Int, nt*N_timepoints + 1) + _model = avg_models[idx] + @info "annotation positions" nt + swapyz_scale.(transform_annotations( + _smodel, _model, map(values(annotation_dict)) do ann + ann(nt) + end + )) + end + + function straight_annotation_positions(nt) + @info "annotation prewarp positions" nt + swapyz_scale.(map(values(annotation_dict)) do ann + ann(nt) + end) + end + + twisted_annotation_positions = let _length = length(range(dataset.cell_key)) + function twisted_annotation_positions(nt) + idx = round(Int, nt*(_length - 1) + 1) + dict = ShroffCelegansModels.twisted_annotations(dataset, idx) + Dict(keys(dict) .=> swapyz_scale.(values(dict))) + end + end + + + if haskey(cache, dataset.path) + _annotation_positions_over_time = cache[dataset.path] + else + _annotation_positions_over_time = annotation_positions.(r) + cache[dataset.path] = _annotation_positions_over_time + end + + straight_annotation_positions_over_time = straight_annotation_positions.(r) + + _annotation_cells = Observable(_annotation_positions_over_time[1]) + straight_annotation_cells = Observable(straight_annotation_positions_over_time[1]) + twisted_positions = twisted_annotation_positions(0.0) + twisted_annotation_cells = Observable(collect(values(twisted_positions))) + # @info twisted_annotation_cells[] + # _annotation_cells = Observable(annotation_positions(0.0)) + + expansion_factor = sliders.sliders[2].value + + twisted_central_pts = swapyz_scale.(second(ShroffCelegansModels.nearest_central_pt(tmodel, swapyz_unscale.(twisted_annotation_cells[]), expansion_factor[]))) + twisted_central_pts = Observable(twisted_central_pts) + # @info twisted_central_pts[] + + twisted_central_line_match = vec(stack([twisted_annotation_cells[], twisted_central_pts[], fill!(similar(twisted_central_pts[]), Point3f(NaN))]; dims=1)) + twisted_central_line_match = Observable(twisted_central_line_match) + + function get_annotation_text(dict) + String.(get.((dataset.cell_key.mapping,), Symbol.(keys(dict)), String.(keys(dict)))) + end + + #_annotation_text = getindex.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict))) + #_annotation_text = String.(get.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict)), String.(keys(annotation_dict)))) + #straight_annotation_text = String.(get.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict)), String.(keys(annotation_dict)))) + #twisted_annotation_text = String.(get.((dataset.cell_key.mapping,), Symbol.(keys(twisted_positions)), String.(keys(twisted_positions)))) + _annotation_text = get_annotation_text(annotation_dict) + straight_annotation_text = get_annotation_text(annotation_dict) + twisted_annotation_text = get_annotation_text(twisted_positions) + twisted_annotation_text = Observable(twisted_annotation_text) + + + n_ellipse_pts = length(transverse_splines(model)) + colorscheme = :cyclic_wrwbw_40_90_c42_n256 + #shading = MakieCore.automatic + color=colorschemes[colorscheme][1:256÷n_ellipse_pts:256] + colorrange = (1,n_ellipse_pts) + + _color = Observable(repeat(color, length(model))) + straight_color = Observable(repeat(color, length(smodel))) + twisted_color = Observable(repeat(color, length(tmodel))) + + #mesh!(ax, _mesh; colorrange, color = _color, shading, transparency = true) + mesh!(ax, _mesh; colorrange, color = _color, transparency = true, alpha = 0.1) + meshscatter!(ax, _seam_cells; markersize = 1.0, color = :gray, alpha = 1) + meshscatter!(ax, _annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 1) + text!(ax, _seam_cell_labels; text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]], align = (:right, :bottom)) + ann_txt = text!(ax, _annotation_cells; text = _annotation_text, align = (:right, :bottom)) + connect!(ann_txt.visible, annotation_text_toggle.active) + #lines!(ax, _lines, color = :black) + ylims!(ax, (0, 200)) + + mesh!(ax_prewarp, straight_mesh; colorrange, color = straight_color, transparency = true, alpha = 0.1) + meshscatter!(ax_prewarp, straight_seam_cells; markersize = 1.0, color = :gray, alpha = 1) + meshscatter!(ax_prewarp, straight_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 1) + text!(ax_prewarp, straight_seam_cell_labels; text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]], align = (:right, :bottom)) + ann_txt = text!(ax_prewarp, straight_annotation_cells; text = straight_annotation_text, align = (:right, :bottom)) + connect!(ann_txt.visible, annotation_text_toggle.active) + #lines!(ax_prewarp, _lines, color = :black) + ylims!(ax_prewarp, (0, 200)) + + twisted_seam_cell_text = Observable(String.([tmodel.names[2:2:end]; tmodel.names[1:2:end]])) + + mesh!(ax_twisted, twisted_mesh; colorrange, color = twisted_color, transparency = true, alpha = 0.5) + lines!(ax_twisted, twisted_central_spline) + scatter!(ax_twisted, twisted_central_pts) + cs_lines = lines!(ax_twisted, twisted_central_line_match) + connect!(cs_lines.visible, central_spline_lines_toggle.active) + meshscatter!(ax_twisted, twisted_seam_cells; markersize = 1.0, color = :gray, alpha = 0.5, transparency = true) + meshscatter!(ax_twisted, twisted_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 0.5, transparency = true) + text!(ax_twisted, twisted_seam_cell_labels; text = twisted_seam_cell_text, align = (:right, :bottom)) + ann_txt = text!(ax_twisted, twisted_annotation_cells; text = twisted_annotation_text, align = (:right, :bottom)) + connect!(ann_txt.visible, annotation_text_toggle.active) + @info "twisted_seam_cell_labels" twisted_seam_cell_labels[] tmodel.names + + on(throttle(0.1, sliders.sliders[1].value)) do value + idx = round(Int, value*N_timepoints + 1) + model = avg_models[idx] + n_sections = length(interpolation_points(model.central_spline)) + _mesh[] = ShroffCelegansModels.get_model_contour_mesh(model; transform_points=swapyz_scale) + _color[] = repeat(color, length(model)) + title[] = "Average over $config_path\n$(dataset.path), t = $value; number of cross sections: $n_sections" + _seam_cells[] = swapyz_scale.(seam_cell_pts(model, n_upsample)) + _seam_cell_labels[] = _seam_cells[] .- Ref(Point3f(2,0,0)) + _annotation_cells[] = _annotation_positions_over_time[idx] + + smodel = smts_nt(value) + sn_sections = length(interpolation_points(model.central_spline)) + straight_mesh[] = ShroffCelegansModels.get_model_contour_mesh(smodel; transform_points=swapyz_scale) + straight_color[] = repeat(color, length(smodel)) + title[] = "Average over $config_path\n$(dataset.path), t = $value; number of cross sections: $sn_sections" + straight_seam_cells[] = swapyz_scale.(seam_cell_pts(smodel, n_upsample)) + straight_seam_cell_labels[] = straight_seam_cells[] .- Ref(Point3f(2,0,0)) + straight_annotation_cells[] = straight_annotation_positions_over_time[idx] + + tmodel = mts_nt(value) + if !ismissing(tmodel) + twisted_mesh[] = ShroffCelegansModels.get_model_contour_mesh(tmodel; transform_points=swapyz_scale) + twisted_central_spline[] = swapyz_scale.(ShroffCelegansModels.central_spline(tmodel).(LinRange(0,1,length(tmodel)))) + twisted_color[] = repeat(color, length(tmodel)) + twisted_seam_cells[] = swapyz_scale.(seam_cell_pts(tmodel, 0)) + twisted_seam_cell_labels[] = twisted_seam_cells[] .- Ref(Point3f(2,0,0)) + twisted_seam_cell_text[] = [String.(tmodel.names[1:2:end]); String.(tmodel.names[2:2:end])] + annotation_positions = twisted_annotation_positions(value) + if !ismissing(annotation_positions) + twisted_annotation_text[] = get_annotation_text(annotation_positions) + twisted_annotation_cells[] = collect(values(annotation_positions)) + twisted_central_pts[] = swapyz_scale.(second(ShroffCelegansModels.nearest_central_pt(tmodel, swapyz_unscale.(twisted_annotation_cells[]), expansion_factor[]))) + twisted_central_line_match[] = vec(stack([twisted_annotation_cells[], twisted_central_pts[], fill!(similar(twisted_central_pts[]), Point3f(NaN))]; dims=1)) + end + end + end + + on(throttle(0.1, sliders.sliders[2].value)) do expansion_factor_value + value = sliders.sliders[1].value[] + tmodel = mts_nt(value) + annotation_positions = twisted_annotation_positions(value) + if !ismissing(tmodel) + if !ismissing(annotation_positions) + twisted_annotation_text[] = get_annotation_text(annotation_positions) + twisted_annotation_cells[] = collect(values(annotation_positions)) + twisted_central_pts[] = swapyz_scale.(second(ShroffCelegansModels.nearest_central_pt(tmodel, swapyz_unscale.(twisted_annotation_cells[]), expansion_factor_value))) + twisted_central_line_match[] = vec(stack([twisted_annotation_cells[], twisted_central_pts[], fill!(similar(twisted_central_pts[]), Point3f(NaN))]; dims=1)) + end + end + end + + display(f) + f +end + +function fix_average_models_with_annotations( + avg_models, + datasets::Vector{ShroffCelegansModels.Datasets.NormalizedDataset}; + use_myuntwist = false, + cache = use_myuntwist ? my_annotation_position_cache : annotation_position_cache +) + dataset = datasets[1] + + f = Figure(size = (1920, 1080)) + + title_prewarp = Observable("Prewarp") + ax_prewarp = Axis3(f[1,2], aspect = (1, 10, 1); title = title_prewarp) + + title = Observable("Title") + ax = Axis3(f[2,2], aspect = (1, 10, 1); title) + + title_twisted = Observable("Twisted") + ax_twisted = Axis3(f[1:2,1]; title = title_twisted) + + N_timepoints = 200 + r = LinRange(0.0, 1.0, N_timepoints + 1) + sliders = SliderGrid(f[3,1:2], + (label="Time (Normalized)", range=r), + (label="Exp. Factor", range=1.0:0.01:1.5) + ) + slider_range = sliders.sliders[1].range[] + + dataset_paths = map(x->x.path, datasets) + dataset_menu = Menu(f[4,1:2], options = zip(dataset_paths, datasets), default = datasets[2].path) + + dataset = dataset_menu.selection[] + + n_upsample = 2 + + smts = ShroffCelegansModels.StraightenedModelTimeSeries(dataset) + smts_nt = let _length = length(range(dataset.cell_key)) + x -> begin + nt = x * (_length - 1) + 1.0 + smts(nt, 2) + end + end + + mts = smts.modelTimeSeries + mts_nt = let _range = range(dataset.cell_key) + x -> begin + nt = x * (length(_range) - 1) + 1.0 + nt = round(Int, nt) + title_twisted[] = "Twisted; idx = $nt, tp = $(_range[nt])" + mts(nt) + end + end + + + annotation_dict = get_cell_trajectory_dict(dataset; use_myuntwist) + + # precalculate the volumes + #= + volumes_and_lengths = map(models) do model + ShroffCelegansModels.volume_by_cross_section(model), ShroffCelegansModels.central_spline(model)(1.0)[3] + end + volumes = first.(volumes_and_lengths) + lines!(vol_ax, slider_range, volumes) + whole_idx = floor.(Int, 1:1/step(slider_range):length(slider_range)) + scatter!(vol_ax, slider_range[whole_idx], volumes[whole_idx]) + + current_volume = Observable(Point(sliders.sliders[1].value[], first(volumes))) + scatter!(vol_ax, current_volume, marker = '∘', color = :red, markersize = 50) + =# + + # lengths + #= + lengths = last.(volumes_and_lengths) + lines!(length_ax, slider_range, lengths, color = :green) + scatter!(length_ax, slider_range[whole_idx], lengths[whole_idx], color = :green) + + current_length = Observable(Point(sliders.sliders[1].value[], first(lengths))) + scatter!(length_ax, current_length, marker='∘', color = :red, markersize=50) + =# + + model = avg_models[1] + _mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(model; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + _seam_cells = Observable(swapyz_scale.(seam_cell_pts(model, n_upsample))) + _seam_cell_labels = Observable(_seam_cells[] .- Ref(Point3f(2,0,0))) + + smodel = smts_nt(0.0) + straight_mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(smodel; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + straight_seam_cells = Observable(swapyz_scale.(seam_cell_pts(smodel, n_upsample))) + straight_seam_cell_labels = Observable(straight_seam_cells[] .- Ref(Point3f(2,0,0))) + + tmodel = mts_nt(0.0) + twisted_mesh = Observable(ShroffCelegansModels.get_model_contour_mesh(tmodel; transform_points=swapyz_scale)) + #_lines = Observable(swapyz.(cross_sections_at_knots(model))) + twisted_seam_cells = Observable(swapyz_scale.(seam_cell_pts(tmodel, 0))) + twisted_seam_cell_labels = Observable(twisted_seam_cells[] .- Ref(Point3f(2,0,0))) + + function annotation_positions(nt) + _smodel = smts_nt(nt) + idx = round(Int, nt*N_timepoints + 1) + _model = avg_models[idx] + @info "annotation positions" nt + swapyz_scale.(transform_annotations( + _smodel, _model, map(values(annotation_dict)) do ann + ann(nt) + end + )) + end + + function straight_annotation_positions(nt) + @info "annotation prewarp positions" nt + swapyz_scale.(map(values(annotation_dict)) do ann + ann(nt) + end) + end + + twisted_annotation_positions = let _length = length(range(dataset.cell_key)) + function twisted_annotation_positions(nt) + idx = round(Int, nt*(_length - 1) + 1) + dict = ShroffCelegansModels.twisted_annotations(dataset, idx) + Dict(keys(dict) .=> swapyz_scale.(values(dict))) + end + end + + + if haskey(cache, dataset.path) + _annotation_positions_over_time = cache[dataset.path] + else + _annotation_positions_over_time = annotation_positions.(r) + cache[dataset.path] = _annotation_positions_over_time + end + + straight_annotation_positions_over_time = straight_annotation_positions.(r) + + _annotation_cells = Observable(_annotation_positions_over_time[1]) + straight_annotation_cells = Observable(straight_annotation_positions_over_time[1]) + twisted_positions = twisted_annotation_positions(0.0) + twisted_annotation_cells = Observable(collect(values(twisted_positions))) + @info twisted_annotation_cells[] + # _annotation_cells = Observable(annotation_positions(0.0)) + + #_annotation_text = getindex.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict))) + _annotation_text = get.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict)), String.(keys(annotation_dict))) + straight_annotation_text = get.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict)), String.(keys(annotation_dict))) + twisted_annotation_text = get.((dataset.cell_key.mapping,), Symbol.(keys(twisted_positions)), String.(keys(twisted_positions))) + + + n_ellipse_pts = length(transverse_splines(model)) + colorscheme = :cyclic_wrwbw_40_90_c42_n256 + #shading = MakieCore.automatic + color=colorschemes[colorscheme][1:256÷n_ellipse_pts:256] + colorrange = (1,n_ellipse_pts) + + _color = Observable(repeat(color, length(model))) + straight_color = Observable(repeat(color, length(smodel))) + twisted_color = Observable(repeat(color, length(tmodel))) + + #mesh!(ax, _mesh; colorrange, color = _color, shading, transparency = true) + mesh!(ax, _mesh; colorrange, color = _color, transparency = true, alpha = 0.1) + meshscatter!(ax, _seam_cells; markersize = 1.0, color = :gray, alpha = 1) + meshscatter!(ax, _annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 1) + text!(ax, _seam_cell_labels; text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]], align = (:right, :bottom)) + text!(ax, _annotation_cells; text = _annotation_text, align = (:right, :bottom)) + #lines!(ax, _lines, color = :black) + ylims!(ax, (0, 200)) + + mesh!(ax_prewarp, straight_mesh; colorrange, color = straight_color, transparency = true, alpha = 0.1) + meshscatter!(ax_prewarp, straight_seam_cells; markersize = 1.0, color = :gray, alpha = 1) + meshscatter!(ax_prewarp, straight_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 1) + text!(ax_prewarp, straight_seam_cell_labels; text = [replace.(model.names[1:2:end], 'L' => 'R'); model.names[1:2:end]], align = (:right, :bottom)) + text!(ax_prewarp, straight_annotation_cells; text = straight_annotation_text, align = (:right, :bottom)) + #lines!(ax_prewarp, _lines, color = :black) + ylims!(ax_prewarp, (0, 200)) + + twisted_seam_cell_text = Observable([tmodel.names[2:2:end]; tmodel.names[1:2:end]]) + + mesh!(ax_twisted, twisted_mesh; colorrange, color = twisted_color, transparency = true, alpha = 0.5) + meshscatter!(ax_twisted, twisted_seam_cells; markersize = 1.0, color = :gray, alpha = 0.5, transparency = true) + meshscatter!(ax_twisted, twisted_annotation_cells; markersize = 1.0, color = use_myuntwist ? :gold : :blue, alpha = 0.5, transparency = true) + text!(ax_twisted, twisted_seam_cell_labels; text = twisted_seam_cell_text, align = (:right, :bottom)) + text!(ax_twisted, twisted_annotation_cells; text = twisted_annotation_text, align = (:right, :bottom)) + @info "twisted_seam_cell_labels" twisted_seam_cell_labels[] tmodel.names + + on(dataset_menu.selection) do ds + dataset = ds + smts = ShroffCelegansModels.StraightenedModelTimeSeries(dataset) + smts_nt = let _length = length(range(dataset.cell_key)) + x -> begin + nt = x * (_length - 1) + 1.0 + smts(nt, 2) + end + end + + mts = smts.modelTimeSeries + mts_nt = let _length = length(range(dataset.cell_key)) + x -> begin + nt = x * (_length - 1) + 1.0 + nt = round(Int, nt) + title_twisted[] = "Twisted; idx = $nt, tp = $(_range[nt])" + mts(nt) + end + end + + + annotation_dict = get_cell_trajectory_dict(dataset; use_myuntwist) + + twisted_annotation_positions = let _length = length(range(dataset.cell_key)) + function twisted_annotation_positions(nt) + idx = round(Int, nt*(_length - 1) + 1) + dict = ShroffCelegansModels.twisted_annotations(dataset, idx) + Dict(keys(dict) .=> swapyz_scale.(values(dict))) + end + end + + + if haskey(cache, dataset.path) + _annotation_positions_over_time = cache[dataset.path] + else + _annotation_positions_over_time = annotation_positions.(r) + cache[dataset.path] = _annotation_positions_over_time + end + + straight_annotation_positions_over_time = straight_annotation_positions.(r) + + end + + on(throttle(0.1, sliders.sliders[1].value)) do value + idx = round(Int, value*N_timepoints + 1) + model = avg_models[idx] + n_sections = length(interpolation_points(model.central_spline)) + _mesh[] = ShroffCelegansModels.get_model_contour_mesh(model; transform_points=swapyz_scale) + _color[] = repeat(color, length(model)) + title[] = "Average over $config_path\n$(dataset.path), t = $value; number of cross sections: $n_sections" + _seam_cells[] = swapyz_scale.(seam_cell_pts(model, n_upsample)) + _seam_cell_labels[] = _seam_cells[] .- Ref(Point3f(2,0,0)) + _annotation_cells[] = _annotation_positions_over_time[idx] + + smodel = smts_nt(value) + sn_sections = length(interpolation_points(model.central_spline)) + straight_mesh[] = ShroffCelegansModels.get_model_contour_mesh(smodel; transform_points=swapyz_scale) + straight_color[] = repeat(color, length(smodel)) + title[] = "Average over $config_path\n$(dataset.path), t = $value; number of cross sections: $sn_sections" + straight_seam_cells[] = swapyz_scale.(seam_cell_pts(smodel, n_upsample)) + straight_seam_cell_labels[] = straight_seam_cells[] .- Ref(Point3f(2,0,0)) + straight_annotation_cells[] = straight_annotation_positions_over_time[idx] + + tmodel = mts_nt(value) + if !ismissing(tmodel) + twisted_mesh[] = ShroffCelegansModels.get_model_contour_mesh(tmodel; transform_points=swapyz_scale) + twisted_color[] = repeat(color, length(tmodel)) + twisted_seam_cells[] = swapyz_scale.(seam_cell_pts(tmodel, 0)) + twisted_seam_cell_labels[] = twisted_seam_cells[] .- Ref(Point3f(2,0,0)) + twisted_seam_cell_text[] = [tmodel.names[1:2:end]; tmodel.names[2:2:end]] + annotation_positions = twisted_annotation_positions(value) + if !ismissing(annotation_positions) + twisted_annotation_cells[] = collect(values(annotation_positions)) + end + end + end + + display(f) + f +end \ No newline at end of file diff --git a/src/demo_averaging/get_avg_models.jl b/src/demo_averaging/get_avg_models.jl index 2dfae22..f6a444b 100644 --- a/src/demo_averaging/get_avg_models.jl +++ b/src/demo_averaging/get_avg_models.jl @@ -1,4 +1,33 @@ +using ShroffCelegansModels +using ProgressMeter + function get_avg_models(n=201) + config_json, cell_keys, datasets = read_config_json() + + flattened_datasets = collect(Iterators.flatten(values(datasets))) + + min_length = map(flattened_datasets) do ds + length(range(ds.cell_key)) + end |> minimum + + + normal_flattened_datasets = filter(x->length(range(x.cell_key)) != 259, flattened_datasets) + normal_flattened_datasets = filter(x->x.cell_key.name != "Vab-1_Pos0",normal_flattened_datasets) + + smts_datasets = ShroffCelegansModels.StraightenedModelTimeSeries.(normal_flattened_datasets) + lengths = normal_flattened_datasets .|> x->length(range(x.cell_key)) + smts_datasets_nt = map(zip(smts_datasets, lengths)) do (ds, _length) + x -> begin + nt = x * (_length - 1) + 1.0 + # @info "Normalized time" nt + ds(nt) + end + end + models_at_nt(nt) = map(smts_datasets_nt) do ds + ds(nt) + end + + r = LinRange(0.0, 1.0, n) first_avg_model = let models = models_at_nt(r[1]) models = filter(!isnothing, models) diff --git a/src/demo_averaging/get_cell_trajectory_dict.jl b/src/demo_averaging/get_cell_trajectory_dict.jl index 79e2775..e1d910b 100644 --- a/src/demo_averaging/get_cell_trajectory_dict.jl +++ b/src/demo_averaging/get_cell_trajectory_dict.jl @@ -1,6 +1,9 @@ using ShroffCelegansModels.BSplineKit -function get_cell_trajectory_dict(dataset::ShroffCelegansModels.Datasets.NormalizedDataset; use_myuntwist = false) +function get_cell_trajectory_dict( + dataset::ShroffCelegansModels.Datasets.NormalizedDataset; + use_myuntwist = false +)::Dict{String, Union{Missing, BSplineKit.SplineExtrapolation{<: Spline{Point3d}}}} annotations = load_straightened_annotations_over_time(dataset; use_myuntwist) cells = collect(keys(annotations[1])) @@ -28,7 +31,7 @@ function get_cell_trajectory_dict(dataset::ShroffCelegansModels.Datasets.Normali @error "There was an issue getting cell trajectory" cell dataset.path trajectory rethrow() end - end |> Dict + end |> Dict{String, Union{Missing, BSplineKit.SplineExtrapolation{<: Spline{Point3d}}}} return cell_trajectory_dict end diff --git a/src/demo_averaging/get_group_annotation_positions_over_time.jl b/src/demo_averaging/get_group_annotation_positions_over_time.jl index 504b202..b34be5f 100644 --- a/src/demo_averaging/get_group_annotation_positions_over_time.jl +++ b/src/demo_averaging/get_group_annotation_positions_over_time.jl @@ -1,3 +1,5 @@ +include("transform_annotations.jl") + function get_datasets_info(datasets) use_myuntwist = true datasets_info = map(datasets) do dataset @@ -14,7 +16,6 @@ function get_datasets_info(datasets) x -> begin nt = x * (_length - 1) + 1.0 nt = round(Int, nt) - title_twisted[] = "Twisted; idx = $nt" mts(nt) end end @@ -23,39 +24,48 @@ function get_datasets_info(datasets) annotation_dict = get_cell_trajectory_dict(dataset; use_myuntwist) _annotation_text = String.(get.((dataset.cell_key.mapping,), Symbol.(keys(annotation_dict)), String.(keys(annotation_dict)))) annotation_dict = Dict(_annotation_text .=> values(annotation_dict)) - return (; dataset, smts_nt, mts_nt, annotation_dict) + return @NamedTuple{ + dataset::ShroffCelegansModels.Datasets.NormalizedDataset, + smts_nt::Function, + mts_nt::Function, + annotation_dict::Dict{String, Union{Missing, BSplineKit.SplineExtrapolation{<: Spline{Point3d}}}} + }((dataset, smts_nt, mts_nt, annotation_dict)) end return datasets_info end -function annotation_positions(smts_nt, annotation_dict, nt) - N_timepoints = 200 - _smodel = smts_nt(nt) -idx = round(Int, nt*N_timepoints + 1) - _model = avg_models[idx] - @info "annotation positions" nt - positions = missing - try - positions = swapyz_scale.(transform_annotations( - _smodel, _model, map(values(annotation_dict)) do ann - if ismissing(ann) - return Point3(NaN) - else - ann(nt) - end - end - )) - catch err - @error "A problem occured at $nt with avg_model[$idx]" exception=(err, Base.catch_backtrace()) - positions = [Point3(NaN) for i in eachindex(annotation_dict)] - end - return positions +function annotation_positions(smts_nt, annotation_dict, nt; avg_models::Vector{<: CelegansModel} = avg_models) + N_timepoints = length(avg_models) - 1 + _smodel = smts_nt(nt) + idx = round(Int, nt * N_timepoints + 1) + _model = avg_models[idx] + @debug "annotation positions" nt + positions = missing + try + positions = swapyz_scale.(transform_annotations( + _smodel, _model, map(values(annotation_dict)) do ann + if ismissing(ann) + return Point3(NaN) + else + ann(nt) + end + end + )) + catch err + @error "A problem occured at $nt with avg_model[$idx]" exception = (err, Base.catch_backtrace()) + positions = [Point3(NaN) for i in eachindex(annotation_dict)] + end + return positions end -function get_group_annotation_positions_over_time(datasets, cache) - use_myuntwist = true - r = LinRange(0,1,201) +function get_group_annotation_positions_over_time( + datasets::Vector{ShroffCelegansModels.Datasets.NormalizedDataset}, + cache::Dict{String, Vector{Vector{Point3{Float64}}}}, # my_annotation_position_cache + normalized_timepoints::AbstractVector{Float64} = LinRange(0,1,201); + avg_models::Vector{<: CelegansModel} = avg_models +)::Vector{Vector{Dict{String, Point3{Float64}}}} + @assert length(avg_models) == length(normalized_timepoints) datasets_info = get_datasets_info(datasets) group_annotation_positions_over_time = map(datasets_info) do dataset_info dataset = dataset_info.dataset @@ -65,17 +75,24 @@ function get_group_annotation_positions_over_time(datasets, cache) _annotation_positions_over_time = cache[dataset.path] else #_annotation_positions_over_time = annotation_positions.((smts_nt,), (annotation_dict,), r) - _annotation_positions_over_time = Vector{Vector{Point3{Float64}}}(undef, length(r)) - @showprogress Threads.@threads for i in eachindex(r) - nt = r[i] - _annotation_positions_over_time[i] = annotation_positions(smts_nt, annotation_dict, nt) + _annotation_positions_over_time = Vector{Vector{Point3{Float64}}}(undef, length(normalized_timepoints)) + @showprogress Threads.@threads for i in eachindex(normalized_timepoints) + nt = normalized_timepoints[i] + _annotation_positions_over_time[i] = annotation_positions(smts_nt, annotation_dict, nt; avg_models) end cache[dataset.path] = _annotation_positions_over_time end - _annotation_positions_over_time # Vector{Vector{Point3{Float64}}} - map(_annotation_positions_over_time) do positions - Dict(keys(annotation_dict) .=> positions) + _annotation_positions_over_time::Vector{Vector{Point3{Float64}}} + try + map(_annotation_positions_over_time) do positions + Dict{String, Point3d}(keys(annotation_dict) .=> positions) + end + catch err + @error "Error creating dict for dataset $(dataset.path)" exception = (err, Base.catch_backtrace()) + map(_annotation_positions_over_time) do positions + Dict{String, Point3d}(keys(annotation_dict) .=> fill(Point3(NaN), length(keys(annotation_dict)) )) + end end - end # Vector{Vector{Dict{String, Point3{Float64}}}} # dataset, normalized time, name => position + end::Vector{Vector{Dict{String, Point3{Float64}}}} # dataset, normalized time, name => position return group_annotation_positions_over_time end diff --git a/src/demo_averaging/load_straightened_annotations_over_time.jl b/src/demo_averaging/load_straightened_annotations_over_time.jl index 6c2d655..25bb06c 100644 --- a/src/demo_averaging/load_straightened_annotations_over_time.jl +++ b/src/demo_averaging/load_straightened_annotations_over_time.jl @@ -1,4 +1,8 @@ -function load_straightened_annotations_over_time(dataset::ShroffCelegansModels.Datasets.NormalizedDataset, offsets::UnitRange = 1:length(range(dataset.cell_key)); use_myuntwist::Bool = false) +function load_straightened_annotations_over_time( + dataset::ShroffCelegansModels.Datasets.NormalizedDataset, + offsets::UnitRange{Int} = 1:length(range(dataset.cell_key)); + use_myuntwist::Bool = false +)::Vector{Union{Missing, Dict{String, Point3d}}} key = (dataset.path, offsets, use_myuntwist) if haskey(annotations_cache, key) return annotations_cache[key] @@ -16,9 +20,9 @@ function load_straightened_annotations_over_time(dataset::ShroffCelegansModels.D return missing end annotation_df = CSV.read(path, DataFrame) - pts = Point3f.(eachrow(Matrix(annotation_df)[:, 2:4])) + pts = Point3d.(eachrow(Matrix(annotation_df)[:, 2:4])) pts .-= get_straightened_lattice_xy_center(dataset, time_offset) - Dict(annotation_df[:,1] .=> pts) + Dict{String, Point3d}(annotation_df[:,1] .=> pts) end annotations_cache[key] = annotations return annotations diff --git a/src/demo_averaging/read_config_json.jl b/src/demo_averaging/read_config_json.jl index 3885a06..5577173 100644 --- a/src/demo_averaging/read_config_json.jl +++ b/src/demo_averaging/read_config_json.jl @@ -1,6 +1,7 @@ function read_config_json(config_path::AbstractString = config_path) config_json = JSON3.read(config_path) cell_keys = Dict{String, Vector{ShroffCelegansModels.CellKey}}() + #= map(config_json.data.strains) do strain cell_keys[strain.name] = map(strain.folderpaths) do folder_path cell_key_path = joinpath(folder_path, "cell_key.json") @@ -16,12 +17,16 @@ function read_config_json(config_path::AbstractString = config_path) end end end + =# datasets = Dict{String, Vector{ShroffCelegansModels.NormalizedDataset}}() map(config_json.data.strains) do strain datasets[strain.name] = map(strain.folderpaths) do folder_path ShroffCelegansModels.NormalizedDataset(joinpath(folder_path, "RegB")) end + cell_keys[strain.name] = map(datasets[strain.name]) do dataset + dataset.cell_key + end end return config_json, cell_keys, datasets end \ No newline at end of file diff --git a/src/demo_averaging/resave_for_ben.jl b/src/demo_averaging/resave_for_ben.jl index f10e29e..6ebc012 100755 --- a/src/demo_averaging/resave_for_ben.jl +++ b/src/demo_averaging/resave_for_ben.jl @@ -43,9 +43,12 @@ resave_for_ben("edited_smoothed_average_annotations_r020_theta020_z030_with_seam - **Auto-detects number of timepoints** from HDF5 structure (no hard-coding) - Works with any number of timepoints (201, 371, etc.) """ -function resave_for_ben(filename; - target_filename = replace(filename, ".h5" => "_for_ben.csv"), - time_range = (381, 751)) +function resave_for_ben( + filename; + target_filename = replace(filename, ".h5" => "_for_ben.csv"), + time_range = (381, 751), + explicit::Bool = false +) if isfile(target_filename) error("$target_filename exists") diff --git a/src/demo_averaging/save_cache.jl b/src/demo_averaging/save_cache.jl index e4ec8a7..b17635e 100644 --- a/src/demo_averaging/save_cache.jl +++ b/src/demo_averaging/save_cache.jl @@ -74,6 +74,9 @@ function load_annotations_cache(annotations_cache = annotations_cache) last_path = pop!(_paths) idx = tryparse(Int, last_path) P = nothing + #println("Dataset: ", d) + #println("Parent Dataset: ", parent(d)) + #println("Parent Dataset: ", parent(d)) try P = parent(parent(d)) catch err diff --git a/src/demo_averaging/save_tosif.jl b/src/demo_averaging/save_tosif.jl index 547e04b..52ec437 100644 --- a/src/demo_averaging/save_tosif.jl +++ b/src/demo_averaging/save_tosif.jl @@ -7,9 +7,11 @@ function resave_for_tosif(filename; target_filename = replace(filename, ".h5" => strain_matrices = Array{Float64,3}[] annotation_labels = String[] strain_labels = String[] + num_timepoints = 0 for strain in keys(h5f) matrices = Matrix{Float64}[] - for tp in 1:201 + num_timepoints = length(filter(contains("timepoint_"), keys(h5f[strain]))) + for tp in 1:num_timepoints tpk = @sprintf("timepoint_%03d", tp) ds = h5f[strain][tpk] push!(matrices, ds[]) @@ -19,7 +21,7 @@ function resave_for_tosif(filename; target_filename = replace(filename, ".h5" => append!(strain_labels, repeat([strain], length(labels))) push!(strain_matrices, stack(matrices, dims=2)) end - minutes = (0:0.005:1) * 420 .+ 420 |> collect + minutes = range(381, stop=751, length=num_timepoints) |> collect trajectories = cat(strain_matrices..., dims=1) trajectories = trajectories[:,:,[1,3,2]] (; trajectories, annotation_labels, strain_labels, minutes) diff --git a/src/demo_averaging/show_average_annotations.jl b/src/demo_averaging/show_average_annotations.jl index ea4dd1e..57e103e 100644 --- a/src/demo_averaging/show_average_annotations.jl +++ b/src/demo_averaging/show_average_annotations.jl @@ -372,10 +372,10 @@ function show_average_annotations( Point2(polar_coord.θ, polar_coord.r) end end - lines!(polar_ax, polar_track; color = track3d_color, colormap = :lajolla) - scatter!(polar_ax, polar_annotations; color = scatter_color) - scatter!(polar_ax, polar_annotation_selected; color = :red) - text!(polar_ax, polar_annotations; text = common_annotations) + #lines!(polar_ax, polar_track; color = track3d_color, colormap = :lajolla) + #scatter!(polar_ax, polar_annotations; color = scatter_color) + #scatter!(polar_ax, polar_annotation_selected; color = :red) + #text!(polar_ax, polar_annotations; text = common_annotations) # selected annotation index a = nothing diff --git a/src/demo_averaging/transform_annotations.jl b/src/demo_averaging/transform_annotations.jl index f65fed8..1448d5a 100644 --- a/src/demo_averaging/transform_annotations.jl +++ b/src/demo_averaging/transform_annotations.jl @@ -1,3 +1,5 @@ +using ThinPlateSplines: tps_solve + function transform_annotations(from_model, to_model, annotations::AbstractVector{<: Point}) warp_from = ShroffCelegansModels.lattice(from_model) |> vec warp_to = ShroffCelegansModels.lattice(to_model) |> vec diff --git a/src/demo_averaging/zscore_analysis.jl b/src/demo_averaging/zscore_analysis.jl new file mode 100644 index 0000000..bdc2f21 --- /dev/null +++ b/src/demo_averaging/zscore_analysis.jl @@ -0,0 +1,23 @@ +using HDF5 +using StatsBase: zscore +using DataFrames +using CSV + +function zscore_analysis() + df = DataFrame(dataset=String[], embryo=String[], annotation=String[], zscore=Float64[]) + h5open("embryos_371_2026_04_10.h5") do h5f + for k in keys(h5f) + for e in keys(h5f[k]) + M = h5f[k][e][3, :, :] + zscores = zscore(sqrt.(sum(diff(M; dims=1) .^ 2; dims=1))) + pairs = Dict(attrs(h5f[k][e])["annotation_names"] .=> zscores') + deviation = filter(k -> pairs[k] > 2, keys(pairs)) + for d in deviation + println(k, ", ", e, ", ", d, ", ", pairs[d]) + push!(df, (k, e, d, pairs[d])) + end + end + end + end + return df +end \ No newline at end of file diff --git a/src/makie.jl b/src/makie.jl index 92dbd77..aa59f80 100644 --- a/src/makie.jl +++ b/src/makie.jl @@ -120,7 +120,7 @@ function Makie.text!(ax, model::AbstractCelegansModel, f::Function = identity) # text!(ax, f.(right_spline.(pts)); text = ShroffCelegansModels.Types.names(model)[2:2:end]) end -# const voxel_size = 0.1625 # um +const voxel_size = 0.1625 # um swapyz(p::P) where P <: Point3 = P(p[1], p[3], p[2]) swapyz_scale(p::P) where P <: Point3 = P(p[1], p[3], p[2]) * voxel_size diff --git a/src/model_time_series.jl b/src/model_time_series.jl index 6e2e33b..89f4123 100644 --- a/src/model_time_series.jl +++ b/src/model_time_series.jl @@ -21,13 +21,14 @@ function (mts::ModelTimeSeries)(time_offset::Integer) end catch err if err isa BoundsError - @warn "BoundsError" time_offset timepoint lattice_filepath - return nothing - else - rethrow(err) + @warn "BoundsError" time_offset + # return nothing end + rethrow(err) end end +Base.length(mts::ModelTimeSeries) = length(range(mts.dataset.cell_key)) +Base.iterate(mts::ModelTimeSeries, state=1) = state > length(mts) ? nothing : (mts(state), state + 1) struct StraightenedModelTimeSeries{Model <: AbstractCelegansModel, Cache <: LRU{<: AbstractString, Union{Model,Missing}}, ModelTS <: ModelTimeSeries} modelTimeSeries::ModelTS diff --git a/src/parse_worm_dataset_path.jl b/src/parse_worm_dataset_path.jl index 44e523f..4e463e6 100644 --- a/src/parse_worm_dataset_path.jl +++ b/src/parse_worm_dataset_path.jl @@ -44,14 +44,18 @@ include("demo_averaging/save_cache.jl") # initialize my_annotation_position_cache try - @info "Loading straightened annotation positions..." - load_annotation_cache() + if isempty(my_annotation_position_cache) + @info "Loading straightened annotation positions..." + load_annotation_cache() + end catch err @warn "There was an issue loading the annotation cache" err end -@info "Loading warped annotation positions..." try - load_annotations_cache() + if isempty(annotations_cache) + @info "Loading warped annotation positions..." + load_annotations_cache() + end catch err @warn "There was an issue loading the my annotation cache" err end @@ -160,7 +164,12 @@ function save_annotation_position_cache( end attrs(attributed_obj)["path"] = embryo.path attrs(attributed_obj)["normalized_time"] = collect(timepoints) - attrs(attributed_obj)["standard_minutes_post_fertilization"] = collect(timepoints .* 420 .+ 420) + if num_timepoints == 371 + attrs(attributed_obj)["standard_minutes_post_fertilization"] = collect(timepoints .* 370 .+ 381) + else + # num_timepoints == 201, which corresponds to 421 to 840 minutes + attrs(attributed_obj)["standard_minutes_post_fertilization"] = collect(timepoints .* 420 .+ 420) + end catch err #display(err) # println(err) @@ -185,7 +194,9 @@ function save_annotation_position_cache_all_dated(datasets::Dict{String, Vector{ date_str = "$(Dates.today())" date_str = replace(date_str, "-" => "_") - for (timepoints, expanded) in Iterators.product((:raw, 420), (true, false)) + # resampled_timepoints = 420, when we were doing 421 to 840 minutes + resampled_timepoints = 371 # 381 to 751 + for (timepoints, expanded) in Iterators.product((:raw, resampled_timepoints), (true, false)) tp_str = string(timepoints) if expanded tp_str *= "_expanded" diff --git a/src/save_celegans_avg_models.jl b/src/save_celegans_avg_models.jl index 2b8afcb..16acd85 100644 --- a/src/save_celegans_avg_models.jl +++ b/src/save_celegans_avg_models.jl @@ -1,10 +1,10 @@ using Dates using Printf -using HDF5 +using ShroffCelegansModels.HDF5 -avg_models_filename = "celegans_avg_models_" * Dates.format(now(), "yyyy_mm_dd") * ".h5" +avg_models_filename() = "celegans_avg_models_" * Dates.format(now(), "yyyy_mm_dd") * ".h5" -function save_avg_models(avg_models_filename = avg_models_filename, avg_models = avg_models, offset = 0) +function save_avg_models(avg_models_filename = avg_models_filename(), avg_models = avg_models, offset = 0) h5open(avg_models_filename, "w") do h5f for (i, m) in pairs(avg_models) save_celegans_model(h5f, @sprintf("avg_model_%03d", i + offset), m) @@ -12,7 +12,7 @@ function save_avg_models(avg_models_filename = avg_models_filename, avg_models = end end -function load_avg_models(avg_models_filename= avg_models_filename) +function load_avg_models(avg_models_filename= avg_models_filename()) avg_models = [] h5open(avg_models_filename, "r") do h5f for k in keys(h5f) @@ -26,7 +26,7 @@ function load_avg_models(avg_models_filename= avg_models_filename) identity.(avg_models) end -function save_measurements(avg_models_filename = avg_models_filename) +function save_measurements(avg_models_filename = avg_models_filename()) h5open(avg_models_filename) do h5f attrs(h5f)["voxel_pitch_micrometers"] = 0.165 h5f["measurements/volume"] = ShroffCelegansModels.volume_by_cross_section.(avg_models) .* 0.165^3 diff --git a/src/seam_cell_to_lineage_map.jl b/src/seam_cell_to_lineage_map.jl new file mode 100644 index 0000000..70dfa7f --- /dev/null +++ b/src/seam_cell_to_lineage_map.jl @@ -0,0 +1,573 @@ +using ShroffCelegansModels: CSV, DataFrames, GeometryBasics, HDF5 +using ShroffCelegansModels: transverse_splines +using CSV: CSV +using DataFrames: DataFrame, transform!, subset, select, nrow, eachrow, ByRow +using Printf: @sprintf +using LinearAlgebra: normalize, cross, dot, norm, I +#using GeometryBasics +#using GLMakie + +include("save_celegans_avg_models.jl") +include("demo_averaging/seam_cell_pts.jl") +include("demo_averaging/modelio.jl") + +# Mapping from embryonic lineage strings to seam cell names +const lineage_to_seam_cell_map = Dict( + "ABplaaappa" => "H0L", + "ABarpapppa" => "H0R", + "ABplaaappp" => "H1L", + "ABarpapppp" => "H1R", + "ABarppaaap" => "H2L", + "ABarpppaap" => "H2R", + "ABarppapaa" => "V1L", + "ABarppppaa" => "V1R", + "ABarppapap" => "V2L", + "ABarppppap" => "V2R", + "ABplappapa" => "V3L", + "ABprappapa" => "V3R", + "ABarppappa" => "V4L", + "ABarpppppa" => "V4R", + "ABplapapaap" => "V5L", + "ABprapapaap" => "V5R", + "ABarppappp" => "V6L", + "ABarpppppp" => "V6R", + "ABplappppp" => "TL", + "ABprappppp" => "TR" +) + +# Reverse mapping from seam cell names to embryonic lineage strings +const seam_cell_to_lineage_map = Dict( + "H0L" => "ABplaaappa", + "H0R" => "ABarpapppa", + "H1L" => "ABplaaappp", + "H1R" => "ABarpapppp", + "H2L" => "ABarppaaap", + "H2R" => "ABarpppaap", + "V1L" => "ABarppapaa", + "V1R" => "ABarppppaa", + "V2L" => "ABarppapap", + "V2R" => "ABarppppap", + "V3L" => "ABplappapa", + "V3R" => "ABprappapa", + "V4L" => "ABarppappa", + "V4R" => "ABarpppppa", + "V5L" => "ABplapapaap", + "V5R" => "ABprapapaap", + "V6L" => "ABarppappp", + "V6R" => "ABarpppppp", + "TL" => "ABplappppp", + "TR" => "ABprappppp" +) + +const left_seam_cells = ["H0L", "H1L", "H2L", "V1L", "V2L", "V3L", "V4L", "V5L", "V6L", "TL"] + +const right_seam_cells = ["H0R", "H1R", "H2R", "V1R", "V2R", "V3R", "V4R", "V5R", "V6R", "TR"] + +const seam_cell_midpoints = replace.(left_seam_cells, 'L' => 'M') + +function get_pretwitch_df() + pretwitch_df = CSV.read("final_20251205_pre-twitch_coords.csv", DataFrame) + transform!(pretwitch_df, :cell => ByRow(strip) => :cell) + return pretwitch_df +end + +function get_lineage_df(lineage::Union{String,SubString}; pretwitch_df=get_pretwitch_df()) + return subset(pretwitch_df, :cell => cell -> strip.(cell) .== lineage) +end + +function get_full_lineage_df(lineage::String; pretwitch_df=get_pretwitch_df()) + dfs = DataFrame[] + for i in 3:length(lineage) + sub_lineage = @view lineage[1:i] + df = get_lineage_df(sub_lineage; pretwitch_df=pretwitch_df) + push!(dfs, df) + end + return vcat(dfs...) +end + +function get_seam_cell_df(seam_cell::String; pretwitch_df=get_pretwitch_df()) + lineage = seam_cell_to_lineage_map[seam_cell] + return get_lineage_df(lineage; pretwitch_df=pretwitch_df) +end + +function get_seam_cell_time_and_points(seam_cell::String) + df = get_seam_cell_df(seam_cell) + times = df.time .|> Float64 + points = [Point3(df.x[i], df.y[i], df.z[i]) for i in 1:nrow(df)] + return times, points +end + +function scatter_times_and_points!(times, points) + scatter!(points, color=times) +end + +function scatter_times_and_points(times, points) + scatter(points, color=times) +end + +function dataframe_to_point3f_array(df::DataFrame) + return Point3f.(Vector.(eachrow(select(df, [:x, :y, :z])))) +end + +function get_pretwitch_points_at_time(pretwitch_df, time::Int) + timepoint_df = subset(pretwitch_df, :time => _time -> _time .== time) + return Dict(timepoint_df.cell .=> dataframe_to_point3f_array(timepoint_df)) +end + + + +function pretwitch_over_time(pretwitch_df) + f = Figure() + ax = Axis3(f[1, 1], aspect=:data) + s = Slider(f[2, 1], range=0:360, startvalue=0) + pt = get_pretwitch_points_at_time(pretwitch_df, 360) |> values |> collect + sc = Makie.meshscatter!(ax, pt, markersize=5, color=:blue) + #pt = get_pretwitch_points_at_time(pretwitch_df, 0) + #sc.positions[] = pt + on(s.value) do v + pt = get_pretwitch_points_at_time(pretwitch_df, v) |> values |> collect + sc.positions[] = pt + end + return f +end + +function get_pretwitch_annotation_points_at_time(time::Int; pretwitch_df=get_pretwitch_df()) + timepoint_df = subset(pretwitch_df, :time => _time -> _time .== time) + annotation_points = Dict{String,Point3f}() + for row in eachrow(timepoint_df) + cell = strip(row.cell) + annotation_points[cell] = Point3f(row.x, row.y, row.z) + end + return annotation_points +end + +function pretwitch_seamcells_over_time(; + pretwitch_df=get_pretwitch_df(), + avg_models=nothing, + average_annotations_dict=nothing, + left_seam_cells=["a0L"; left_seam_cells], + right_seam_cells=["a0R"; right_seam_cells], + seam_cell_midpoints=["a0M"; seam_cell_midpoints], + voxel_size=0.1625 +) + f = Figure() + ax = Axis3(f[1, 1], aspect=:data, + xlabel="L - R (μm)", + ylabel="A - P (μm)", + zlabel="D - V (μm)", + titlealign=:left + ) + xlims!(ax, -15, 15) + zlims!(ax, -15, 15) + #ylims!(ax, -75,125) + ylims!(ax, 0, 200) + s = Slider(f[2, 1], range=20:380, startvalue=0) + seam_cells = vcat(left_seam_cells, right_seam_cells) + + if !isnothing(average_annotations_dict) + posttwitch_annotations_over_time = map(1:201) do t + vcat(map(values(average_annotations_dict)) do v + v.positions[t] + end...) + end + end + + N_prewitch_timepoints = 361 + points_per_seam_cell = map(seam_cells) do seam_cell + # returns 361 points for the seam cells which are time points 20 to 380 in pretwitch_df + if seam_cell in ["a0L", "a0R"] + points = repeat([Point3f(NaN, NaN, NaN)], N_prewitch_timepoints) + else + points = get_full_lineage_seam_cell_points(seam_cell; pretwitch_df=pretwitch_df) + end + #=points .= map(points) do p + # Point3(p[3], p[1], p[1]) + end + =# + points .= ([0.0 0.0 1.0; 1.0 0.0 0.0; 0.0 1.0 0.0],) .* points + N_pretwitch_points = length(points) + if !isnothing(avg_models) + # avg_model seam cells are all marked L for some reason + left_seam_cell = replace(seam_cell, 'R' => 'L') + seam_cell_index = findfirst(isequal(left_seam_cell), avg_models[1].names) + seam_cell_index = (seam_cell_index + 1) ÷ 2 + if seam_cell == left_seam_cell + seam_cell_index += 11 + end + avg_models_points = map(avg_models) do avg_model + model_pts = seam_cell_pts(avg_model, 2) + local p = model_pts[seam_cell_index] + Point3f(p[1], p[3], p[2]) + end + append!(points, avg_models_points) + end + return seam_cell => points .* voxel_size + end |> Dict{String,Vector{Point3f}} + + last_pretwitch_H2M = (points_per_seam_cell["H2L"][N_prewitch_timepoints] + + points_per_seam_cell["H2R"][N_prewitch_timepoints]) / 2 + first_posttwitch_H2M = last_pretwitch_H2M + + if !isnothing(avg_models) + @info "Loaded avg models seam cell points" + # s.range[] = 20:(length(first(values(points_per_seam_cell)))-1)+20 + s.range[] = [20:380; LinRange(380, 381, 11)[2:end-1]; LinRange(381, 751, length(avg_models))] # pretwitch + avg models + first_posttwitch_H2M = (points_per_seam_cell["H2L"][N_prewitch_timepoints+1] + + points_per_seam_cell["H2R"][N_prewitch_timepoints+1]) / 2 + end + + #pretwitch_translation = first_posttwitch_H2M - last_pretwitch_H2M + pretwitch_translation = last_pretwitch_H2M - first_posttwitch_H2M + + left_pt = map(left_seam_cells) do seam_cell + points_per_seam_cell[seam_cell][end] + end + right_pt = map(right_seam_cells) do seam_cell + points_per_seam_cell[seam_cell][end] + end + mid_pt = (left_pt .+ right_pt) / 2 + + # Translate all points such that H2M is at the origin + H2_index = findfirst(isequal("H2M"), seam_cell_midpoints) + H2_mid_pt = mid_pt[H2_index] + #= + left_pt .-= H2_mid_pt + right_pt .-= H2_mid_pt + mid_pt .-= H2_mid_pt + =# + + annotation_pts = collect(values(get_pretwitch_annotation_points_at_time(N_prewitch_timepoints; pretwitch_df))) + annotation_pts .= ([0.0 0.0 1.0; 1.0 0.0 0.0; 0.0 1.0 0.0],) .* annotation_pts .* voxel_size + annotation_pts .-= pretwitch_translation + + N = length(left_seam_cells) + + faces = vcat( + GeometryBasics.NgonFace{3,Int}[(i, i + 1, i + N) for i in 1:N-1], + GeometryBasics.NgonFace{3,Int}[(i + 1, i + N, i + 1 + N) for i in 1:N-1] + ) + left_mesh = GeometryBasics.Mesh( + vcat(left_pt, mid_pt), + faces + ) |> Observable + right_mesh = GeometryBasics.Mesh( + vcat(right_pt, mid_pt), + faces + ) |> Observable + + Makie.mesh!(ax, left_mesh, color=:red, shading=false, alpha=0.5, transparency=true) + Makie.mesh!(ax, right_mesh, color=:green, shading=false, alpha=0.5, transparency=true) + left_sc = Makie.meshscatter!(ax, left_pt, markersize=1 * voxel_size, color=:red) + right_sc = Makie.meshscatter!(ax, right_pt, markersize=1 * voxel_size, color=:green) + mid_sc = Makie.meshscatter!(ax, mid_pt, markersize=2 * voxel_size, color=:magenta) + annotation_sc = Makie.meshscatter!(ax, annotation_pts, markersize=2 * voxel_size, color=:cyan) + left_lines = lines!(ax, left_pt, color=:red) + right_lines = lines!(ax, right_pt, color=:green) + mid_lines = lines!(ax, mid_pt, color=:magenta) + left_text = text!(ax, left_pt; text=left_seam_cells, align=(:center, :bottom)) + right_text = text!(ax, right_pt; text=right_seam_cells, align=(:center, :bottom)) + mid_text = text!(ax, mid_pt; text=seam_cell_midpoints, align=(:center, :bottom)) + on(s.value) do t + ax.title[] = "Timepoint: $(@sprintf("%06.2f", t)) mpfc $(t < 380 ? "(pretwitch)" : t < 381 ? "(straightening)" : "(posttwitch)")" + v = if t < 381 + floor(Int, t - 20 + 1) # pretwitch timepoints start at 20 + else + round(Int, (t - 381) / ((751 - 381) / 200) + 381) - 20 + 1 # avg models start after pretwitch timepoints + end + @info "" v + # Get points at time v + left_pt = map(left_seam_cells) do seam_cell + points_per_seam_cell[seam_cell][v] + end + right_pt = map(right_seam_cells) do seam_cell + points_per_seam_cell[seam_cell][v] + end + + if t > 380 && t < 381 && !isnothing(avg_models) + L = t - 380 + @info "Interpolating avg models seam cell points at L=$L" + function seam_cell_interp_point(seam_cell) + last_pretwitch_pt = points_per_seam_cell[seam_cell][N_prewitch_timepoints] + last_pretwitch_pt -= pretwitch_translation + first_posttwitch_pt = points_per_seam_cell[seam_cell][N_prewitch_timepoints+1] + last_pretwitch_pt * (1 - L) + first_posttwitch_pt * L + end + left_pt = map(seam_cell_interp_point, left_seam_cells) + right_pt = map(seam_cell_interp_point, right_seam_cells) + end + + mid_pt = (left_pt .+ right_pt) / 2 + + # Translate all points such that H2M is at the origin + H2_mid_pt = mid_pt[H2_index] + + # Translate point + #= + left_pt .-= H2_mid_pt + right_pt .-= H2_mid_pt + mid_pt .-= H2_mid_pt + =# + if t < 380 + left_pt .-= pretwitch_translation + right_pt .-= pretwitch_translation + mid_pt .-= pretwitch_translation + println("Applied pretwitch translation: ", pretwitch_translation) + println("H2_mid_pt: ", H2_mid_pt) + end + + #left_mesh[].vertices = vcat(left_pt, mid_pt) + #right_mesh[].vertices = vcat(right_pt, mid_pt) + left_mesh[] = GeometryBasics.Mesh( + vcat(left_pt, mid_pt), + faces + ) + right_mesh[] = GeometryBasics.Mesh( + vcat(right_pt, mid_pt), + faces + ) + #notify(left_mesh) + #notify(right_mesh) + + # Update scatter positions + left_sc.positions[] = left_pt + right_sc.positions[] = right_pt + mid_sc.positions[] = mid_pt + + # Update annotation positions + if isnothing(average_annotations_dict) || t < 380 + annotation_pts = collect(values(get_pretwitch_annotation_points_at_time( + min(v, N_prewitch_timepoints); pretwitch_df + ))) + annotation_pts .= ([0.0 0.0 1.0; 1.0 0.0 0.0; 0.0 1.0 0.0],) .* annotation_pts .* voxel_size + annotation_pts .-= pretwitch_translation + elseif !isnothing(average_annotations_dict) && t >= 381 + annotation_pts = posttwitch_annotations_over_time[v-361] + end + annotation_sc.positions[] = annotation_pts + + #println("Annotation pts: ", annotation_pts) + #println(left_pt) + + # Update text positions + left_text.positions[] = left_pt + right_text.positions[] = right_pt + mid_text.positions[] = mid_pt + + # Update line positions + left_lines.positions[] = left_pt + right_lines.positions[] = right_pt + mid_lines.positions[] = mid_pt + end + return f +end + +function record_pretwitch_seamcells_over_time(; + pretwitch_df=get_pretwitch_df(), + avg_models=nothing, + average_annotations_dict=nothing, +) + f = pretwitch_seamcells_over_time(; pretwitch_df=pretwitch_df, avg_models=avg_models, average_annotations_dict) + slider = f.content[2] + display(f) + readline() + record(f, "pretwitch_seamcells_over_time.mp4", 1:length(f.content[2].range[]); framerate=30) do i + set_close_to!(slider, slider.range[][i]) + end +end + +function get_full_lineage_seam_cell_points(seam_cell::String; pretwitch_df=get_pretwitch_df()) + lineage = seam_cell_to_lineage_map[seam_cell] + df = get_full_lineage_df(lineage; pretwitch_df=pretwitch_df) + return dataframe_to_point3f_array(df) +end + +function get_lattice_points(; pretwitch_df=get_pretwitch_df()) + seam_cells = vcat(left_seam_cells, right_seam_cells) + points = Dict{String,Vector{Point3f}}() + for seam_cell in seam_cells + points[seam_cell] = get_full_lineage_seam_cell_points(seam_cell; pretwitch_df=pretwitch_df) + end + return points +end + +function get_lattice_points_by_time(; pretwitch_df=get_pretwitch_df()) + seam_cells = vcat(left_seam_cells, right_seam_cells) + lattice_points = get_lattice_points(; pretwitch_df) + lattice_points_by_time = Vector{Vector{Point3f}}(undef, 361) + for t in 1:361 + lattice_points_by_time[t] = map(seam_cells) do seam_cell + lattice_points[seam_cell][t] + end + end + return lattice_points_by_time +end + +function plot_lattice_at_time( + time::Int, + origin, + rotation=I(3); + pretwitch_df=get_pretwitch_df(), + lattice_points_by_time=get_lattice_points_by_time(; pretwitch_df=pretwitch_df), + voxel_size=0.1625 +) + pretwitch_t = get_pretwitch_points_at_time(pretwitch_df, time) |> values |> collect + pretwitch_t_points = pretwitch_t .- origin + pretwitch_t_points .= (rotation,) .* pretwitch_t_points + pretwitch_t_points = Point3f.(pretwitch_t_points) + pretwitch_t_points .*= voxel_size + s = scatter(pretwitch_t_points) + left_lattice_points = lattice_points_by_time[time+1][1:length(left_seam_cells)] .- origin + left_lattice_points .= (rotation,) .* left_lattice_points + left_lattice_points = Point3f.(left_lattice_points) + left_lattice_points .*= voxel_size + right_lattice_points = lattice_points_by_time[time+1][length(left_seam_cells)+1:end] .- origin + right_lattice_points .= (rotation,) .* right_lattice_points + right_lattice_points = Point3f.(right_lattice_points) + right_lattice_points .*= voxel_size + + mid_lattice_points = (left_lattice_points .+ right_lattice_points) / 2 + + lines!(left_lattice_points, color=:red) + text!(left_lattice_points; text=left_seam_cells) + lines!(right_lattice_points, color=:green) + text!(right_lattice_points; text=right_seam_cells) + lines!(mid_lattice_points, color=:magenta) + text!(mid_lattice_points; text=seam_cell_midpoints) + return s +end + +# Rotate vector a to align with vector b +function get_rotation_matrix(a, b) + u_a = normalize(a) + u_b = normalize(b) + v = cross(u_a, u_b) # Rotation axis (scaled by sine) + c = dot(u_a, u_b) # Cosine of the angle + s = norm(v) # Sine of the angle + if s < 1e-10 + R = c > 0 ? I(3) : -I(3) # Identity if same, -Identity if opposite + else + # Skew-symmetric cross-product matrix of v + vx = [0 -v[3] v[2]; + v[3] 0 -v[1]; + -v[2] v[1] 0] + + # Rodrigues' Rotation Formula + R = I(3) + vx + (vx^2 * (1 - c) / (s^2)) + end + return R +end + +function get_mid_points_by_time(; pretwitch_df=get_pretwitch_df()) + lattice_points_by_time = get_lattice_points_by_time(; pretwitch_df) + mid_points_by_time = map(lattice_points_by_time) do lattice_points + (@view(lattice_points[1:10]) .+ @view(lattice_points[11:20])) / 2 + end +end + +R_x_to_y = get_rotation_matrix([1.0, 0.0, 0.0], [0.0, 1.0, 0.0]) +R_x_to_z = get_rotation_matrix([1.0, 0.0, 0.0], [0.0, 0.0, 1.0]) +R_rotate_90_about_x = get_rotation_matrix([0.0, 1.0, 0.0], [0.0, 0.0, 1.0]) + +H0L_points = get_full_lineage_df(seam_cell_to_lineage_map["H0L"]) |> dataframe_to_point3f_array +H0R_points = get_full_lineage_df(seam_cell_to_lineage_map["H0R"]) |> dataframe_to_point3f_array +H0_midpoints = (H0L_points .+ H0R_points) / 2 + +H2R_points = get_full_lineage_df(seam_cell_to_lineage_map["H2R"]) |> dataframe_to_point3f_array +H2L_points = get_full_lineage_df(seam_cell_to_lineage_map["H2L"]) |> dataframe_to_point3f_array +H2_midpoints = (H2L_points .+ H2R_points) / 2 + +function get_annotation_name_translation_df() + # annotation_name_translation_df = CSV.read("ryan_data\\MIPAV_PositionalModel_Packer_Naming_Correlations_v1.csv", DataFrame) + annotation_name_translation_df = CSV.read("ryan_data\\MIPAV_PositionalModel_Packer_Naming_Correlations_v5.csv", DataFrame) + return annotation_name_translation_df +end + +function best_annotation_name_match(annotation_name; annotation_name_translation_df=get_annotation_name_translation_df()) + +end + +function audit_annotation_names(flattened_datasets; annotation_name_translation_df=get_annotation_name_translation_df()) + unknown_df = DataFrame(cell_key_path=String[], annotation=String[], best_guess=String[]) + foreach(flattened_datasets) do dataset + foreach(values(dataset.cell_key.mapping)) do v + in_ryan = v ∈ annotation_name_translation_df.var"Positional Model Cell Name" + if !in_ryan + processed_v = lowercase(strip(v)) + best_guess = "" + foreach(annotation_name_translation_df.var"Positional Model Cell Name") do ryan_name + try + processed_ryan_name = lowercase(strip(ryan_name)) + if processed_v == processed_ryan_name + best_guess = ryan_name + end + catch err + @error "Error processing annotation name" v ryan_name err + end + end + cell_key_path = joinpath(dirname(dataset.path), "CellKey.csv") + @info "" cell_key_path v best_guess + push!(unknown_df, (cell_key_path, v, best_guess)) + end + end + end + return unknown_df +end + +function get_pretwitch_explicit_df( + pretwitch_df=get_pretwitch_df(); + use_micrometers=true, + voxel_size=0.1625, + avg_models=nothing +) + last_pretwitch_time_df = subset(pretwitch_df, :time => ByRow(==(360))) + last_pretwitch_H2L_df = subset(last_pretwitch_time_df, + :cell => ByRow(==(seam_cell_to_lineage_map["H2L"])) + ) + last_pretwitch_H2R_df = subset(last_pretwitch_time_df, + :cell => ByRow(==(seam_cell_to_lineage_map["H2R"])) + ) + last_pretwitch_H2M = ( + Point3f(last_pretwitch_H2L_df.x[1], last_pretwitch_H2L_df.y[1], last_pretwitch_H2L_df.z[1]) + + Point3f(last_pretwitch_H2R_df.x[1], last_pretwitch_H2R_df.y[1], last_pretwitch_H2R_df.z[1]) + ) / 2 + + if isnothing(avg_models) + @info "No avg models provided, using pretwitch H2M as reference point" + first_posttwitch_H2M = Point3f(0.0, 0.0, 0.0) + else + @info "Avg models provided, using first posttwitch H2M as reference point" + local pts = seam_cell_pts(avg_models[1], 2) + seam_cell_index = findfirst(isequal("H2L"), avg_models[1].names) + seam_cell_index = (seam_cell_index + 1) ÷ 2 + H2L_index = seam_cell_index + 11 + H2R_index = seam_cell_index + first_posttwitch_H2M = (pts[H2L_index] + pts[H2R_index]) / 2 + end + + pretwitch_df = copy(pretwitch_df) + # MPFC + pretwitch_df.time .+= 20 + # AP + pretwitch_df.x .-= last_pretwitch_H2M[1] - first_posttwitch_H2M[3] + # DV + pretwitch_df.y .-= last_pretwitch_H2M[2] - first_posttwitch_H2M[2] + # LR + pretwitch_df.z .-= last_pretwitch_H2M[3] - first_posttwitch_H2M[1] + if use_micrometers + return DataFrame( + lineage_name = pretwitch_df.cell, + minutes_post_first_cleavage = pretwitch_df.time, + LR_micrometers = pretwitch_df.z .* voxel_size, + DV_micrometers = pretwitch_df.y .* voxel_size, + AP_micrometers = pretwitch_df.x .* voxel_size + ) + else + return DataFrame( + lineage_name = pretwitch_df.cell, + minutes_post_first_cleavage = pretwitch_df.time, + LR_voxels = pretwitch_df.z, + DV_voxels = pretwitch_df.y, + AP_voxels = pretwitch_df.x + ) + end +end \ No newline at end of file From ffe8641afb42a21be31e6c34da0ae133887cd1fb Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 16:12:56 -0400 Subject: [PATCH 13/39] Update Project.toml and Manifest.toml files --- Project.toml | 4 +- glmakie/Manifest.toml | 996 ++++++++++++++++++++---------------------- glmakie/Project.toml | 3 + 3 files changed, 482 insertions(+), 521 deletions(-) diff --git a/Project.toml b/Project.toml index 45f30d1..575bce4 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ShroffCelegansModels" uuid = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" -authors = ["Mark Kittisopikul and contributors"] version = "1.0.0-DEV" +authors = ["Mark Kittisopikul and contributors"] [deps] BSplineKit = "093aae92-e908-43d7-9660-e50ee39d5a0a" @@ -40,7 +40,7 @@ TiffImages = "731e570b-9d59-4bfa-96dc-6df516fadf69" BSplineKit = "0.18, 0.19" Dates = "1" GeometryBasics = "0.4.11, 0.5" -HDF5 = "0.17.2" +HDF5 = "0.17.2, 0.18" Interpolations = "0.15, 0.16" Makie = "0.24.6" ProgressMeter = "1" diff --git a/glmakie/Manifest.toml b/glmakie/Manifest.toml index 9c7e437..d0afc8c 100644 --- a/glmakie/Manifest.toml +++ b/glmakie/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.4" +julia_version = "1.12.3" manifest_format = "2.0" -project_hash = "5eb09591a8bf80d7978729c550d312413a27b20d" +project_hash = "f1036b997b79e9fa711a14480e97e80cc5339b95" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -20,35 +20,11 @@ git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.5" -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] -git-tree-sha1 = "3b86719127f50670efe356bc11073d84b4ed7a5d" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.42" - - [deps.Accessors.extensions] - AxisKeysExt = "AxisKeys" - IntervalSetsExt = "IntervalSets" - LinearAlgebraExt = "LinearAlgebra" - StaticArraysExt = "StaticArrays" - StructArraysExt = "StructArrays" - TestExt = "Test" - UnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "f7817e2e585aa6d924fd714df1e2a84be7896c60" +git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.3.0" +version = "4.4.0" weakdeps = ["SparseArrays", "StaticArrays"] [deps.Adapt.extensions] @@ -78,18 +54,19 @@ version = "1.1.2" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "9606d7832795cbef89e06a550475be300364a8aa" +git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.19.0" +version = "7.22.0" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" ArrayInterfaceChainRulesExt = "ChainRules" ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" ArrayInterfaceReverseDiffExt = "ReverseDiff" ArrayInterfaceSparseArraysExt = "SparseArrays" ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" @@ -103,16 +80,17 @@ version = "7.19.0" ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" [[deps.ArrayLayouts]] -deps = ["FillArrays", "LinearAlgebra"] -git-tree-sha1 = "4e25216b8fea1908a0ce0f5d87368587899f75be" +deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "e0b47732a192dd59b9d079a06d04235e2f833963" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.11.1" +version = "1.12.2" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -136,21 +114,21 @@ version = "1.1.0" [[deps.AxisArrays]] deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] -git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" -version = "0.4.7" +version = "0.4.8" [[deps.BSplineKit]] deps = ["ArrayLayouts", "BandedMatrices", "FastGaussQuadrature", "ForwardDiff", "LinearAlgebra", "PrecompileTools", "Random", "Reexport", "SparseArrays", "Static", "StaticArrays", "StaticArraysCore", "StatsAPI"] -git-tree-sha1 = "8950181792e94c20b204b4d25cba7f2399c5b386" +git-tree-sha1 = "48b9300555c54256c12a539a3025f8d2075bea6a" uuid = "093aae92-e908-43d7-9660-e50ee39d5a0a" -version = "0.19.0" +version = "0.19.1" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] -git-tree-sha1 = "e35c672b239c5105f597963c33e740eeb46cf0ab" +git-tree-sha1 = "02fa77c70ba84361b9bc9ff28523bd9d78519265" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "1.9.4" +version = "1.11.0" [deps.BandedMatrices.extensions] BandedMatricesSparseArraysExt = "SparseArrays" @@ -165,9 +143,15 @@ uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" [[deps.BaseDirs]] -git-tree-sha1 = "03fea4a4efe25d2069c2d5685155005fc251c0a1" +git-tree-sha1 = "bca794632b8a9bbe159d56bf9e31c422671b35e0" uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" -version = "1.3.0" +version = "1.3.2" + +[[deps.Blosc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "535c80f1c0847a4c967ea945fca21becc9de1522" +uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" +version = "1.21.7+0" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -208,28 +192,16 @@ git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.18.5+0" -[[deps.CatIndices]] -deps = ["CustomUnitRanges", "OffsetArrays"] -git-tree-sha1 = "a0f80a09780eed9b1d106a1bf62041c2efc995bc" -uuid = "aafaddc9-749c-510e-ac4f-586e18779b91" -version = "0.2.2" - [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "1713c74e00545bfe14605d2a2be1712de8fbcb58" +git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.25.1" +version = "1.26.0" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] ChainRulesCoreSparseArraysExt = "SparseArrays" -[[deps.CircStats]] -deps = ["Distributions", "HypothesisTests", "LinearAlgebra", "SpecialFunctions", "Statistics"] -git-tree-sha1 = "ecfe2e9a260c4723026b4a71460cf0420def9e40" -uuid = "2f6764a1-d620-4564-9394-76eb7c776766" -version = "1.0.4" - [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" @@ -238,27 +210,31 @@ version = "0.7.8" [[deps.ColorBrewer]] deps = ["Colors", "JSON"] -git-tree-sha1 = "e771a63cc8b539eca78c85b0cabd9233d6c8f06f" +git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" uuid = "a2cac450-b92f-5266-8821-25eda20663c8" -version = "0.4.1" +version = "0.4.2" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "403f2d8e209681fcbd9468a8514efff3ea08452e" +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.29.0" +version = "3.31.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.5" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] -git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.10.0" +version = "0.11.0" weakdeps = ["SpecialFunctions"] [deps.ColorVectorSpace.extensions] @@ -270,16 +246,6 @@ git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.13.1" -[[deps.Combinatorics]] -git-tree-sha1 = "8010b6bb3388abe68d95743dcbea77650bb2eddf" -uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" -version = "1.0.3" - -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - [[deps.CommonSubexpressions]] deps = ["MacroTools"] git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" @@ -293,9 +259,9 @@ version = "1.0.0" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.16.0" +version = "4.18.1" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -304,26 +270,18 @@ weakdeps = ["Dates", "LinearAlgebra"] [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" +version = "1.3.0+1" -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ComputationalResources]] -git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" -uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" -version = "0.3.2" +[[deps.ComputePipeline]] +deps = ["Observables", "Preferences"] +git-tree-sha1 = "76dab592fa553e378f9dd8adea16fe2591aa3daa" +uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" +version = "0.1.6" [[deps.ConstructionBase]] -git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.8" +version = "1.6.0" weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] [deps.ConstructionBase.extensions] @@ -347,11 +305,6 @@ git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" version = "4.1.1" -[[deps.CustomUnitRanges]] -git-tree-sha1 = "1a3f97f907e6dd8983b744d2642651bb162a3f7a" -uuid = "dc8bdbbb-1ca9-579f-8c36-e416f6a65cce" -version = "1.0.2" - [[deps.DataAPI]] git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" @@ -359,15 +312,15 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6" +git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.7.0" +version = "1.8.1" [[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "4e1fe97fdaed23e9dc21d4d664bea76b65fc50a0" +deps = ["OrderedCollections"] +git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.22" +version = "0.19.3" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -387,9 +340,9 @@ version = "1.16.2+0" [[deps.DelaunayTriangulation]] deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] -git-tree-sha1 = "5620ff4ee0084a6ab7097a27ba0c19290200b037" +git-tree-sha1 = "c55f5a9fd67bdbc8e089b5a3111fe4292986a8e8" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" -version = "1.6.4" +version = "1.6.6" [[deps.DiffResults]] deps = ["StaticArraysCore"] @@ -403,6 +356,42 @@ git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" +[[deps.DimensionalData]] +deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "PrecompileTools", "Random", "RecipesBase", "Statistics", "TableTraits", "Tables"] +git-tree-sha1 = "147961441e5cb35da0af404aa4684d2e74ec68eb" +uuid = "0703355e-b756-11e9-17c0-8b28908087d0" +version = "0.29.25" + + [deps.DimensionalData.extensions] + DimensionalDataAbstractFFTsExt = "AbstractFFTs" + DimensionalDataAlgebraOfGraphicsExt = "AlgebraOfGraphics" + DimensionalDataCategoricalArraysExt = "CategoricalArrays" + DimensionalDataChainRulesCoreExt = "ChainRulesCore" + DimensionalDataDiskArraysExt = "DiskArrays" + DimensionalDataMakieExt = "Makie" + DimensionalDataNearestNeighborsExt = "NearestNeighbors" + DimensionalDataPythonCallExt = "PythonCall" + DimensionalDataSparseArraysExt = "SparseArrays" + DimensionalDataStatsBaseExt = "StatsBase" + + [deps.DimensionalData.weakdeps] + AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" + AlgebraOfGraphics = "cbdf2221-f076-402e-a563-3d30da359d67" + CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DiskArrays = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + NearestNeighbors = "b8a86587-4115-5ab1-83bc-aa920d37bbce" + PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" + +[[deps.DiskArrays]] +deps = ["ConstructionBase", "LRUCache", "Mmap", "OffsetArrays"] +git-tree-sha1 = "e8c9406f3164633756a0db93334ef23102933eef" +uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" +version = "0.4.18" + [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" @@ -410,9 +399,9 @@ version = "1.11.0" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "3e6d038b77f22791b8e3472b7c633acea1ecac06" +git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.120" +version = "0.25.123" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -425,14 +414,14 @@ version = "0.25.120" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.DocStringExtensions]] -git-tree-sha1 = "e7b7e6f178525d17c720ab9c081e4ef04429f860" +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.4" +version = "0.9.5" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" +version = "1.7.0" [[deps.EarCut_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -453,38 +442,38 @@ version = "0.0.20230411+1" [[deps.ExactPredicates]] deps = ["IntervalArithmetic", "Random", "StaticArrays"] -git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" +git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" -version = "2.2.8" +version = "2.2.9" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d55dffd9ae73ff72f1c0482454dcf2ec6c6c4a63" +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.5+0" +version = "2.7.3+0" [[deps.Extents]] git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4" uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" version = "0.1.6" +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.5" + [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "8cc47f299902e13f90405ddb5bf87e5d474c0d38" +git-tree-sha1 = "01ba9d15e9eae375dc1eb9589df76b3572acd3f2" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "6.1.2+0" - -[[deps.FFTViews]] -deps = ["CustomUnitRanges", "FFTW"] -git-tree-sha1 = "cbdf14d1e8c7c8aacbe8b19862e0179fd08321c2" -uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" -version = "0.3.2" +version = "8.0.1+0" [[deps.FFTW]] -deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "7de7c78d681078f027389e067864a8d53bd7c3c9" +deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.8.1" +version = "1.10.0" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -494,15 +483,15 @@ version = "3.3.11+0" [[deps.FastGaussQuadrature]] deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "fd923962364b645f3719855c88f7074413a6ad92" +git-tree-sha1 = "0044e9f5e49a57e88205e8f30ab73928b05fe5b6" uuid = "442a2c76-b920-505d-bb47-c5924d526838" -version = "1.0.2" +version = "1.1.0" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "b66970a70db13f45b7e57fbda1736e1cf72174ea" +git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.17.0" +version = "1.17.1" [deps.FileIO.extensions] HTTPExt = "HTTP" @@ -511,10 +500,20 @@ version = "1.17.0" HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3" [[deps.FilePaths]] -deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"] -git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629" +deps = ["FilePathsBase", "MacroTools", "Reexport"] +git-tree-sha1 = "a1b2fbfe98503f15b665ed45b3d149e5d8895e4c" uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" -version = "0.8.3" +version = "0.9.0" + + [deps.FilePaths.extensions] + FilePathsGlobExt = "Glob" + FilePathsURIParserExt = "URIParser" + FilePathsURIsExt = "URIs" + + [deps.FilePaths.weakdeps] + Glob = "c27321d9-0574-5035-807b-f59d2c89b15c" + URIParser = "30578b45-9adc-5946-b283-645ec420af67" + URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" [[deps.FilePathsBase]] deps = ["Compat", "Dates"] @@ -533,9 +532,9 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +git-tree-sha1 = "5bfcd42851cf2f1b303f51525a54dc5e98d408a3" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" +version = "1.15.0" weakdeps = ["PDMats", "SparseArrays", "Statistics"] [deps.FillArrays.extensions] @@ -543,12 +542,6 @@ weakdeps = ["PDMats", "SparseArrays", "Statistics"] FillArraysSparseArraysExt = "SparseArrays" FillArraysStatisticsExt = "Statistics" -[[deps.FiniteDifferences]] -deps = ["ChainRulesCore", "LinearAlgebra", "Printf", "Random", "Richardson", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "06d76c780d657729cf20821fb5832c6cc4dfd0b5" -uuid = "26cc04aa-876d-5657-8c51-4c34ba976000" -version = "0.12.32" - [[deps.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" @@ -557,9 +550,9 @@ version = "0.8.5" [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "301b5d5d731a0654825f1f2e906990f7141a106b" +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.16.0+0" +version = "2.17.1+0" [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" @@ -568,9 +561,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "910febccb28d493032495b7009dce7d7f7aee554" +git-tree-sha1 = "b2977f86ed76484de6f29d5b36f2fa686f085487" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.0.1" +version = "1.3.1" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -590,9 +583,9 @@ version = "2.13.4+0" [[deps.FreeTypeAbstraction]] deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] -git-tree-sha1 = "eaca92bac73aa42f68c57d1b8df1b746eeb2bdaa" +git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11" uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" -version = "0.10.7" +version = "0.10.8" [[deps.FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -607,44 +600,39 @@ version = "1.11.0" [[deps.GLFW]] deps = ["GLFW_jll"] -git-tree-sha1 = "13c52cdd876a31240da16dfb51363aed42740325" +git-tree-sha1 = "af06f66cca2b698ab9c482de55977ff8178d025e" uuid = "f7f18e0c-5ee9-5ccd-a5bf-e8befd85ed98" -version = "3.4.4" +version = "3.4.6" [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] -git-tree-sha1 = "fcb0584ff34e25155876418979d4c8971243bb89" +git-tree-sha1 = "b7bfd56fa66616138dfe5237da4dc13bbd83c67f" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.0+2" +version = "3.4.1+0" [[deps.GLMakie]] deps = ["ColorTypes", "Colors", "FileIO", "FixedPointNumbers", "FreeTypeAbstraction", "GLFW", "GeometryBasics", "LinearAlgebra", "Makie", "Markdown", "MeshIO", "ModernGL", "Observables", "PrecompileTools", "Printf", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "8753fba3356131357b5cd02500fe80c3668535d0" +git-tree-sha1 = "56335175a66c30ca0e503ad717d366cd9e1663b1" uuid = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -version = "0.10.18" - -[[deps.GeoFormatTypes]] -git-tree-sha1 = "8e233d5167e63d708d41f87597433f59a0f213fe" -uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" -version = "0.4.4" - -[[deps.GeoInterface]] -deps = ["DataAPI", "Extents", "GeoFormatTypes"] -git-tree-sha1 = "294e99f19869d0b0cb71aef92f19d03649d028d5" -uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" -version = "1.4.1" +version = "0.13.8" [[deps.GeometryBasics]] -deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "1f5a80f4ed9f5a4aada88fc2db456e637676414b" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.11" +version = "0.5.10" + + [deps.GeometryBasics.extensions] + GeometryBasicsGeoInterfaceExt = "GeoInterface" -[[deps.Gettext_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" -uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" -version = "0.21.0+0" + [deps.GeometryBasics.weakdeps] + GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" [[deps.Giflib_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -653,10 +641,15 @@ uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" version = "5.2.3+0" [[deps.Glib_jll]] -deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "fee60557e4f19d0fe5cd169211fdda80e494f4e8" +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "6b4d2dc81736fe3980ff0e8879a9fc7c33c44ddf" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.84.0+0" +version = "2.86.2+0" + +[[deps.Glob]] +git-tree-sha1 = "83cb0092e2792b9e3a865b6655e88f5b862607e2" +uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" +version = "1.4.0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -666,9 +659,9 @@ version = "1.3.15+0" [[deps.GridLayoutBase]] deps = ["GeometryBasics", "InteractiveUtils", "Observables"] -git-tree-sha1 = "dc6bed05c15523624909b3953686c5f5ffa10adc" +git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f" uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" -version = "0.11.1" +version = "0.11.2" [[deps.Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" @@ -676,18 +669,32 @@ uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[deps.HDF5]] -deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "Requires", "UUIDs"] -path = "../../HDF5" +deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "UUIDs"] +git-tree-sha1 = "e67afce9b96275817313e1f24d40789ee30ab6ac" +repo-rev = "master" +repo-url = "https://github.com/JuliaIO/HDF5.jl.git" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -version = "0.17.1" +version = "0.18.0" [deps.HDF5.extensions] - InlineStringsExt = "InlineStrings" + BloscExt = "Blosc" + CodecBzip2Ext = "CodecBzip2" + CodecLz4Ext = "CodecLz4" + CodecZstdExt = "CodecZstd" + FileIOExt = "FileIO" MPIExt = "MPI" + OrderedCollectionsFileIOExt = ["FileIO", "OrderedCollections"] + bitshuffle_jll_ext = "bitshuffle_jll" [deps.HDF5.weakdeps] - InlineStrings = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" + Blosc = "a74b3585-a348-5f62-a45c-50e91977d574" + CodecBzip2 = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" + CodecLz4 = "5ba52731-8f18-5e0d-9241-30f10d1ec561" + CodecZstd = "6b39b394-51ab-5f42-8807-6242bab2b4c2" + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" + bitshuffle_jll = "228fe19c-1b83-5282-a626-13744502a320" [[deps.HDF5_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] @@ -702,10 +709,10 @@ uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "8.5.1+0" [[deps.Hwloc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "92f65c4d78ce8cdbb6b68daf88889950b0a99d11" +deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "3d468106a05408f9f7b6f161d9e7715159af247b" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.12.1+0" +version = "2.12.2+0" [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] @@ -713,12 +720,6 @@ git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" version = "0.3.28" -[[deps.HypothesisTests]] -deps = ["Combinatorics", "Distributions", "LinearAlgebra", "Printf", "Random", "Roots", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "15319d5a767eb386bc4b702d5e025a0be62be293" -uuid = "09f84164-cd44-5f33-b23f-e6b0d136a0d5" -version = "0.11.5" - [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -736,24 +737,12 @@ git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" uuid = "c817782e-172a-44cc-b673-b171935fbb9e" version = "0.1.7" -[[deps.ImageContrastAdjustment]] -deps = ["ImageBase", "ImageCore", "ImageTransformations", "Parameters"] -git-tree-sha1 = "eb3d4365a10e3f3ecb3b115e9d12db131d28a386" -uuid = "f332f351-ec65-5f6a-b3d1-319c6670881a" -version = "0.3.12" - [[deps.ImageCore]] deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" version = "0.10.5" -[[deps.ImageFiltering]] -deps = ["CatIndices", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageBase", "ImageCore", "LinearAlgebra", "OffsetArrays", "PrecompileTools", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "TiledIteration"] -git-tree-sha1 = "eea3a5095c0c5f143e62773164ab11f67e43c4bb" -uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" -version = "0.7.10" - [[deps.ImageIO]] deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" @@ -766,17 +755,11 @@ git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" version = "0.9.10" -[[deps.ImageTransformations]] -deps = ["AxisAlgorithms", "CoordinateTransformations", "ImageBase", "ImageCore", "Interpolations", "OffsetArrays", "Rotations", "StaticArrays"] -git-tree-sha1 = "dfde81fafbe5d6516fb864dc79362c5c6b973c82" -uuid = "02fcd773-0e25-5acc-982a-7f6622650795" -version = "0.10.2" - [[deps.Imath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" +git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65" uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" -version = "3.1.11+0" +version = "3.2.2+0" [[deps.IndirectArrays]] git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" @@ -789,9 +772,9 @@ uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" version = "0.1.5" [[deps.InlineStrings]] -git-tree-sha1 = "6a9fde685a7ac1eb3495f8e812c5a7c3711c2d5e" +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" -version = "1.4.3" +version = "1.4.5" [deps.InlineStrings.extensions] ArrowTypesExt = "ArrowTypes" @@ -803,32 +786,39 @@ version = "1.4.3" [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "0f14a5456bdc6b9731a5682f439a672750a09e48" +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2025.0.4+0" +version = "2025.2.0+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" version = "1.11.0" +[[deps.Interfaces]] +git-tree-sha1 = "331ff37738aea1a3cf841ddf085442f31b84324f" +uuid = "85a1e053-f937-4924-92a5-1367d23b7b87" +version = "0.3.2" + [[deps.Interpolations]] -deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] -git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "65d505fa4c0d7072990d659ef3fc086eb6da8208" uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" -version = "0.15.1" -weakdeps = ["Unitful"] +version = "0.16.2" +weakdeps = ["ForwardDiff", "Unitful"] [deps.Interpolations.extensions] + InterpolationsForwardDiffExt = "ForwardDiff" InterpolationsUnitfulExt = "Unitful" [[deps.IntervalArithmetic]] -deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Random", "RoundingEmulator"] -git-tree-sha1 = "694c52705f8b23dc5b39eeac629dc3059a168a40" +deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "02b61501dbe6da3b927cc25dacd7ce32390ee970" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.22.35" +version = "1.0.2" [deps.IntervalArithmetic.extensions] + IntervalArithmeticArblibExt = "Arblib" IntervalArithmeticDiffRulesExt = "DiffRules" IntervalArithmeticForwardDiffExt = "ForwardDiff" IntervalArithmeticIntervalSetsExt = "IntervalSets" @@ -837,6 +827,7 @@ version = "0.22.35" IntervalArithmeticSparseArraysExt = "SparseArrays" [deps.IntervalArithmetic.weakdeps] + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" @@ -845,20 +836,16 @@ version = "0.22.35" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.IntervalSets]] -git-tree-sha1 = "5fbb102dcb8b1a858111ae81d56682376130517d" +git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.11" +version = "0.7.13" +weakdeps = ["Random", "RecipesBase", "Statistics"] [deps.IntervalSets.extensions] IntervalSetsRandomExt = "Random" IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" - [deps.IntervalSets.weakdeps] - Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - [[deps.InverseFunctions]] git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" @@ -875,9 +862,9 @@ uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" version = "1.3.1" [[deps.IrrationalConstants]] -git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.4" +version = "0.2.6" [[deps.Isoband]] deps = ["isoband_jll"] @@ -897,15 +884,21 @@ version = "1.0.0" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "a007feb38b422fbdab534406aeca1b86823cb4d6" +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.7.0" +version = "1.7.1" [[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "b3ad4a0255688dcb895a52fafbaae3023b588a90" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" +version = "1.4.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" [[deps.JSON3]] deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] @@ -927,21 +920,26 @@ version = "0.1.6" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "eac1206917768cb54957c65a615460d87b455fc1" +git-tree-sha1 = "b6893345fd6658c8e475d40155789f4860ac3b21" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.1+0" +version = "3.1.4+0" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] -git-tree-sha1 = "7d703202e65efa1369de1279c162b915e245eed1" +git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7" uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" -version = "0.6.9" +version = "0.6.10" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" -version = "3.100.2+0" +version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -991,24 +989,24 @@ uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" version = "0.6.4" [[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" +version = "8.15.0+0" [[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" version = "1.11.0" [[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" +version = "1.9.0+0" [[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" +version = "1.11.3+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" @@ -1034,26 +1032,26 @@ version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a31572773ac1b745e0343fe5e2c8ddda7a37e997" +git-tree-sha1 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.0+0" +version = "2.41.2+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "4ab7581296671007fc33f07a721631b8855f4b1d" +git-tree-sha1 = "f04133fe05eff1667d2054c53d59f9122383fe05" uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.7.1+0" +version = "4.7.2+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "321ccef73a96ba828cd51f2ab5b9f917fa73945a" +git-tree-sha1 = "2a7a12fc0a4e7fb773450d17975322aa77142106" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.0+0" +version = "2.41.2+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" +version = "1.12.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] @@ -1075,17 +1073,23 @@ version = "0.3.29" uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" version = "1.11.0" +[[deps.Lz4_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "191686b1ac1ea9c89fc52e996ad15d1d241d1e33" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.10.1+0" + [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] -git-tree-sha1 = "5de60bc6cb3899cd318d80d627560fae2e2d99ae" +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2025.0.1+1" +version = "2025.2.0+0" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "3aa3210044138a1749dbd350a9ba8680869eb503" +git-tree-sha1 = "9341048b9f723f2ae2a72a5269ac2f15f80534dc" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.0+1" +version = "4.3.2+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -1095,9 +1099,9 @@ version = "0.1.11" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "ff91ca13c7c472cef700f301c8d752bc2aaff1a8" +git-tree-sha1 = "e214f2a20bdd64c04cd3e4ff62d3c9be7e969a59" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.3+0" +version = "5.5.4+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" @@ -1105,49 +1109,38 @@ uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.16" [[deps.Makie]] -deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] -git-tree-sha1 = "be3051d08b78206fb5e688e8d70c9e84d0264117" +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "d1b974f376c24dad02c873e951c5cd4e351cd7c2" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.21.18" +version = "0.24.8" -[[deps.MakieCore]] -deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] -git-tree-sha1 = "9019b391d7d086e841cbeadc13511224bd029ab3" -uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" -version = "0.8.12" + [deps.Makie.extensions] + MakieDynamicQuantitiesExt = "DynamicQuantities" + + [deps.Makie.weakdeps] + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" [[deps.MappedArrays]] -git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" -version = "0.4.2" - -[[deps.MarchingCubes]] -deps = ["PrecompileTools", "StaticArrays"] -git-tree-sha1 = "0e893025924b6becbae4109f8020ac0e12674b01" -uuid = "299715c1-40a9-479a-aaf9-4a633d36f717" -version = "0.1.11" +version = "0.4.3" [[deps.Markdown]] -deps = ["Base64"] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" version = "1.11.0" [[deps.MathTeXEngine]] deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] -git-tree-sha1 = "31a99cb7537f812e1d6be893a71804c35979f1be" +git-tree-sha1 = "7eb8cdaa6f0e8081616367c10b31b9d9b34bb02a" uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" -version = "0.6.4" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" +version = "0.6.7" [[deps.MeshIO]] deps = ["ColorTypes", "FileIO", "GeometryBasics", "Printf"] -git-tree-sha1 = "14a12d9153b1a1a22d669eede58b2ea2164ff138" +git-tree-sha1 = "c009236e222df68e554c7ce5c720e4a33cc0c23f" uuid = "7269a6da-0436-5bbc-96c2-40638cbb6118" -version = "0.4.13" +version = "0.5.3" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1179,7 +1172,7 @@ version = "0.3.4" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" +version = "2025.5.20" [[deps.NaNMath]] deps = ["OpenLibm_jll"] @@ -1187,6 +1180,18 @@ git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.1.3" +[[deps.NetCDF]] +deps = ["DiskArrays", "NetCDF_jll"] +git-tree-sha1 = "853b381b2164bbe980b94e8411324a6b3b811dd6" +uuid = "30363a11-5582-574a-97bb-aa9a979735b9" +version = "0.12.2" + +[[deps.NetCDF_jll]] +deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML", "XML2_jll", "Zlib_jll", "Zstd_jll", "libaec_jll", "libzip_jll"] +git-tree-sha1 = "d574803b6055116af212434460adf654ce98e345" +uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" +version = "401.900.300+0" + [[deps.Netpbm]] deps = ["FileIO", "ImageCore", "ImageMetadata"] git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" @@ -1195,7 +1200,7 @@ version = "1.1.1" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" +version = "1.3.0" [[deps.Observables]] git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" @@ -1212,10 +1217,10 @@ weakdeps = ["Adapt"] OffsetArraysAdaptExt = "Adapt" [[deps.Ogg_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" -version = "1.3.5+1" +version = "1.3.6+0" [[deps.OpenBLASConsistentFPCSR_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1226,7 +1231,7 @@ version = "0.3.29+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" +version = "0.3.29+0" [[deps.OpenEXR]] deps = ["Colors", "FileIO", "OpenEXR_jll"] @@ -1236,26 +1241,25 @@ version = "0.3.3" [[deps.OpenEXR_jll]] deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e" +git-tree-sha1 = "df9b7c88c2e7a2e77146223c526bf9e236d5f450" uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" -version = "3.2.4+0" +version = "3.4.4+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+4" +version = "0.8.7+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "047b66eb62f3cae59ed260ebb9075a32a04350f1" +git-tree-sha1 = "ab6596a9d8236041dcd59b5b69316f28a8753592" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.7+2" +version = "5.0.9+0" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "9216a80ff3682833ac4b733caa8c00390620ba5d" +deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.0+0" +version = "3.5.4+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1265,9 +1269,9 @@ version = "0.5.6+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +git-tree-sha1 = "39a11854f0cba27aa41efaedf43c77c5daa6be51" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.3+0" +version = "1.6.0+0" [[deps.OrderedCollections]] git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" @@ -1277,13 +1281,17 @@ version = "1.8.1" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" +version = "10.44.0+1" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "f07c06228a1c670ae4c87d1276b92c7c597fdda0" +git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.35" +version = "0.11.37" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" [[deps.PNGFiles]] deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] @@ -1305,15 +1313,9 @@ version = "0.5.12" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "275a9a6d85dc86c24d03d1837a0010226a96f540" +git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.56.3+0" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" +version = "1.57.0+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -1330,7 +1332,7 @@ version = "0.44.2+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" +version = "1.12.1" weakdeps = ["REPL"] [deps.Pkg.extensions] @@ -1344,9 +1346,9 @@ version = "0.3.3" [[deps.PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] -git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" +git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" -version = "1.4.3" +version = "1.4.4" [[deps.PolygonOps]] git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" @@ -1361,21 +1363,21 @@ version = "1.4.3" [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" +version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +git-tree-sha1 = "522f093a29b31a93e34eaea17ba055d850edea28" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" +version = "1.5.1" [[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "c5a07210bd060d6a8491b0ccdee2fa0235fc00bf" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.4.0" +version = "3.1.2" [[deps.Printf]] deps = ["Unicode"] @@ -1384,9 +1386,9 @@ version = "1.11.0" [[deps.ProgressMeter]] deps = ["Distributed", "Printf"] -git-tree-sha1 = "13c5103482a8ed1536a54c08d0e742ae3dca2d42" +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" uuid = "92933f4c-e287-5a05-a399-4b506db050ca" -version = "1.10.4" +version = "1.11.0" [[deps.PtrArrays]] git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" @@ -1395,9 +1397,9 @@ version = "1.3.0" [[deps.QOI]] deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] -git-tree-sha1 = "8b3fc30bc0390abdce15f8822c889f669baed73d" +git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106" uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" -version = "1.0.1" +version = "1.0.2" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] @@ -1411,14 +1413,8 @@ version = "2.11.2" [deps.QuadGK.weakdeps] Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" -[[deps.Quaternions]] -deps = ["LinearAlgebra", "Random", "RealDot"] -git-tree-sha1 = "994cc27cdacca10e68feb291673ec3a76aa2fae9" -uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" -version = "0.7.6" - [[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "StyledStrings", "Unicode"] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" version = "1.11.0" @@ -1442,11 +1438,11 @@ weakdeps = ["FixedPointNumbers"] [deps.Ratios.extensions] RatiosFixedPointNumbersExt = "FixedPointNumbers" -[[deps.RealDot]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" -uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" -version = "0.1.0" +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1465,17 +1461,11 @@ git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" -[[deps.Richardson]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "48f038bfd83344065434089c2a79417f38715c41" -uuid = "708f8203-808e-40c0-ba2d-98a6953ed40d" -version = "1.4.2" - [[deps.Rmath]] deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.8.0" +version = "0.9.0" [[deps.Rmath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1483,38 +1473,6 @@ git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" version = "0.5.1+0" -[[deps.Roots]] -deps = ["Accessors", "CommonSolve", "Printf"] -git-tree-sha1 = "3ac13765751ffc81e3531223782d9512f6023f71" -uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.2.7" - - [deps.Roots.extensions] - RootsChainRulesCoreExt = "ChainRulesCore" - RootsForwardDiffExt = "ForwardDiff" - RootsIntervalRootFindingExt = "IntervalRootFinding" - RootsSymPyExt = "SymPy" - RootsSymPyPythonCallExt = "SymPyPythonCall" - - [deps.Roots.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" - SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" - SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" - -[[deps.Rotations]] -deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] -git-tree-sha1 = "5680a9276685d392c87407df00d57c9924d9f11e" -uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" -version = "1.7.1" - - [deps.Rotations.extensions] - RotationsRecipesBaseExt = "RecipesBase" - - [deps.Rotations.weakdeps] - RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" - [[deps.RoundingEmulator]] git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" @@ -1526,31 +1484,36 @@ version = "0.7.0" [[deps.SIMD]] deps = ["PrecompileTools"] -git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87" +git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.7.1" +version = "3.7.2" + +[[deps.SciMLPublic]] +git-tree-sha1 = "0ba076dbdce87ba230fff48ca9bca62e1f345c9b" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.1" [[deps.Scratch]] deps = ["Dates"] -git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.1" +version = "1.3.0" [[deps.SentinelArrays]] deps = ["Dates", "Random"] -git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" +git-tree-sha1 = "ebe7e59b37c400f694f52b58c93d26201387da70" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.8" +version = "1.4.9" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" [[deps.ShaderAbstractions]] -deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "79123bc60c5507f035e6d1d9e563bb2971954ec8" +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" uuid = "65257c39-d410-5151-9873-9b3e5be5013e" -version = "0.4.1" +version = "0.5.0" [[deps.SharedArrays]] deps = ["Distributed", "Mmap", "Random", "Serialization"] @@ -1564,28 +1527,28 @@ uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[deps.ShroffCelegansModels]] -deps = ["BSplineKit", "CSV", "CircStats", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "FFTW", "FileIO", "FiniteDifferences", "FixedPointNumbers", "GeometryBasics", "HDF5", "ImageContrastAdjustment", "ImageCore", "ImageFiltering", "IndirectArrays", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "MakieCore", "Missings", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Rotations", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages", "UnicodePlots"] +deps = ["BSplineKit", "CSV", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "DimensionalData", "FFTW", "FileIO", "FixedPointNumbers", "GeometryBasics", "HDF5", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "Missings", "NetCDF", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Sockets", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages"] path = ".." uuid = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" version = "1.0.0-DEV" [[deps.SignedDistanceFields]] -deps = ["Random", "Statistics", "Test"] -git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +deps = ["Statistics"] +git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92" uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" -version = "0.4.0" +version = "0.4.1" [[deps.SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] -git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb" uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" -version = "0.9.4" +version = "0.9.5" [[deps.Sixel]] deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] -git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743" uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" -version = "0.1.3" +version = "0.1.5" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" @@ -1593,20 +1556,20 @@ version = "1.11.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.2.1" +version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" +version = "1.12.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" +git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.5.1" +version = "2.6.1" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -1614,9 +1577,9 @@ weakdeps = ["ChainRulesCore"] [[deps.StableRNGs]] deps = ["Random"] -git-tree-sha1 = "95af145932c2ed859b63329952ce8d633719f091" +git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" -version = "1.0.3" +version = "1.0.4" [[deps.StackViews]] deps = ["OffsetArrays"] @@ -1625,27 +1588,16 @@ uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" version = "0.1.2" [[deps.Static]] -deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] -git-tree-sha1 = "f737d444cb0ad07e61b3c1bef8eb91203c321eff" +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.2.0" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] -git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.8.0" -weakdeps = ["OffsetArrays", "StaticArrays"] - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" +version = "1.3.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "0feb6b9031bd5c51f9072393eb5ab3efd31bf9e4" +git-tree-sha1 = "eee1b9ad8b29ef0d936e3ec9838c7ec089620308" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.13" +version = "1.9.16" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -1653,9 +1605,9 @@ weakdeps = ["ChainRulesCore", "Statistics"] StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" +version = "1.4.4" [[deps.Statistics]] deps = ["LinearAlgebra"] @@ -1669,21 +1621,21 @@ weakdeps = ["SparseArrays"] [[deps.StatsAPI]] deps = ["LinearAlgebra"] -git-tree-sha1 = "9d72a13a3f4dd3795a195ac5a44d7d6ff5f552ff" +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.1" +version = "1.8.0" [[deps.StatsBase]] -deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "b81c5035922cc89c2d9523afc6c54be512411466" +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.5" +version = "0.34.10" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "8e45cecc66f3b42633b8ce14d431e8e57a3e242e" +git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.5.0" +version = "1.5.2" weakdeps = ["ChainRulesCore", "InverseFunctions"] [deps.StatsFuns.extensions] @@ -1692,15 +1644,15 @@ weakdeps = ["ChainRulesCore", "InverseFunctions"] [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "725421ae8e530ec29bcbdddbe91ff8053421d023" +git-tree-sha1 = "a3c1536470bf8c5e02096ad4853606d7c8f62721" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.1" +version = "0.4.2" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "9537ef82c42cdd8c5d443cbc359110cbb36bae10" +git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.21" +version = "0.7.2" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1723,6 +1675,20 @@ git-tree-sha1 = "159331b30e94d7b11379037feeb9b690950cace8" uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4" version = "1.11.0" +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "9297459be9e338e546f5c4bedb59b3b5674da7f1" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.6.2" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + [[deps.StyledStrings]] uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" version = "1.11.0" @@ -1734,7 +1700,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" +version = "7.8.3+2" [[deps.TOML]] deps = ["Dates"] @@ -1749,9 +1715,9 @@ version = "1.0.1" [[deps.Tables]] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] -git-tree-sha1 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297" +git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.12.0" +version = "1.12.1" [[deps.Tar]] deps = ["ArgTools", "SHA"] @@ -1773,23 +1739,17 @@ version = "1.11.0" deps = ["LinearAlgebra", "Test", "Tullio"] path = "../../ThinPlateSplines" uuid = "1d861738-f48e-4029-b1d3-81ce6bc7f5ab" -version = "0.2.0" +version = "0.2.1" weakdeps = ["GeometryBasics"] [deps.ThinPlateSplines.extensions] ThinPlateSplinesGeometryBasicsExt = "GeometryBasics" [[deps.TiffImages]] -deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "SIMD", "UUIDs"] -git-tree-sha1 = "f21231b166166bebc73b99cea236071eb047525b" +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "98b9352a24cb6a2066f9ababcc6802de9aed8ad8" uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" -version = "0.11.3" - -[[deps.TiledIteration]] -deps = ["OffsetArrays", "StaticArrayInterface"] -git-tree-sha1 = "1176cc31e867217b06928e2f140c90bd1bc88283" -uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" -version = "0.5.0" +version = "0.11.6" [[deps.TranscodingStreams]] git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" @@ -1824,11 +1784,6 @@ deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" version = "1.11.0" -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" version = "1.11.0" @@ -1839,49 +1794,40 @@ git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" -[[deps.UnicodePlots]] -deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "LinearAlgebra", "MarchingCubes", "NaNMath", "PrecompileTools", "Printf", "SparseArrays", "StaticArrays", "StatsBase"] -git-tree-sha1 = "24c0e2df19eb3f894d28a64e7486926f38de8a49" -uuid = "b8865327-cd53-5732-bb35-84acbb429228" -version = "3.7.2" - - [deps.UnicodePlots.extensions] - FreeTypeExt = ["FileIO", "FreeType"] - ImageInTerminalExt = "ImageInTerminal" - IntervalSetsExt = "IntervalSets" - TermExt = "Term" - UnitfulExt = "Unitful" - - [deps.UnicodePlots.weakdeps] - FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" - FreeType = "b38be410-82b0-50bf-ab77-7b57e271db43" - ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - Term = "22787eb5-b846-44ae-b979-8e399b8463ab" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d62610ec45e4efeabf7032d67de2ffdea8344bed" +git-tree-sha1 = "c25751629f5baaa27fef307f96536db62e1d754e" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.22.1" -weakdeps = ["ConstructionBase", "InverseFunctions"] +version = "1.27.0" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] + NaNMathExt = "NaNMath" + PrintfExt = "Printf" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.VideoIO]] +deps = ["ColorTypes", "Dates", "Downloads", "FFMPEG", "FFMPEG_jll", "FileIO", "Glob", "ImageCore", "PrecompileTools", "Scratch"] +git-tree-sha1 = "4f37de70062a474e0f4edc50d1bb6ebfacbf03c2" +uuid = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" +version = "1.4.0" [[deps.Wayland_jll]] -deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "XML2_jll"] -git-tree-sha1 = "49be0be57db8f863a902d59c0083d73281ecae8e" +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" -version = "1.23.1+0" - -[[deps.Wayland_protocols_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "5db3e9d307d32baba7067b13fc7b5aa6edd4a19a" -uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" -version = "1.36.0+0" +version = "1.24.0+0" [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] @@ -1897,9 +1843,9 @@ version = "0.1.3" [[deps.WoodburyMatrices]] deps = ["LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" -version = "1.0.0" +version = "1.1.0" [[deps.WorkerUtilities]] git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" @@ -1908,15 +1854,15 @@ version = "1.6.1" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "b8b243e47228b4a3877f1dd6aee0c5d56db7fcf4" +git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.6+1" +version = "2.13.9+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "fee71455b0aaa3440dfdd54a9a36ccef829be7d4" +git-tree-sha1 = "9cce64c0fdd1960b597ba7ecda2950b5ed957438" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.8.1+0" +version = "5.8.2+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -1950,9 +1896,9 @@ version = "1.3.7+0" [[deps.Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "9caba99d38404b285db8801d5c45ef4f4f425a6d" +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "6.0.1+0" +version = "6.0.2+0" [[deps.Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] @@ -1978,6 +1924,12 @@ git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" version = "0.9.12+0" +[[deps.Xorg_libpciaccess_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "4909eb8f1cbf6bd4b1c30dd18b2ead9019ef2fad" +uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" +version = "0.18.1+0" + [[deps.Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" @@ -2011,7 +1963,7 @@ version = "1.6.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" +version = "1.3.1+2" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2027,26 +1979,26 @@ version = "0.2.3+0" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f5733a5a9047722470b95a81e1b172383971105c" +git-tree-sha1 = "1aa23f01927b2dac46db77a56b31088feee0a491" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.3+0" +version = "1.1.4+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "522c1df09d05a71785765d19c9524661234738e9" +git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.11.0+0" +version = "3.13.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.2+0" +version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" +version = "5.15.0+0" [[deps.libdecor_jll]] deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] @@ -2056,15 +2008,15 @@ version = "0.2.2+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.3+0" +version = "2.0.4+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "002748401f7b520273e2b506f61cab95d4701ccf" +git-tree-sha1 = "6ab498eaf50e0495f89e7a5b582816e2efb95f64" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.48+0" +version = "1.6.54+0" [[deps.libsixel_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] @@ -2073,32 +2025,38 @@ uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" version = "1.10.5+0" [[deps.libvorbis_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] -git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" -version = "1.3.7+2" +version = "1.3.8+0" [[deps.libwebp_jll]] deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] -git-tree-sha1 = "d2408cac540942921e7bd77272c32e58c33d8a77" +git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" -version = "1.5.0+0" +version = "1.6.0+0" + +[[deps.libzip_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "OpenSSL_jll", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "86addc139bca85fdf9e7741e10977c45785727b7" +uuid = "337d8026-41b4-5cde-a456-74a10e5b31d1" +version = "1.11.3+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" +version = "1.64.0+1" [[deps.oneTBB_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d5a767a3bb77135a99e433afe0eb14cd7f6914c3" +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2022.0.0+0" +version = "2022.0.0+1" [[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" +version = "17.7.0+0" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2108,12 +2066,12 @@ version = "10164.0.1+0" [[deps.x265_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "dcc541bb19ed5b0ede95581fb2e41ecf179527d2" +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" -version = "3.6.0+0" +version = "4.1.0+0" [[deps.xkbcommon_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] -git-tree-sha1 = "c950ae0a3577aec97bfccf3381f66666bc416729" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "a1fc6507a40bf504527d0d4067d718f8e179b2b8" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" -version = "1.8.1+0" +version = "1.13.0+0" diff --git a/glmakie/Project.toml b/glmakie/Project.toml index 5aac7d1..4fcb863 100644 --- a/glmakie/Project.toml +++ b/glmakie/Project.toml @@ -1,4 +1,7 @@ [deps] +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" ShroffCelegansModels = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" +VideoIO = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" From bc7b2284261a993dce6e8b12123b5c543135a853 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 16:13:31 -0400 Subject: [PATCH 14/39] Update scripts --- scripts/build_fig.jl | 169 +++++++++++++++++++++++++++++ scripts/meshscatter_average.jl | 2 +- scripts/meshscatter_average_dev.jl | 19 ++-- scripts/meshscatter_single.jl | 90 +++++++++++++++ 4 files changed, 270 insertions(+), 10 deletions(-) create mode 100644 scripts/build_fig.jl create mode 100644 scripts/meshscatter_single.jl diff --git a/scripts/build_fig.jl b/scripts/build_fig.jl new file mode 100644 index 0000000..f30f869 --- /dev/null +++ b/scripts/build_fig.jl @@ -0,0 +1,169 @@ +#julia> fig = with_theme(theme_black()) do +using Colors +using TiffImages +using FixedPointNumbers +function build_figure(model=models[49], vol = nothing, redch = nothing) + r = LinRange(0,1,length(model)) + verts = map(model.transverse_splines[[1,9,17,25]]) do s + s.(r) + end |> stack + central_pts = model.central_spline.(r); + function square(n) + pts = [ + verts[n, 1] + verts[n, 2], + verts[n, 3] + verts[n, 2], + verts[n, 3] + verts[n, 4], + verts[n, 1] + verts[n, 4] + ] .- central_pts[n] + # println(pts) + GeometryBasics.Mesh(pts, [1, 2, 3, 3, 4, 1]) + end + smodel = ShroffCelegansModels.Types.StraightenedCelegansModel(model) + _square_obs = Observable(square(1)) + _contour_obs = Observable(ShroffCelegansModels.get_model_contour_mesh(model)) + + + green_colormap = to_colormap(:greens) + green_colormap[1] = RGBA(0,0,0,0) + red_colormap = to_colormap(:reds) + red_colormap[1] = RGBA(0,0,0,0) + blue_colormap = to_colormap(:blues) + blue_colormap[1] = RGBA(0,0,0,0) + + sections = ShroffCelegansModels.get_sections(model) + straight_sections = ShroffCelegansModels.get_sections(smodel) + + _straight_contour_obs = Observable( + ShroffCelegansModels.get_model_contour_mesh( + straight_sections, + transform_points = swapyz_scale, + ) + ) + + #vol = TiffImages.load(raw"X:\shrofflab\RW10598\Data\598_Slitscan_6um_5min_Pos1\Decon_registered\RegB\Decon_reg_67.tif"); + if isnothing(vol) + vol = TiffImages.load(raw"X:\shrofflab\OD1599_NU\112719_Pos3\Decon_Reg\RegB\Decon_reg_60.tif") + redch = TiffImages.load(raw"X:\shrofflab\OD1599_NU\112719_Pos3\Decon_Reg\RegA\Decon_reg_60.tif") + end + raw_vol = reinterpret(N0f32, vol) + + fig = Figure() + ax = LScene(fig[1:2, 1]; show_axis=true) + t = 1:length(model) + ax_straight = LScene(fig[3,1]; show_axis=true) + sliders = SliderGrid(fig[4, 1], + (label="Spline Parameter", range=t), + ) + r = LinRange(0,1,length(model)) + low_raw_vol = similar(raw_vol) + low_raw_vol .= 0 + mask = raw_vol .< 0.01 + low_raw_vol[mask] .= raw_vol[mask] + #v = volume!(ax, permutedims(vol, (2, 1, 3)); colormap=green_colormap, colorrange=(0.00, 0.5)) + #v2 = volume!(ax, permutedims(reinterpret(N0f16, redch), (2, 1, 3)); colormap=red_colormap, colorrange=(0.00, 0.03)) + v = volume!(ax, permutedims(raw_vol, (2,1,3)); colormap=green_colormap, colorrange=extrema(raw_vol)) + #v2 = volume!(ax, permutedims(redch, (2,1,3)); colormap=red_colormap, colorrange=extrema(redch)) + #v_surface = volume!(ax, permutedims(low_raw_vol, (2,1,3)); colormap=blue_colormap, colorrange=(0.00, 0.01), alpha = 0.5) + mesh!(ax, _contour_obs, alpha=0.5, transparency=true; color = :grey) + #_square_obs = Observable(square(1)) + mesh!(ax, _square_obs, color=:red) + right_spline = Observable(ShroffCelegansModels.Types.transverse_spline(model, 1).(r)) + left_spline = Observable(ShroffCelegansModels.Types.transverse_spline(model, 17).(r)) + central_spline = Observable(ShroffCelegansModels.Types.central_spline(model).(r)) + lines!(ax, left_spline, color=:red) + lines!(ax, right_spline, color=:green) + lines!(ax, central_spline, color=:magenta) + pts = seam_cell_pts(model, 0) + scatter!(ax, pts, color=:red) + + mesh!(ax_straight, _straight_contour_obs, alpha = 0.5, transparency=true; color = :grey) + + + #scatter!(ax, pts, color=:red) + cc = Camera3D(ax.scene) + + zoom!(ax.scene, cc, 0.5) + + cc_straight = Camera3D(ax_straight.scene; + projectiontype = Makie.Orthographic, + lookat = Vec3d(0, 90, 0), + eyeposition = Vec3d(30, 90, 0) + ) + + zoom!(ax_straight.scene, cc_straight, 0.5) + update_cam!(ax_straight.scene, cc_straight) + + on(sliders.sliders[1].value) do i + r = LinRange(0,1,length(model))[1:i] + _square_obs[] = square(i) + _contour_obs[] = ShroffCelegansModels.get_model_contour_mesh( + sections[1:i]; ellipse_points=32) + right_spline[] = ShroffCelegansModels.Types.transverse_spline(model, 1).(r) + left_spline[] = ShroffCelegansModels.Types.transverse_spline(model, 17).(r) + central_spline[] = ShroffCelegansModels.Types.central_spline(model).(r) + + _straight_contour_obs[] = ShroffCelegansModels.get_model_contour_mesh( + straight_sections[1:i]; + ellipse_points=32, + transform_points=swapyz_scale + ) + end + + (; + fig, + ax, + ax_straight, + cc, + cc_straight + ) + + Foo(fig) do fig + display(fig, update=false) + zoom!(ax.scene, cameracontrols(ax), 0.5) + zoom!(ax_straight.scene, cameracontrols(ax_straight), 0.2) + end +end + +#= +julia> record(fig, "2024_10_24_sweep_v1.mp4", 1:length(models[60]); visible=true) do i + _square_obs[] = square(i) + _contour_obs[] = ShroffCelegansModels.get_model_contour_mesh(sections[1:i]; ellipse_points=32) + sleep(0.01) + end +=# + +function square_samples(n, radius=nothing) + if isnothing(radius) + pts = [ + verts[n, 1] + verts[n, 2], + verts[n, 3] + verts[n, 2], + verts[n, 3] + verts[n, 4], + verts[n, 1] + verts[n, 4] + ] .- central_pts[n] + else + up_vec = normalize(verts[n, 2] .- central_pts[n]) + right_vec = normalize(verts[n, 1] .- central_pts[n]) + pts = [ + up_vec + right_vec, + up_vec - right_vec, + -up_vec - right_vec, + -up_vec + right_vec + ] + # pts = normalize.(pts) + pts .*= radius + pts .+= (central_pts[n],) + end + w = floor(Int, norm(pts[1] - pts[4])) + h = floor(Int, norm(pts[2] - pts[1])) + # @info w h norm(up_vec) norm(right_vec) norm(pts[1] - pts[4]) norm(pts[2] - pts[1]) radius + left = LinRange(pts[4], pts[3], h) + top = LinRange(Point3f(0), pts[1] - pts[4], w) + # voxels = Matrix{Point3f}(undef, h, w) + voxels = Point3f[] + for start in left + for pt in (start,) .+ top + push!(voxels, pt) + end + end + return reshape(voxels, (w, h)) +end \ No newline at end of file diff --git a/scripts/meshscatter_average.jl b/scripts/meshscatter_average.jl index 5e34ad4..0ffe8f5 100644 --- a/scripts/meshscatter_average.jl +++ b/scripts/meshscatter_average.jl @@ -16,7 +16,7 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model colors_dict = load_colors_dict() function get_color(annotation) annotation = lowercase(annotation) - annotation = replace(annotation, "/" => "_") + #annotation = replace(annotation, "/" => "_") get(colors_dict, annotation, RGBf(1,1,1)) end diff --git a/scripts/meshscatter_average_dev.jl b/scripts/meshscatter_average_dev.jl index b89c352..84b81b9 100644 --- a/scripts/meshscatter_average_dev.jl +++ b/scripts/meshscatter_average_dev.jl @@ -20,8 +20,8 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model colors_dict = load_colors_dict() function get_color(annotation) annotation = lowercase(annotation) - annotation = replace(annotation, "/" => "_") - get(colors_dict, annotation, RGBAf(0,0,0,0)) + #annotation = replace(annotation, "/" => "_") + get(colors_dict, annotation, RGBAf(1,1,1,1)) end # Font size @@ -29,7 +29,7 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model # HPF Label label_offset = 8 - time_text = Observable("hpf = 14:00") + time_text = Observable("hpf = 12:31") text!(-label_offset, 0, label_offset; text = time_text, fontsize=_fontsize) # Scalebar @@ -198,8 +198,8 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model zoom!(ax.scene, 4) on(throttle(0.1, time_slider.value)) do t - total_minutes = (t-1)/200*420 - hours = 7 + round(Int, total_minutes/60, RoundDown) + total_minutes = (t-1+11)/200*370 + hours = 6 + round(Int, total_minutes/60, RoundDown) minutes = round(Int, mod(total_minutes, 60), RoundDown) time_text[] = "hpf = $hours:$(@sprintf("%02d", minutes))" if xy_bounding_radius > 0 @@ -240,7 +240,7 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model update_cam!(ax.scene, cc, 0, 0) scalebar[] = Point3f[[label_offset+1, scalebar_y_offset, -label_offset-1], [label_offset+1, scalebar_y_offset + scalebar_size_um, -label_offset-1]] end - vid = Observable(DOM.div("Press record..."; id="video_recording", style="color: white; display: none;")) + #vid = Observable(DOM.div("Press record..."; id="video_recording", style="color: white; display: none;")) on(record_button.clicks) do _ # record(fig, "/var/www/shroff/test.mp4", time_slider.range[]; update=false) do t # VideoStream @@ -251,7 +251,7 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model vid[] = DOM.div(crop_video(vs); id = "video_recording") controls_visible[] = true if !isnothing(session) - evaljs(session, js"""document.getElementById("video_recording").scrollIntoView(true)""") + #evaljs(session, js"""document.getElementById("video_recording").scrollIntoView(true)""") end end on(record_button2.clicks) do _ @@ -270,7 +270,7 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model vid[] = DOM.div(crop_video(vs); id = "video_recording") controls_visible[] = true if !isnothing(session) - evaljs(session, js"""document.getElementById("video_recording").scrollIntoView(true)""") + #evaljs(session, js"""document.getElementById("video_recording").scrollIntoView(true)""") end end @@ -298,7 +298,8 @@ function meshscatter_average(average_annotations_dict; nerve_ring = false, model =# #DOM.body(fig, style=Styles(CSS("background-color" => "black"))) DataInspector(fig; backgroundcolor = :black) - DOM.div(fig, vid) + #DOM.div(fig, vid) + fig end #with_theme(meshscatter_all, theme_black()) #set_theme!(theme_black()) diff --git a/scripts/meshscatter_single.jl b/scripts/meshscatter_single.jl new file mode 100644 index 0000000..95bfb63 --- /dev/null +++ b/scripts/meshscatter_single.jl @@ -0,0 +1,90 @@ +using Makie +using Makie: throttle, Button +using Printf +using GeometryBasics + +function meshscatter_single(cache; nerve_ring = false) + fig = Figure(size = (1920, 1080)) + ax = LScene(fig[1,1:3]; show_axis = false) + coordinates = values(cache) + #T = MeshScatter{Tuple{Vector{Point{3, Float64}}}} + T = Observable{Vector{Point{3, Float64}}} + s = Vector{T}(undef, length(coordinates)) + _markersize = Observable(0.5) + _keys = collect(keys(cache)) + if nerve_ring + for (i, v) in enumerate(coordinates) + s[i] = Observable(v[end]) + if contains(_keys[i], "DCR6485_RPM1_NU") + meshscatter!(s[i], markersize=_markersize, color = :blue) + else + meshscatter!(s[i], markersize=_markersize, color = :grey, alpha = 0.1) + end + end + else + for (i, v) in enumerate(coordinates) + s[i] = Observable(v[end]) + meshscatter!(s[i], markersize=_markersize) + end + end + time_text = Observable("hpf = 14:00") + text!(-20, 0, 20; text = time_text) + text!( 20, 190, -20; text = "10 μm") + scalebar = Observable(Point3f[[21, 190, -21], [21, 200, -21]]) + lines!(scalebar, color = :white, linewidth = 5) + cc = Camera3D(ax.scene; + projectiontype = Makie.Orthographic, + lookat = Vec3d(0, 90, 0), + eyeposition = Vec3d(60, 90, 0) + ) + + time_points = axes(first(coordinates), 1) + time_slider = Makie.Slider(fig[2,1:3], range = time_points, startvalue = 201) + #grid = GridLayout(tellwidth = false, tellheight = false, height = Fixed(5)) + xy_button = Button(fig; label = "XY", buttoncolor = RGBf(0.5, 0.5, 0.5), tellwidth = false) + xz_button = Button(fig; label = "XZ", buttoncolor = RGBf(0.5, 0.5, 0.5), tellwidth = false) + yz_button = Button(fig; label = "YZ", buttoncolor = RGBf(0.5, 0.5, 0.5), tellwidth = false) + #grid[1,1] = button + fig[3,1] = xy_button + fig[3,2] = xz_button + fig[3,3] = yz_button + zoom!(ax.scene, 2) + on(throttle(0.1, time_slider.value)) do t + total_minutes = (t-1)/200*420 + hours = 7 + round(Int, total_minutes/60, RoundDown) + minutes = round(Int, mod(total_minutes, 60), RoundDown) + time_text[] = "hpf = $hours:$(@sprintf("%02d", minutes))" + for (i, v) in enumerate(coordinates) + s[i][] = v[t] + end + end + on(xy_button.clicks) do _ + update_cam!(ax.scene, cc, π/2, 0) + scalebar[] = Point3f[[21, 190, -21], [11, 190, -21]] + end + on(xz_button.clicks) do _ + update_cam!(ax.scene, cc, 0, π/2) + scalebar[] = Point3f[[21, 190, -21], [21, 200, -21]] + end + on(yz_button.clicks) do _ + update_cam!(ax.scene, cc, 0, 0) + scalebar[] = Point3f[[21, 190, -21], [21, 200, -21]] + end + #= + println("Press any key to continue:") + readline() + for i in 1:10 + _markersize[] = 0.1*i + for t in time_points + for (i, v) in enumerate(coordinates) + s[i][] = v[t] + end + sleep(0.05) + end + end + =# + # DOM.body(fig, style=Styles(CSS("background-color" => "black"))) + fig +end +#with_theme(meshscatter_all, theme_black()) +#set_theme!(theme_black()) From f9b999d8ac6c10b2aa03842c011a29622ca69c76 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 16:51:37 -0400 Subject: [PATCH 15/39] Add configuration --- config/windows/config_2026_03_19_v2.json | 362 +++++++++++++++++++++++ 1 file changed, 362 insertions(+) create mode 100644 config/windows/config_2026_03_19_v2.json diff --git a/config/windows/config_2026_03_19_v2.json b/config/windows/config_2026_03_19_v2.json new file mode 100644 index 0000000..36a53e5 --- /dev/null +++ b/config/windows/config_2026_03_19_v2.json @@ -0,0 +1,362 @@ +{ + "settings": { + "folderpaths": { + "side": "RegB", + "data_folderpath": "Decon_reg_#\\Decon_reg_#_results", + "straightened_seam_cells": "straightened_seamcells\\straightened_seamcells.csv", + "straightened_annotations": "straightened_annotations\\straightened_annotations.csv", + "straightened_lattice": "straightened_lattice\\straightened_lattice.csv", + "twisted_seam_cells": "seam_cell_final\\seam_cells.csv", + "twisted_annotations": "integrated_annotation\\annotations.csv", + "twisted_lattice": "lattice_final\\lattice.csv" + }, + "voxel_to_micron_scale": [ + 0.1625, + 0.1625, + 0.1625 + ], + "outlier_removal": { + "remove_outliers": true, + "n_stdev": 2, + "window_size": 10, + "early_window_size": 10 + }, + "interpolation": { + "total_min": 420, + "min_timepoints_required": 2, + "method": "linear", + "seam_cells_on": { + "H0L": 0, + "H0R": 0, + "H1L": 0, + "H1R": 0, + "H2L": 0, + "H2R": 0, + "V1R": 0, + "V1L": 0, + "V2R": 0, + "V2L": 0, + "V3R": 0, + "V3L": 0, + "V4L": 0, + "V4R": 0, + "QL": 0.667, + "QR": 0.667, + "V5L": 0, + "V5R": 0, + "V6L": 0, + "V6R": 0, + "TL": 0, + "TR": 0 + } + }, + "warping": { + "z_padding": 100, + "radial_correction": 1, + "seam_cells": [ + "H0L", + "H0R", + "H1L", + "H1R", + "H2L", + "H2R", + "V1R", + "V1L", + "V2R", + "V2L", + "V3R", + "V3L", + "V4L", + "V4R", + "V5L", + "V5R", + "V6L", + "V6R", + "TL", + "TR" + ] + }, + "smoothing": { + "method": "sgolay", + "window_size": 90 + }, + "mipav_output": { + "labels_on": false, + "cell_info": "cell_info.json" + } + }, + "data": { + "seam_cells": [ + "X:\\shrofflab\\OD1599_NU\\120619_Pos2\\Decon_reg", + "X:\\shrofflab\\OD1599_NU\\112719_Pos3\\Decon_Reg", + "X:\\shrofflab\\OD1599_NU\\112619_Pos0\\Decon_reg", + "X:\\shrofflab\\DCR6485_RPM1_NU\\011419_RC\\DCR6485_NU\\DCR6485_NU\\DCR6485_NU\\Pos0\\SPIMB\\Decon", + "X:\\shrofflab\\DCR6485_RPM1_NU\\011419_RC\\DCR6485_NU\\DCR6485_NU\\DCR6485_NU\\Pos4\\SPIMB\\Decon_Reg", + "X:\\shrofflab\\DCR6485_RPM1_NU\\021020_RC\\DCR6485_NU_1\\DCR6485_NU_1\\Pos2\\SPIMB\\Decon", + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\082619_Pos3", + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\091119_Pos2", + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\091119_Pos3", + "X:\\shrofflab\\RW10131\\Data\\052918_Pos0\\Decon_registered", + "X:\\shrofflab\\RW10131\\Data\\052918_Pos1\\Decon_registered", + "X:\\shrofflab\\RW10896\\Postwitching\\Pos1\\Decon_registered", + "X:\\shrofflab\\RW10896\\Postwitching\\Pos4\\Decon_registered", + "X:\\shrofflab\\RW10896\\Postwitching\\Pos6\\Decon_registered", + "X:\\shrofflab\\RW10752_NU\\Untwisting\\031219_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos1\\Decon_registered", + "X:\\shrofflab\\RW10752_NU\\Untwisting\\022519_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos0\\Decon_registered", + "X:\\shrofflab\\RW10584\\051817\\Decon_reg", + "X:\\shrofflab\\RW10584\\052517\\Decon_reg", + "X:\\shrofflab\\RW10584\\101017\\Decon_reg", + "X:\\shrofflab\\RW10598\\Data\\Pos4-bgsub_95_iteration_5\\Decon_registered", + "X:\\shrofflab\\RW10598\\Data\\598_Slitscan_6um_5min_Pos1\\Decon_registered", + "X:\\shrofflab\\RW10598\\Data\\Pos0\\Decon_registered", + "X:\\shrofflab\\RW10375\\Pos0\\SPIMB\\Reg_Sample\\ForTracking", + "X:\\shrofflab\\RW10375\\Pos1\\SPIMB\\Reg_Sample\\ForTracking", + "X:\\shrofflab\\RW10375\\Pos2\\SPIMB\\Reg_Sample\\ForTracking", + "X:\\shrofflab\\RW10557\\031021\\Pos0\\segmentation", + "X:\\shrofflab\\RW10557\\031021\\Pos1\\Segmentation", + "X:\\shrofflab\\RW10557\\031021\\Pos2\\segmentation", + "X:\\shrofflab\\RW10753\\Tracking\\Pos6", + "X:\\shrofflab\\RW10753\\Tracking\\Pos2", + "X:\\shrofflab\\RW10753\\Tracking\\Pos1", + "X:\\shrofflab\\RW10742\\Tracking\\Pos1\\Segmentation", + "X:\\shrofflab\\RW10742\\Tracking\\Pos4\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10742\\Tracking\\Pos5\\For_Tracking", + "X:\\shrofflab\\RW10711\\Tracking\\Pos0\\For_Tracking", + "X:\\shrofflab\\RW10711\\Tracking\\Pos1\\For_Tracking", + "X:\\shrofflab\\RW10711\\Tracking\\Pos3", + "X:\\shrofflab\\Vab-1\\Tracking\\Pos0\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Vab-1\\Tracking\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Vab-1\\Tracking\\Pos3\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\efn-1\\Tracking\\Pos0\\For_Tracking", + "X:\\shrofflab\\efn-1\\Tracking\\Pos3\\For_Tracking", + "X:\\shrofflab\\efn-1\\Tracking\\Pos4\\For_Tracking", + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos1\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos6\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\063014_lattices_Javier - UTP 1\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311-US_5min_3 - UTP 2\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_2 - UTP 3\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_4 - UTP 4\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_1 - UTP 5\\Decon_reg", + "X:\\shrofflab\\RW10752_NU\\Untwisting\\031219_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos2\\SPIMB\\For_Tracking\\For_Tracking" + ], + "strains": [ + { + "name": "OD1599_NU", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\OD1599_NU\\120619_Pos2\\Decon_reg", + "X:\\shrofflab\\OD1599_NU\\112719_Pos3\\Decon_Reg", + "X:\\shrofflab\\OD1599_NU\\112619_Pos0\\Decon_reg" + ] + }, + { + "name": "DCR6485_RPM1_NU", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\DCR6485_RPM1_NU\\011419_RC\\DCR6485_NU\\DCR6485_NU\\DCR6485_NU\\Pos0\\SPIMB\\Decon", + "X:\\shrofflab\\DCR6485_RPM1_NU\\011419_RC\\DCR6485_NU\\DCR6485_NU\\DCR6485_NU\\Pos4\\SPIMB\\Decon_Reg", + "X:\\shrofflab\\DCR6485_RPM1_NU\\021020_RC\\DCR6485_NU_1\\DCR6485_NU_1\\Pos2\\SPIMB\\Decon" + ] + }, + { + "name": "JCC596_NU", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\091119_Pos3", + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\091119_Pos2", + "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\082619_Pos3" + ] + }, + { + "name": "KP9305_NU", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\Non-model C elegans folders\\KP9305_Activity_Full\\073019_KP9305_NU\\Pos0", + "X:\\shrofflab\\Non-model C elegans folders\\KP9305_Activity_Full\\073019_KP9305_NU\\Pos4", + "X:\\shrofflab\\Non-model C elegans folders\\KP9305_Activity_Full\\073019_KP9305_NU\\Pos2" + ] + }, + { + "name": "RW10131", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10131\\Data\\052918_Pos0\\Decon_registered", + "X:\\shrofflab\\RW10131\\Data\\052918_Pos1\\Decon_registered" + ] + }, + { + "name": "RW10896", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10896\\Postwitching\\Pos1\\Decon_registered", + "X:\\shrofflab\\RW10896\\Postwitching\\Pos4\\Decon_registered", + "X:\\shrofflab\\RW10896\\Postwitching\\Pos6\\Decon_registered" + ] + }, + { + "name": "RW10752_NU", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10752_NU\\Untwisting\\031219_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos2\\SPIMB\\For_Tracking\\For_Tracking", + "X:\\shrofflab\\RW10752_NU\\Untwisting\\031219_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos1\\Decon_registered", + "X:\\shrofflab\\RW10752_NU\\Untwisting\\022519_RW10752_NU\\RW10752_NU\\RW10752_NU\\Pos0\\Decon_registered" + ] + }, + { + "name": "RW10584", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10584\\051817\\Decon_reg", + "X:\\shrofflab\\RW10584\\052517\\Decon_reg", + "X:\\shrofflab\\RW10584\\101017\\Decon_reg" + ] + }, + { + "name": "RW10598", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10598\\Data\\Pos4-bgsub_95_iteration_5\\Decon_registered", + "X:\\shrofflab\\RW10598\\Data\\598_Slitscan_6um_5min_Pos1\\Decon_registered", + "X:\\shrofflab\\RW10598\\Data\\Pos0\\Decon_registered" + ] + }, + { + "name": "DCR4221", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_2 - UTP 3\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311-US_5min_3 - UTP 2\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_4 - UTP 4\\Decon_reg", + "X:\\shrofflab\\Non-model C elegans folders\\Untwisting_Paper\\DCR4221\\040215\\LE311 Data\\LE311_US_5min_1 - UTP 5\\Decon_reg" + ] + }, + { + "name": "RW10375", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10375\\Pos0\\SPIMB\\Reg_Sample\\ForTracking", + "X:\\shrofflab\\RW10375\\Pos1\\SPIMB\\Reg_Sample\\ForTracking", + "X:\\shrofflab\\RW10375\\Pos2\\SPIMB\\Reg_Sample\\ForTracking" + ] + }, + { + "name": "RW10557", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10557\\031021\\Pos0\\segmentation", + "X:\\shrofflab\\RW10557\\031021\\Pos1\\Segmentation", + "X:\\shrofflab\\RW10557\\031021\\Pos2\\segmentation" + ] + }, + { + "name": "RW10753", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10753\\Tracking\\Pos6", + "X:\\shrofflab\\RW10753\\Tracking\\Pos2", + "X:\\shrofflab\\RW10753\\Tracking\\Pos1" + ] + }, + { + "name": "RW10742", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10742\\Tracking\\Pos1\\Segmentation", + "X:\\shrofflab\\RW10742\\Tracking\\Pos4\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10742\\Tracking\\Pos5\\For_Tracking" + ] + }, + { + "name": "RW10711", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10711\\Tracking\\Pos0\\For_Tracking", + "X:\\shrofflab\\RW10711\\Tracking\\Pos1\\For_Tracking", + "X:\\shrofflab\\RW10711\\Tracking\\Pos3" + ] + }, + { + "name": "Vab-1", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\Vab-1\\Tracking\\Pos0\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Vab-1\\Tracking\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Vab-1\\Tracking\\Pos3\\SPIMB\\Reg_Sample\\For_Tracking" + ] + }, + { + "name": "efn-1", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\efn-1\\Tracking\\Pos0\\For_Tracking", + "X:\\shrofflab\\efn-1\\Tracking\\Pos3\\For_Tracking", + "X:\\shrofflab\\efn-1\\Tracking\\Pos4\\For_Tracking" + ] + }, + { + "name": "efn-2", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos1\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\efn-2\\120222_efn-2\\Pos6\\SPIMB\\Reg_Sample\\For_Tracking" + ] + }, + { + "name": "lin-26", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\lin-26_mSC\\Tracking\\0208\\SLS148_Untwisting\\Pos4\\SPIMA\\Reg_Sample\\Flipped_FT", + "X:\\shrofflab\\lin-26_mSC\\Tracking\\021323\\SLS148_SLS6\\Pos3\\SPIMB\\Reg_Sample\\Flipped_FT", + "X:\\shrofflab\\lin-26_mSC\\Tracking\\031523\\Pos4\\SPIMA\\Reg_Sample\\Flipped_FT" + ] + }, + { + "name": "CND-1", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\CND-1_RedUntwisting_A\\Tracking\\033023\\RedUT_A_cnd-1\\Pos3\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\CND-1_RedUntwisting_A\\Tracking\\033023\\RedUT_A_cnd-1\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\CND-1_RedUntwisting_A\\Tracking\\032423\\CND-1_RedUT\\Pos2\\SPIMA\\Reg_Sample\\For_Tracking" + ] + }, + { + "name": "Efn-4", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\Efn-4_RedUntwisting\\Tracking\\031723\\EFN-4_RedUT_A\\Pos4\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Efn-4_RedUntwisting\\Tracking\\031723\\EFN-4_RedUT_A\\Pos1\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\Efn-4_RedUntwisting\\Tracking\\031723\\EFN-4_RedUT_A\\Pos3\\SPIMB\\Reg_Sample\\For_Tracking" + ] + }, + { + "name": "RW10896_retracked", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10896\\Postwitching\\2023_imaging\\20231129\\RW10896_NU\\Pos1\\SPIMB\\Registered_Volumes\\For_Tracking", + "X:\\shrofflab\\RW10896\\Postwitching\\2023_imaging\\20231129\\RW10896_NU\\Pos2\\SPIMB\\Registered_Volumes\\For_Tracking", + "X:\\shrofflab\\RW10896\\Postwitching\\2023_imaging\\20231129\\RW10896_NU\\Pos3\\SPIMB\\Registered_Volumes\\For_Tracking" + ] + }, + { + "name": "RW10131_retracked", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10131\\Data\\2024_SLS268\\20240401\\RW10131_SLS6_New\\Pos4\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10131\\Data\\2024_SLS268\\20240429\\SLS268_RW10131_SLS6\\Pos1\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10131\\Data\\2024_SLS268\\20240507\\Pos1\\SPIMA\\Reg_Sample\\For_Tracking" + ] + }, + { + "name": "RW10598_retracked", + "include": true, + "folderpaths": [ + "X:\\shrofflab\\RW10598\\2023_Data\\Tracking\\20230718\\RW10598_NU\\Pos1\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10598\\2023_Data\\Tracking\\20230718\\RW10598_NU\\Pos2\\SPIMB\\Reg_Sample\\For_Tracking", + "X:\\shrofflab\\RW10598\\2023_Data\\Tracking\\20230719\\RW10598_NU\\Pos4\\SPIMB\\Reg_Sample\\For_Tracking" + ] + } + ] + } +} \ No newline at end of file From cc8e14b51a282275347ec5f3d16537dcf31164ec Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 23:46:31 -0400 Subject: [PATCH 16/39] Enable query params in fix_annotation_ap_axis Also use workspace for glmakie and web projects --- Project.toml | 3 + glmakie/Manifest.toml | 518 +++++++++--------- src/demo_averaging/fix_annotation_ap_axis.jl | 27 +- ...et_group_annotation_positions_over_time.jl | 2 + src/demo_averaging/loading.jl | 2 +- src/save_celegans_avg_models.jl | 9 +- web/Manifest.toml | 517 ++++++++++------- web/Project.toml | 2 + web/scripts/web_fix_annotation_ap_axis.jl | 17 +- 9 files changed, 655 insertions(+), 442 deletions(-) diff --git a/Project.toml b/Project.toml index 575bce4..a117f8f 100644 --- a/Project.toml +++ b/Project.toml @@ -53,3 +53,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] test = ["Test"] + +[workspace] +projects = ["glmakie", "web", "ShroffCelegansModelsCore"] diff --git a/glmakie/Manifest.toml b/glmakie/Manifest.toml index d0afc8c..cae6e8b 100644 --- a/glmakie/Manifest.toml +++ b/glmakie/Manifest.toml @@ -22,9 +22,9 @@ version = "0.4.5" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" +git-tree-sha1 = "0761717147821d696c9470a7a86364b2fbd22fd8" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.4.0" +version = "4.5.2" weakdeps = ["SparseArrays", "StaticArrays"] [deps.Adapt.extensions] @@ -52,40 +52,6 @@ version = "0.4.2" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.2" -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.22.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] - ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceMetalExt = "Metal" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceSparseArraysExt = "SparseArrays" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - Metal = "dde4c033-4e86-420c-a63e-0dd931031962" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] git-tree-sha1 = "e0b47732a192dd59b9d079a06d04235e2f833963" @@ -120,9 +86,9 @@ version = "0.4.8" [[deps.BSplineKit]] deps = ["ArrayLayouts", "BandedMatrices", "FastGaussQuadrature", "ForwardDiff", "LinearAlgebra", "PrecompileTools", "Random", "Reexport", "SparseArrays", "Static", "StaticArrays", "StaticArraysCore", "StatsAPI"] -git-tree-sha1 = "48b9300555c54256c12a539a3025f8d2075bea6a" +git-tree-sha1 = "02d491054afeb89b7f34331701e4474eb0b904f7" uuid = "093aae92-e908-43d7-9660-e50ee39d5a0a" -version = "0.19.1" +version = "0.19.2" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] @@ -147,12 +113,6 @@ git-tree-sha1 = "bca794632b8a9bbe159d56bf9e31c422671b35e0" uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" version = "1.3.2" -[[deps.Blosc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "535c80f1c0847a4c967ea945fca21becc9de1522" -uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" -version = "1.21.7+0" - [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" @@ -182,21 +142,21 @@ version = "1.0.1+0" [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] -git-tree-sha1 = "deddd8725e5e1cc49ee205a1964256043720a6c3" +git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.10.15" +version = "0.10.16" [[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "d0efe2c6fdcdaa1c161d206aa8b933788397ec71" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.5+0" +version = "1.18.6+0" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" +git-tree-sha1 = "12177ad6b3cad7fd50c8b3825ce24a99ad61c18f" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.26.0" +version = "1.26.1" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] @@ -208,6 +168,12 @@ git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.8" +[[deps.CodecZstd]] +deps = ["TranscodingStreams", "Zstd_jll"] +git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56" +uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2" +version = "0.8.7" + [[deps.ColorBrewer]] deps = ["Colors", "JSON"] git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" @@ -274,9 +240,9 @@ version = "1.3.0+1" [[deps.ComputePipeline]] deps = ["Observables", "Preferences"] -git-tree-sha1 = "76dab592fa553e378f9dd8adea16fe2591aa3daa" +git-tree-sha1 = "3b4be73db165146d8a88e47924f464e55ab053cd" uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" -version = "0.1.6" +version = "0.1.7" [[deps.ConstructionBase]] git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" @@ -300,6 +266,18 @@ git-tree-sha1 = "a692f5e257d332de1e554e4566a4e5a8a72de2b2" uuid = "150eb455-5306-5404-9cee-2592286d6298" version = "0.6.4" +[[deps.CoreMath]] +deps = ["CoreMath_jll"] +git-tree-sha1 = "8c0480f92b1b1796239156a1b9b1bfb1b39499b4" +uuid = "b7a15901-be09-4a0e-87d2-2e66b0e09b5a" +version = "0.1.0" + +[[deps.CoreMath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a692a4c1dc59a4b8bc0b6403876eb3250fde2bc3" +uuid = "a38c48d9-6df1-5ac9-9223-b6ada3b5572b" +version = "0.1.0+0" + [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" @@ -312,15 +290,15 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" +git-tree-sha1 = "5fab31e2e01e70ad66e3e24c968c264d1cf166d6" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.1" +version = "1.8.2" [[deps.DataStructures]] deps = ["OrderedCollections"] -git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" +git-tree-sha1 = "e86f4a2805f7f19bec5129bc9150c38208e5dc23" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.3" +version = "0.19.4" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -356,42 +334,6 @@ git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" -[[deps.DimensionalData]] -deps = ["Adapt", "ArrayInterface", "ConstructionBase", "DataAPI", "Dates", "Extents", "Interfaces", "IntervalSets", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "PrecompileTools", "Random", "RecipesBase", "Statistics", "TableTraits", "Tables"] -git-tree-sha1 = "147961441e5cb35da0af404aa4684d2e74ec68eb" -uuid = "0703355e-b756-11e9-17c0-8b28908087d0" -version = "0.29.25" - - [deps.DimensionalData.extensions] - DimensionalDataAbstractFFTsExt = "AbstractFFTs" - DimensionalDataAlgebraOfGraphicsExt = "AlgebraOfGraphics" - DimensionalDataCategoricalArraysExt = "CategoricalArrays" - DimensionalDataChainRulesCoreExt = "ChainRulesCore" - DimensionalDataDiskArraysExt = "DiskArrays" - DimensionalDataMakieExt = "Makie" - DimensionalDataNearestNeighborsExt = "NearestNeighbors" - DimensionalDataPythonCallExt = "PythonCall" - DimensionalDataSparseArraysExt = "SparseArrays" - DimensionalDataStatsBaseExt = "StatsBase" - - [deps.DimensionalData.weakdeps] - AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c" - AlgebraOfGraphics = "cbdf2221-f076-402e-a563-3d30da359d67" - CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - DiskArrays = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" - Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" - NearestNeighbors = "b8a86587-4115-5ab1-83bc-aa920d37bbce" - PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" - -[[deps.DiskArrays]] -deps = ["ConstructionBase", "LRUCache", "Mmap", "OffsetArrays"] -git-tree-sha1 = "e8c9406f3164633756a0db93334ef23102933eef" -uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" -version = "0.4.18" - [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" @@ -399,9 +341,9 @@ version = "1.11.0" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" +git-tree-sha1 = "12184a8cf11c7cbd90a4db8b2cb2f7b6f057cc46" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.123" +version = "0.25.124" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -430,9 +372,9 @@ uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" version = "2.2.4+0" [[deps.EnumX]] -git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" -version = "1.0.5" +version = "1.0.7" [[deps.EpollShim_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -464,10 +406,16 @@ uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.5" [[deps.FFMPEG_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "01ba9d15e9eae375dc1eb9589df76b3572acd3f2" +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "66381d7059b5f3f6162f28831854008040a4e905" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "8.0.1+0" +version = "8.0.1+1" + +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] @@ -489,9 +437,9 @@ version = "1.1.0" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802" +git-tree-sha1 = "6522cfb3b8fe97bec632252263057996cbd3de20" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.17.1" +version = "1.18.0" [deps.FileIO.extensions] HTTPExt = "HTTP" @@ -532,14 +480,15 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "5bfcd42851cf2f1b303f51525a54dc5e98d408a3" +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.15.0" -weakdeps = ["PDMats", "SparseArrays", "Statistics"] +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" FillArraysStatisticsExt = "Statistics" [[deps.FixedPointNumbers]] @@ -561,9 +510,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "b2977f86ed76484de6f29d5b36f2fa686f085487" +git-tree-sha1 = "cddeab6487248a39dae1a960fff0ac17b2a28888" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.3.1" +version = "1.3.3" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -577,9 +526,9 @@ version = "4.1.1" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "2c5512e11c791d1baed2049c5652441b28fc6a31" +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.4+0" +version = "2.14.3+1" [[deps.FreeTypeAbstraction]] deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] @@ -606,15 +555,15 @@ version = "3.4.6" [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] -git-tree-sha1 = "b7bfd56fa66616138dfe5237da4dc13bbd83c67f" +git-tree-sha1 = "9e0fb9e54594c47f278d75063980e43066e26e20" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.1+0" +version = "3.4.1+1" [[deps.GLMakie]] deps = ["ColorTypes", "Colors", "FileIO", "FixedPointNumbers", "FreeTypeAbstraction", "GLFW", "GeometryBasics", "LinearAlgebra", "Makie", "Markdown", "MeshIO", "ModernGL", "Observables", "PrecompileTools", "Printf", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "56335175a66c30ca0e503ad717d366cd9e1663b1" +git-tree-sha1 = "1e0d427d2c73eb5a7564394df2c9fec8b85e7805" uuid = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a" -version = "0.13.8" +version = "0.13.9" [[deps.GeometryBasics]] deps = ["EarCut_jll", "Extents", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] @@ -642,9 +591,9 @@ version = "5.2.3+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "6b4d2dc81736fe3980ff0e8879a9fc7c33c44ddf" +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.86.2+0" +version = "2.86.3+0" [[deps.Glob]] git-tree-sha1 = "83cb0092e2792b9e3a865b6655e88f5b862607e2" @@ -670,7 +619,7 @@ version = "1.0.2" [[deps.HDF5]] deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "UUIDs"] -git-tree-sha1 = "e67afce9b96275817313e1f24d40789ee30ab6ac" +git-tree-sha1 = "b21f87845e859579fb0a036aeac9667c71d274a3" repo-rev = "master" repo-url = "https://github.com/JuliaIO/HDF5.jl.git" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" @@ -697,10 +646,10 @@ version = "0.18.0" bitshuffle_jll = "228fe19c-1b83-5282-a626-13744502a320" [[deps.HDF5_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] -git-tree-sha1 = "e94f84da9af7ce9c6be049e9067e511e17ff89ec" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "aws_c_s3_jll", "dlfcn_win32_jll", "libaec_jll", "mpif_jll"] +git-tree-sha1 = "45337643a2d97262d5fe72ce1f13e8a662d13d62" uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.14.6+0" +version = "2.1.2+0" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -710,9 +659,9 @@ version = "8.5.1+0" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] -git-tree-sha1 = "3d468106a05408f9f7b6f161d9e7715159af247b" +git-tree-sha1 = "baaaebd42ed9ee1bd9173cfd56910e55a8622ee1" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.12.2+0" +version = "2.13.0+1" [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] @@ -784,6 +733,11 @@ version = "1.4.5" ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" @@ -795,11 +749,6 @@ deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" version = "1.11.0" -[[deps.Interfaces]] -git-tree-sha1 = "331ff37738aea1a3cf841ddf085442f31b84324f" -uuid = "85a1e053-f937-4924-92a5-1367d23b7b87" -version = "0.3.2" - [[deps.Interpolations]] deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] git-tree-sha1 = "65d505fa4c0d7072990d659ef3fc086eb6da8208" @@ -812,16 +761,17 @@ weakdeps = ["ForwardDiff", "Unitful"] InterpolationsUnitfulExt = "Unitful" [[deps.IntervalArithmetic]] -deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] -git-tree-sha1 = "02b61501dbe6da3b927cc25dacd7ce32390ee970" +deps = ["CRlibm", "CoreMath", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "f1c42fcaca2d8034fe392f3e86c2e0809f75b2a1" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "1.0.2" +version = "1.0.6" [deps.IntervalArithmetic.extensions] IntervalArithmeticArblibExt = "Arblib" IntervalArithmeticDiffRulesExt = "DiffRules" IntervalArithmeticForwardDiffExt = "ForwardDiff" IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticIrrationalConstantsExt = "IrrationalConstants" IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" IntervalArithmeticRecipesBaseExt = "RecipesBase" IntervalArithmeticSparseArraysExt = "SparseArrays" @@ -831,21 +781,26 @@ version = "1.0.2" DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.IntervalSets]] -git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" +git-tree-sha1 = "79d6bd28c8d9bccc2229784f1bd637689b256377" uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.13" -weakdeps = ["Random", "RecipesBase", "Statistics"] +version = "0.7.14" [deps.IntervalSets.extensions] IntervalSetsRandomExt = "Random" IntervalSetsRecipesBaseExt = "RecipesBase" IntervalSetsStatisticsExt = "Statistics" + [deps.IntervalSets.weakdeps] + Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + [[deps.InverseFunctions]] git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" @@ -890,9 +845,9 @@ version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "b3ad4a0255688dcb895a52fafbaae3023b588a90" +git-tree-sha1 = "67c6f1f085cb2671c93fe34244c9cccde30f7a26" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.4.0" +version = "1.5.0" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] @@ -920,9 +875,9 @@ version = "0.1.6" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "b6893345fd6658c8e475d40155789f4860ac3b21" +git-tree-sha1 = "c0c9b76f3520863909825cbecdef58cd63de705a" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.4+0" +version = "3.1.5+0" [[deps.JuliaSyntaxHighlighting]] deps = ["StyledStrings"] @@ -930,10 +885,10 @@ uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" version = "1.12.0" [[deps.KernelDensity]] -deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] -git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7" +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "4260cfc991b8885bf747801fb60dd4503250e478" uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" -version = "0.6.10" +version = "0.6.11" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -943,9 +898,9 @@ version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3" +git-tree-sha1 = "17b94ecafcfa45e8360a4fc9ca6b583b049e4e37" uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "4.0.1+0" +version = "4.1.0+0" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -962,12 +917,6 @@ weakdeps = ["Serialization"] [deps.LRUCache.extensions] SerializationExt = ["Serialization"] -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.3+0" - [[deps.LaTeXStrings]] git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" @@ -1032,9 +981,9 @@ version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072" +git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.2+0" +version = "2.42.0+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] @@ -1044,9 +993,9 @@ version = "4.7.2+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2a7a12fc0a4e7fb773450d17975322aa77142106" +git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.2+0" +version = "2.42.0+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -1073,35 +1022,35 @@ version = "0.3.29" uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" version = "1.11.0" -[[deps.Lz4_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "191686b1ac1ea9c89fc52e996ad15d1d241d1e33" -uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" -version = "1.10.1+0" - [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" version = "2025.2.0+0" +[[deps.MPIABI_jll]] +deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "8d684b5918769c4f9423e0ee3bbdefdab82709e8" +uuid = "b5ada748-db0f-5fc0-8972-9331c762740c" +version = "0.1.4+0" + [[deps.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "9341048b9f723f2ae2a72a5269ac2f15f80534dc" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "07dbec8aab01696edc0151a401a6cdfe95b9b885" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.2+0" +version = "5.0.1+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] -git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" +git-tree-sha1 = "8e98d5d80b87403c311fd51e8455d4546ba7a5f8" uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.11" +version = "0.1.12" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e214f2a20bdd64c04cd3e4ff62d3c9be7e969a59" +git-tree-sha1 = "675df097f8eeb28998b2cfe3b25655af73d5f7df" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.4+0" +version = "5.5.6+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" @@ -1110,9 +1059,9 @@ version = "0.5.16" [[deps.Makie]] deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] -git-tree-sha1 = "d1b974f376c24dad02c873e951c5cd4e351cd7c2" +git-tree-sha1 = "68af66ec16af8b152309310251ecb4fbfe39869f" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.24.8" +version = "0.24.9" [deps.Makie.extensions] MakieDynamicQuantitiesExt = "DynamicQuantities" @@ -1174,24 +1123,17 @@ version = "0.3.4" uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2025.5.20" +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" + [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.1.3" -[[deps.NetCDF]] -deps = ["DiskArrays", "NetCDF_jll"] -git-tree-sha1 = "853b381b2164bbe980b94e8411324a6b3b811dd6" -uuid = "30363a11-5582-574a-97bb-aa9a979735b9" -version = "0.12.2" - -[[deps.NetCDF_jll]] -deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML", "XML2_jll", "Zlib_jll", "Zstd_jll", "libaec_jll", "libzip_jll"] -git-tree-sha1 = "d574803b6055116af212434460adf654ce98e345" -uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" -version = "401.900.300+0" - [[deps.Netpbm]] deps = ["FileIO", "ImageCore", "ImageMetadata"] git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" @@ -1224,9 +1166,9 @@ version = "1.3.6+0" [[deps.OpenBLASConsistentFPCSR_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "567515ca155d0020a45b05175449b499c63e7015" +git-tree-sha1 = "f2b3b9e52a5eb6a3434c8cca67ad2dde011194f4" uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" -version = "0.3.29+0" +version = "0.3.30+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] @@ -1241,9 +1183,9 @@ version = "0.3.3" [[deps.OpenEXR_jll]] deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "df9b7c88c2e7a2e77146223c526bf9e236d5f450" +git-tree-sha1 = "9ac7c730c53b3b5d9a73fb900ac4b4fc263774db" uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" -version = "3.4.4+0" +version = "3.4.9+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1252,9 +1194,9 @@ version = "0.8.7+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "ab6596a9d8236041dcd59b5b69316f28a8753592" +git-tree-sha1 = "6d6c0ca4824268c1a7dca1f4721c535ac63d9074" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.9+0" +version = "5.0.11+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "Libdl"] @@ -1269,9 +1211,9 @@ version = "0.5.6+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "39a11854f0cba27aa41efaedf43c77c5daa6be51" +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.6.0+0" +version = "1.6.1+0" [[deps.OrderedCollections]] git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" @@ -1313,9 +1255,9 @@ version = "0.5.12" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" +git-tree-sha1 = "58e5ed5e386e156bd93e86b305ebd21ac63d2d04" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.57.0+0" +version = "1.57.1+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -1369,15 +1311,27 @@ version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "522f093a29b31a93e34eaea17ba055d850edea28" +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.5.1" +version = "1.5.2" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "c5a07210bd060d6a8491b0ccdee2fa0235fc00bf" +git-tree-sha1 = "624de6279ab7d94fc9f672f0068107eb6619732c" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.1.2" +version = "3.3.2" + + [deps.PrettyTables.extensions] + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" [[deps.Printf]] deps = ["Unicode"] @@ -1391,9 +1345,9 @@ uuid = "92933f4c-e287-5a05-a399-4b506db050ca" version = "1.11.0" [[deps.PtrArrays]] -git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" -version = "1.3.0" +version = "1.4.0" [[deps.QOI]] deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] @@ -1403,9 +1357,9 @@ version = "1.0.2" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.11.2" +version = "2.11.3" [deps.QuadGK.extensions] QuadGKEnzymeExt = "Enzyme" @@ -1438,12 +1392,6 @@ weakdeps = ["FixedPointNumbers"] [deps.Ratios.extensions] RatiosFixedPointNumbersExt = "FixedPointNumbers" -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" @@ -1527,7 +1475,7 @@ uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[deps.ShroffCelegansModels]] -deps = ["BSplineKit", "CSV", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "DimensionalData", "FFTW", "FileIO", "FixedPointNumbers", "GeometryBasics", "HDF5", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "Missings", "NetCDF", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Sockets", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages"] +deps = ["BSplineKit", "CSV", "ColorSchemes", "Colors", "CoordinateTransformations", "DataFrames", "Dates", "FFTW", "FileIO", "FixedPointNumbers", "GeometryBasics", "HDF5", "InteractiveUtils", "Interpolations", "JSON3", "LRUCache", "LinearAlgebra", "Makie", "Missings", "Observables", "Pkg", "PrecompileTools", "Printf", "ProgressMeter", "QuadGK", "Sockets", "StaticArrays", "Statistics", "StatsBase", "ThinPlateSplines", "TiffImages"] path = ".." uuid = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" version = "1.0.0-DEV" @@ -1567,9 +1515,9 @@ version = "1.12.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547" +git-tree-sha1 = "2700b235561b0335d5bef7097a111dc513b8655e" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.6.1" +version = "2.7.2" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -1595,9 +1543,9 @@ version = "1.3.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "eee1b9ad8b29ef0d936e3ec9838c7ec089620308" +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.16" +version = "1.9.18" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -1644,15 +1592,15 @@ weakdeps = ["ChainRulesCore", "InverseFunctions"] [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "a3c1536470bf8c5e02096ad4853606d7c8f62721" +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.2" +version = "0.4.4" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" +git-tree-sha1 = "ad8002667372439f2e3611cfd14097e03fa4bccd" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.7.2" +version = "0.7.3" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1677,16 +1625,18 @@ version = "1.11.0" [[deps.StructUtils]] deps = ["Dates", "UUIDs"] -git-tree-sha1 = "9297459be9e338e546f5c4bedb59b3b5674da7f1" +git-tree-sha1 = "aab80fbf866600f3299dd7f6656d80e7be177cfe" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" -version = "2.6.2" +version = "2.7.2" [deps.StructUtils.extensions] StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] StructUtilsTablesExt = ["Tables"] [deps.StructUtils.weakdeps] Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" [[deps.StyledStrings]] @@ -1746,10 +1696,10 @@ weakdeps = ["GeometryBasics"] ThinPlateSplinesGeometryBasicsExt = "GeometryBasics" [[deps.TiffImages]] -deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] -git-tree-sha1 = "98b9352a24cb6a2066f9ababcc6802de9aed8ad8" +deps = ["CodecZstd", "ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "9ca5f1f2d42f80df4b8c9f6ab5a64f438bbd9976" uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" -version = "0.11.6" +version = "0.11.9" [[deps.TranscodingStreams]] git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" @@ -1763,9 +1713,9 @@ version = "0.1.0" [[deps.Tullio]] deps = ["DiffRules", "LinearAlgebra", "Requires"] -git-tree-sha1 = "972698b132b9df8791ae74aa547268e977b55f68" +git-tree-sha1 = "de0febfe1243e89f352abd4ca0e9de6c8e6190c5" uuid = "bc48ee85-29a4-5162-ae0b-a64e1601d4bc" -version = "0.3.8" +version = "0.3.9" [deps.Tullio.extensions] TullioCUDAExt = "CUDA" @@ -1796,9 +1746,9 @@ version = "0.4.1" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "c25751629f5baaa27fef307f96536db62e1d754e" +git-tree-sha1 = "57e1b2c9de4bd6f40ecb9de4ac1797b81970d008" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.27.0" +version = "1.28.0" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" @@ -1819,9 +1769,9 @@ version = "1.27.0" [[deps.VideoIO]] deps = ["ColorTypes", "Dates", "Downloads", "FFMPEG", "FFMPEG_jll", "FileIO", "Glob", "ImageCore", "PrecompileTools", "Scratch"] -git-tree-sha1 = "4f37de70062a474e0f4edc50d1bb6ebfacbf03c2" +git-tree-sha1 = "875ead370b78ae92b8aeee906109d8010afa6909" uuid = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" -version = "1.4.0" +version = "1.6.1" [[deps.Wayland_jll]] deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -1860,15 +1810,15 @@ version = "2.13.9+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "9cce64c0fdd1960b597ba7ecda2950b5ed957438" +git-tree-sha1 = "b29c22e245d092b8b4e8d3c09ad7baa586d9f573" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.8.2+0" +version = "5.8.3+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "b5899b25d17bf1889d25906fb9deed5da0c15b3b" +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.8.12+0" +version = "1.8.13+0" [[deps.Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1890,9 +1840,9 @@ version = "1.1.6+0" [[deps.Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "a4c0ee07ad36bf8bbce1c3bb52d21fb1e0b987fb" +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.7+0" +version = "1.3.8+0" [[deps.Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] @@ -1908,15 +1858,15 @@ version = "1.8.3+0" [[deps.Xorg_libXinerama_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] -git-tree-sha1 = "a5bc75478d323358a90dc36766f3c99ba7feb024" +git-tree-sha1 = "0ba01bc7396896a4ace8aab67db31403c71628f4" uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.6+0" +version = "1.1.7+0" [[deps.Xorg_libXrandr_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "aff463c82a773cb86061bce8d53a0d976854923e" +git-tree-sha1 = "6c174ef70c96c76f4c3f4d3cfbe09d018bcd1b53" uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.5+0" +version = "1.5.6+0" [[deps.Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] @@ -1938,9 +1888,9 @@ version = "1.17.1+0" [[deps.Xorg_libxkbfile_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "e3150c7400c41e207012b41659591f083f3ef795" +git-tree-sha1 = "ed756a03e95fff88d8f738ebc2849431bdd4fd1a" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" -version = "1.1.3+0" +version = "1.2.0+0" [[deps.Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] @@ -1971,6 +1921,66 @@ git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+1" +[[deps.aws_c_auth_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_http_jll", "aws_c_sdkutils_jll"] +git-tree-sha1 = "8cab83c96af80a1be968251ce1a0548a7545484d" +uuid = "2b3700d1-4306-52e2-a478-c162f0c514be" +version = "0.9.6+0" + +[[deps.aws_c_cal_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "22c0f42f4a1f0dc5dcfa8fd267c4ac407c455e7a" +uuid = "70f11efc-bab2-57f1-b0f3-22aad4e67c4b" +version = "0.9.13+0" + +[[deps.aws_c_common_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a759cb9bf456ad792cc7898a81ae333cce9ef02a" +uuid = "73048d1d-b8c4-5092-a58d-866c5e8d1e50" +version = "0.12.6+0" + +[[deps.aws_c_compression_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "7910c72f45f44afd297c39fe43b99c56d5ed22ec" +uuid = "73a04cd5-f3d7-5bac-9290-e8adb709f224" +version = "0.3.2+0" + +[[deps.aws_c_http_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_compression_jll", "aws_c_io_jll"] +git-tree-sha1 = "e358d5a001ef7afbd4f8c5225322512819cda2f2" +uuid = "3254fc65-9028-534d-aa9d-d76d128babc6" +version = "0.10.13+0" + +[[deps.aws_c_io_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_common_jll", "s2n_tls_jll"] +git-tree-sha1 = "7e481d474b2087ee8bbf55b81bf9119f21e396d9" +uuid = "13c41daa-f319-5298-b5eb-5754e0170d52" +version = "0.26.3+0" + +[[deps.aws_c_s3_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_auth_jll", "aws_c_common_jll", "aws_c_http_jll", "aws_checksums_jll", "s2n_tls_jll"] +git-tree-sha1 = "3e9917ab25114feba657e71be41cad068b9f6595" +uuid = "bd1f34fb-993f-5903-a121-aaf302eed6d4" +version = "0.11.5+0" + +[[deps.aws_c_sdkutils_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "c43dfba2c1ab9ea9f02f2c80e86fa16f6460244e" +uuid = "1282aa60-004d-510b-9f52-12498d409daa" +version = "0.2.4+1" + +[[deps.aws_checksums_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "2570c8e23f4771a087b12a47edcaaa670ac05a01" +uuid = "b2a88e68-78e7-5e94-8c20-c02986ec140e" +version = "0.2.10+0" + +[[deps.dlfcn_win32_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e141d67ffe550eadfb5af1bdbdaf138031e4805f" +uuid = "c4b69c83-5512-53e3-94e6-de98773c479f" +version = "1.4.2+0" + [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" @@ -1979,15 +1989,15 @@ version = "0.2.3+0" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa23f01927b2dac46db77a56b31088feee0a491" +git-tree-sha1 = "1411bc34c180946d3cef591de1384012afa6edee" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.4+0" +version = "1.1.6+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" +git-tree-sha1 = "850b06095ee71f0135d644ffd8a52850699581ed" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.13.1+0" +version = "3.13.3+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -2006,6 +2016,12 @@ git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" version = "0.2.2+0" +[[deps.libdrm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "63aac0bcb0b582e11bad965cef4a689905456c03" +uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166" +version = "2.4.125+1" + [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" @@ -2014,9 +2030,9 @@ version = "2.0.4+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "6ab498eaf50e0495f89e7a5b582816e2efb95f64" +git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.54+0" +version = "1.6.58+0" [[deps.libsixel_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] @@ -2024,6 +2040,12 @@ git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" version = "1.10.5+0" +[[deps.libva_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] +git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" +uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c" +version = "2.23.0+0" + [[deps.libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" @@ -2036,11 +2058,11 @@ git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" version = "1.6.0+0" -[[deps.libzip_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "OpenSSL_jll", "XZ_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "86addc139bca85fdf9e7741e10977c45785727b7" -uuid = "337d8026-41b4-5cde-a456-74a10e5b31d1" -version = "1.11.3+0" +[[deps.mpif_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML"] +git-tree-sha1 = "c5ce26ac1d6d17f35e965d82a4d13566330e368c" +uuid = "9aeb927a-4695-514f-a259-621a69f20ec0" +version = "0.1.6+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] @@ -2058,6 +2080,12 @@ deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.7.0+0" +[[deps.s2n_tls_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6b99e06a3863de281da6ff0e193a5b3706349054" +uuid = "cddc5d3d-934d-5d3a-9747-62fc12ea3f48" +version = "1.7.2+0" + [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index 5d68379..ff24367 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -15,7 +15,10 @@ function fix_annotation_ap_axis( dataset::ShroffCelegansModels.Datasets.NormalizedDataset; use_myuntwist::Bool = false, cache::Dict{String} = use_myuntwist ? my_annotation_position_cache : annotation_position_cache, - ip_address::Sockets.IPAddr = Sockets.getipaddr() + ip_address::Sockets.IPAddr = Sockets.getipaddr(), + initial_timepoint::Number = 0.0, + initial_annotation::Union{String, Nothing} = nothing, + annotation_timepoint_listener::Union{Function, Nothing} = nothing, ) second(x) = x[2] @@ -208,7 +211,14 @@ function fix_annotation_ap_axis( # annotation_menu = Menu(f[6, 1:2], options = twisted_annotation_text) menu_options = sort!(collect(values(dataset.cell_key.mapping))) - annotation_menu = Menu(f[6, 1:2], options = menu_options) + + # Check if initial annotation is in menu options + if !isnothing(initial_annotation) && !(initial_annotation in menu_options) + @error "Initial annotation $initial_annotation not found in menu options" + initial_annotation = first(menu_options) + end + annotation_menu = Menu(f[6, 1:2], options = menu_options, default = initial_annotation) + @info "initial annotation" initial_annotation menu_options initial_selected_idx = findfirst(==(first(menu_options)), twisted_annotation_text[]) if isnothing(initial_selected_idx) @error "Could not locate first menu option in twisted_annotation_text" first(menu_options) @@ -253,7 +263,7 @@ function fix_annotation_ap_axis( text!(ax_twisted, twisted_seam_cell_labels; text = twisted_seam_cell_text, align = (:right, :bottom)) ann_txt = text!(ax_twisted, twisted_annotation_cells; text = twisted_annotation_text, align = (:right, :bottom)) #connect!(ann_txt.visible, annotation_text_toggle.active) - annotation_text_toggle.active = false + ann_txt.visible = false on(annotation_text_toggle.active) do v ann_txt.visible = v end @@ -360,6 +370,9 @@ function fix_annotation_ap_axis( nt_obs[] = nt end selected_z_position[] = z_positions[][value-first(cell_key_range)+1] + if !isnothing(annotation_timepoint_listener) + annotation_timepoint_listener(annotation_menu.selection[],value) + end @info "Timepoint slider" value end @@ -505,6 +518,9 @@ function fix_annotation_ap_axis( catch err @error "Could not get z_positions" err end + if !isnothing(annotation_timepoint_listener) + annotation_timepoint_listener(selected, timepoint_slider.value[]) + end end end @@ -608,6 +624,11 @@ function fix_annotation_ap_axis( end notify(annotation_menu.selection) + + if !isnothing(initial_timepoint) && initial_timepoint != 0.0 + set_close_to!(timepoint_slider, initial_timepoint) + end + f end diff --git a/src/demo_averaging/get_group_annotation_positions_over_time.jl b/src/demo_averaging/get_group_annotation_positions_over_time.jl index b34be5f..bd02ecf 100644 --- a/src/demo_averaging/get_group_annotation_positions_over_time.jl +++ b/src/demo_averaging/get_group_annotation_positions_over_time.jl @@ -1,3 +1,5 @@ +using ShroffCelegansModels: CelegansModel, Datasets + include("transform_annotations.jl") function get_datasets_info(datasets) diff --git a/src/demo_averaging/loading.jl b/src/demo_averaging/loading.jl index c610330..72e1121 100644 --- a/src/demo_averaging/loading.jl +++ b/src/demo_averaging/loading.jl @@ -7,7 +7,7 @@ end const voxel_size = 0.1625 # um using LinearAlgebra -using JSON3 +using ShroffCelegansModels.JSON3 LinearAlgebra.BLAS.set_num_threads(12) @info "Reading Config JSON" diff --git a/src/save_celegans_avg_models.jl b/src/save_celegans_avg_models.jl index 16acd85..ecefe2a 100644 --- a/src/save_celegans_avg_models.jl +++ b/src/save_celegans_avg_models.jl @@ -2,6 +2,9 @@ using Dates using Printf using ShroffCelegansModels.HDF5 +# needs modelio.jl +include("demo_averaging/modelio.jl") + avg_models_filename() = "celegans_avg_models_" * Dates.format(now(), "yyyy_mm_dd") * ".h5" function save_avg_models(avg_models_filename = avg_models_filename(), avg_models = avg_models, offset = 0) @@ -28,10 +31,10 @@ end function save_measurements(avg_models_filename = avg_models_filename()) h5open(avg_models_filename) do h5f - attrs(h5f)["voxel_pitch_micrometers"] = 0.165 - h5f["measurements/volume"] = ShroffCelegansModels.volume_by_cross_section.(avg_models) .* 0.165^3 + attrs(h5f)["voxel_pitch_micrometers"] = 0.1625 + h5f["measurements/volume"] = ShroffCelegansModels.volume_by_cross_section.(avg_models) .* 0.1625^3 get_length(model) = ShroffCelegansModels.central_spline(model)(1.0)[3] - h5f["measurements/length"] = get_length.(avg_models) .* 0.165 + h5f["measurements/length"] = get_length.(avg_models) .* 0.1625 attrs(h5f["measurements/volume"])["units"] = "micrometers^3" attrs(h5f["measurements/length"])["units"] = "micrometers" end diff --git a/web/Manifest.toml b/web/Manifest.toml index 949dda8..b3e8a35 100644 --- a/web/Manifest.toml +++ b/web/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.12.1" +julia_version = "1.12.3" manifest_format = "2.0" -project_hash = "095481296a73ae4e60407eb3e5f24923c536313b" +project_hash = "b330c827cea7290014b5d1e5ca42706648a56b90" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -22,9 +22,9 @@ version = "0.4.5" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "7e35fca2bdfba44d797c53dfe63a51fabf39bfc0" +git-tree-sha1 = "0761717147821d696c9470a7a86364b2fbd22fd8" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.4.0" +version = "4.5.2" weakdeps = ["SparseArrays", "StaticArrays"] [deps.Adapt.extensions] @@ -54,9 +54,9 @@ version = "1.1.2" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] -git-tree-sha1 = "122a06c8266e00035bfa572887ab52c344526eb4" +git-tree-sha1 = "e0b47732a192dd59b9d079a06d04235e2f833963" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.12.1" +version = "1.12.2" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -86,15 +86,15 @@ version = "0.4.8" [[deps.BSplineKit]] deps = ["ArrayLayouts", "BandedMatrices", "FastGaussQuadrature", "ForwardDiff", "LinearAlgebra", "PrecompileTools", "Random", "Reexport", "SparseArrays", "Static", "StaticArrays", "StaticArraysCore", "StatsAPI"] -git-tree-sha1 = "48b9300555c54256c12a539a3025f8d2075bea6a" +git-tree-sha1 = "02d491054afeb89b7f34331701e4474eb0b904f7" uuid = "093aae92-e908-43d7-9660-e50ee39d5a0a" -version = "0.19.1" +version = "0.19.2" [[deps.BandedMatrices]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] -git-tree-sha1 = "3ecdc34639e1b8b8217820af18e5850e8e78f1a7" +git-tree-sha1 = "02fa77c70ba84361b9bc9ff28523bd9d78519265" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "1.10.2" +version = "1.11.0" [deps.BandedMatrices.extensions] BandedMatricesSparseArraysExt = "SparseArrays" @@ -119,10 +119,10 @@ uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.9" [[deps.Bonito]] -deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MbedTLS", "MsgPack", "Observables", "OrderedCollections", "Random", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] -git-tree-sha1 = "d93c02a93b1bda3fd9213935a2b9159043e0da63" +deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "JSON", "LinearAlgebra", "Markdown", "MbedTLS", "MsgPack", "Observables", "OrderedCollections", "Random", "RelocatableFolders", "SHA", "Sockets", "Tables", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] +git-tree-sha1 = "bb43f72801f703ad3c66833bd02b8f54c7328238" uuid = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" -version = "4.1.11" +version = "4.2.0" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -153,9 +153,9 @@ version = "1.0.1+0" [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] -git-tree-sha1 = "deddd8725e5e1cc49ee205a1964256043720a6c3" +git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.10.15" +version = "0.10.16" [[deps.Cairo]] deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] @@ -165,31 +165,31 @@ version = "1.1.1" [[deps.CairoMakie]] deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] -git-tree-sha1 = "1778fd03576b0b6f88d0eafe89c54a3fb8df96a3" +git-tree-sha1 = "fa072933899aae6dc61dde934febed8254e66c6a" uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -version = "0.15.7" +version = "0.15.9" [[deps.Cairo_jll]] -deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "fde3bf89aead2e723284a8ff9cdf5b551ed700e8" +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "d0efe2c6fdcdaa1c161d206aa8b933788397ec71" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.5+0" +version = "1.18.6+0" [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "e4c6a16e77171a5f5e25e9646617ab1c276c5607" +git-tree-sha1 = "12177ad6b3cad7fd50c8b3825ce24a99ad61c18f" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.26.0" +version = "1.26.1" weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] ChainRulesCoreSparseArraysExt = "SparseArrays" [[deps.CodeTracking]] -deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "9ce926a33a8608421a4d45c012884165b3fcd3ee" +deps = ["InteractiveUtils", "REPL", "UUIDs"] +git-tree-sha1 = "cfb7a2e89e245a9d5016b70323db412b3a7438d5" uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "2.0.2" +version = "3.0.2" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -197,6 +197,12 @@ git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.8" +[[deps.CodecZstd]] +deps = ["TranscodingStreams", "Zstd_jll"] +git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56" +uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2" +version = "0.8.7" + [[deps.ColorBrewer]] deps = ["Colors", "JSON"] git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" @@ -268,15 +274,15 @@ version = "1.3.0+1" [[deps.ComputePipeline]] deps = ["Observables", "Preferences"] -git-tree-sha1 = "21f3ae106d1dcc20a66e96366012f7289ebba498" +git-tree-sha1 = "3b4be73db165146d8a88e47924f464e55ab053cd" uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" -version = "0.1.5" +version = "0.1.7" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] -git-tree-sha1 = "d9d26935a0bcffc87d2613ce14c527c99fc543fd" +git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" -version = "2.5.0" +version = "2.5.1" [[deps.ConstructionBase]] git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" @@ -300,6 +306,18 @@ git-tree-sha1 = "a692f5e257d332de1e554e4566a4e5a8a72de2b2" uuid = "150eb455-5306-5404-9cee-2592286d6298" version = "0.6.4" +[[deps.CoreMath]] +deps = ["CoreMath_jll"] +git-tree-sha1 = "8c0480f92b1b1796239156a1b9b1bfb1b39499b4" +uuid = "b7a15901-be09-4a0e-87d2-2e66b0e09b5a" +version = "0.1.0" + +[[deps.CoreMath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a692a4c1dc59a4b8bc0b6403876eb3250fde2bc3" +uuid = "a38c48d9-6df1-5ac9-9223-b6ada3b5572b" +version = "0.1.0+0" + [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" @@ -312,15 +330,15 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" +git-tree-sha1 = "5fab31e2e01e70ad66e3e24c968c264d1cf166d6" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.1" +version = "1.8.2" [[deps.DataStructures]] deps = ["OrderedCollections"] -git-tree-sha1 = "e357641bb3e0638d353c4b29ea0e40ea644066a6" +git-tree-sha1 = "e86f4a2805f7f19bec5129bc9150c38208e5dc23" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.3" +version = "0.19.4" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -334,9 +352,9 @@ version = "1.11.0" [[deps.DelaunayTriangulation]] deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] -git-tree-sha1 = "783b21581a051ac91a3921ee37e26a23ed7f57a6" +git-tree-sha1 = "c55f5a9fd67bdbc8e089b5a3111fe4292986a8e8" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" -version = "1.6.5" +version = "1.6.6" [[deps.Deno_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -363,9 +381,9 @@ version = "1.11.0" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "3bc002af51045ca3b47d2e1787d6ce02e68b943a" +git-tree-sha1 = "12184a8cf11c7cbd90a4db8b2cb2f7b6f057cc46" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.122" +version = "0.25.124" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -385,7 +403,7 @@ version = "0.9.5" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" +version = "1.7.0" [[deps.EarCut_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -394,9 +412,9 @@ uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" version = "2.2.4+0" [[deps.EnumX]] -git-tree-sha1 = "bddad79635af6aec424f53ed8aad5d7555dc6f00" +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" -version = "1.0.5" +version = "1.0.7" [[deps.ExactPredicates]] deps = ["IntervalArithmetic", "Random", "StaticArrays"] @@ -428,10 +446,16 @@ uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.5" [[deps.FFMPEG_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "3a948313e7a41eb1db7a1e733e6335f17b4ab3c4" +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "66381d7059b5f3f6162f28831854008040a4e905" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "7.1.1+0" +version = "8.0.1+1" + +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] @@ -453,9 +477,9 @@ version = "1.1.0" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802" +git-tree-sha1 = "6522cfb3b8fe97bec632252263057996cbd3de20" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.17.1" +version = "1.18.0" weakdeps = ["HTTP"] [deps.FileIO.extensions] @@ -494,14 +518,15 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "5bfcd42851cf2f1b303f51525a54dc5e98d408a3" +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.15.0" -weakdeps = ["PDMats", "SparseArrays", "Statistics"] +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" FillArraysStatisticsExt = "Statistics" [[deps.FixedPointNumbers]] @@ -523,9 +548,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "cd33c7538e68650bd0ddbb3f5bd50a4a0fa95b50" +git-tree-sha1 = "cddeab6487248a39dae1a960fff0ac17b2a28888" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.3.0" +version = "1.3.3" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -539,9 +564,9 @@ version = "4.1.1" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "2c5512e11c791d1baed2049c5652441b28fc6a31" +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.4+0" +version = "2.14.3+1" [[deps.FreeTypeAbstraction]] deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] @@ -586,14 +611,14 @@ version = "5.2.3+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "50c11ffab2a3d50192a228c313f05b5b5dc5acb2" +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.86.0+0" +version = "2.86.3+0" [[deps.Glob]] -git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" +git-tree-sha1 = "83cb0092e2792b9e3a865b6655e88f5b862607e2" uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" -version = "1.3.1" +version = "1.4.0" [[deps.Graphics]] deps = ["Colors", "LinearAlgebra", "NaNMath"] @@ -620,9 +645,9 @@ version = "1.0.2" [[deps.HDF5]] deps = ["Compat", "HDF5_jll", "Libdl", "MPIPreferences", "Mmap", "Preferences", "Printf", "Random", "Requires", "UUIDs"] -git-tree-sha1 = "e856eef26cf5bf2b0f95f8f4fc37553c72c8641c" +git-tree-sha1 = "491ea627ac824619f34168e29a0427a9e00e3e40" uuid = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" -version = "0.17.2" +version = "0.17.3" [deps.HDF5.extensions] MPIExt = "MPI" @@ -631,16 +656,16 @@ version = "0.17.2" MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" [[deps.HDF5_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] -git-tree-sha1 = "e94f84da9af7ce9c6be049e9067e511e17ff89ec" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "aws_c_s3_jll", "dlfcn_win32_jll", "libaec_jll", "mpif_jll"] +git-tree-sha1 = "45337643a2d97262d5fe72ce1f13e8a662d13d62" uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.14.6+0" +version = "2.1.2+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "5e6fe50ae7f23d171f44e311c2960294aaa0beb5" +git-tree-sha1 = "51059d23c8bb67911a2e6fd5130229113735fc7e" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.19" +version = "1.11.0" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -650,9 +675,9 @@ version = "8.5.1+0" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] -git-tree-sha1 = "3d468106a05408f9f7b6f161d9e7715159af247b" +git-tree-sha1 = "baaaebd42ed9ee1bd9173cfd56910e55a8622ee1" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.12.2+0" +version = "2.13.0+1" [[deps.HypergeometricFunctions]] deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] @@ -703,9 +728,9 @@ version = "0.9.10" [[deps.Imath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" +git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65" uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" -version = "3.1.11+0" +version = "3.2.2+0" [[deps.IndirectArrays]] git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" @@ -730,6 +755,11 @@ version = "1.4.5" ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" @@ -753,16 +783,17 @@ weakdeps = ["ForwardDiff", "Unitful"] InterpolationsUnitfulExt = "Unitful" [[deps.IntervalArithmetic]] -deps = ["CRlibm", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] -git-tree-sha1 = "02b61501dbe6da3b927cc25dacd7ce32390ee970" +deps = ["CRlibm", "CoreMath", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "f1c42fcaca2d8034fe392f3e86c2e0809f75b2a1" uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "1.0.2" +version = "1.0.6" [deps.IntervalArithmetic.extensions] IntervalArithmeticArblibExt = "Arblib" IntervalArithmeticDiffRulesExt = "DiffRules" IntervalArithmeticForwardDiffExt = "ForwardDiff" IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticIrrationalConstantsExt = "IrrationalConstants" IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" IntervalArithmeticRecipesBaseExt = "RecipesBase" IntervalArithmeticSparseArraysExt = "SparseArrays" @@ -772,14 +803,15 @@ version = "1.0.2" DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.IntervalSets]] -git-tree-sha1 = "d966f85b3b7a8e49d034d27a189e9a4874b4391a" +git-tree-sha1 = "79d6bd28c8d9bccc2229784f1bd637689b256377" uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.7.13" +version = "0.7.14" weakdeps = ["Random", "RecipesBase", "Statistics"] [deps.IntervalSets.extensions] @@ -831,9 +863,9 @@ version = "1.7.1" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "5b6bb73f555bc753a6153deec3717b8904f5551c" +git-tree-sha1 = "67c6f1f085cb2671c93fe34244c9cccde30f7a26" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.3.0" +version = "1.5.0" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] @@ -861,15 +893,15 @@ version = "0.1.6" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" +git-tree-sha1 = "c0c9b76f3520863909825cbecdef58cd63de705a" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.1.3+0" +version = "3.1.5+0" [[deps.JuliaInterpreter]] deps = ["CodeTracking", "InteractiveUtils", "Random", "UUIDs"] -git-tree-sha1 = "b6c76964c65ebf8309460fb8f0f437b4a59d809b" +git-tree-sha1 = "58927c485919bf17ea308d9d82156de1adf4b006" uuid = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" -version = "0.10.7" +version = "0.10.12" [[deps.JuliaSyntaxHighlighting]] deps = ["StyledStrings"] @@ -877,10 +909,10 @@ uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" version = "1.12.0" [[deps.KernelDensity]] -deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] -git-tree-sha1 = "ba51324b894edaf1df3ab16e2cc6bc3280a2f1a7" +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "4260cfc991b8885bf747801fb60dd4503250e478" uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" -version = "0.6.10" +version = "0.6.11" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -890,9 +922,9 @@ version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "aaafe88dccbd957a8d82f7d05be9b69172e0cee3" +git-tree-sha1 = "17b94ecafcfa45e8360a4fc9ca6b583b049e4e37" uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "4.0.1+0" +version = "4.1.0+0" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -909,12 +941,6 @@ weakdeps = ["Serialization"] [deps.LRUCache.extensions] SerializationExt = ["Serialization"] -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c602b1127f4751facb671441ca72715cc95938a" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.3+0" - [[deps.LaTeXStrings]] git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" @@ -938,7 +964,7 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.11.1+1" +version = "8.15.0+0" [[deps.LibGit2]] deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] @@ -979,9 +1005,9 @@ version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3acf07f130a76f87c041cfb2ff7d7284ca67b072" +git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.41.2+0" +version = "2.42.0+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] @@ -991,9 +1017,9 @@ version = "4.7.2+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2a7a12fc0a4e7fb773450d17975322aa77142106" +git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.41.2+0" +version = "2.42.0+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] @@ -1028,9 +1054,9 @@ version = "1.2.0" [[deps.LoweredCodeUtils]] deps = ["CodeTracking", "Compiler", "JuliaInterpreter"] -git-tree-sha1 = "e24491cb83551e44a69b9106c50666dea9d953ab" +git-tree-sha1 = "5d4278f755440f70648d80cc6225f51e78e94094" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "3.4.4" +version = "3.5.1" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] @@ -1038,23 +1064,29 @@ git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" version = "2025.2.0+0" +[[deps.MPIABI_jll]] +deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "8d684b5918769c4f9423e0ee3bbdefdab82709e8" +uuid = "b5ada748-db0f-5fc0-8972-9331c762740c" +version = "0.1.4+0" + [[deps.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "9341048b9f723f2ae2a72a5269ac2f15f80534dc" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "07dbec8aab01696edc0151a401a6cdfe95b9b885" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.3.2+0" +version = "5.0.1+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] -git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" +git-tree-sha1 = "8e98d5d80b87403c311fd51e8455d4546ba7a5f8" uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.11" +version = "0.1.12" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e214f2a20bdd64c04cd3e4ff62d3c9be7e969a59" +git-tree-sha1 = "675df097f8eeb28998b2cfe3b25655af73d5f7df" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.4+0" +version = "5.5.6+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" @@ -1063,9 +1095,9 @@ version = "0.5.16" [[deps.Makie]] deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] -git-tree-sha1 = "7e6151c8432b91e76d9f9bc3adc6bbaecd00ec0a" +git-tree-sha1 = "68af66ec16af8b152309310251ecb4fbfe39869f" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.24.7" +version = "0.24.9" [deps.Makie.extensions] MakieDynamicQuantitiesExt = "DynamicQuantities" @@ -1074,9 +1106,9 @@ version = "0.24.7" DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" [[deps.MappedArrays]] -git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" -version = "0.4.2" +version = "0.4.3" [[deps.Markdown]] deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] @@ -1091,9 +1123,9 @@ version = "0.6.7" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] -git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +git-tree-sha1 = "8785729fa736197687541f7053f6d8ab7fc44f92" uuid = "739be429-bea8-5141-9913-cc70e7f3736d" -version = "1.1.9" +version = "1.1.10" [[deps.MbedTLS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1133,6 +1165,11 @@ git-tree-sha1 = "f5db02ae992c260e4826fe78c942954b48e1d9c2" uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" version = "1.2.1" +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" + [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" @@ -1171,9 +1208,9 @@ version = "1.3.6+0" [[deps.OpenBLASConsistentFPCSR_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "567515ca155d0020a45b05175449b499c63e7015" +git-tree-sha1 = "f2b3b9e52a5eb6a3434c8cca67ad2dde011194f4" uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" -version = "0.3.29+0" +version = "0.3.30+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] @@ -1188,9 +1225,9 @@ version = "0.3.3" [[deps.OpenEXR_jll]] deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e" +git-tree-sha1 = "9ac7c730c53b3b5d9a73fb900ac4b4fc263774db" uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" -version = "3.2.4+0" +version = "3.4.9+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1199,20 +1236,20 @@ version = "0.8.7+0" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "ab6596a9d8236041dcd59b5b69316f28a8753592" +git-tree-sha1 = "6d6c0ca4824268c1a7dca1f4721c535ac63d9074" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.9+0" +version = "5.0.11+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "386b47442468acfb1add94bf2d85365dea10cbab" +git-tree-sha1 = "1d1aaa7d449b58415f97d2839c318b70ffb525a0" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.6.0" +version = "1.6.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.1+0" +version = "3.5.4+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1222,9 +1259,9 @@ version = "0.5.6+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c392fc5dd032381919e3b22dd32d6443760ce7ea" +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.5.2+0" +version = "1.6.1+0" [[deps.OrderedCollections]] git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" @@ -1238,9 +1275,9 @@ version = "10.44.0+1" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "d922b4d80d1e12c658da7785e754f4796cc1d60d" +git-tree-sha1 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.36" +version = "0.11.37" weakdeps = ["StatsBase"] [deps.PDMats.extensions] @@ -1266,9 +1303,9 @@ version = "0.5.12" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" +git-tree-sha1 = "58e5ed5e386e156bd93e86b305ebd21ac63d2d04" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" -version = "1.57.0+0" +version = "1.57.1+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -1285,7 +1322,7 @@ version = "0.44.2+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.12.0" +version = "1.12.1" weakdeps = ["REPL"] [deps.Pkg.extensions] @@ -1322,15 +1359,27 @@ version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "0f27480397253da18fe2c12a4ba4eb9eb208bf3d" +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.5.0" +version = "1.5.2" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "c5a07210bd060d6a8491b0ccdee2fa0235fc00bf" +git-tree-sha1 = "624de6279ab7d94fc9f672f0068107eb6619732c" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "3.1.2" +version = "3.3.2" + + [deps.PrettyTables.extensions] + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" [[deps.Printf]] deps = ["Unicode"] @@ -1344,21 +1393,21 @@ uuid = "92933f4c-e287-5a05-a399-4b506db050ca" version = "1.11.0" [[deps.PtrArrays]] -git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" -version = "1.3.0" +version = "1.4.0" [[deps.QOI]] deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] -git-tree-sha1 = "8b3fc30bc0390abdce15f8822c889f669baed73d" +git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106" uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" -version = "1.0.1" +version = "1.0.2" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "9da16da70037ba9d701192e27befedefb91ec284" +git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.11.2" +version = "2.11.3" [deps.QuadGK.extensions] QuadGKEnzymeExt = "Enzyme" @@ -1415,10 +1464,10 @@ uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" [[deps.Revise]] -deps = ["CodeTracking", "FileWatching", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "REPL", "Requires", "UUIDs", "Unicode"] -git-tree-sha1 = "85d94c2be31f58728cd69d13f2e0bdd7ecf6dfe9" +deps = ["CodeTracking", "FileWatching", "InteractiveUtils", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Preferences", "REPL", "UUIDs"] +git-tree-sha1 = "5f4f629c085b87e71125eec6773f5f872c74a47a" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.12.1" +version = "3.14.2" weakdeps = ["Distributed"] [deps.Revise.extensions] @@ -1452,9 +1501,9 @@ uuid = "fdea26ae-647d-5447-a871-4b548cad5224" version = "3.7.2" [[deps.SciMLPublic]] -git-tree-sha1 = "ed647f161e8b3f2973f24979ec074e8d084f1bee" +git-tree-sha1 = "0ba076dbdce87ba230fff48ca9bca62e1f345c9b" uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" -version = "1.0.0" +version = "1.0.1" [[deps.Scratch]] deps = ["Dates"] @@ -1464,9 +1513,9 @@ version = "1.3.0" [[deps.SentinelArrays]] deps = ["Dates", "Random"] -git-tree-sha1 = "712fb0231ee6f9120e005ccd56297abbc053e7e0" +git-tree-sha1 = "ebe7e59b37c400f694f52b58c93d26201387da70" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.8" +version = "1.4.9" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" @@ -1496,10 +1545,10 @@ uuid = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" version = "1.0.0-DEV" [[deps.SignedDistanceFields]] -deps = ["Random", "Statistics", "Test"] -git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +deps = ["Statistics"] +git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92" uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" -version = "0.4.0" +version = "0.4.1" [[deps.SimpleBufferStream]] git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" @@ -1535,9 +1584,9 @@ version = "1.12.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547" +git-tree-sha1 = "2700b235561b0335d5bef7097a111dc513b8655e" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.6.1" +version = "2.7.2" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -1563,9 +1612,9 @@ version = "1.3.1" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "b8693004b385c842357406e3af647701fe783f98" +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.15" +version = "1.9.18" weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] @@ -1589,15 +1638,15 @@ weakdeps = ["SparseArrays"] [[deps.StatsAPI]] deps = ["LinearAlgebra"] -git-tree-sha1 = "9d72a13a3f4dd3795a195ac5a44d7d6ff5f552ff" +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.7.1" +version = "1.8.0" [[deps.StatsBase]] -deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "064b532283c97daae49e544bb9cb413c26511f8c" +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.8" +version = "0.34.10" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] @@ -1612,15 +1661,15 @@ weakdeps = ["ChainRulesCore", "InverseFunctions"] [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "725421ae8e530ec29bcbdddbe91ff8053421d023" +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.1" +version = "0.4.4" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "a2c37d815bf00575332b7bd0389f771cb7987214" +git-tree-sha1 = "ad8002667372439f2e3611cfd14097e03fa4bccd" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.7.2" +version = "0.7.3" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1645,16 +1694,18 @@ version = "1.11.0" [[deps.StructUtils]] deps = ["Dates", "UUIDs"] -git-tree-sha1 = "79529b493a44927dd5b13dde1c7ce957c2d049e4" +git-tree-sha1 = "aab80fbf866600f3299dd7f6656d80e7be177cfe" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" -version = "2.6.0" +version = "2.7.2" [deps.StructUtils.extensions] StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] StructUtilsTablesExt = ["Tables"] [deps.StructUtils.weakdeps] Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" [[deps.StyledStrings]] @@ -1722,10 +1773,10 @@ uuid = "b189fb0b-2eb5-4ed4-bc0c-d34c51242431" version = "2.1.1" [[deps.TiffImages]] -deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] -git-tree-sha1 = "98b9352a24cb6a2066f9ababcc6802de9aed8ad8" +deps = ["CodecZstd", "ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "9ca5f1f2d42f80df4b8c9f6ab5a64f438bbd9976" uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" -version = "0.11.6" +version = "0.11.9" [[deps.TranscodingStreams]] git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" @@ -1739,9 +1790,9 @@ version = "0.1.0" [[deps.Tullio]] deps = ["DiffRules", "LinearAlgebra", "Requires"] -git-tree-sha1 = "972698b132b9df8791ae74aa547268e977b55f68" +git-tree-sha1 = "de0febfe1243e89f352abd4ca0e9de6c8e6190c5" uuid = "bc48ee85-29a4-5162-ae0b-a64e1601d4bc" -version = "0.3.8" +version = "0.3.9" [deps.Tullio.extensions] TullioCUDAExt = "CUDA" @@ -1777,15 +1828,16 @@ version = "0.4.1" [[deps.Unitful]] deps = ["Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "83360bda12f61c250835830cc40b64f487cc2230" +git-tree-sha1 = "57e1b2c9de4bd6f40ecb9de4ac1797b81970d008" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.25.1" +version = "1.28.0" [deps.Unitful.extensions] ConstructionBaseUnitfulExt = "ConstructionBase" ForwardDiffExt = "ForwardDiff" InverseFunctionsUnitfulExt = "InverseFunctions" LatexifyExt = ["Latexify", "LaTeXStrings"] + NaNMathExt = "NaNMath" PrintfExt = "Printf" [deps.Unitful.weakdeps] @@ -1794,19 +1846,20 @@ version = "1.25.1" InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[deps.VideoIO]] deps = ["ColorTypes", "Dates", "Downloads", "FFMPEG", "FFMPEG_jll", "FileIO", "Glob", "ImageCore", "PrecompileTools", "Scratch"] -git-tree-sha1 = "7a941aab811996a0d84709a2cb1ad785f8e476d9" +git-tree-sha1 = "875ead370b78ae92b8aeee906109d8010afa6909" uuid = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" -version = "1.3.2" +version = "1.6.1" [[deps.WGLMakie]] deps = ["Bonito", "Colors", "FileIO", "FreeTypeAbstraction", "GeometryBasics", "Hyperscript", "LinearAlgebra", "Makie", "Observables", "PNGFiles", "PrecompileTools", "RelocatableFolders", "ShaderAbstractions", "StaticArrays"] -git-tree-sha1 = "0e67154430594be1357143f694e28a429abf0c77" +git-tree-sha1 = "dcf36e49ebbfe068cec38d413eca7c4839a1918f" uuid = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" -version = "0.13.7" +version = "0.13.9" [[deps.WeakRefStrings]] deps = ["DataAPI", "InlineStrings", "Parsers"] @@ -1828,9 +1881,9 @@ version = "0.1.4" [[deps.WoodburyMatrices]] deps = ["LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" -version = "1.0.0" +version = "1.1.0" [[deps.WorkerUtilities]] git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" @@ -1845,15 +1898,15 @@ version = "2.13.9+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "fee71455b0aaa3440dfdd54a9a36ccef829be7d4" +git-tree-sha1 = "b29c22e245d092b8b4e8d3c09ad7baa586d9f573" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.8.1+0" +version = "5.8.3+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "b5899b25d17bf1889d25906fb9deed5da0c15b3b" +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.8.12+0" +version = "1.8.13+0" [[deps.Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1869,9 +1922,15 @@ version = "1.1.6+0" [[deps.Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "a4c0ee07ad36bf8bbce1c3bb52d21fb1e0b987fb" +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.7+0" +version = "1.3.8+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "6.0.2+0" [[deps.Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] @@ -1908,6 +1967,66 @@ git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+1" +[[deps.aws_c_auth_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_http_jll", "aws_c_sdkutils_jll"] +git-tree-sha1 = "8cab83c96af80a1be968251ce1a0548a7545484d" +uuid = "2b3700d1-4306-52e2-a478-c162f0c514be" +version = "0.9.6+0" + +[[deps.aws_c_cal_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "22c0f42f4a1f0dc5dcfa8fd267c4ac407c455e7a" +uuid = "70f11efc-bab2-57f1-b0f3-22aad4e67c4b" +version = "0.9.13+0" + +[[deps.aws_c_common_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a759cb9bf456ad792cc7898a81ae333cce9ef02a" +uuid = "73048d1d-b8c4-5092-a58d-866c5e8d1e50" +version = "0.12.6+0" + +[[deps.aws_c_compression_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "7910c72f45f44afd297c39fe43b99c56d5ed22ec" +uuid = "73a04cd5-f3d7-5bac-9290-e8adb709f224" +version = "0.3.2+0" + +[[deps.aws_c_http_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_compression_jll", "aws_c_io_jll"] +git-tree-sha1 = "e358d5a001ef7afbd4f8c5225322512819cda2f2" +uuid = "3254fc65-9028-534d-aa9d-d76d128babc6" +version = "0.10.13+0" + +[[deps.aws_c_io_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_common_jll", "s2n_tls_jll"] +git-tree-sha1 = "7e481d474b2087ee8bbf55b81bf9119f21e396d9" +uuid = "13c41daa-f319-5298-b5eb-5754e0170d52" +version = "0.26.3+0" + +[[deps.aws_c_s3_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_auth_jll", "aws_c_common_jll", "aws_c_http_jll", "aws_checksums_jll", "s2n_tls_jll"] +git-tree-sha1 = "3e9917ab25114feba657e71be41cad068b9f6595" +uuid = "bd1f34fb-993f-5903-a121-aaf302eed6d4" +version = "0.11.5+0" + +[[deps.aws_c_sdkutils_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "c43dfba2c1ab9ea9f02f2c80e86fa16f6460244e" +uuid = "1282aa60-004d-510b-9f52-12498d409daa" +version = "0.2.4+1" + +[[deps.aws_checksums_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "2570c8e23f4771a087b12a47edcaaa670ac05a01" +uuid = "b2a88e68-78e7-5e94-8c20-c02986ec140e" +version = "0.2.10+0" + +[[deps.dlfcn_win32_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e141d67ffe550eadfb5af1bdbdaf138031e4805f" +uuid = "c4b69c83-5512-53e3-94e6-de98773c479f" +version = "1.4.2+0" + [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" @@ -1916,15 +2035,15 @@ version = "0.2.3+0" [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa23f01927b2dac46db77a56b31088feee0a491" +git-tree-sha1 = "1411bc34c180946d3cef591de1384012afa6edee" uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.4+0" +version = "1.1.6+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" +git-tree-sha1 = "850b06095ee71f0135d644ffd8a52850699581ed" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.13.1+0" +version = "3.13.3+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -1937,6 +2056,12 @@ deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.15.0+0" +[[deps.libdrm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "63aac0bcb0b582e11bad965cef4a689905456c03" +uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166" +version = "2.4.125+1" + [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" @@ -1945,9 +2070,9 @@ version = "2.0.4+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "07b6a107d926093898e82b3b1db657ebe33134ec" +git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.50+0" +version = "1.6.58+0" [[deps.libsixel_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] @@ -1955,6 +2080,12 @@ git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" version = "1.10.5+0" +[[deps.libva_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] +git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" +uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c" +version = "2.23.0+0" + [[deps.libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" @@ -1967,6 +2098,12 @@ git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" version = "1.6.0+0" +[[deps.mpif_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML"] +git-tree-sha1 = "a8083ee0737c243c8f40a4ba86a0956997facb73" +uuid = "9aeb927a-4695-514f-a259-621a69f20ec0" +version = "0.1.7+0" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" @@ -1979,9 +2116,15 @@ uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" version = "2022.0.0+1" [[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.5.0+2" +version = "17.7.0+0" + +[[deps.s2n_tls_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6b99e06a3863de281da6ff0e193a5b3706349054" +uuid = "cddc5d3d-934d-5d3a-9747-62fc12ea3f48" +version = "1.7.2+0" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] diff --git a/web/Project.toml b/web/Project.toml index 16faeff..6a97df1 100644 --- a/web/Project.toml +++ b/web/Project.toml @@ -5,10 +5,12 @@ CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" +HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" MbedTLS = "739be429-bea8-5141-9913-cc70e7f3736d" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" ShroffCelegansModels = "28a312d2-d9d3-46a7-98c1-9c09f12e8c99" ThinPlateSplines = "1d861738-f48e-4029-b1d3-81ce6bc7f5ab" +URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" VideoIO = "d6d074c3-1acf-5d4c-9a43-ef38773959a2" WGLMakie = "276b4fcb-3e11-5398-bf8b-a0c2d153d008" diff --git a/web/scripts/web_fix_annotation_ap_axis.jl b/web/scripts/web_fix_annotation_ap_axis.jl index a623358..9a4b944 100644 --- a/web/scripts/web_fix_annotation_ap_axis.jl +++ b/web/scripts/web_fix_annotation_ap_axis.jl @@ -1,7 +1,8 @@ using WGLMakie using Bonito using Revise - +using HTTP +using URIs if abspath(PROGRAM_FILE) == @__FILE__ global run_web_main::Bool = true @@ -29,9 +30,19 @@ function web_debug_annotation_ap_axis(datasets = datasets) route!(server, "/" => App(menu)) for k in keys(datasets) for i in keys(datasets[k]) - route!(server, "/$k/$i" => App(; title="$k[$i]: Shroff C. elegans fix annotation AP axis") do + @info "Creating routing /$k/$i for dataset $(datasets[k][i].path)" + route!(server, "/$k/$i" => App(; title="$k[$i]: Shroff C. elegans fix annotation AP axis") do session::Bonito.Session, request::HTTP.Request empty!(annotations_cache) - return fix_annotation_ap_axis(avg_models, datasets[k][i]; use_myuntwist=true); + params = HTTP.URIs.queryparams(URI(request.target).query) + listener = (a,v) -> evaljs(session, js"history.replaceState(null, \"\", \"?annotation=\" + $a + \"&timepoint=$v\");") + return fix_annotation_ap_axis( + avg_models, + datasets[k][i]; + use_myuntwist=true, + initial_timepoint=parse(Int64, get(params, "initial_timepoint", "0")), + initial_annotation=get(params, "initial_annotation", nothing), + annotation_timepoint_listener=listener + ); end) end end From e5f8fff3a9b5b1c12fd92c1050ee7edcb91261ae Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 17:39:37 -0400 Subject: [PATCH 17/39] Add linux config v2, conversion script, and update config path - Add config/linux/config_2026_03_19_v2.json (converted from Windows paths) - Add config/convert_windows_paths.jl to translate Windows configs to Linux - Add config/CHANGES.md summarizing differences from 2024-09-05 v1 - Update loading.jl to use the new linux config on non-Windows hosts Co-Authored-By: Claude Sonnet 4.6 --- config/CHANGES.md | 43 ++++++++++++++++++ config/convert_windows_paths.jl | 60 ++++++++++++++++++++++++++ config/linux/config_2026_03_19_v2.json | 1 + src/demo_averaging/loading.jl | 2 +- 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 config/CHANGES.md create mode 100644 config/convert_windows_paths.jl create mode 100644 config/linux/config_2026_03_19_v2.json diff --git a/config/CHANGES.md b/config/CHANGES.md new file mode 100644 index 0000000..8ec178f --- /dev/null +++ b/config/CHANGES.md @@ -0,0 +1,43 @@ +# Config Change Summary + +## 2024-09-05 v1 → 2026-03-19 v2 + +Settings (folderpaths, voxel scale, outlier removal, interpolation, warping, smoothing, mipav_output) are unchanged. + +### Removed paths (5) + +**JCC596_NU** — 3 old paths replaced by re-processed `Untwisting_Redo` equivalents: +- `JCC596_NU/Untwisting/082619_JCC596_NU/JCC596_NU/Pos3/SPIMB_result/Reg_Sample/Decon_registered` +- `JCC596_NU/Untwisting/091119_JCC596_NU/JCC596_NU/JCC596_NU/JCC596_NU/Pos2/SPIMB_result/Reg_Sample/Decon_registered` +- `JCC596_NU/Untwisting/091119_JCC596_NU/JCC596_NU/JCC596_NU/JCC596_NU/Pos3/SPIMB_result/Reg_Sample/Decon_registered` + +**DCR4221** — UTP 1 dataset dropped; strain now has 4 datasets (UTP 2–5): +- `Non-model C elegans folders/Untwisting_Paper/DCR4221/063014_lattices_Javier - UTP 1/Decon_reg` + +**RW10752_NU Pos2** — old path replaced: +- `RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos2/Old/Decon_registered` + +### Added paths (13) + +**JCC596_NU** — 3 replacement paths under `Untwisting_Redo`: +- `JCC596_NU/Untwisting_Redo/082619_Pos3` +- `JCC596_NU/Untwisting_Redo/091119_Pos2` +- `JCC596_NU/Untwisting_Redo/091119_Pos3` + +**RW10752_NU Pos2** — replacement path: +- `RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos2/SPIMB/For_Tracking/For_Tracking` + +**RW10131_retracked** — new strain, 3 positions (2024 SLS268 imaging): +- `RW10131/Data/2024_SLS268/20240401/RW10131_SLS6_New/Pos4/SPIMB/Reg_Sample/For_Tracking` +- `RW10131/Data/2024_SLS268/20240429/SLS268_RW10131_SLS6/Pos1/SPIMB/Reg_Sample/For_Tracking` +- `RW10131/Data/2024_SLS268/20240507/Pos1/SPIMA/Reg_Sample/For_Tracking` + +**RW10598_retracked** — new strain, 3 positions (2023 re-tracking): +- `RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos1/SPIMB/Reg_Sample/For_Tracking` +- `RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos2/SPIMB/Reg_Sample/For_Tracking` +- `RW10598/2023_Data/Tracking/20230719/RW10598_NU/Pos4/SPIMB/Reg_Sample/For_Tracking` + +**RW10896_retracked** — new strain, 3 positions (2023 imaging): +- `RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos1/SPIMB/Registered_Volumes/For_Tracking` +- `RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos2/SPIMB/Registered_Volumes/For_Tracking` +- `RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos3/SPIMB/Registered_Volumes/For_Tracking` diff --git a/config/convert_windows_paths.jl b/config/convert_windows_paths.jl new file mode 100644 index 0000000..1fa5b94 --- /dev/null +++ b/config/convert_windows_paths.jl @@ -0,0 +1,60 @@ +#!/usr/bin/env julia +# Converts Windows-style paths in a config JSON to Unix-style paths. +# Usage: julia convert_windows_paths.jl [input.json [output.json]] +# +# Default input: config/windows/config_2026_03_19_v2.json +# Default output: config/linux/config_2026_03_19_v2.json +# +# Path mapping applied: +# X:\shrofflab\ → /nearline/shroff/shrofflab/ +# remaining backslashes → forward slashes + +using JSON3 + +const WINDOWS_PREFIX = Regex("^[A-Za-z]:\\\\shrofflab\\\\", "i") +const UNIX_PREFIX = "/nearline/shroff/shrofflab/" + +function convert_path(s::AbstractString) + s = replace(s, WINDOWS_PREFIX => UNIX_PREFIX) + replace(s, '\\' => '/') +end + +function convert_value(v) + if v isa AbstractString + return convert_path(v) + elseif v isa AbstractDict + return Dict(k => convert_value(val) for (k, val) in v) + elseif v isa AbstractArray + return [convert_value(el) for el in v] + else + return v + end +end + +function main() + script_dir = dirname(abspath(@__FILE__)) + + input_path = length(ARGS) >= 1 ? ARGS[1] : + joinpath(script_dir, "windows", "config_2026_03_19_v2.json") + + default_output_dir = joinpath(script_dir, "linux") + output_path = length(ARGS) >= 2 ? ARGS[2] : + joinpath(default_output_dir, basename(input_path)) + + isfile(input_path) || error("Input file not found: $input_path") + + config = open(input_path) do io + JSON3.read(io, Dict{String,Any}) + end + converted = convert_value(config) + + mkpath(dirname(output_path)) + open(output_path, "w") do io + JSON3.write(io, converted) + println(io) # trailing newline + end + + println("Wrote converted config to: $output_path") +end + +main() diff --git a/config/linux/config_2026_03_19_v2.json b/config/linux/config_2026_03_19_v2.json new file mode 100644 index 0000000..d5ec18e --- /dev/null +++ b/config/linux/config_2026_03_19_v2.json @@ -0,0 +1 @@ +{"settings":{"mipav_output":{"cell_info":"cell_info.json","labels_on":false},"outlier_removal":{"remove_outliers":true,"n_stdev":2,"early_window_size":10,"window_size":10},"interpolation":{"min_timepoints_required":2,"method":"linear","seam_cells_on":{"V5L":0,"V1L":0,"V2L":0,"QR":0.667,"V2R":0,"H2L":0,"V4L":0,"V3R":0,"QL":0.667,"V1R":0,"H1R":0,"V5R":0,"V6L":0,"TR":0,"H1L":0,"H2R":0,"V3L":0,"TL":0,"V6R":0,"H0R":0,"V4R":0,"H0L":0},"total_min":420},"voxel_to_micron_scale":[0.1625,0.1625,0.1625],"smoothing":{"method":"sgolay","window_size":90},"folderpaths":{"twisted_annotations":"integrated_annotation/annotations.csv","twisted_lattice":"lattice_final/lattice.csv","straightened_lattice":"straightened_lattice/straightened_lattice.csv","side":"RegB","straightened_annotations":"straightened_annotations/straightened_annotations.csv","data_folderpath":"Decon_reg_#/Decon_reg_#_results","straightened_seam_cells":"straightened_seamcells/straightened_seamcells.csv","twisted_seam_cells":"seam_cell_final/seam_cells.csv"},"warping":{"seam_cells":["H0L","H0R","H1L","H1R","H2L","H2R","V1R","V1L","V2R","V2L","V3R","V3L","V4L","V4R","V5L","V5R","V6L","V6R","TL","TR"],"radial_correction":1,"z_padding":100}},"data":{"strains":[{"name":"OD1599_NU","folderpaths":["/nearline/shroff/shrofflab/OD1599_NU/120619_Pos2/Decon_reg","/nearline/shroff/shrofflab/OD1599_NU/112719_Pos3/Decon_Reg","/nearline/shroff/shrofflab/OD1599_NU/112619_Pos0/Decon_reg"],"include":true},{"name":"DCR6485_RPM1_NU","folderpaths":["/nearline/shroff/shrofflab/DCR6485_RPM1_NU/011419_RC/DCR6485_NU/DCR6485_NU/DCR6485_NU/Pos0/SPIMB/Decon","/nearline/shroff/shrofflab/DCR6485_RPM1_NU/011419_RC/DCR6485_NU/DCR6485_NU/DCR6485_NU/Pos4/SPIMB/Decon_Reg","/nearline/shroff/shrofflab/DCR6485_RPM1_NU/021020_RC/DCR6485_NU_1/DCR6485_NU_1/Pos2/SPIMB/Decon"],"include":true},{"name":"JCC596_NU","folderpaths":["/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/091119_Pos3","/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/091119_Pos2","/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/082619_Pos3"],"include":true},{"name":"KP9305_NU","folderpaths":["/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos0","/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos4","/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos2"],"include":true},{"name":"RW10131","folderpaths":["/nearline/shroff/shrofflab/RW10131/Data/052918_Pos0/Decon_registered","/nearline/shroff/shrofflab/RW10131/Data/052918_Pos1/Decon_registered"],"include":true},{"name":"RW10896","folderpaths":["/nearline/shroff/shrofflab/RW10896/Postwitching/Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10896/Postwitching/Pos4/Decon_registered","/nearline/shroff/shrofflab/RW10896/Postwitching/Pos6/Decon_registered"],"include":true},{"name":"RW10752_NU","folderpaths":["/nearline/shroff/shrofflab/RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos2/SPIMB/For_Tracking/For_Tracking","/nearline/shroff/shrofflab/RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10752_NU/Untwisting/022519_RW10752_NU/RW10752_NU/RW10752_NU/Pos0/Decon_registered"],"include":true},{"name":"RW10584","folderpaths":["/nearline/shroff/shrofflab/RW10584/051817/Decon_reg","/nearline/shroff/shrofflab/RW10584/052517/Decon_reg","/nearline/shroff/shrofflab/RW10584/101017/Decon_reg"],"include":true},{"name":"RW10598","folderpaths":["/nearline/shroff/shrofflab/RW10598/Data/Pos4-bgsub_95_iteration_5/Decon_registered","/nearline/shroff/shrofflab/RW10598/Data/598_Slitscan_6um_5min_Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10598/Data/Pos0/Decon_registered"],"include":true},{"name":"DCR4221","folderpaths":["/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_2 - UTP 3/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311-US_5min_3 - UTP 2/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_4 - UTP 4/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_1 - UTP 5/Decon_reg"],"include":true},{"name":"RW10375","folderpaths":["/nearline/shroff/shrofflab/RW10375/Pos0/SPIMB/Reg_Sample/ForTracking","/nearline/shroff/shrofflab/RW10375/Pos1/SPIMB/Reg_Sample/ForTracking","/nearline/shroff/shrofflab/RW10375/Pos2/SPIMB/Reg_Sample/ForTracking"],"include":true},{"name":"RW10557","folderpaths":["/nearline/shroff/shrofflab/RW10557/031021/Pos0/segmentation","/nearline/shroff/shrofflab/RW10557/031021/Pos1/Segmentation","/nearline/shroff/shrofflab/RW10557/031021/Pos2/segmentation"],"include":true},{"name":"RW10753","folderpaths":["/nearline/shroff/shrofflab/RW10753/Tracking/Pos6","/nearline/shroff/shrofflab/RW10753/Tracking/Pos2","/nearline/shroff/shrofflab/RW10753/Tracking/Pos1"],"include":true},{"name":"RW10742","folderpaths":["/nearline/shroff/shrofflab/RW10742/Tracking/Pos1/Segmentation","/nearline/shroff/shrofflab/RW10742/Tracking/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10742/Tracking/Pos5/For_Tracking"],"include":true},{"name":"RW10711","folderpaths":["/nearline/shroff/shrofflab/RW10711/Tracking/Pos0/For_Tracking","/nearline/shroff/shrofflab/RW10711/Tracking/Pos1/For_Tracking","/nearline/shroff/shrofflab/RW10711/Tracking/Pos3"],"include":true},{"name":"Vab-1","folderpaths":["/nearline/shroff/shrofflab/Vab-1/Tracking/Pos0/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Vab-1/Tracking/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Vab-1/Tracking/Pos3/SPIMB/Reg_Sample/For_Tracking"],"include":true},{"name":"efn-1","folderpaths":["/nearline/shroff/shrofflab/efn-1/Tracking/Pos0/For_Tracking","/nearline/shroff/shrofflab/efn-1/Tracking/Pos3/For_Tracking","/nearline/shroff/shrofflab/efn-1/Tracking/Pos4/For_Tracking"],"include":true},{"name":"efn-2","folderpaths":["/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos6/SPIMB/Reg_Sample/For_Tracking"],"include":true},{"name":"lin-26","folderpaths":["/nearline/shroff/shrofflab/lin-26_mSC/Tracking/0208/SLS148_Untwisting/Pos4/SPIMA/Reg_Sample/Flipped_FT","/nearline/shroff/shrofflab/lin-26_mSC/Tracking/021323/SLS148_SLS6/Pos3/SPIMB/Reg_Sample/Flipped_FT","/nearline/shroff/shrofflab/lin-26_mSC/Tracking/031523/Pos4/SPIMA/Reg_Sample/Flipped_FT"],"include":true},{"name":"CND-1","folderpaths":["/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/033023/RedUT_A_cnd-1/Pos3/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/033023/RedUT_A_cnd-1/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/032423/CND-1_RedUT/Pos2/SPIMA/Reg_Sample/For_Tracking"],"include":true},{"name":"Efn-4","folderpaths":["/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos3/SPIMB/Reg_Sample/For_Tracking"],"include":true},{"name":"RW10896_retracked","folderpaths":["/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos1/SPIMB/Registered_Volumes/For_Tracking","/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos2/SPIMB/Registered_Volumes/For_Tracking","/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos3/SPIMB/Registered_Volumes/For_Tracking"],"include":true},{"name":"RW10131_retracked","folderpaths":["/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240401/RW10131_SLS6_New/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240429/SLS268_RW10131_SLS6/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240507/Pos1/SPIMA/Reg_Sample/For_Tracking"],"include":true},{"name":"RW10598_retracked","folderpaths":["/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230719/RW10598_NU/Pos4/SPIMB/Reg_Sample/For_Tracking"],"include":true}],"seam_cells":["/nearline/shroff/shrofflab/OD1599_NU/120619_Pos2/Decon_reg","/nearline/shroff/shrofflab/OD1599_NU/112719_Pos3/Decon_Reg","/nearline/shroff/shrofflab/OD1599_NU/112619_Pos0/Decon_reg","/nearline/shroff/shrofflab/DCR6485_RPM1_NU/011419_RC/DCR6485_NU/DCR6485_NU/DCR6485_NU/Pos0/SPIMB/Decon","/nearline/shroff/shrofflab/DCR6485_RPM1_NU/011419_RC/DCR6485_NU/DCR6485_NU/DCR6485_NU/Pos4/SPIMB/Decon_Reg","/nearline/shroff/shrofflab/DCR6485_RPM1_NU/021020_RC/DCR6485_NU_1/DCR6485_NU_1/Pos2/SPIMB/Decon","/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/091119_Pos3","/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/091119_Pos2","/nearline/shroff/shrofflab/JCC596_NU/Untwisting_Redo/082619_Pos3","/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos0","/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos4","/nearline/shroff/shrofflab/Non-model C elegans folders/KP9305_Activity_Full/073019_KP9305_NU/Pos2","/nearline/shroff/shrofflab/RW10131/Data/052918_Pos0/Decon_registered","/nearline/shroff/shrofflab/RW10131/Data/052918_Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10896/Postwitching/Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10896/Postwitching/Pos4/Decon_registered","/nearline/shroff/shrofflab/RW10896/Postwitching/Pos6/Decon_registered","/nearline/shroff/shrofflab/RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos2/SPIMB/For_Tracking/For_Tracking","/nearline/shroff/shrofflab/RW10752_NU/Untwisting/031219_RW10752_NU/RW10752_NU/RW10752_NU/Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10752_NU/Untwisting/022519_RW10752_NU/RW10752_NU/RW10752_NU/Pos0/Decon_registered","/nearline/shroff/shrofflab/RW10584/051817/Decon_reg","/nearline/shroff/shrofflab/RW10584/052517/Decon_reg","/nearline/shroff/shrofflab/RW10584/101017/Decon_reg","/nearline/shroff/shrofflab/RW10598/Data/Pos4-bgsub_95_iteration_5/Decon_registered","/nearline/shroff/shrofflab/RW10598/Data/598_Slitscan_6um_5min_Pos1/Decon_registered","/nearline/shroff/shrofflab/RW10598/Data/Pos0/Decon_registered","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_2 - UTP 3/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311-US_5min_3 - UTP 2/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_4 - UTP 4/Decon_reg","/nearline/shroff/shrofflab/Non-model C elegans folders/Untwisting_Paper/DCR4221/040215/LE311 Data/LE311_US_5min_1 - UTP 5/Decon_reg","/nearline/shroff/shrofflab/RW10375/Pos0/SPIMB/Reg_Sample/ForTracking","/nearline/shroff/shrofflab/RW10375/Pos1/SPIMB/Reg_Sample/ForTracking","/nearline/shroff/shrofflab/RW10375/Pos2/SPIMB/Reg_Sample/ForTracking","/nearline/shroff/shrofflab/RW10557/031021/Pos0/segmentation","/nearline/shroff/shrofflab/RW10557/031021/Pos1/Segmentation","/nearline/shroff/shrofflab/RW10557/031021/Pos2/segmentation","/nearline/shroff/shrofflab/RW10753/Tracking/Pos6","/nearline/shroff/shrofflab/RW10753/Tracking/Pos2","/nearline/shroff/shrofflab/RW10753/Tracking/Pos1","/nearline/shroff/shrofflab/RW10742/Tracking/Pos1/Segmentation","/nearline/shroff/shrofflab/RW10742/Tracking/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10742/Tracking/Pos5/For_Tracking","/nearline/shroff/shrofflab/RW10711/Tracking/Pos0/For_Tracking","/nearline/shroff/shrofflab/RW10711/Tracking/Pos1/For_Tracking","/nearline/shroff/shrofflab/RW10711/Tracking/Pos3","/nearline/shroff/shrofflab/Vab-1/Tracking/Pos0/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Vab-1/Tracking/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Vab-1/Tracking/Pos3/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/efn-1/Tracking/Pos0/For_Tracking","/nearline/shroff/shrofflab/efn-1/Tracking/Pos3/For_Tracking","/nearline/shroff/shrofflab/efn-1/Tracking/Pos4/For_Tracking","/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/efn-2/120222_efn-2/Pos6/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/lin-26_mSC/Tracking/0208/SLS148_Untwisting/Pos4/SPIMA/Reg_Sample/Flipped_FT","/nearline/shroff/shrofflab/lin-26_mSC/Tracking/021323/SLS148_SLS6/Pos3/SPIMB/Reg_Sample/Flipped_FT","/nearline/shroff/shrofflab/lin-26_mSC/Tracking/031523/Pos4/SPIMA/Reg_Sample/Flipped_FT","/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/033023/RedUT_A_cnd-1/Pos3/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/033023/RedUT_A_cnd-1/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/CND-1_RedUntwisting_A/Tracking/032423/CND-1_RedUT/Pos2/SPIMA/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/Efn-4_RedUntwisting/Tracking/031723/EFN-4_RedUT_A/Pos3/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos1/SPIMB/Registered_Volumes/For_Tracking","/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos2/SPIMB/Registered_Volumes/For_Tracking","/nearline/shroff/shrofflab/RW10896/Postwitching/2023_imaging/20231129/RW10896_NU/Pos3/SPIMB/Registered_Volumes/For_Tracking","/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240401/RW10131_SLS6_New/Pos4/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240429/SLS268_RW10131_SLS6/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10131/Data/2024_SLS268/20240507/Pos1/SPIMA/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos1/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230718/RW10598_NU/Pos2/SPIMB/Reg_Sample/For_Tracking","/nearline/shroff/shrofflab/RW10598/2023_Data/Tracking/20230719/RW10598_NU/Pos4/SPIMB/Reg_Sample/For_Tracking"]}} diff --git a/src/demo_averaging/loading.jl b/src/demo_averaging/loading.jl index 72e1121..45d713d 100644 --- a/src/demo_averaging/loading.jl +++ b/src/demo_averaging/loading.jl @@ -2,7 +2,7 @@ if gethostname() == "KITTISOPIKULM-2" const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2026_03_19_v2.json" else - const config_path = joinpath(@__DIR__, "..", "..", "config_2024_09_05_v1.json") + const config_path = joinpath(@__DIR__, "..", "..", "config", "linux", "config_2026_03_19_v2.json") end const voxel_size = 0.1625 # um From b623a1aeebeb06ffa37d8fad9883d206d494a5a1 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 17:52:55 -0400 Subject: [PATCH 18/39] Add deployment directory copied from shroff-data-for-mark Dockerfile, OpenShift/K8s manifests, and README copied as-is from the separate shroff-data-for-mark build package. Co-Authored-By: Claude Sonnet 4.6 --- deployment/Dockerfile | 16 + deployment/README.md | 200 ++++++++++++ deployment/shroff-data-test/00-namespace.yaml | 6 + deployment/shroff-data-test/01-configmap.yaml | 102 +++++++ deployment/shroff-data-test/02-pvc.yaml | 45 +++ .../shroff-data-test/03-deployment.yaml | 286 ++++++++++++++++++ deployment/shroff-data-test/04-route.yaml | 21 ++ .../shroff-data-test/05-buildconfig.yaml | 24 ++ deployment/shroff-data-test/06-scc.yaml | 13 + deployment/shroff-data/00-namespace.yaml | 6 + deployment/shroff-data/01-configmap.yaml | 102 +++++++ deployment/shroff-data/02-pvc.yaml | 45 +++ deployment/shroff-data/03-deployment.yaml | 286 ++++++++++++++++++ deployment/shroff-data/04-route.yaml | 22 ++ deployment/shroff-data/05-buildconfig.yaml | 24 ++ deployment/shroff-data/06-scc.yaml | 13 + 16 files changed, 1211 insertions(+) create mode 100644 deployment/Dockerfile create mode 100644 deployment/README.md create mode 100644 deployment/shroff-data-test/00-namespace.yaml create mode 100644 deployment/shroff-data-test/01-configmap.yaml create mode 100644 deployment/shroff-data-test/02-pvc.yaml create mode 100644 deployment/shroff-data-test/03-deployment.yaml create mode 100644 deployment/shroff-data-test/04-route.yaml create mode 100644 deployment/shroff-data-test/05-buildconfig.yaml create mode 100644 deployment/shroff-data-test/06-scc.yaml create mode 100644 deployment/shroff-data/00-namespace.yaml create mode 100644 deployment/shroff-data/01-configmap.yaml create mode 100644 deployment/shroff-data/02-pvc.yaml create mode 100644 deployment/shroff-data/03-deployment.yaml create mode 100644 deployment/shroff-data/04-route.yaml create mode 100644 deployment/shroff-data/05-buildconfig.yaml create mode 100644 deployment/shroff-data/06-scc.yaml diff --git a/deployment/Dockerfile b/deployment/Dockerfile new file mode 100644 index 0000000..8ffbc99 --- /dev/null +++ b/deployment/Dockerfile @@ -0,0 +1,16 @@ +FROM julia:1.12.1 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libhdf5-dev \ + libgl1 \ + libglib2.0-0 \ + && rm -rf /var/lib/apt/lists/* + +COPY ShroffCelegansModels.jl /app/ShroffCelegansModels.jl + +# Precompile all packages (including local ShroffCelegansModels dep). +# Build takes ~15-30 min; container startup is fast thereafter. +RUN julia --project=/app/ShroffCelegansModels.jl/web \ + -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()' + +CMD ["julia", "--version"] diff --git a/deployment/README.md b/deployment/README.md new file mode 100644 index 0000000..e8a82f7 --- /dev/null +++ b/deployment/README.md @@ -0,0 +1,200 @@ +# shroff-data — Container Build & Deployment Package + +This directory contains everything needed to rebuild the shroff-data container image +and deploy it on OpenShift. The `ShroffCelegansModels.jl/` source here is the **patched version** +already running in production — see "What was changed" below. + +## Directory contents + +``` +shroff-data-for-mark/ +├── README.md # This file +├── Dockerfile # Builds the Julia image +├── ShroffCelegansModels.jl/ # Patched source (ready to build from) +├── shroff-data/ # K8s manifests — production namespace (shroff-data.int.janelia.org) +│ ├── 00-namespace.yaml +│ ├── 01-configmap.yaml +│ ├── 02-pvc.yaml +│ ├── 03-deployment.yaml +│ ├── 04-route.yaml +│ ├── 05-buildconfig.yaml ← BuildConfig is also here, inside the full manifest set +│ └── 06-scc.yaml +└── shroff-data-test/ # K8s manifests — test namespace (shroff-data-test.int.janelia.org) + ├── 00-namespace.yaml + ├── 01-configmap.yaml + ├── 02-pvc.yaml + ├── 03-deployment.yaml + ├── 04-route.yaml + ├── 05-buildconfig.yaml + └── 06-scc.yaml +``` + +## Deploying from scratch + +### Production namespace (`shroff-data`) + +```bash +oc apply -f shroff-data/00-namespace.yaml +oc apply -f shroff-data/06-scc.yaml +oc apply -f shroff-data/05-buildconfig.yaml +oc start-build shroff-data --from-dir=. -n shroff-data --follow +oc apply -f shroff-data/01-configmap.yaml +oc apply -f shroff-data/02-pvc.yaml +oc apply -f shroff-data/03-deployment.yaml +oc apply -f shroff-data/04-route.yaml +``` + +### Test namespace (`shroff-data-test`) + +```bash +oc apply -f shroff-data-test/00-namespace.yaml +oc apply -f shroff-data-test/06-scc.yaml +oc apply -f shroff-data-test/05-buildconfig.yaml +oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow +oc apply -f shroff-data-test/01-configmap.yaml +oc apply -f shroff-data-test/02-pvc.yaml +oc apply -f shroff-data-test/03-deployment.yaml +oc apply -f shroff-data-test/04-route.yaml +``` + +The build takes ~15-30 minutes (Julia precompiles all packages). +The running pod restarts automatically once the new image is pushed. + +## Rebuilding after a code update + +Update the source in `ShroffCelegansModels.jl/`, then trigger a new build in whichever namespace you want to update: + +```bash +# Production +oc start-build shroff-data --from-dir=. -n shroff-data --follow + +# Test +oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow +``` + +## URLs + +| Environment | URL | +|-------------|-----| +| Production | https://shroff-data.int.janelia.org | +| Test | https://shroff-data-test.int.janelia.org | + +--- + +## What was changed from the original source + +Four changes were needed to make the code work in a container. +**Please consider merging these back into your repo** so future builds are clean. + +--- + +### 1. `src/demo_averaging/loading.jl` — config_path fallback + +Your code only defines `config_path` for hostnames `"vm7249"` and `"KITTISOPIKULM-2"`. +A container has a random pod name, so `config_path` was never set and the app crashed. + +Added an `else` branch using `@__DIR__` (works anywhere, not hostname-dependent): + +```julia +# Add this else branch: +else + const config_path = joinpath(@__DIR__, "..", "..", "config_2024_09_05_v1.json") +end +``` + +--- + +### 2. `scripts/launch_show_average_annotations.jl` — NFS alias fallback + +`alias_cache_unix("/nearline/shroff")` was only called for hostname `"vm7249"`. +Added an `else` branch so it always runs in containers: + +```julia +# Add this else branch: +else + alias_cache_unix("/nearline/shroff") +end +``` + +--- + +### 3. `web/scripts/*.jl` — bind address (all 7 scripts) + +Scripts were binding the HTTP server to `Sockets.getaddrinfo("shroff-data.int.janelia.org")`. +In a container that resolves to the load balancer IP (not a local interface), so the server crashed. + +Change to `"0.0.0.0"` in all 7 scripts: + +```julia +# Before: +Server(app, Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string, 8180; ...) +# After: +Server(app, "0.0.0.0", 8180; ...) +``` + +--- + +### 4. `web/scripts/*.jl` — WebSocket proxy URL (all 7 scripts) + +Bonito's `proxy_url` was hardcoded to `https://shroff-data.int.janelia.org/...`. +This tells the browser where to connect for WebSockets — it needs to match whatever +hostname the user is actually visiting (test route vs production). + +Change to read from an environment variable: + +```julia +# Before: +proxy_url="https://shroff-data.int.janelia.org/show_average_annotations/" +# After: +proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/show_average_annotations/" +``` + +The container sets `SHROFF_HOST` automatically from the deployment manifest. You don't need to set it yourself. + +--- + +## Accessing HDF5 data files on the server + +The HDF5 data files (previously at `/var/www/shroff/data/` on vm7249) are stored on a +persistent volume mounted at `/var/www/shroff/data` inside the nginx container. + +### Get a shell to browse or edit files + +```bash +# Production +oc exec -it -n shroff-data deployment/shroff-data -c nginx -- sh + +# Test +oc exec -it -n shroff-data-test deployment/shroff-data-test -c nginx -- sh + +# Files are at: +ls /var/www/shroff/data/ +``` + +### Copy a file from your machine to the server + +```bash +# Get the pod name first +oc get pods -n shroff-data + +oc cp /local/path/to/file.h5 shroff-data/:/var/www/shroff/data/file.h5 -c nginx +``` + +### Copy a file from the server to your machine + +```bash +oc cp shroff-data/:/var/www/shroff/data/file.h5 /local/path/to/file.h5 -c nginx +``` + +### Delete or rename files + +```bash +oc exec -n shroff-data deployment/shroff-data -c nginx -- rm /var/www/shroff/data/old.h5 +oc exec -n shroff-data deployment/shroff-data -c nginx -- mv /var/www/shroff/data/old.h5 /var/www/shroff/data/new.h5 +``` + +### Notes + +- Changes to the PVC are **persistent** — they survive pod restarts and redeployments +- The volume is shared between the nginx container (serves the files) and nothing else — Julia apps use `/nearline/shroff` for microscopy data, not this PVC +- `oc` CLI must be installed and you must be logged in to the OpenShift cluster diff --git a/deployment/shroff-data-test/00-namespace.yaml b/deployment/shroff-data-test/00-namespace.yaml new file mode 100644 index 0000000..4744c22 --- /dev/null +++ b/deployment/shroff-data-test/00-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: shroff-data-test + labels: + name: shroff-data-test diff --git a/deployment/shroff-data-test/01-configmap.yaml b/deployment/shroff-data-test/01-configmap.yaml new file mode 100644 index 0000000..34a0842 --- /dev/null +++ b/deployment/shroff-data-test/01-configmap.yaml @@ -0,0 +1,102 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: nginx-config + namespace: shroff-data-test +data: + default.conf: | + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 8080; + server_name shroff-data-test.int.janelia.org; + + # Static files baked into the Julia image (shared via emptyDir or same image) + # HDF5 data files served from CephFS PVC at /var/www/shroff/data/ + root /app/ShroffCelegansModels.jl/web/static; + index index.html; + + location / { + } + + location /data/ { + alias /var/www/shroff/data/; + autoindex on; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + location /show_average_annotations/ { + proxy_pass http://localhost:8180/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /meshscatter_average_edited/ { + proxy_pass http://localhost:8580/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /meshscatter_average_edited_2024_10_24/ { + proxy_pass http://localhost:8590/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis/ { + proxy_pass http://localhost:9180/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis_live/ { + proxy_pass http://localhost:9181/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis_retrack_live/ { + proxy_pass http://localhost:9281/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /fix_annotation_ap_axis/ { + proxy_pass http://localhost:9381/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + } diff --git a/deployment/shroff-data-test/02-pvc.yaml b/deployment/shroff-data-test/02-pvc.yaml new file mode 100644 index 0000000..1f2aee1 --- /dev/null +++ b/deployment/shroff-data-test/02-pvc.yaml @@ -0,0 +1,45 @@ +# CephFS PVC for /var/www/shroff/data/ (185MB HDF5 files migrated from VM). +# Static web files (index.html etc.) are baked into the image — not stored here. +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-test-www + namespace: shroff-data-test +spec: + accessModes: + - ReadWriteMany + storageClassName: ocs-storagecluster-cephfs + resources: + requests: + storage: 10Gi +--- +# NFS PV/PVC for /nearline/shroff (Shroff Lab microscopy data — read by Julia apps) +apiVersion: v1 +kind: PersistentVolume +metadata: + name: shroff-data-test-nearline +spec: + capacity: + storage: 1Ti + accessModes: + - ReadOnlyMany + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: nearline.hhmi.org + path: /nearline3/shroff + readOnly: true +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-test-nearline + namespace: shroff-data-test +spec: + accessModes: + - ReadOnlyMany + storageClassName: "" + volumeName: shroff-data-test-nearline + resources: + requests: + storage: 1Ti diff --git a/deployment/shroff-data-test/03-deployment.yaml b/deployment/shroff-data-test/03-deployment.yaml new file mode 100644 index 0000000..1a2426a --- /dev/null +++ b/deployment/shroff-data-test/03-deployment.yaml @@ -0,0 +1,286 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shroff-data-test + namespace: shroff-data-test + labels: + app: shroff-data-test +spec: + replicas: 1 + selector: + matchLabels: + app: shroff-data-test + template: + metadata: + labels: + app: shroff-data-test + spec: + initContainers: + # Copy static web files from the Julia image into a shared emptyDir so nginx + # (nginx:alpine, no Julia) can serve them without needing the full Julia image. + - name: copy-static + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: ["cp", "-r", "/app/ShroffCelegansModels.jl/web/static/.", "/static/"] + volumeMounts: + - name: static-files + mountPath: /static + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 8080 + name: http + volumeMounts: + - name: www-data + mountPath: /var/www/shroff/data + - name: static-files + mountPath: /app/ShroffCelegansModels.jl/web/static + readOnly: true + - name: nginx-config + mountPath: /etc/nginx/conf.d + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 256Mi + readinessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + + # Julia web apps — code and precompiled packages baked into the image. + # Only /nearline/shroff NFS mount needed for microscopy data. + # startupProbe allows up to 20 min (safety net; should start fast with precompiled image). + + - name: show-average-annotations + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_show_average_annotations.jl + ports: + - containerPort: 8180 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 4Gi + cpu: 250m + limits: + memory: 4Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8180 + failureThreshold: 10 + periodSeconds: 30 + + - name: meshscatter-average-edited + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited.jl + ports: + - containerPort: 8580 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8580 + failureThreshold: 10 + periodSeconds: 30 + + - name: meshscatter-2024-10-24 + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited_2024_10_24.jl + ports: + - containerPort: 8590 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8590 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis.jl + ports: + - containerPort: 9180 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9180 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis-live + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_live.jl + ports: + - containerPort: 9181 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9181 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis-retrack-live + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl + ports: + - containerPort: 9281 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9281 + failureThreshold: 10 + periodSeconds: 30 + + - name: fix-ap-axis + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_fix_annotation_ap_axis.jl + ports: + - containerPort: 9381 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9381 + failureThreshold: 10 + periodSeconds: 30 + + volumes: + - name: static-files + emptyDir: {} + - name: www-data + persistentVolumeClaim: + claimName: shroff-data-test-www + - name: nearline + persistentVolumeClaim: + claimName: shroff-data-test-nearline + - name: nginx-config + configMap: + name: nginx-config +--- +apiVersion: v1 +kind: Service +metadata: + name: shroff-data-test + namespace: shroff-data-test +spec: + selector: + app: shroff-data-test + ports: + - port: 8080 + targetPort: 8080 + name: http diff --git a/deployment/shroff-data-test/04-route.yaml b/deployment/shroff-data-test/04-route.yaml new file mode 100644 index 0000000..3e2f49e --- /dev/null +++ b/deployment/shroff-data-test/04-route.yaml @@ -0,0 +1,21 @@ +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + name: shroff-data-test + namespace: shroff-data-test + labels: + app: shroff-data-test + annotations: + haproxy.router.openshift.io/timeout: 600s +spec: + host: shroff-data-test.int.janelia.org + to: + kind: Service + name: shroff-data-test + weight: 100 + port: + targetPort: http + tls: + termination: edge + insecureEdgeTerminationPolicy: Redirect + wildcardPolicy: None diff --git a/deployment/shroff-data-test/05-buildconfig.yaml b/deployment/shroff-data-test/05-buildconfig.yaml new file mode 100644 index 0000000..67239fa --- /dev/null +++ b/deployment/shroff-data-test/05-buildconfig.yaml @@ -0,0 +1,24 @@ +apiVersion: build.openshift.io/v1 +kind: BuildConfig +metadata: + name: shroff-data-test + namespace: shroff-data-test +spec: + source: + type: Binary + binary: {} + strategy: + type: Docker + dockerStrategy: + dockerfilePath: Dockerfile + output: + to: + kind: ImageStreamTag + name: shroff-data-test:latest + triggers: [] +--- +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: shroff-data-test + namespace: shroff-data-test diff --git a/deployment/shroff-data-test/06-scc.yaml b/deployment/shroff-data-test/06-scc.yaml new file mode 100644 index 0000000..54215cc --- /dev/null +++ b/deployment/shroff-data-test/06-scc.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: shroff-data-test-anyuid + namespace: shroff-data-test +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:openshift:scc:anyuid +subjects: + - kind: ServiceAccount + name: default + namespace: shroff-data-test diff --git a/deployment/shroff-data/00-namespace.yaml b/deployment/shroff-data/00-namespace.yaml new file mode 100644 index 0000000..5bc4e91 --- /dev/null +++ b/deployment/shroff-data/00-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: shroff-data + labels: + name: shroff-data diff --git a/deployment/shroff-data/01-configmap.yaml b/deployment/shroff-data/01-configmap.yaml new file mode 100644 index 0000000..d797af9 --- /dev/null +++ b/deployment/shroff-data/01-configmap.yaml @@ -0,0 +1,102 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: nginx-config + namespace: shroff-data +data: + default.conf: | + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 8080; + server_name shroff-data.int.janelia.org; + + # Static files baked into the Julia image (shared via emptyDir or same image) + # HDF5 data files served from CephFS PVC at /var/www/shroff/data/ + root /app/ShroffCelegansModels.jl/web/static; + index index.html; + + location / { + } + + location /data/ { + alias /var/www/shroff/data/; + autoindex on; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + } + + location /show_average_annotations/ { + proxy_pass http://localhost:8180/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /meshscatter_average_edited/ { + proxy_pass http://localhost:8580/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /meshscatter_average_edited_2024_10_24/ { + proxy_pass http://localhost:8590/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis/ { + proxy_pass http://localhost:9180/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis_live/ { + proxy_pass http://localhost:9181/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /debug_annotation_ap_axis_retrack_live/ { + proxy_pass http://localhost:9281/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + + location /fix_annotation_ap_axis/ { + proxy_pass http://localhost:9381/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + } diff --git a/deployment/shroff-data/02-pvc.yaml b/deployment/shroff-data/02-pvc.yaml new file mode 100644 index 0000000..27dd368 --- /dev/null +++ b/deployment/shroff-data/02-pvc.yaml @@ -0,0 +1,45 @@ +# CephFS PVC for /var/www/shroff/data/ (185MB HDF5 files migrated from VM). +# Static web files (index.html etc.) are baked into the image — not stored here. +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-www + namespace: shroff-data +spec: + accessModes: + - ReadWriteMany + storageClassName: ocs-storagecluster-cephfs + resources: + requests: + storage: 10Gi +--- +# NFS PV/PVC for /nearline/shroff (Shroff Lab microscopy data — read by Julia apps) +apiVersion: v1 +kind: PersistentVolume +metadata: + name: shroff-data-nearline +spec: + capacity: + storage: 1Ti + accessModes: + - ReadOnlyMany + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: nearline.hhmi.org + path: /nearline3/shroff + readOnly: true +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-nearline + namespace: shroff-data +spec: + accessModes: + - ReadOnlyMany + storageClassName: "" + volumeName: shroff-data-nearline + resources: + requests: + storage: 1Ti diff --git a/deployment/shroff-data/03-deployment.yaml b/deployment/shroff-data/03-deployment.yaml new file mode 100644 index 0000000..aaeef33 --- /dev/null +++ b/deployment/shroff-data/03-deployment.yaml @@ -0,0 +1,286 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shroff-data + namespace: shroff-data + labels: + app: shroff-data +spec: + replicas: 1 + selector: + matchLabels: + app: shroff-data + template: + metadata: + labels: + app: shroff-data + spec: + initContainers: + # Copy static web files from the Julia image into a shared emptyDir so nginx + # (nginx:alpine, no Julia) can serve them without needing the full Julia image. + - name: copy-static + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: ["cp", "-r", "/app/ShroffCelegansModels.jl/web/static/.", "/static/"] + volumeMounts: + - name: static-files + mountPath: /static + containers: + - name: nginx + image: nginx:alpine + ports: + - containerPort: 8080 + name: http + volumeMounts: + - name: www-data + mountPath: /var/www/shroff/data + - name: static-files + mountPath: /app/ShroffCelegansModels.jl/web/static + readOnly: true + - name: nginx-config + mountPath: /etc/nginx/conf.d + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 256Mi + readinessProbe: + httpGet: + path: / + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 10 + + # Julia web apps — code and precompiled packages baked into the image. + # Only /nearline/shroff NFS mount needed for microscopy data. + # startupProbe allows up to 20 min (safety net; should start fast with precompiled image). + + - name: show-average-annotations + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_show_average_annotations.jl + ports: + - containerPort: 8180 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 4Gi + cpu: 250m + limits: + memory: 4Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8180 + failureThreshold: 10 + periodSeconds: 30 + + - name: meshscatter-average-edited + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited.jl + ports: + - containerPort: 8580 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8580 + failureThreshold: 10 + periodSeconds: 30 + + - name: meshscatter-2024-10-24 + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited_2024_10_24.jl + ports: + - containerPort: 8590 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 8590 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis.jl + ports: + - containerPort: 9180 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9180 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis-live + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_live.jl + ports: + - containerPort: 9181 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9181 + failureThreshold: 10 + periodSeconds: 30 + + - name: debug-ap-axis-retrack-live + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl + ports: + - containerPort: 9281 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9281 + failureThreshold: 10 + periodSeconds: 30 + + - name: fix-ap-axis + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_fix_annotation_ap_axis.jl + ports: + - containerPort: 9381 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9381 + failureThreshold: 10 + periodSeconds: 30 + + volumes: + - name: static-files + emptyDir: {} + - name: www-data + persistentVolumeClaim: + claimName: shroff-data-www + - name: nearline + persistentVolumeClaim: + claimName: shroff-data-nearline + - name: nginx-config + configMap: + name: nginx-config +--- +apiVersion: v1 +kind: Service +metadata: + name: shroff-data + namespace: shroff-data +spec: + selector: + app: shroff-data + ports: + - port: 8080 + targetPort: 8080 + name: http diff --git a/deployment/shroff-data/04-route.yaml b/deployment/shroff-data/04-route.yaml new file mode 100644 index 0000000..fae3131 --- /dev/null +++ b/deployment/shroff-data/04-route.yaml @@ -0,0 +1,22 @@ +apiVersion: route.openshift.io/v1 +kind: Route +metadata: + name: shroff-data + namespace: shroff-data + labels: + app: shroff-data + annotations: + haproxy.router.openshift.io/timeout: 600s +spec: + host: shroff-data.int.janelia.org + to: + kind: Service + name: shroff-data + weight: 100 + port: + targetPort: http + tls: + termination: edge + insecureEdgeTerminationPolicy: Redirect + wildcardPolicy: None + diff --git a/deployment/shroff-data/05-buildconfig.yaml b/deployment/shroff-data/05-buildconfig.yaml new file mode 100644 index 0000000..11ff160 --- /dev/null +++ b/deployment/shroff-data/05-buildconfig.yaml @@ -0,0 +1,24 @@ +apiVersion: build.openshift.io/v1 +kind: BuildConfig +metadata: + name: shroff-data + namespace: shroff-data +spec: + source: + type: Binary + binary: {} + strategy: + type: Docker + dockerStrategy: + dockerfilePath: Dockerfile + output: + to: + kind: ImageStreamTag + name: shroff-data:latest + triggers: [] +--- +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: shroff-data + namespace: shroff-data diff --git a/deployment/shroff-data/06-scc.yaml b/deployment/shroff-data/06-scc.yaml new file mode 100644 index 0000000..e9f1a4a --- /dev/null +++ b/deployment/shroff-data/06-scc.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: shroff-data-anyuid + namespace: shroff-data +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:openshift:scc:anyuid +subjects: + - kind: ServiceAccount + name: default + namespace: shroff-data From d6062289a2ccaf14f2c6a1aef3242e1f3b4683c0 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 17 Apr 2026 17:53:16 -0400 Subject: [PATCH 19/39] Adapt deployment for repo-based build context - Dockerfile: COPY . instead of COPY ShroffCelegansModels.jl (repo root is now the build context) - BuildConfigs: dockerfilePath updated to deployment/Dockerfile - README: updated directory structure, oc commands, and noted merged patches Co-Authored-By: Claude Sonnet 4.6 --- deployment/Dockerfile | 2 +- deployment/README.md | 137 +++++++----------- .../shroff-data-test/05-buildconfig.yaml | 2 +- deployment/shroff-data/05-buildconfig.yaml | 2 +- 4 files changed, 59 insertions(+), 84 deletions(-) diff --git a/deployment/Dockerfile b/deployment/Dockerfile index 8ffbc99..ad66816 100644 --- a/deployment/Dockerfile +++ b/deployment/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libglib2.0-0 \ && rm -rf /var/lib/apt/lists/* -COPY ShroffCelegansModels.jl /app/ShroffCelegansModels.jl +COPY . /app/ShroffCelegansModels.jl # Precompile all packages (including local ShroffCelegansModels dep). # Build takes ~15-30 min; container startup is fast thereafter. diff --git a/deployment/README.md b/deployment/README.md index e8a82f7..aebd56d 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,60 +1,63 @@ # shroff-data — Container Build & Deployment Package This directory contains everything needed to rebuild the shroff-data container image -and deploy it on OpenShift. The `ShroffCelegansModels.jl/` source here is the **patched version** -already running in production — see "What was changed" below. +and deploy it on OpenShift. The source is the `ShroffCelegansModels.jl` repo itself — +all patches previously applied in the separate build package have been merged back in. ## Directory contents ``` -shroff-data-for-mark/ -├── README.md # This file -├── Dockerfile # Builds the Julia image -├── ShroffCelegansModels.jl/ # Patched source (ready to build from) -├── shroff-data/ # K8s manifests — production namespace (shroff-data.int.janelia.org) -│ ├── 00-namespace.yaml -│ ├── 01-configmap.yaml -│ ├── 02-pvc.yaml -│ ├── 03-deployment.yaml -│ ├── 04-route.yaml -│ ├── 05-buildconfig.yaml ← BuildConfig is also here, inside the full manifest set -│ └── 06-scc.yaml -└── shroff-data-test/ # K8s manifests — test namespace (shroff-data-test.int.janelia.org) - ├── 00-namespace.yaml - ├── 01-configmap.yaml - ├── 02-pvc.yaml - ├── 03-deployment.yaml - ├── 04-route.yaml - ├── 05-buildconfig.yaml - └── 06-scc.yaml +ShroffCelegansModels.jl/ # Repo root — also the Docker build context +├── deployment/ +│ ├── README.md # This file +│ ├── Dockerfile # Builds the Julia image +│ ├── shroff-data/ # K8s manifests — production namespace (shroff-data.int.janelia.org) +│ │ ├── 00-namespace.yaml +│ │ ├── 01-configmap.yaml +│ │ ├── 02-pvc.yaml +│ │ ├── 03-deployment.yaml +│ │ ├── 04-route.yaml +│ │ ├── 05-buildconfig.yaml +│ │ └── 06-scc.yaml +│ └── shroff-data-test/ # K8s manifests — test namespace (shroff-data-test.int.janelia.org) +│ ├── 00-namespace.yaml +│ ├── 01-configmap.yaml +│ ├── 02-pvc.yaml +│ ├── 03-deployment.yaml +│ ├── 04-route.yaml +│ ├── 05-buildconfig.yaml +│ └── 06-scc.yaml ``` +All `oc` commands below must be run from the **repo root** (`ShroffCelegansModels.jl/`), +which is the Docker build context. + ## Deploying from scratch ### Production namespace (`shroff-data`) ```bash -oc apply -f shroff-data/00-namespace.yaml -oc apply -f shroff-data/06-scc.yaml -oc apply -f shroff-data/05-buildconfig.yaml +oc apply -f deployment/shroff-data/00-namespace.yaml +oc apply -f deployment/shroff-data/06-scc.yaml +oc apply -f deployment/shroff-data/05-buildconfig.yaml oc start-build shroff-data --from-dir=. -n shroff-data --follow -oc apply -f shroff-data/01-configmap.yaml -oc apply -f shroff-data/02-pvc.yaml -oc apply -f shroff-data/03-deployment.yaml -oc apply -f shroff-data/04-route.yaml +oc apply -f deployment/shroff-data/01-configmap.yaml +oc apply -f deployment/shroff-data/02-pvc.yaml +oc apply -f deployment/shroff-data/03-deployment.yaml +oc apply -f deployment/shroff-data/04-route.yaml ``` ### Test namespace (`shroff-data-test`) ```bash -oc apply -f shroff-data-test/00-namespace.yaml -oc apply -f shroff-data-test/06-scc.yaml -oc apply -f shroff-data-test/05-buildconfig.yaml +oc apply -f deployment/shroff-data-test/00-namespace.yaml +oc apply -f deployment/shroff-data-test/06-scc.yaml +oc apply -f deployment/shroff-data-test/05-buildconfig.yaml oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow -oc apply -f shroff-data-test/01-configmap.yaml -oc apply -f shroff-data-test/02-pvc.yaml -oc apply -f shroff-data-test/03-deployment.yaml -oc apply -f shroff-data-test/04-route.yaml +oc apply -f deployment/shroff-data-test/01-configmap.yaml +oc apply -f deployment/shroff-data-test/02-pvc.yaml +oc apply -f deployment/shroff-data-test/03-deployment.yaml +oc apply -f deployment/shroff-data-test/04-route.yaml ``` The build takes ~15-30 minutes (Julia precompiles all packages). @@ -62,7 +65,7 @@ The running pod restarts automatically once the new image is pushed. ## Rebuilding after a code update -Update the source in `ShroffCelegansModels.jl/`, then trigger a new build in whichever namespace you want to update: +Commit your changes, then trigger a new build from the repo root: ```bash # Production @@ -81,82 +84,54 @@ oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow --- -## What was changed from the original source - -Four changes were needed to make the code work in a container. -**Please consider merging these back into your repo** so future builds are clean. +## Patches merged into the repo ---- +These four changes were previously applied to a separate build copy and have since been +merged back into the repo. They are noted here for reference. ### 1. `src/demo_averaging/loading.jl` — config_path fallback -Your code only defines `config_path` for hostnames `"vm7249"` and `"KITTISOPIKULM-2"`. -A container has a random pod name, so `config_path` was never set and the app crashed. - -Added an `else` branch using `@__DIR__` (works anywhere, not hostname-dependent): +Added an `else` branch so the config path resolves correctly in containers (which have +random pod names, not the expected hostnames): ```julia -# Add this else branch: else - const config_path = joinpath(@__DIR__, "..", "..", "config_2024_09_05_v1.json") + const config_path = joinpath(@__DIR__, "..", "..", "config", "linux", "config_2026_03_19_v2.json") end ``` ---- - ### 2. `scripts/launch_show_average_annotations.jl` — NFS alias fallback -`alias_cache_unix("/nearline/shroff")` was only called for hostname `"vm7249"`. -Added an `else` branch so it always runs in containers: +Added an `else` branch so `alias_cache_unix("/nearline/shroff")` always runs in containers: ```julia -# Add this else branch: else alias_cache_unix("/nearline/shroff") end ``` ---- - -### 3. `web/scripts/*.jl` — bind address (all 7 scripts) - -Scripts were binding the HTTP server to `Sockets.getaddrinfo("shroff-data.int.janelia.org")`. -In a container that resolves to the load balancer IP (not a local interface), so the server crashed. - -Change to `"0.0.0.0"` in all 7 scripts: - -```julia -# Before: -Server(app, Sockets.getaddrinfo("shroff-data.int.janelia.org") |> string, 8180; ...) -# After: -Server(app, "0.0.0.0", 8180; ...) -``` - ---- +### 3. `web/scripts/*.jl` — bind address -### 4. `web/scripts/*.jl` — WebSocket proxy URL (all 7 scripts) +Changed HTTP server bind address from `Sockets.getaddrinfo("shroff-data.int.janelia.org")` +to `"0.0.0.0"` so it binds to a local interface inside the container. -Bonito's `proxy_url` was hardcoded to `https://shroff-data.int.janelia.org/...`. -This tells the browser where to connect for WebSockets — it needs to match whatever -hostname the user is actually visiting (test route vs production). +### 4. `web/scripts/*.jl` — WebSocket proxy URL -Change to read from an environment variable: +Changed Bonito's `proxy_url` from a hardcoded hostname to read from an environment variable, +allowing the same image to serve both production and test: ```julia -# Before: -proxy_url="https://shroff-data.int.janelia.org/show_average_annotations/" -# After: proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/show_average_annotations/" ``` -The container sets `SHROFF_HOST` automatically from the deployment manifest. You don't need to set it yourself. +`SHROFF_HOST` is set automatically by the deployment manifest. --- ## Accessing HDF5 data files on the server -The HDF5 data files (previously at `/var/www/shroff/data/` on vm7249) are stored on a -persistent volume mounted at `/var/www/shroff/data` inside the nginx container. +The HDF5 data files are stored on a persistent volume mounted at `/var/www/shroff/data` +inside the nginx container. ### Get a shell to browse or edit files diff --git a/deployment/shroff-data-test/05-buildconfig.yaml b/deployment/shroff-data-test/05-buildconfig.yaml index 67239fa..3068946 100644 --- a/deployment/shroff-data-test/05-buildconfig.yaml +++ b/deployment/shroff-data-test/05-buildconfig.yaml @@ -10,7 +10,7 @@ spec: strategy: type: Docker dockerStrategy: - dockerfilePath: Dockerfile + dockerfilePath: deployment/Dockerfile output: to: kind: ImageStreamTag diff --git a/deployment/shroff-data/05-buildconfig.yaml b/deployment/shroff-data/05-buildconfig.yaml index 11ff160..73b4367 100644 --- a/deployment/shroff-data/05-buildconfig.yaml +++ b/deployment/shroff-data/05-buildconfig.yaml @@ -10,7 +10,7 @@ spec: strategy: type: Docker dockerStrategy: - dockerfilePath: Dockerfile + dockerfilePath: deployment/Dockerfile output: to: kind: ImageStreamTag From 2358c8a8c1cda616665010bb47c95a7d4057e519 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Sat, 18 Apr 2026 00:10:05 -0400 Subject: [PATCH 20/39] Add multithreading to Julia --- deployment/Dockerfile | 4 ++-- deployment/shroff-data-test/03-deployment.yaml | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/deployment/Dockerfile b/deployment/Dockerfile index ad66816..b692e89 100644 --- a/deployment/Dockerfile +++ b/deployment/Dockerfile @@ -1,4 +1,4 @@ -FROM julia:1.12.1 +FROM julia:1.12 RUN apt-get update && apt-get install -y --no-install-recommends \ libhdf5-dev \ @@ -10,7 +10,7 @@ COPY . /app/ShroffCelegansModels.jl # Precompile all packages (including local ShroffCelegansModels dep). # Build takes ~15-30 min; container startup is fast thereafter. -RUN julia --project=/app/ShroffCelegansModels.jl/web \ +RUN julia --threads=auto --project=/app/ShroffCelegansModels.jl/web \ -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()' CMD ["julia", "--version"] diff --git a/deployment/shroff-data-test/03-deployment.yaml b/deployment/shroff-data-test/03-deployment.yaml index 1a2426a..e5d2865 100644 --- a/deployment/shroff-data-test/03-deployment.yaml +++ b/deployment/shroff-data-test/03-deployment.yaml @@ -60,6 +60,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_show_average_annotations.jl ports: @@ -89,6 +90,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited.jl ports: @@ -118,6 +120,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_meshscatter_average_edited_2024_10_24.jl ports: @@ -147,6 +150,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis.jl ports: @@ -176,6 +180,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_live.jl ports: @@ -205,6 +210,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_debug_annotation_ap_axis_retrack_live.jl ports: @@ -234,6 +240,7 @@ spec: image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: - julia + - --threads=auto - --project=/app/ShroffCelegansModels.jl/web - /app/ShroffCelegansModels.jl/web/scripts/web_fix_annotation_ap_axis.jl ports: From 227ec07a3064237523a310829c40d9b8761d1c61 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Sat, 18 Apr 2026 01:05:15 -0400 Subject: [PATCH 21/39] Use annotation and timepoint query strings --- web/scripts/web_fix_annotation_ap_axis.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/scripts/web_fix_annotation_ap_axis.jl b/web/scripts/web_fix_annotation_ap_axis.jl index 9a4b944..d2a0023 100644 --- a/web/scripts/web_fix_annotation_ap_axis.jl +++ b/web/scripts/web_fix_annotation_ap_axis.jl @@ -39,8 +39,8 @@ function web_debug_annotation_ap_axis(datasets = datasets) avg_models, datasets[k][i]; use_myuntwist=true, - initial_timepoint=parse(Int64, get(params, "initial_timepoint", "0")), - initial_annotation=get(params, "initial_annotation", nothing), + initial_timepoint=parse(Int64, get(params, "timepoint", "0")), + initial_annotation=get(params, "annotation", nothing), annotation_timepoint_listener=listener ); end) From 0ddadf9921f5db033d3ebae4183e2e1f35fc32f0 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Wed, 29 Apr 2026 18:46:00 -0400 Subject: [PATCH 22/39] Identify outlier timepoints via URL --- ...load_straightened_annotations_over_time.jl | 8 ++ src/demo_averaging/save_cache.jl | 5 +- src/demo_averaging/zscore_analysis.jl | 90 +++++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/src/demo_averaging/load_straightened_annotations_over_time.jl b/src/demo_averaging/load_straightened_annotations_over_time.jl index 25bb06c..54c9393 100644 --- a/src/demo_averaging/load_straightened_annotations_over_time.jl +++ b/src/demo_averaging/load_straightened_annotations_over_time.jl @@ -27,4 +27,12 @@ function load_straightened_annotations_over_time( annotations_cache[key] = annotations return annotations end +end + +function annotations_cache_key( + dataset::ShroffCelegansModels.Datasets.NormalizedDataset, + offsets = 1:length(range(dataset.cell_key)), + use_myuntwist = true +) + return (dataset.path, offsets, use_myuntwist) end \ No newline at end of file diff --git a/src/demo_averaging/save_cache.jl b/src/demo_averaging/save_cache.jl index b17635e..d87ff4d 100644 --- a/src/demo_averaging/save_cache.jl +++ b/src/demo_averaging/save_cache.jl @@ -56,7 +56,10 @@ function save_annotations_cache(annotations_cache = annotations_cache) end end -function load_annotations_cache(annotations_cache = annotations_cache) +function load_annotations_cache( + annotations_cache = annotations_cache; + filename = joinpath(@__DIR__, "..", "..", "annotations_cache.h5") +) function _descend(p::Union{HDF5.File,HDF5.Group}) for k in keys(p) _descend(p[k]) diff --git a/src/demo_averaging/zscore_analysis.jl b/src/demo_averaging/zscore_analysis.jl index bdc2f21..6c5409e 100644 --- a/src/demo_averaging/zscore_analysis.jl +++ b/src/demo_averaging/zscore_analysis.jl @@ -2,6 +2,7 @@ using HDF5 using StatsBase: zscore using DataFrames using CSV +using Printf function zscore_analysis() df = DataFrame(dataset=String[], embryo=String[], annotation=String[], zscore=Float64[]) @@ -20,4 +21,93 @@ function zscore_analysis() end end return df +end + +function get_annotations_cache_keys(datasets::Dict{String, Dict{String, ShroffCelegansModels.Dataset}}) + flatened_datasets = [dataset for group in values(datasets) for dataset in values(group)] + dataset_keys = ShroffCelegansModels.annotations_cache_key.(flattened_datasets) +end +function raw_annotation_dict(dataset; use_myuntwist = true) + straighted_annotations_over_time = ShroffCelegansModels.load_straightened_annotations_over_time(dataset; use_myuntwist) + mapping = dataset.cell_key.mapping + timeseries = map(keys(mapping) |> collect) do annotation_name + Vector{Union{Missing, Point3d}}(map(straighted_annotations_over_time) do d + if ismissing(d) + return missing + end + get(d, string(annotation_name), missing) + end) + end::Vector{Vector{Union{Missing, Point3d}}} + + return Dict(values(mapping) .=> timeseries) +end +function zscore_dict(dataset; use_myuntwist = true) + dict = raw_annotation_dict(dataset; use_myuntwist) + zscores = zscore(map(values(dict)) do timeseries + sqrt(sum(diff((x->x[3]).(skipmissing(timeseries))).^2)) + end) + indices = map(values(dict)) do timeseries + idx = [i for (i, point) in enumerate(timeseries) if !ismissing(point)] + delta = diff((x->x[3]).(skipmissing(timeseries))) + abs_delta = abs.(delta) + i_max = argmax(abs_delta) + #return delta[i_max-1:i_max+1] + if i_max == 1 || i_max == length(idx) + return idx[i_max] + dataset.cell_key.start - 1 + end + if delta[i_max] > 0 + if delta[i_max-1] < -delta[i_max]/2 + return idx[i_max] + dataset.cell_key.start - 1 + else + return idx[i_max+1] + dataset.cell_key.start - 1 + end + else + if delta[i_max-1] > -delta[i_max]/2 + return idx[i_max] + dataset.cell_key.start - 1 + else + return idx[i_max+1] + dataset.cell_key.start - 1 + end + end + end + + return Dict(keys(dict) .=> zip(zscores, indices)) +end +function outlier_dict(dataset; use_myuntwist = true) + dict = raw_annotation_dict(dataset; use_myuntwist) + indices = map(values(dict)) do timeseries + idx = [i for (i, point) in enumerate(timeseries) if !ismissing(point)] + abs_delta = abs.(diff((x->x[3]).(skipmissing(timeseries)))) + i_max = argmax(abs_delta) + return idx[i_max] + end + return Dict(keys(dict) .=> indices) +end +const base_url = "https://shroff-data.int.janelia.org/fix_annotation_ap_axis/%s/%d?annotation=%s&timepoint=%d" +function get_fix_url(group, group_idx, annotation, timepoint) + return @sprintf( + "https://shroff-data.int.janelia.org/fix_annotation_ap_axis/%s/%d?annotation=%s&timepoint=%d", + group, + group_idx, + annotation, + timepoint + ) +end +function dataset_to_links(datasets, group, group_idx, threshold; use_myuntwist = true) + dataset = datasets[group][group_idx] + dict = zscore_dict(dataset; use_myuntwist) + filter!(dict) do (annotation, (zscore, _)) + zscore > threshold + end + links = map(collect(keys(dict))) do annotation + (zscore, timepoint) = dict[annotation] + get_fix_url(group, group_idx, annotation, timepoint) + end + return links +end +function list_outliers(;threshold=1) + for k1 in keys(datasets) + for k2 in keys(datasets[k1]) + dataset_to_links(datasets, k1, k2, threshold) .|> println; + end + end end \ No newline at end of file From cddd7a451ef11b558d4477dacb7bb87fb7ca0c97 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Wed, 29 Apr 2026 19:12:39 -0400 Subject: [PATCH 23/39] Create a base Docker image with just dependencies --- deployment/Dockerfile | 15 ++--- deployment/README.md | 67 ++++++++++++++----- .../shroff-data-test/05-buildconfig.yaml | 4 ++ deployment/shroff-data/05-buildconfig.yaml | 4 ++ 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/deployment/Dockerfile b/deployment/Dockerfile index b692e89..da2afa7 100644 --- a/deployment/Dockerfile +++ b/deployment/Dockerfile @@ -1,16 +1,11 @@ -FROM julia:1.12 - -RUN apt-get update && apt-get install -y --no-install-recommends \ - libhdf5-dev \ - libgl1 \ - libglib2.0-0 \ - && rm -rf /var/lib/apt/lists/* +# Base image is overridden by each namespace's BuildConfig (dockerStrategy.from) +FROM scratch COPY . /app/ShroffCelegansModels.jl -# Precompile all packages (including local ShroffCelegansModels dep). -# Build takes ~15-30 min; container startup is fast thereafter. +# Re-precompile only the local package and anything that depends on it. +# External deps are already precompiled in the base image. RUN julia --threads=auto --project=/app/ShroffCelegansModels.jl/web \ - -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()' + -e 'using Pkg; Pkg.precompile()' CMD ["julia", "--version"] diff --git a/deployment/README.md b/deployment/README.md index aebd56d..e18209a 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -8,9 +8,11 @@ all patches previously applied in the separate build package have been merged ba ``` ShroffCelegansModels.jl/ # Repo root — also the Docker build context +├── .dockerignore # Excludes deployment/, backup_*/, cache_*/, services/ ├── deployment/ │ ├── README.md # This file -│ ├── Dockerfile # Builds the Julia image +│ ├── Dockerfile # App image — builds FROM the base image (~2 min) +│ ├── Dockerfile.base # Base image — installs deps & precompiles external packages (~7 min) │ ├── shroff-data/ # K8s manifests — production namespace (shroff-data.int.janelia.org) │ │ ├── 00-namespace.yaml │ │ ├── 01-configmap.yaml @@ -26,52 +28,83 @@ ShroffCelegansModels.jl/ # Repo root — also the Docker build context │ ├── 03-deployment.yaml │ ├── 04-route.yaml │ ├── 05-buildconfig.yaml +│ ├── 05b-buildconfig-base.yaml │ └── 06-scc.yaml ``` All `oc` commands below must be run from the **repo root** (`ShroffCelegansModels.jl/`), which is the Docker build context. -## Deploying from scratch +## Two-stage build -### Production namespace (`shroff-data`) +The build is split into two images to keep routine deploys fast: -```bash -oc apply -f deployment/shroff-data/00-namespace.yaml -oc apply -f deployment/shroff-data/06-scc.yaml -oc apply -f deployment/shroff-data/05-buildconfig.yaml -oc start-build shroff-data --from-dir=. -n shroff-data --follow -oc apply -f deployment/shroff-data/01-configmap.yaml -oc apply -f deployment/shroff-data/02-pvc.yaml -oc apply -f deployment/shroff-data/03-deployment.yaml -oc apply -f deployment/shroff-data/04-route.yaml -``` +| Image | Dockerfile | Build time | Rebuild when | +|-------|-----------|------------|--------------| +| `shroff-data-test-base` | `Dockerfile.base` | ~7 min | `Project.toml` or `Manifest.toml` changes | +| `shroff-data-test` | `Dockerfile` | ~2 min | Any code change | + +`Dockerfile.base` installs system packages and precompiles all external Julia packages +using a stub for the local `ShroffCelegansModels` package. `Dockerfile` builds `FROM` +that base, copies the real source, and re-precompiles only the local package. + +## Deploying from scratch ### Test namespace (`shroff-data-test`) ```bash oc apply -f deployment/shroff-data-test/00-namespace.yaml oc apply -f deployment/shroff-data-test/06-scc.yaml + +# Build the base image first (~7 min) +oc apply -f deployment/shroff-data-test/05b-buildconfig-base.yaml +oc start-build shroff-data-test-base --from-dir=. -n shroff-data-test --follow + +# Then build the app image (~2 min) oc apply -f deployment/shroff-data-test/05-buildconfig.yaml oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow + oc apply -f deployment/shroff-data-test/01-configmap.yaml oc apply -f deployment/shroff-data-test/02-pvc.yaml oc apply -f deployment/shroff-data-test/03-deployment.yaml oc apply -f deployment/shroff-data-test/04-route.yaml ``` -The build takes ~15-30 minutes (Julia precompiles all packages). -The running pod restarts automatically once the new image is pushed. +### Production namespace (`shroff-data`) + +> **Note:** The production namespace does not yet have a base image BuildConfig. +> Use the single-stage build until it is set up (see test namespace as a reference). -## Rebuilding after a code update +```bash +oc apply -f deployment/shroff-data/00-namespace.yaml +oc apply -f deployment/shroff-data/06-scc.yaml +oc apply -f deployment/shroff-data/05-buildconfig.yaml +oc start-build shroff-data --from-dir=. -n shroff-data --follow +oc apply -f deployment/shroff-data/01-configmap.yaml +oc apply -f deployment/shroff-data/02-pvc.yaml +oc apply -f deployment/shroff-data/03-deployment.yaml +oc apply -f deployment/shroff-data/04-route.yaml +``` + +## Rebuilding after a code update (~2 min) -Commit your changes, then trigger a new build from the repo root: +For routine code changes, only the app image needs to be rebuilt: ```bash +# Test +oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow + # Production oc start-build shroff-data --from-dir=. -n shroff-data --follow +``` + +## Rebuilding after a dependency update (~7 + 2 min) +When `Project.toml` or `Manifest.toml` changes, rebuild the base first, then the app: + +```bash # Test +oc start-build shroff-data-test-base --from-dir=. -n shroff-data-test --follow oc start-build shroff-data-test --from-dir=. -n shroff-data-test --follow ``` diff --git a/deployment/shroff-data-test/05-buildconfig.yaml b/deployment/shroff-data-test/05-buildconfig.yaml index 3068946..6e2fb0a 100644 --- a/deployment/shroff-data-test/05-buildconfig.yaml +++ b/deployment/shroff-data-test/05-buildconfig.yaml @@ -11,6 +11,10 @@ spec: type: Docker dockerStrategy: dockerfilePath: deployment/Dockerfile + from: + kind: ImageStreamTag + name: shroff-data-test-base:latest + namespace: shroff-data-test output: to: kind: ImageStreamTag diff --git a/deployment/shroff-data/05-buildconfig.yaml b/deployment/shroff-data/05-buildconfig.yaml index 73b4367..a80084b 100644 --- a/deployment/shroff-data/05-buildconfig.yaml +++ b/deployment/shroff-data/05-buildconfig.yaml @@ -11,6 +11,10 @@ spec: type: Docker dockerStrategy: dockerfilePath: deployment/Dockerfile + from: + kind: ImageStreamTag + name: shroff-data-base:latest + namespace: shroff-data output: to: kind: ImageStreamTag From 0a3a6ee1d10ab4263e37429275b5340fe6710343 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Fri, 1 May 2026 22:51:31 -0400 Subject: [PATCH 24/39] Add initial raw_zscore_analysis function --- src/ShroffCelegansModels.jl | 10 ++++++++++ src/demo_averaging/zscore_analysis.jl | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index 9d9484e..615ccae 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -28,6 +28,12 @@ module ShroffCelegansModels using StatsBase: StatsBase using ThinPlateSplines: ThinPlateSplines using TiffImages: TiffImages + if gethostname() == "KITTISOPIKULM-2" + const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2026_03_19_v2.json" + else + const config_path = joinpath(@__DIR__, "..", "..", "config", "linux", "config_2026_03_19_v2.json") + end + const voxel_size = 0.1625 # um include("datasets.jl") include("MIPAVIO.jl") @@ -58,6 +64,10 @@ module ShroffCelegansModels include("annotation_untwist.jl") include("parse_worm_dataset_path.jl") + include("demo_averaging/read_config_json.jl") + include("demo_averaging/fix_annotation_ap_axis.jl") + include("makie.jl") + include("precompile.jl") end diff --git a/src/demo_averaging/zscore_analysis.jl b/src/demo_averaging/zscore_analysis.jl index 6c5409e..49b1538 100644 --- a/src/demo_averaging/zscore_analysis.jl +++ b/src/demo_averaging/zscore_analysis.jl @@ -27,6 +27,28 @@ function get_annotations_cache_keys(datasets::Dict{String, Dict{String, ShroffCe flatened_datasets = [dataset for group in values(datasets) for dataset in values(group)] dataset_keys = ShroffCelegansModels.annotations_cache_key.(flattened_datasets) end +function raw_zscore_analysis( + datasets::Dict{String, Vector{ShroffCelegansModels.NormalizedDataset}}; + threshold=1, + time_threshold=1 +) + for group in keys(datasets) + for embryo in keys(datasets[group]) + dataset = datasets[group][embryo] + dict = raw_annotation_dict(dataset) + zscores = zscore(map(values(dict)) do timeseries + sqrt(sum(diff((x->x[3]).(skipmissing(timeseries))).^2)) + end) + annotation_names = keys(dict) + for (annotation, zscore) in zip(annotation_names, zscores) + if zscore > threshold + #println(group, ", ", embryo, ", ", annotation, ", ", zscore) + dataset_to_links(datasets, group, embryo, time_threshold) .|> println + end + end + end + end +end function raw_annotation_dict(dataset; use_myuntwist = true) straighted_annotations_over_time = ShroffCelegansModels.load_straightened_annotations_over_time(dataset; use_myuntwist) mapping = dataset.cell_key.mapping From 5494adb64846f718141fdb658087b9e68f587e6e Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 13:42:47 -0400 Subject: [PATCH 25/39] Update deployment, use base image, annotation changes --- deployment/.gitattributes | 2 ++ deployment/.gitignore | 3 +++ deployment/Dockerfile.base | 21 ++++++++++++++++ deployment/pixi.lock | 18 ++++++++++++++ deployment/pixi.toml | 11 +++++++++ deployment/shroff-data-test/02-pvc.yaml | 15 ++++++++++++ .../shroff-data-test/03-deployment.yaml | 7 ++++++ .../05b-buildconfig-base.yaml | 24 +++++++++++++++++++ deployment/shroff-data/02-pvc.yaml | 15 ++++++++++++ deployment/shroff-data/03-deployment.yaml | 7 ++++++ .../shroff-data/05b-buildconfig-base.yaml | 24 +++++++++++++++++++ 11 files changed, 147 insertions(+) create mode 100644 deployment/.gitattributes create mode 100644 deployment/.gitignore create mode 100644 deployment/Dockerfile.base create mode 100644 deployment/pixi.lock create mode 100644 deployment/pixi.toml create mode 100644 deployment/shroff-data-test/05b-buildconfig-base.yaml create mode 100644 deployment/shroff-data/05b-buildconfig-base.yaml diff --git a/deployment/.gitattributes b/deployment/.gitattributes new file mode 100644 index 0000000..997504b --- /dev/null +++ b/deployment/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff diff --git a/deployment/.gitignore b/deployment/.gitignore new file mode 100644 index 0000000..ae849e6 --- /dev/null +++ b/deployment/.gitignore @@ -0,0 +1,3 @@ +# pixi environments +.pixi/* +!.pixi/config.toml diff --git a/deployment/Dockerfile.base b/deployment/Dockerfile.base new file mode 100644 index 0000000..598f7d9 --- /dev/null +++ b/deployment/Dockerfile.base @@ -0,0 +1,21 @@ +FROM julia:1.12 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + libhdf5-dev \ + libgl1 \ + libglib2.0-0 \ + && rm -rf /var/lib/apt/lists/* + +# Copy only dependency manifests — this layer is cached until deps change +COPY Manifest.toml /app/ShroffCelegansModels.jl/ +COPY Project.toml /app/ShroffCelegansModels.jl/ +COPY web/Project.toml /app/ShroffCelegansModels.jl/web/ +COPY glmakie/Project.toml /app/ShroffCelegansModels.jl/glmakie/ + +# Stub the local package so external deps can be precompiled without full source +RUN mkdir -p /app/ShroffCelegansModels.jl/src && \ + printf 'module ShroffCelegansModels\nend\n' \ + > /app/ShroffCelegansModels.jl/src/ShroffCelegansModels.jl + +RUN julia --threads=auto --project=/app/ShroffCelegansModels.jl/web \ + -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()' diff --git a/deployment/pixi.lock b/deployment/pixi.lock new file mode 100644 index 0000000..3d69cbb --- /dev/null +++ b/deployment/pixi.lock @@ -0,0 +1,18 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/openshift-cli-4.20.2-hfc2019e_0.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/openshift-cli-4.20.2-hfc2019e_0.conda + sha256: 8ba453cb89a23fc27d8b712c406e7ad06ad9e65b2a9b6a11b6a5b91527a648fc + md5: cc15eeccba5b733052870c0f226dca18 + license: Apache-2.0 + license_family: APACHE + size: 107321457 + timestamp: 1762191858837 diff --git a/deployment/pixi.toml b/deployment/pixi.toml new file mode 100644 index 0000000..5ed1ac3 --- /dev/null +++ b/deployment/pixi.toml @@ -0,0 +1,11 @@ +[workspace] +authors = ["Mark Kittisopikul "] +channels = ["conda-forge"] +name = "deployment" +platforms = ["linux-64"] +version = "0.1.0" + +[tasks] + +[dependencies] +openshift-cli = ">=4.20.2,<5" diff --git a/deployment/shroff-data-test/02-pvc.yaml b/deployment/shroff-data-test/02-pvc.yaml index 1f2aee1..2a888ba 100644 --- a/deployment/shroff-data-test/02-pvc.yaml +++ b/deployment/shroff-data-test/02-pvc.yaml @@ -30,6 +30,21 @@ spec: path: /nearline3/shroff readOnly: true --- +--- +# CephFS PVC for annotation_changes.h5 (user edits that must survive pod restarts). +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-test-annotations + namespace: shroff-data-test +spec: + accessModes: + - ReadWriteMany + storageClassName: ocs-storagecluster-cephfs + resources: + requests: + storage: 1Gi +--- apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/deployment/shroff-data-test/03-deployment.yaml b/deployment/shroff-data-test/03-deployment.yaml index e5d2865..1195cd1 100644 --- a/deployment/shroff-data-test/03-deployment.yaml +++ b/deployment/shroff-data-test/03-deployment.yaml @@ -249,10 +249,14 @@ spec: env: - name: SHROFF_HOST value: "shroff-data-test.int.janelia.org" + - name: ANNOTATION_CHANGES_PATH + value: /data/annotations/annotation_changes.h5 volumeMounts: - name: nearline mountPath: /nearline/shroff readOnly: true + - name: annotations + mountPath: /data/annotations resources: requests: memory: 2Gi @@ -275,6 +279,9 @@ spec: - name: nearline persistentVolumeClaim: claimName: shroff-data-test-nearline + - name: annotations + persistentVolumeClaim: + claimName: shroff-data-test-annotations - name: nginx-config configMap: name: nginx-config diff --git a/deployment/shroff-data-test/05b-buildconfig-base.yaml b/deployment/shroff-data-test/05b-buildconfig-base.yaml new file mode 100644 index 0000000..37b92e4 --- /dev/null +++ b/deployment/shroff-data-test/05b-buildconfig-base.yaml @@ -0,0 +1,24 @@ +apiVersion: build.openshift.io/v1 +kind: BuildConfig +metadata: + name: shroff-data-test-base + namespace: shroff-data-test +spec: + source: + type: Binary + binary: {} + strategy: + type: Docker + dockerStrategy: + dockerfilePath: deployment/Dockerfile.base + output: + to: + kind: ImageStreamTag + name: shroff-data-test-base:latest + triggers: [] +--- +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: shroff-data-test-base + namespace: shroff-data-test diff --git a/deployment/shroff-data/02-pvc.yaml b/deployment/shroff-data/02-pvc.yaml index 27dd368..9871a9a 100644 --- a/deployment/shroff-data/02-pvc.yaml +++ b/deployment/shroff-data/02-pvc.yaml @@ -30,6 +30,21 @@ spec: path: /nearline3/shroff readOnly: true --- +--- +# CephFS PVC for annotation_changes.h5 (user edits that must survive pod restarts). +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: shroff-data-annotations + namespace: shroff-data +spec: + accessModes: + - ReadWriteMany + storageClassName: ocs-storagecluster-cephfs + resources: + requests: + storage: 1Gi +--- apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/deployment/shroff-data/03-deployment.yaml b/deployment/shroff-data/03-deployment.yaml index aaeef33..6b0b246 100644 --- a/deployment/shroff-data/03-deployment.yaml +++ b/deployment/shroff-data/03-deployment.yaml @@ -242,10 +242,14 @@ spec: env: - name: SHROFF_HOST value: "shroff-data.int.janelia.org" + - name: ANNOTATION_CHANGES_PATH + value: /data/annotations/annotation_changes.h5 volumeMounts: - name: nearline mountPath: /nearline/shroff readOnly: true + - name: annotations + mountPath: /data/annotations resources: requests: memory: 2Gi @@ -268,6 +272,9 @@ spec: - name: nearline persistentVolumeClaim: claimName: shroff-data-nearline + - name: annotations + persistentVolumeClaim: + claimName: shroff-data-annotations - name: nginx-config configMap: name: nginx-config diff --git a/deployment/shroff-data/05b-buildconfig-base.yaml b/deployment/shroff-data/05b-buildconfig-base.yaml new file mode 100644 index 0000000..d6ac7d6 --- /dev/null +++ b/deployment/shroff-data/05b-buildconfig-base.yaml @@ -0,0 +1,24 @@ +apiVersion: build.openshift.io/v1 +kind: BuildConfig +metadata: + name: shroff-data-base + namespace: shroff-data +spec: + source: + type: Binary + binary: {} + strategy: + type: Docker + dockerStrategy: + dockerfilePath: deployment/Dockerfile.base + output: + to: + kind: ImageStreamTag + name: shroff-data-base:latest + triggers: [] +--- +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: shroff-data-base + namespace: shroff-data From e410a2db84fc20b4dcdf0d3b202d7a77fbaaad3c Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 13:44:45 -0400 Subject: [PATCH 26/39] Collect annotation changes path into a single function --- src/demo_averaging/fix_annotation_ap_axis.jl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index ff24367..b915fbd 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -10,6 +10,8 @@ using ShroffCelegansModels.HDF5 const ANNOTATION_PERSIST_SERVER_PORT = 3129 +annotation_changes_path() = get(ENV, "ANNOTATION_CHANGES_PATH", joinpath(@__DIR__, "..", "..", "annotation_changes.h5")) + function fix_annotation_ap_axis( avg_models, dataset::ShroffCelegansModels.Datasets.NormalizedDataset; @@ -477,7 +479,7 @@ function fix_annotation_ap_axis( common_annotations_text = _annotation_text @info common_annotations_text - h5open("annotation_changes.h5", "r", swmr=true) do h5f + h5open(annotation_changes_path(), "r", swmr=true) do h5f for time_idx in eachindex(cell_key_range) timepoint = cell_key_range[time_idx] for annotation_name in values(dataset.cell_key.mapping) @@ -712,7 +714,7 @@ function fix_annotation_ap_axis_persist_server(; port = ANNOTATION_PERSIST_SERVE c.annotation_name ) @info "Group name for HDF5: $group_name" - h5open("annotation_changes.h5", "cw", swmr=true) do h5f + h5open(annotation_changes_path(), "cw", swmr=true) do h5f if !haskey(h5f, group_name) create_group(h5f, group_name) end @@ -791,7 +793,7 @@ function shutdown_server() close(s) end -function load_annotation_changes_cache(filepath = joinpath(@__DIR__, "..", "..", "annotation_changes.h5")) +function load_annotation_changes_cache(filepath = annotation_changes_path()) # changes = Dict{String,Pair{Vector{Point3{Float64}},Vector{Point3{Float64}}}}() changes = Dict{String,Pair{Point3{Float64},Point3{Float64}}}() From e11b812556b590fe8f23b019e84c1a6cbb736325 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 15:08:48 -0400 Subject: [PATCH 27/39] Remove redundant AnnotationChanges constructor --- src/demo_averaging/fix_annotation_ap_axis.jl | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index ff24367..a79cc81 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -640,23 +640,6 @@ end original_position::Point3d new_position::Point3d end -function AnnotationChange(; - ip_address::UInt64, - dataset_path::String, - annotation_name::String, - timepoint::Int, - original_position::Point, - new_z_position::Float64 -) - return AnnotationChange( - ip_address, - dataset_path, - annotation_name, - timepoint, - original_position, - Point3d(original_position[1], new_z_position, original_position[3]) - ) -end function AnnotationChange( ip_address::UInt64, dataset_path::String, From f11f26360cbcb01b416b5fc456678cd92470c358 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 15:41:58 -0400 Subject: [PATCH 28/39] Add task to download annotation_changes.h5 to a dated file --- deployment/pixi.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/pixi.toml b/deployment/pixi.toml index 5ed1ac3..7f29e19 100644 --- a/deployment/pixi.toml +++ b/deployment/pixi.toml @@ -6,6 +6,7 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] +download-annotation-changes = { cmd = "oc cp -n shroff-data -c fix-ap-axis $(oc get pod -n shroff-data -l app=shroff-data -o jsonpath='{.items[0].metadata.name}'):/data/annotations/annotation_changes.h5 ../annotation_changes_$(date +%Y_%m_%d).h5" } [dependencies] openshift-cli = ">=4.20.2,<5" From 7ca8521922a0aa3e9111cd3522c3f5416e97b7c0 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 15:42:47 -0400 Subject: [PATCH 29/39] Add win-64 platform --- deployment/pixi.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/pixi.toml b/deployment/pixi.toml index 5ed1ac3..6edd63e 100644 --- a/deployment/pixi.toml +++ b/deployment/pixi.toml @@ -2,7 +2,7 @@ authors = ["Mark Kittisopikul "] channels = ["conda-forge"] name = "deployment" -platforms = ["linux-64"] +platforms = ["linux-64", "win-64"] version = "0.1.0" [tasks] From f66092a1335b0f5b924345ccba7837adc331abfb Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 15:51:14 -0400 Subject: [PATCH 30/39] Add download_annotation_changes.jl script --- deployment/download_annotation_changes.jl | 13 +++++++++++++ deployment/pixi.toml | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 deployment/download_annotation_changes.jl diff --git a/deployment/download_annotation_changes.jl b/deployment/download_annotation_changes.jl new file mode 100644 index 0000000..515fbe9 --- /dev/null +++ b/deployment/download_annotation_changes.jl @@ -0,0 +1,13 @@ +using Dates + +function (@main)(args) + date = Dates.format(Dates.today(), "yyyy_mm_dd") + + pod = strip(read(`oc get pod -n shroff-data -l app=shroff-data -o $("jsonpath={.items[0].metadata.name}")`, String)) + + dest = joinpath(@__DIR__, "..", "annotation_changes_$(date).h5") + + run(`oc cp -n shroff-data -c fix-ap-axis $(pod):/data/annotations/annotation_changes.h5 $(dest)`) + + println("Downloaded to $dest") +end diff --git a/deployment/pixi.toml b/deployment/pixi.toml index 7f29e19..33ecd65 100644 --- a/deployment/pixi.toml +++ b/deployment/pixi.toml @@ -6,7 +6,7 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] -download-annotation-changes = { cmd = "oc cp -n shroff-data -c fix-ap-axis $(oc get pod -n shroff-data -l app=shroff-data -o jsonpath='{.items[0].metadata.name}'):/data/annotations/annotation_changes.h5 ../annotation_changes_$(date +%Y_%m_%d).h5" } +download-annotation-changes = { cmd = "julia download_annotation_changes.jl" } [dependencies] openshift-cli = ">=4.20.2,<5" From d113aad4d58d931367727efd3cefae7acf95c4b3 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 15:56:04 -0400 Subject: [PATCH 31/39] Use a local dest in download_annotation_changes.jl --- deployment/download_annotation_changes.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/download_annotation_changes.jl b/deployment/download_annotation_changes.jl index 515fbe9..1d76f19 100644 --- a/deployment/download_annotation_changes.jl +++ b/deployment/download_annotation_changes.jl @@ -5,7 +5,7 @@ function (@main)(args) pod = strip(read(`oc get pod -n shroff-data -l app=shroff-data -o $("jsonpath={.items[0].metadata.name}")`, String)) - dest = joinpath(@__DIR__, "..", "annotation_changes_$(date).h5") + dest = "../annotation_changes_$(date).h5" run(`oc cp -n shroff-data -c fix-ap-axis $(pod):/data/annotations/annotation_changes.h5 $(dest)`) From be6f87f2b28953d76a4d0897c951b25a3f49d6cb Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 17:56:03 -0400 Subject: [PATCH 32/39] Add zscores as a web app --- deployment/pixi.lock | 9 +++ src/ShroffCelegansModels.jl | 3 + src/demo_averaging/save_cache.jl | 10 ++- src/demo_averaging/zscore_analysis.jl | 103 ++++++++++++++++---------- web/Project.toml | 1 + web/scripts/web_zscore_analysis.jl | 45 +++++++++++ 6 files changed, 127 insertions(+), 44 deletions(-) create mode 100644 web/scripts/web_zscore_analysis.jl diff --git a/deployment/pixi.lock b/deployment/pixi.lock index 3d69cbb..0083f85 100644 --- a/deployment/pixi.lock +++ b/deployment/pixi.lock @@ -8,6 +8,8 @@ environments: packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/openshift-cli-4.20.2-hfc2019e_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/openshift-cli-4.20.2-h11686cb_0.conda packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/openshift-cli-4.20.2-hfc2019e_0.conda sha256: 8ba453cb89a23fc27d8b712c406e7ad06ad9e65b2a9b6a11b6a5b91527a648fc @@ -16,3 +18,10 @@ packages: license_family: APACHE size: 107321457 timestamp: 1762191858837 +- conda: https://conda.anaconda.org/conda-forge/win-64/openshift-cli-4.20.2-h11686cb_0.conda + sha256: 9899cbfdb711ffca706fc526d907f2d9999512b64eb30c41bd5c2ed1c80b742d + md5: 960710ad8ca42e8c1b3fd6df1010a7bd + license: Apache-2.0 + license_family: APACHE + size: 106178707 + timestamp: 1762191879702 diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index 615ccae..d5bab2f 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -65,6 +65,9 @@ module ShroffCelegansModels include("parse_worm_dataset_path.jl") include("demo_averaging/read_config_json.jl") + # save_celegans_avg_models loads modelio + include("save_celegans_avg_models.jl") + include("demo_averaging/seam_cell_pts.jl") include("demo_averaging/fix_annotation_ap_axis.jl") include("makie.jl") diff --git a/src/demo_averaging/save_cache.jl b/src/demo_averaging/save_cache.jl index d87ff4d..0cf93ce 100644 --- a/src/demo_averaging/save_cache.jl +++ b/src/demo_averaging/save_cache.jl @@ -26,9 +26,12 @@ function save_annotation_cache() end end -function save_annotations_cache(annotations_cache = annotations_cache) +function save_annotations_cache( + annotations_cache = annotations_cache; + filename = joinpath(@__DIR__, "..", "..", "annotations_cache.h5") +) # annotations_cache - h5open("annotations_cache.h5", "w") do h5f + h5open(filename, "w") do h5f for (k,v) in annotations_cache _path, _range, _my_untwist = k parts = splitpath(_path) @@ -117,7 +120,8 @@ function load_annotations_cache( data_cache[k2] = pt cache[idx] = data_cache end - h5open("annotations_cache.h5", "r") do h5f + @info "Loading annotations cache from $filename" + h5open(filename, "r") do h5f _descend(h5f) end diff --git a/src/demo_averaging/zscore_analysis.jl b/src/demo_averaging/zscore_analysis.jl index 49b1538..9b81a03 100644 --- a/src/demo_averaging/zscore_analysis.jl +++ b/src/demo_averaging/zscore_analysis.jl @@ -1,7 +1,8 @@ -using HDF5 -using StatsBase: zscore -using DataFrames -using CSV +using ShroffCelegansModels.HDF5 +using ShroffCelegansModels.StatsBase: zscore +using ShroffCelegansModels.DataFrames +using ShroffCelegansModels.CSV +using ShroffCelegansModels.GeometryBasics using Printf function zscore_analysis() @@ -32,22 +33,36 @@ function raw_zscore_analysis( threshold=1, time_threshold=1 ) - for group in keys(datasets) - for embryo in keys(datasets[group]) + d = map(collect(keys(datasets))) do group + group => map(collect(keys(datasets[group]))) do embryo dataset = datasets[group][embryo] dict = raw_annotation_dict(dataset) - zscores = zscore(map(values(dict)) do timeseries - sqrt(sum(diff((x->x[3]).(skipmissing(timeseries))).^2)) - end) - annotation_names = keys(dict) - for (annotation, zscore) in zip(annotation_names, zscores) - if zscore > threshold - #println(group, ", ", embryo, ", ", annotation, ", ", zscore) - dataset_to_links(datasets, group, embryo, time_threshold) .|> println - end - end + map(collect(keys(dict))) do annotation + timeseries = dict[annotation] + annotation => sqrt(sum(diff((x->x[3]).(skipmissing(timeseries))).^2)) + end |> Dict end + end |> Dict + flattened_dict = Dict( + (group,embyro,annotation) => value + for (group, embyros) in d + for (embyro,annotations) in pairs(embyros) + for (annotation,value) in annotations + ) + zscore_dict = Dict(keys(flattened_dict) .=> zscore(values(flattened_dict) |> collect)) + filtered_zscore_dict = filter(zscore_dict) do (k, zscore) + zscore > threshold end + map(keys(filtered_zscore_dict) |> collect) do k + (group, embryo, annotation) = k + dataset = datasets[group][embryo] + dict = raw_annotation_dict(dataset) + timeseries = dict[annotation] + timepoint = find_max_diff_idx(timeseries) + dataset.cell_key.start - 1 + # println(group, ", ", embryo, ", ", annotation, ", ", zscore, ", ", timepoint) + # get_fix_url(group, embryo, annotation, timepoint) + (;group, embryo, annotation, timepoint, zscore = zscore_dict[k], link = get_fix_url(group, embryo, annotation, timepoint)) + end |> DataFrame end function raw_annotation_dict(dataset; use_myuntwist = true) straighted_annotations_over_time = ShroffCelegansModels.load_straightened_annotations_over_time(dataset; use_myuntwist) @@ -63,33 +78,42 @@ function raw_annotation_dict(dataset; use_myuntwist = true) return Dict(values(mapping) .=> timeseries) end +function find_max_diff_idx(timeseries::Vector{Union{Missing, Point3d}}) + idx = [i for (i, point) in enumerate(timeseries) if !ismissing(point)] + delta = diff((x->x[3]).(skipmissing(timeseries))) + abs_delta = abs.(delta) + i_max = argmax(abs_delta) + if i_max == 1 || i_max == length(idx) + return idx[i_max] + end + if delta[i_max] > 0 + if delta[i_max-1] < -delta[i_max]/2 + return idx[i_max] + else + return idx[i_max+1] + end + else + if delta[i_max-1] > -delta[i_max]/2 + return idx[i_max] + else + return idx[i_max+1] + end + end +end +function find_max_diff_idx( + dataset::ShroffCelegansModels.NormalizedDataset, + annotation::String, + dict::Dict{String, Vector{Union{Missing, Point3d}}} = raw_annotation_dict(dataset) +) + find_max_diff_idx(dict[annotation]) + dataset.cell_key.start - 1 +end function zscore_dict(dataset; use_myuntwist = true) dict = raw_annotation_dict(dataset; use_myuntwist) zscores = zscore(map(values(dict)) do timeseries sqrt(sum(diff((x->x[3]).(skipmissing(timeseries))).^2)) end) indices = map(values(dict)) do timeseries - idx = [i for (i, point) in enumerate(timeseries) if !ismissing(point)] - delta = diff((x->x[3]).(skipmissing(timeseries))) - abs_delta = abs.(delta) - i_max = argmax(abs_delta) - #return delta[i_max-1:i_max+1] - if i_max == 1 || i_max == length(idx) - return idx[i_max] + dataset.cell_key.start - 1 - end - if delta[i_max] > 0 - if delta[i_max-1] < -delta[i_max]/2 - return idx[i_max] + dataset.cell_key.start - 1 - else - return idx[i_max+1] + dataset.cell_key.start - 1 - end - else - if delta[i_max-1] > -delta[i_max]/2 - return idx[i_max] + dataset.cell_key.start - 1 - else - return idx[i_max+1] + dataset.cell_key.start - 1 - end - end + find_max_diff_idx(timeseries) + dataset.cell_key.start - 1 end return Dict(keys(dict) .=> zip(zscores, indices)) @@ -97,10 +121,7 @@ end function outlier_dict(dataset; use_myuntwist = true) dict = raw_annotation_dict(dataset; use_myuntwist) indices = map(values(dict)) do timeseries - idx = [i for (i, point) in enumerate(timeseries) if !ismissing(point)] - abs_delta = abs.(diff((x->x[3]).(skipmissing(timeseries)))) - i_max = argmax(abs_delta) - return idx[i_max] + find_max_diff_idx(timeseries) + dataset.cell_key.start - 1 end return Dict(keys(dict) .=> indices) end diff --git a/web/Project.toml b/web/Project.toml index 6a97df1..6d67f27 100644 --- a/web/Project.toml +++ b/web/Project.toml @@ -3,6 +3,7 @@ Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" Bonito = "824d6782-a2ef-11e9-3a09-e5662e0c26f8" CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3" diff --git a/web/scripts/web_zscore_analysis.jl b/web/scripts/web_zscore_analysis.jl new file mode 100644 index 0000000..7ffb95e --- /dev/null +++ b/web/scripts/web_zscore_analysis.jl @@ -0,0 +1,45 @@ +using WGLMakie +using Bonito +using Sockets + + +if abspath(PROGRAM_FILE) == @__FILE__ + global run_web_main::Bool = true +end + +include("../../scripts/launch_show_average_annotations.jl") +include("../../src/demo_averaging/zscore_analysis.jl") + +function web_zscore_analysis(datasets = datasets) + @info "Loading annotation changes" + annotation_changes = ShroffCelegansModels.load_annotation_changes_cache() + ShroffCelegansModels.update_annotations_cache(ShroffCelegansModels.annotations_cache, annotation_changes); + @info "Loaded annotation changes" + shroff_data_ip = "0.0.0.0" + server = Server( + shroff_data_ip, 9300; + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/zscore_analysis/" + ) + route!(server, "/" => App(; title="Shroff C. elegans z-score analysis") do + df = raw_zscore_analysis(datasets) + sort!(df, :zscore, rev=true) + select!(df, :, :link => ByRow(x->DOM.a(x; href=x)) => :link) + table = Bonito.Table(df) + return table + end) + return server +end + +function web_main() + WGLMakie.activate!(; resize_to = :body) + server = web_zscore_analysis() +end + +println(@__FILE__) +println(abspath(PROGRAM_FILE)) + +if run_web_main + wait(web_main()) + println("Press enter to quit") + readline() +end \ No newline at end of file From 037eed2e836d7e97f1b11c3e57d37dd7d9c17637 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 22:39:12 -0400 Subject: [PATCH 33/39] Set up deployment for zscore-analysis, testing --- deployment/shroff-data-test/01-configmap.yaml | 9 +++ .../shroff-data-test/03-deployment.yaml | 57 +++++++++++++++++++ deployment/shroff-data/01-configmap.yaml | 9 +++ deployment/shroff-data/03-deployment.yaml | 33 +++++++++++ web/static/index.html | 1 + 5 files changed, 109 insertions(+) diff --git a/deployment/shroff-data-test/01-configmap.yaml b/deployment/shroff-data-test/01-configmap.yaml index 34a0842..912b773 100644 --- a/deployment/shroff-data-test/01-configmap.yaml +++ b/deployment/shroff-data-test/01-configmap.yaml @@ -91,6 +91,15 @@ data: proxy_read_timeout 600s; } + location /zscore_analysis/ { + proxy_pass http://localhost:9300/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + location /fix_annotation_ap_axis/ { proxy_pass http://localhost:9381/; proxy_http_version 1.1; diff --git a/deployment/shroff-data-test/03-deployment.yaml b/deployment/shroff-data-test/03-deployment.yaml index 1195cd1..739f448 100644 --- a/deployment/shroff-data-test/03-deployment.yaml +++ b/deployment/shroff-data-test/03-deployment.yaml @@ -236,6 +236,63 @@ spec: failureThreshold: 10 periodSeconds: 30 + - name: debug-zscore + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: ["sleep", "infinity"] + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + - name: ANNOTATION_CHANGES_PATH + value: /data/annotations/annotation_changes.h5 + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + - name: annotations + mountPath: /data/annotations + resources: + requests: + memory: 4Gi + cpu: 250m + limits: + memory: 8Gi + cpu: "2" + + - name: zscore-analysis + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --threads=auto + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_zscore_analysis.jl + ports: + - containerPort: 9300 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + - name: ANNOTATION_CHANGES_PATH + value: /data/annotations/annotation_changes.h5 + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + - name: annotations + mountPath: /data/annotations + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9300 + failureThreshold: 10 + periodSeconds: 30 + - name: fix-ap-axis image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: diff --git a/deployment/shroff-data/01-configmap.yaml b/deployment/shroff-data/01-configmap.yaml index d797af9..99bb529 100644 --- a/deployment/shroff-data/01-configmap.yaml +++ b/deployment/shroff-data/01-configmap.yaml @@ -91,6 +91,15 @@ data: proxy_read_timeout 600s; } + location /zscore_analysis/ { + proxy_pass http://localhost:9300/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } + location /fix_annotation_ap_axis/ { proxy_pass http://localhost:9381/; proxy_http_version 1.1; diff --git a/deployment/shroff-data/03-deployment.yaml b/deployment/shroff-data/03-deployment.yaml index 6b0b246..fe06804 100644 --- a/deployment/shroff-data/03-deployment.yaml +++ b/deployment/shroff-data/03-deployment.yaml @@ -230,6 +230,39 @@ spec: failureThreshold: 10 periodSeconds: 30 + - name: zscore-analysis + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_zscore_analysis.jl + ports: + - containerPort: 9300 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + - name: ANNOTATION_CHANGES_PATH + value: /data/annotations/annotation_changes.h5 + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + - name: annotations + mountPath: /data/annotations + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 3Gi + cpu: "2" + startupProbe: + tcpSocket: + port: 9300 + failureThreshold: 10 + periodSeconds: 30 + - name: fix-ap-axis image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest command: diff --git a/web/static/index.html b/web/static/index.html index 45eb7fe..1782858 100644 --- a/web/static/index.html +++ b/web/static/index.html @@ -10,6 +10,7 @@

Internal Shroff Data

  • Debug Annotation AP Axis (Live untwisting!)
  • Debug Annotation AP Axis Retrack (Live untwisting!)
  • Fix Annotation AP Axis
  • +
  • Z-Score Analysis
  • Mesh Scatter
    • Mesh Scatter Average Edited
    • From 847dfb43b598a5f9f10e176267ce982a6192be11 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 7 May 2026 22:39:52 -0400 Subject: [PATCH 34/39] Fix zscore analysis and Win and Linux paths --- scripts/launch_show_average_annotations.jl | 2 +- src/ShroffCelegansModels.jl | 2 +- src/demo_averaging/fix_annotation_ap_axis.jl | 27 ++++++++---- src/demo_averaging/loading.jl | 46 +------------------- src/demo_averaging/save_cache.jl | 4 +- src/demo_averaging/zscore_analysis.jl | 6 +-- web/scripts/web_zscore_analysis.jl | 4 +- 7 files changed, 28 insertions(+), 63 deletions(-) diff --git a/scripts/launch_show_average_annotations.jl b/scripts/launch_show_average_annotations.jl index 6b18960..11ee371 100644 --- a/scripts/launch_show_average_annotations.jl +++ b/scripts/launch_show_average_annotations.jl @@ -89,7 +89,7 @@ end if gethostname() == "KITTISOPIKULM-2" alias_cache("X") else - alias_cache_unix("/nearline/shroff") + alias_cache_unix("/nearline/shroff/") end function main() diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index d5bab2f..96512bd 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -31,7 +31,7 @@ module ShroffCelegansModels if gethostname() == "KITTISOPIKULM-2" const config_path = raw"D:\shroff\python_model_building\C-Elegans-Model-Generation\config_2026_03_19_v2.json" else - const config_path = joinpath(@__DIR__, "..", "..", "config", "linux", "config_2026_03_19_v2.json") + const config_path = joinpath(@__DIR__, "..", "config", "linux", "config_2026_03_19_v2.json") end const voxel_size = 0.1625 # um diff --git a/src/demo_averaging/fix_annotation_ap_axis.jl b/src/demo_averaging/fix_annotation_ap_axis.jl index 77ff388..3d4d916 100644 --- a/src/demo_averaging/fix_annotation_ap_axis.jl +++ b/src/demo_averaging/fix_annotation_ap_axis.jl @@ -634,7 +634,7 @@ function fix_annotation_ap_axis( f end -@kwdef struct AnnotationChange +struct AnnotationChange ip_address::UInt64 dataset_path::String annotation_name::String @@ -642,15 +642,19 @@ end original_position::Point3d new_position::Point3d end -function AnnotationChange( +function AnnotationChange(; ip_address::UInt64, dataset_path::String, annotation_name::String, timepoint::Int, original_position::Point, - new_z_position::Float64 + new_position::Union{Point, Nothing} = nothing, + new_z_position::Union{Float64, Nothing} = nothing, ) - new_position = Point3d(original_position[1], new_z_position, original_position[3]) + isnothing(new_position) && isnothing(new_z_position) && throw(ArgumentError("One of new_position or new_z_position must be provided")) + if isnothing(new_position) + new_position = Point3d(original_position[1], new_z_position, original_position[3]) + end return AnnotationChange( ip_address, dataset_path, @@ -868,17 +872,17 @@ function update_annotations_cache( annotations_cache_keys = keys(annotations_cache) key_map_dict = Dict(first.(annotations_cache_keys) .=> annotations_cache_keys) for (change_key, (old_pt, new_pt)) in annotations_changes - change_key_parts = splitpath(change_key) + change_key_parts = split(change_key, "\\") timepoint = tryparse(Int, change_key_parts[end-3]) if isnothing(timepoint) # Case when annotation name does not contain a slash timepoint = parse(Int, change_key_parts[end-2]) - dataset_path = joinpath(change_key_parts[begin:end-3]) + dataset_path = join(change_key_parts[begin:end-3], "\\") annotation_name = change_key_parts[end-1] else # Case when annotation name contains a slash # timepoint is change_key_parts[end-3] - dataset_path = joinpath(change_key_parts[begin:end-4]) + dataset_path = join(change_key_parts[begin:end-4], "\\") annotation_name = change_key_parts[end-2] * "/" * change_key_parts[end-1] end # Could error if dataset_path is not in key_map_dict @@ -887,10 +891,15 @@ function update_annotations_cache( continue end annotations_cache_key = key_map_dict[dataset_path] - dataset = ShroffCelegansModels.Dataset(dataset_path) + local_dataset_path = dataset_path + if Sys.isunix() + local_dataset_path = replace(local_dataset_path, raw"X:\\" => "/nearline/shroff/") + local_dataset_path = replace(local_dataset_path, "\\" => "/") + end + dataset = ShroffCelegansModels.Dataset(local_dataset_path) annotation_symbol = findfirst(==(annotation_name), dataset.cell_key.mapping) if isnothing(annotation_symbol) - @warn "Annotation $annotation_name not found in dataset $dataset_path, skipping change at timepoint $timepoint" + @warn "Annotation $annotation_name not found in dataset $local_dataset_path, skipping change at timepoint $timepoint" continue end # timepoint above is the actual timepoint, but we need to adjust it to the dataset's range diff --git a/src/demo_averaging/loading.jl b/src/demo_averaging/loading.jl index 45d713d..a362532 100644 --- a/src/demo_averaging/loading.jl +++ b/src/demo_averaging/loading.jl @@ -23,30 +23,17 @@ end |> minimum normal_flattened_datasets = filter(x->length(range(x.cell_key)) != 259, flattened_datasets) normal_flattened_datasets = filter(x->x.cell_key.name != "Vab-1_Pos0",normal_flattened_datasets) -#normal_flattened_datasets = filter(x->x.path != "X:\\shrofflab\\JCC596_NU\\Untwisting_Redo\\082619_Pos3\\RegB", normal_flattened_datasets) smts_datasets = ShroffCelegansModels.StraightenedModelTimeSeries.(normal_flattened_datasets) lengths = normal_flattened_datasets .|> x->length(range(x.cell_key)) smts_datasets_nt = map(zip(smts_datasets, lengths)) do (ds, _length) x -> begin nt = x * (_length - 1) + 1.0 - # @info "Normalized time" nt ds(nt) end end models_at_nt(nt) = map(smts_datasets_nt) do ds ds(nt) end -# r = LinRange(0.0, 1.0, 201) -#= -avg_models = map(r) do nt - @info nt - models = models_at_nt(nt) - models = filter(!isnothing, models) - models = identity.(models) - ShroffCelegansModels.average(models; n_upsample = 2) -end -=# - include("../save_celegans_avg_models.jl") recalculate_avg_models = false @@ -59,28 +46,7 @@ else avg_models = load_avg_models("celegans_avg_models_2024_07_26.h5") end -#= -nothing_count = map(r) do nt - @info nt - models = models_at_nt(nt) - return sum(isnothing.(models)) - models = filter(!isnothing, models) - models = identity.(models) - ShroffCelegansModels.average(models; n_upsample = 2) -end -=# - -# Straightened annotations -const annotations_cache = Dict{Tuple{String, UnitRange, Bool}, Vector}() -# Warped annotations, with MIPAV straightening -const annotation_position_cache = Dict{String, Any}() -#const my_annotation_position_cache = Dict{String, Any}() -# Warped annotations, with Mark's straightening -const my_annotation_position_cache = Dict{String, Vector{Vector{Point3{Float64}}}}() - -# TODO: Move from demo_averaging:408 -# const annotations_cache = Dict{Tuple{String, UnitRange, Bool}, Vector}() - +using ShroffCelegansModels: annotations_cache, annotation_position_cache, my_annotation_position_cache int_ds = filter(flattened_datasets) do ds "int1dr" in values(ds.cell_key.mapping) @@ -89,15 +55,5 @@ const my_annotation_position_cache = Dict{String, Vector{Vector{Point3{Float64}} _length2 = length(range(int_ds[2].cell_key)) smts_nt2 = x -> begin nt = x * (_length2 - 1) + 1.0 - # @info "Normalized time" nt smts2(nt, 2) end - -include("save_cache.jl") - -# initialize my_annotation_position_cache -@info "Loading straightened annotation positions..." -load_annotation_cache() -@info "Loading warped annotation positions..." -load_annotations_cache() - diff --git a/src/demo_averaging/save_cache.jl b/src/demo_averaging/save_cache.jl index 0cf93ce..4901c87 100644 --- a/src/demo_averaging/save_cache.jl +++ b/src/demo_averaging/save_cache.jl @@ -98,8 +98,8 @@ function load_annotations_cache( P = parent(P) end - _paths[1] = _paths[1] * ":\\" - _path = joinpath(_paths...) + _paths[1] = _paths[1] * ":" + _path = join(_paths, "\\") data = d[] pt = Point3{Float64}(data) diff --git a/src/demo_averaging/zscore_analysis.jl b/src/demo_averaging/zscore_analysis.jl index 9b81a03..b783fed 100644 --- a/src/demo_averaging/zscore_analysis.jl +++ b/src/demo_averaging/zscore_analysis.jl @@ -125,10 +125,10 @@ function outlier_dict(dataset; use_myuntwist = true) end return Dict(keys(dict) .=> indices) end -const base_url = "https://shroff-data.int.janelia.org/fix_annotation_ap_axis/%s/%d?annotation=%s&timepoint=%d" function get_fix_url(group, group_idx, annotation, timepoint) return @sprintf( - "https://shroff-data.int.janelia.org/fix_annotation_ap_axis/%s/%d?annotation=%s&timepoint=%d", + "https://%s/fix_annotation_ap_axis/%s/%d?annotation=%s&timepoint=%d", + get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"), group, group_idx, annotation, @@ -153,4 +153,4 @@ function list_outliers(;threshold=1) dataset_to_links(datasets, k1, k2, threshold) .|> println; end end -end \ No newline at end of file +end diff --git a/web/scripts/web_zscore_analysis.jl b/web/scripts/web_zscore_analysis.jl index 7ffb95e..c8e5530 100644 --- a/web/scripts/web_zscore_analysis.jl +++ b/web/scripts/web_zscore_analysis.jl @@ -21,7 +21,7 @@ function web_zscore_analysis(datasets = datasets) proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/zscore_analysis/" ) route!(server, "/" => App(; title="Shroff C. elegans z-score analysis") do - df = raw_zscore_analysis(datasets) + df = raw_zscore_analysis(datasets; threshold=-Inf) sort!(df, :zscore, rev=true) select!(df, :, :link => ByRow(x->DOM.a(x; href=x)) => :link) table = Bonito.Table(df) @@ -42,4 +42,4 @@ if run_web_main wait(web_main()) println("Press enter to quit") readline() -end \ No newline at end of file +end From 26e987e56505db311af0116b6150b0fc4683bac0 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Wed, 20 May 2026 15:53:17 -0400 Subject: [PATCH 35/39] Add modified time tracking, add get_avg_models Add get_avg_models to package. --- src/MIPAVIO.jl | 83 +++++++++++++++++++++++++++- src/ShroffCelegansModels.jl | 4 ++ src/demo_averaging/get_avg_models.jl | 13 ----- 3 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/MIPAVIO.jl b/src/MIPAVIO.jl index 2b070c8..56e24e5 100644 --- a/src/MIPAVIO.jl +++ b/src/MIPAVIO.jl @@ -12,6 +12,8 @@ module MIPAVIO using CSV: CSV using ShroffCelegansModels: Datasets using Statistics: mean + using Dates: DateTime, unix2datetime, TimeType + using HDF5: h5open, create_group, attrs export mipav_df_to_points, mipav_df_to_point_dict @@ -62,7 +64,7 @@ module MIPAVIO return missing else filepath = joinpath(ds.path, "Decon_reg_$(timepoint)", "Decon_reg_$(timepoint)_results", data_path) - @info "Filepath" filepath + @debug "Filepath" filepath if isfile(filepath) return filepath else @@ -117,4 +119,83 @@ module MIPAVIO end return annotations end + + function get_modified_times_unix(dataset::Datasets.NormalizedDataset)::Vector{Float64} + map(1:length(range(dataset.cell_key))) do i + try + path = get_integrated_annotations_path(dataset, i) + ismissing(path) && return NaN + path_stat = stat(path) + path_stat.mtime + catch + NaN + end + end + end + + function get_modified_times_unix( + datasets::Dict{String, Vector{Datasets.NormalizedDataset}} + )::Dict{String,Vector{Vector{Float64}}} + Dict(k => get_modified_times_unix.(v) for (k,v) in datasets) + end + + function save_modified_times_unix( + datasets::Dict{String, Vector{Datasets.NormalizedDataset}}, + modified_times::Dict{String,Vector{Vector{Float64}}} = get_modified_times_unix(datasets); + filepath::String + ) + h5open(filepath, "w") do h5f + for group in keys(datasets) + h5g = create_group(h5f, group) + for (k,v) in pairs(modified_times[group]) + h5g[string(k)] = v + A = attrs(h5f[group][string(k)]) + dataset = datasets[group][k] + A["path"] = dataset.path + A["cell_key.name"] = dataset.cell_key.name + A["cell_key.start"] = dataset.cell_key.start + A["cell_key.end"] = dataset.cell_key.stop + A["cell_key.outliers"] = dataset.cell_key.outliers + end + end + end + end + + function get_modified_times(dataset::Datasets.NormalizedDataset)::Vector{Union{Missing,DateTime}} + map(1:length(range(dataset.cell_key))) do i + path = get_integrated_annotations_path(dataset, i) + ismissing(path) && return missing + path_stat = stat(path) + unix2datetime(path_stat.mtime) + end + end + + function get_last_modified_time(dataset::Datasets.NormalizedDataset) + mtimes = get_modified_times(dataset) + if all(ismissing, mtimes) + return missing + else + return maximum(skipmissing(mtimes)) + end + end + + function print_integrated_annotations_modified_since( + datasets::Dict{String, Vector{Datasets.NormalizedDataset}}, + since::TimeType; + modified_times = get_modified_times_unix(datasets) + ) + for group in keys(modified_times) + for idx in keys(modified_times[group]) + for tp in keys(modified_times[group][idx]) + ds = datasets[group][idx] + u = modified_times[group][idx][tp] + if !isnan(u) && unix2datetime(u) > since + path = get_integrated_annotations_path(ds, idx) + println(group, ", ", idx, ", ", tp, ", ", unix2datetime(u)) + # println(path) + end + end + end + end + end end \ No newline at end of file diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index 96512bd..067c536 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -69,6 +69,10 @@ module ShroffCelegansModels include("save_celegans_avg_models.jl") include("demo_averaging/seam_cell_pts.jl") include("demo_averaging/fix_annotation_ap_axis.jl") + include("demo_averaging/get_avg_models.jl") + include("demo_averaging/get_group_annotation_positions_over_time.jl") + include("demo_averaging/transform_annotations.jl") + include("demo_averaging/average_annotations.jl") include("makie.jl") include("precompile.jl") diff --git a/src/demo_averaging/get_avg_models.jl b/src/demo_averaging/get_avg_models.jl index f6a444b..af5b311 100644 --- a/src/demo_averaging/get_avg_models.jl +++ b/src/demo_averaging/get_avg_models.jl @@ -1,6 +1,3 @@ -using ShroffCelegansModels -using ProgressMeter - function get_avg_models(n=201) config_json, cell_keys, datasets = read_config_json() @@ -44,14 +41,4 @@ function get_avg_models(n=201) avg_models[i] = ShroffCelegansModels.average(models; n_upsample = 2) end return avg_models - - #= - avg_models = map(r) do nt - @info nt - models = models_at_nt(nt) - models = filter(!isnothing, models) - models = identity.(models) - ShroffCelegansModels.average(models; n_upsample = 2) - end - =# end \ No newline at end of file From a619e1f1c7ea555d7b1e684c223947610e2b6fc4 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Wed, 20 May 2026 16:17:44 -0400 Subject: [PATCH 36/39] Use get_group_annotation_positions_over_time --- src/ShroffCelegansModels.jl | 2 +- src/demo_averaging/average_annotations.jl | 4 ++-- src/demo_averaging/get_avg_models.jl | 2 +- .../get_group_annotation_positions_over_time.jl | 4 +--- src/demo_averaging/show_average_annotations.jl | 10 +++++----- src/demo_averaging/show_average_annotations_figure.jl | 3 ++- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/ShroffCelegansModels.jl b/src/ShroffCelegansModels.jl index 067c536..14f654c 100644 --- a/src/ShroffCelegansModels.jl +++ b/src/ShroffCelegansModels.jl @@ -70,8 +70,8 @@ module ShroffCelegansModels include("demo_averaging/seam_cell_pts.jl") include("demo_averaging/fix_annotation_ap_axis.jl") include("demo_averaging/get_avg_models.jl") - include("demo_averaging/get_group_annotation_positions_over_time.jl") include("demo_averaging/transform_annotations.jl") + include("demo_averaging/get_group_annotation_positions_over_time.jl") include("demo_averaging/average_annotations.jl") include("makie.jl") diff --git a/src/demo_averaging/average_annotations.jl b/src/demo_averaging/average_annotations.jl index 220eaba..97c5e05 100644 --- a/src/demo_averaging/average_annotations.jl +++ b/src/demo_averaging/average_annotations.jl @@ -5,8 +5,8 @@ using CSV using DataFrames using HDF5 -include("get_group_annotation_positions_over_time.jl") -using ShroffCelegansModels: CelegansModel, get_datasets_info +# include("get_group_annotation_positions_over_time.jl") +using ShroffCelegansModels: CelegansModel, get_datasets_info, get_group_annotation_positions_over_time, annotation_positions function average_annotations( datasets::Vector{ShroffCelegansModels.Datasets.NormalizedDataset}; diff --git a/src/demo_averaging/get_avg_models.jl b/src/demo_averaging/get_avg_models.jl index af5b311..fb1f126 100644 --- a/src/demo_averaging/get_avg_models.jl +++ b/src/demo_averaging/get_avg_models.jl @@ -33,7 +33,7 @@ function get_avg_models(n=201) end avg_models = Vector{typeof(first_avg_model)}(undef, length(r)) avg_models[1] = first_avg_model - @showprogress desc="Averaging models..." Threads.@threads for i in eachindex(r)[2:end] + ProgressMeter.@showprogress desc="Averaging models..." Threads.@threads for i in eachindex(r)[2:end] nt = r[i] models = models_at_nt(nt) models = filter(!isnothing, models) diff --git a/src/demo_averaging/get_group_annotation_positions_over_time.jl b/src/demo_averaging/get_group_annotation_positions_over_time.jl index bd02ecf..f943d77 100644 --- a/src/demo_averaging/get_group_annotation_positions_over_time.jl +++ b/src/demo_averaging/get_group_annotation_positions_over_time.jl @@ -1,7 +1,5 @@ using ShroffCelegansModels: CelegansModel, Datasets -include("transform_annotations.jl") - function get_datasets_info(datasets) use_myuntwist = true datasets_info = map(datasets) do dataset @@ -78,7 +76,7 @@ function get_group_annotation_positions_over_time( else #_annotation_positions_over_time = annotation_positions.((smts_nt,), (annotation_dict,), r) _annotation_positions_over_time = Vector{Vector{Point3{Float64}}}(undef, length(normalized_timepoints)) - @showprogress Threads.@threads for i in eachindex(normalized_timepoints) + ProgressMeter.@showprogress Threads.@threads for i in eachindex(normalized_timepoints) nt = normalized_timepoints[i] _annotation_positions_over_time[i] = annotation_positions(smts_nt, annotation_dict, nt; avg_models) end diff --git a/src/demo_averaging/show_average_annotations.jl b/src/demo_averaging/show_average_annotations.jl index 57e103e..060bcc7 100644 --- a/src/demo_averaging/show_average_annotations.jl +++ b/src/demo_averaging/show_average_annotations.jl @@ -3,8 +3,8 @@ using ShroffCelegansModels.Statistics: mean, var using ShroffCelegansModels.CoordinateTransformations using ShroffCelegansModels.FFTW: fftfreq, fft, ifft -include("../makie.jl") -include("get_group_annotation_positions_over_time.jl") +#include("../makie.jl") +#include("get_group_annotation_positions_over_time.jl") function show_average_annotations( avg_models::Vector{<: ShroffCelegansModels.Types.CelegansModel}, @@ -36,7 +36,7 @@ function show_average_annotations( ylims!(ax_2d_3, (0, 250)) # xlabel!("Time (Normalized)") - N_timepoints = 200 + N_timepoints = length(avg_models) - 1 r = LinRange(0.0, 1.0, N_timepoints + 1) sliders = SliderGrid(f[4,1:3], (label="Time (Normalized)", range=r), @@ -226,7 +226,7 @@ function show_average_annotations( end end # Vector{Vector{Dict{String, Point3{Float64}}}} # dataset, normalized time, name => position =# - group_annotation_positions_over_time = get_group_annotation_positions_over_time(datasets, cache) + group_annotation_positions_over_time = get_group_annotation_positions_over_time(datasets, cache, LinRange(0,1,length(avg_models)); avg_models) # averaging _annotation_positions_over_time = map(eachindex(r)) do j @@ -462,7 +462,7 @@ function show_average_annotations( on(throttle(0.1, sliders.sliders[2].value)) do smooth_factor value = sliders.sliders[1].value[] - idx = round(Int, value*200 + 1) + idx = round(Int, value*N_timepoints + 1) smooth_factor_θ = sliders.sliders[3].value[] smooth_factor_z = sliders.sliders[4].value[] if smooth_factor > 0 || smooth_factor_θ > 0 || smooth_factor_z > 0 diff --git a/src/demo_averaging/show_average_annotations_figure.jl b/src/demo_averaging/show_average_annotations_figure.jl index c34139b..f923701 100644 --- a/src/demo_averaging/show_average_annotations_figure.jl +++ b/src/demo_averaging/show_average_annotations_figure.jl @@ -4,7 +4,8 @@ using CoordinateTransformations using FFTW: fftfreq, fft, ifft include("../makie.jl") -include("get_group_annotation_positions_over_time.jl") +# include("get_group_annotation_positions_over_time.jl") +using ShroffCelegansModels: CelegansModel, get_datasets_info, get_group_annotation_positions_over_time, annotation_positions function yellow_figure( avg_models::Vector{<: ShroffCelegansModels.Types.CelegansModel}, From 8732792d78f6321f99e0d7e653ed42bec732e185 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 21 May 2026 03:34:12 -0400 Subject: [PATCH 37/39] Add daily mtime tracking for integrated annotations - save_modified_times.jl scans integrated_annotation CSVs across every dataset and writes both a timestamped snapshot and a "latest" copy. Uses atomic temp+rename so readers never see a partial file. - 07-cronjob-modified-times.yaml runs it daily at 02:00 America/New_York in shroff-data-test, writing to the annotations PVC. - web_modified_times.jl serves a nested collapsible HTML tree at /modified_times/ (strain -> dataset -> per-timepoint mtimes), highlighting the most-recent entry at each level. - Wired the web app into the shroff-data-test deployment + nginx configmap and linked from the static index. - README: document running oc via pixi (openshift-cli from conda-forge). Co-Authored-By: Claude Opus 4.7 --- deployment/README.md | 22 +++ deployment/shroff-data-test/01-configmap.yaml | 9 + .../shroff-data-test/03-deployment.yaml | 32 ++++ .../07-cronjob-modified-times.yaml | 62 +++++++ web/scripts/save_modified_times.jl | 65 +++++++ web/scripts/web_modified_times.jl | 160 ++++++++++++++++++ web/static/index.html | 1 + 7 files changed, 351 insertions(+) create mode 100644 deployment/shroff-data-test/07-cronjob-modified-times.yaml create mode 100644 web/scripts/save_modified_times.jl create mode 100644 web/scripts/web_modified_times.jl diff --git a/deployment/README.md b/deployment/README.md index e18209a..189780d 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -35,6 +35,28 @@ ShroffCelegansModels.jl/ # Repo root — also the Docker build context All `oc` commands below must be run from the **repo root** (`ShroffCelegansModels.jl/`), which is the Docker build context. +## Prerequisites: `oc` via pixi + +The OpenShift CLI is provided by [pixi](https://pixi.sh/) — see `deployment/pixi.toml` +(`openshift-cli` from conda-forge). The system `PATH` does not include `oc`; invoke it +through pixi instead. + +Pick one of the following: + +```bash +# Option A — prefix every command (works from repo root) +pixi run --manifest-path deployment/pixi.toml oc whoami + +# Option B — drop into a shell with oc on PATH +cd deployment && pixi shell # then `oc ...` works; `cd ..` back to repo root for builds + +# Option C — alias in your own shell +alias oc='pixi run --manifest-path '"$PWD"'/deployment/pixi.toml oc' +``` + +The `oc` invocations in the rest of this README assume one of the above is in effect. +Log in with `oc login ...` against the cluster before continuing. + ## Two-stage build The build is split into two images to keep routine deploys fast: diff --git a/deployment/shroff-data-test/01-configmap.yaml b/deployment/shroff-data-test/01-configmap.yaml index 912b773..d3c0242 100644 --- a/deployment/shroff-data-test/01-configmap.yaml +++ b/deployment/shroff-data-test/01-configmap.yaml @@ -108,4 +108,13 @@ data: proxy_set_header Host $host; proxy_read_timeout 600s; } + + location /modified_times/ { + proxy_pass http://localhost:9400/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } } diff --git a/deployment/shroff-data-test/03-deployment.yaml b/deployment/shroff-data-test/03-deployment.yaml index 739f448..04c5dce 100644 --- a/deployment/shroff-data-test/03-deployment.yaml +++ b/deployment/shroff-data-test/03-deployment.yaml @@ -293,6 +293,38 @@ spec: failureThreshold: 10 periodSeconds: 30 + - name: modified-times + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --threads=auto + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_modified_times.jl + ports: + - containerPort: 9400 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data-test.int.janelia.org" + - name: MODIFIED_TIMES_DIR + value: /data/annotations/modified_times + volumeMounts: + - name: annotations + mountPath: /data/annotations + readOnly: true + resources: + requests: + memory: 512Mi + cpu: 100m + limits: + memory: 1Gi + cpu: "1" + startupProbe: + tcpSocket: + port: 9400 + failureThreshold: 10 + periodSeconds: 30 + - name: fix-ap-axis image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest command: diff --git a/deployment/shroff-data-test/07-cronjob-modified-times.yaml b/deployment/shroff-data-test/07-cronjob-modified-times.yaml new file mode 100644 index 0000000..e1641d0 --- /dev/null +++ b/deployment/shroff-data-test/07-cronjob-modified-times.yaml @@ -0,0 +1,62 @@ +# Daily snapshot of integrated_annotation CSV mtimes across all datasets. +# Writes /data/annotations/modified_times/modified_times_YYYY_mm_dd_HHMMSS.h5 +# plus /data/annotations/modified_times/modified_times.h5 (latest) to the +# shroff-data-test-annotations PVC. +apiVersion: batch/v1 +kind: CronJob +metadata: + name: save-modified-times + namespace: shroff-data-test + labels: + app: shroff-data-test + component: save-modified-times +spec: + schedule: "0 2 * * *" + timeZone: "America/New_York" + concurrencyPolicy: Forbid + successfulJobsHistoryLimit: 3 + failedJobsHistoryLimit: 3 + startingDeadlineSeconds: 3600 + jobTemplate: + spec: + backoffLimit: 1 + activeDeadlineSeconds: 7200 + template: + metadata: + labels: + app: shroff-data-test + component: save-modified-times + spec: + restartPolicy: Never + containers: + - name: save-modified-times + image: image-registry.openshift-image-registry.svc:5000/shroff-data-test/shroff-data-test:latest + command: + - julia + - --threads=auto + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/save_modified_times.jl + workingDir: /app/ShroffCelegansModels.jl + env: + - name: MODIFIED_TIMES_DIR + value: /data/annotations/modified_times + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + - name: annotations + mountPath: /data/annotations + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 4Gi + cpu: "2" + volumes: + - name: nearline + persistentVolumeClaim: + claimName: shroff-data-test-nearline + - name: annotations + persistentVolumeClaim: + claimName: shroff-data-test-annotations diff --git a/web/scripts/save_modified_times.jl b/web/scripts/save_modified_times.jl new file mode 100644 index 0000000..5535b6e --- /dev/null +++ b/web/scripts/save_modified_times.jl @@ -0,0 +1,65 @@ +""" +Scans every dataset listed in the active config_path and records the mtime of +each Decon_reg_*/.../integrated_annotation/annotations.csv file. Used by the +OpenShift CronJob to track when integrated annotations were last edited. + +Writes two HDF5 files into the directory given by MODIFIED_TIMES_DIR +(default: /data/annotations/modified_times): + + - modified_times_YYYY_mm_dd_HHMMSS.h5 (timestamped snapshot, kept as history) + - modified_times.h5 (overwritten each run, "latest" pointer) +""" + +using Dates: now, format +using ShroffCelegansModels +using ShroffCelegansModels.JSON3 +using ShroffCelegansModels.MIPAVIO: get_modified_times_unix, save_modified_times_unix + +include(joinpath(@__DIR__, "..", "..", "src", "demo_averaging", "read_config_json.jl")) + +# Write `dst` atomically: invoke `f(tmp_path)` to produce the file, then `mv` it +# into place. POSIX rename() is atomic on the same filesystem, so readers always +# see either the previous version or the new one — never a partial write. +function write_atomic(f, dst::AbstractString) + tmp = string(dst, ".tmp.", getpid(), ".", time_ns()) + try + f(tmp) + mv(tmp, dst; force=true) + catch + isfile(tmp) && rm(tmp; force=true) + rethrow() + end +end + +function main() + output_dir = get(ENV, "MODIFIED_TIMES_DIR", "/data/annotations/modified_times") + mkpath(output_dir) + + config_path = ShroffCelegansModels.config_path + @info "Loading datasets from config" config_path + _, _, datasets = read_config_json(config_path) + @info "Loaded datasets" groups=length(datasets) total=sum(length, values(datasets)) + + @info "Scanning integrated_annotation mtimes" + modified_times = get_modified_times_unix(datasets) + + timestamp = format(now(), "yyyy_mm_dd_HHMMSS") + snapshot_path = joinpath(output_dir, "modified_times_$(timestamp).h5") + latest_path = joinpath(output_dir, "modified_times.h5") + + @info "Writing snapshot" snapshot_path + write_atomic(snapshot_path) do tmp + save_modified_times_unix(datasets, modified_times; filepath=tmp) + end + + @info "Updating latest" latest_path + write_atomic(latest_path) do tmp + save_modified_times_unix(datasets, modified_times; filepath=tmp) + end + + @info "Done" +end + +if abspath(PROGRAM_FILE) == @__FILE__ + main() +end diff --git a/web/scripts/web_modified_times.jl b/web/scripts/web_modified_times.jl new file mode 100644 index 0000000..b772870 --- /dev/null +++ b/web/scripts/web_modified_times.jl @@ -0,0 +1,160 @@ +using Bonito +using HDF5: h5open, attrs +using Dates: unix2datetime, format as date_format + +const PORT = 9400 + +modified_times_path() = joinpath( + get(ENV, "MODIFIED_TIMES_DIR", "/data/annotations/modified_times"), + "modified_times.h5", +) + +struct DatasetEntry + index::Int + path::String + cell_key_name::String + start::Int + stop::Int + outliers::Vector{Int} + mtimes::Vector{Float64} +end + +function read_modified_times(path::AbstractString) + h5open(path, "r") do f + groups = Dict{String, Vector{DatasetEntry}}() + for group_name in keys(f) + g = f[group_name] + indices = sort(parse.(Int, collect(keys(g)))) + entries = map(indices) do i + ds = g[string(i)] + A = attrs(ds) + DatasetEntry( + i, + string(A["path"]), + string(A["cell_key.name"]), + Int(A["cell_key.start"]), + Int(A["cell_key.end"]), + Int.(A["cell_key.outliers"]), + Float64.(read(ds)), + ) + end + groups[group_name] = entries + end + return groups + end +end + +format_unix(u::Real) = isnan(u) ? "" : date_format(unix2datetime(u), "yyyy-mm-dd HH:MM:SS") + +dataset_max(d::DatasetEntry) = (v = filter(!isnan, d.mtimes); isempty(v) ? -Inf : maximum(v)) + +function last_modified(mtimes::Vector{Float64}) + valid = filter(!isnan, mtimes) + isempty(valid) ? "n/a" : format_unix(maximum(valid)) +end + +# Indices whose value equals the (finite) maximum of `xs`. Empty if all NaN. +function argmax_finite(xs::Vector{Float64}) + valid = filter(!isnan, xs) + isempty(valid) && return Int[] + m = maximum(valid) + return findall(x -> !isnan(x) && x == m, xs) +end + +const HIGHLIGHT_STYLE = "background:#fffbcc;font-weight:bold" + +function render_groups(groups::Dict{String, Vector{DatasetEntry}}, source_mtime::Float64) + DOM.div( + DOM.h2("Integrated annotation modified times"), + DOM.p( + "Source: ", DOM.code(modified_times_path()), + " (file mtime: ", format_unix(source_mtime), ")", + ), + let + sorted_names = sort(collect(keys(groups))) + group_maxes = Dict(name => let + ms = dataset_max.(groups[name]) + isempty(ms) ? -Inf : maximum(ms) + end for name in sorted_names) + global_max = isempty(group_maxes) ? -Inf : maximum(values(group_maxes)) + map(sorted_names) do group_name + datasets = groups[group_name] + ds_maxes = dataset_max.(datasets) + group_max = group_maxes[group_name] + hot_datasets = Set(findall(==(group_max), ds_maxes)) + group_last = group_max == -Inf ? "n/a" : format_unix(group_max) + group_summary_style = group_max == global_max ? HIGHLIGHT_STYLE : "" + DOM.details( + DOM.summary( + DOM.strong(group_name), + " — ", string(length(datasets)), " datasets", + " — last modified: ", group_last, + ; style=group_summary_style, + ), + DOM.ul(map(enumerate(datasets)) do (ds_i, d) + hot_tps = Set(argmax_finite(d.mtimes)) + dataset_summary_style = ds_i in hot_datasets ? HIGHLIGHT_STYLE : "" + DOM.li(DOM.details( + DOM.summary( + "[", string(d.index), "] ", + DOM.code(d.cell_key_name), + " — last modified: ", last_modified(d.mtimes), + ; style=dataset_summary_style, + ), + DOM.div("path: ", DOM.code(d.path)), + DOM.div( + "timepoints: ", string(d.start), "–", string(d.stop), + ", outliers: ", isempty(d.outliers) ? "none" : join(d.outliers, ", "), + ), + DOM.ul(map(eachindex(d.mtimes)) do i + tp = d.start + i - 1 + u = d.mtimes[i] + label = if isnan(u) + tp in d.outliers ? "outlier" : "missing" + else + format_unix(u) + end + tp_style = i in hot_tps ? HIGHLIGHT_STYLE : "" + DOM.li("t=", string(tp), ": ", label; style=tp_style) + end), + )) + end), + ) + end + end, + ) +end + +function render_missing(path::AbstractString) + DOM.div( + DOM.h2("Integrated annotation modified times"), + DOM.p("No data yet. Expected ", DOM.code(path), " but it does not exist."), + DOM.p("This file is generated by the save-modified-times CronJob."), + ) +end + +function web_modified_times() + server = Server( + "0.0.0.0", PORT; + proxy_url="https://$(get(ENV, "SHROFF_HOST", "shroff-data.int.janelia.org"))/modified_times/", + ) + route!(server, "/" => App(; title="Shroff C. elegans modified times") do + path = modified_times_path() + if !isfile(path) + return render_missing(path) + end + groups = read_modified_times(path) + return render_groups(groups, Float64(mtime(path))) + end) + return server +end + +function web_main() + server = web_modified_times() + @info "Listening" port=PORT + return server +end + +if abspath(PROGRAM_FILE) == @__FILE__ + wait(web_main()) +end diff --git a/web/static/index.html b/web/static/index.html index 1782858..41ad2e7 100644 --- a/web/static/index.html +++ b/web/static/index.html @@ -11,6 +11,7 @@

      Internal Shroff Data

    • Debug Annotation AP Axis Retrack (Live untwisting!)
    • Fix Annotation AP Axis
    • Z-Score Analysis
    • +
    • Annotation Modified Times
    • Mesh Scatter
      • Mesh Scatter Average Edited
      • From fab573038f16bb162fd856e337ef82054aee5447 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 21 May 2026 03:47:40 -0400 Subject: [PATCH 38/39] Mirror modified-times deployment to shroff-data (prod) Adds the modified-times container, /modified_times/ nginx route, and daily save-modified-times CronJob to the production namespace, matching the shroff-data-test setup. Co-Authored-By: Claude Opus 4.7 --- deployment/shroff-data/01-configmap.yaml | 9 +++ deployment/shroff-data/03-deployment.yaml | 31 ++++++++++ .../07-cronjob-modified-times.yaml | 61 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 deployment/shroff-data/07-cronjob-modified-times.yaml diff --git a/deployment/shroff-data/01-configmap.yaml b/deployment/shroff-data/01-configmap.yaml index 99bb529..aef6e12 100644 --- a/deployment/shroff-data/01-configmap.yaml +++ b/deployment/shroff-data/01-configmap.yaml @@ -108,4 +108,13 @@ data: proxy_set_header Host $host; proxy_read_timeout 600s; } + + location /modified_times/ { + proxy_pass http://localhost:9400/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + proxy_read_timeout 600s; + } } diff --git a/deployment/shroff-data/03-deployment.yaml b/deployment/shroff-data/03-deployment.yaml index fe06804..7bb73e7 100644 --- a/deployment/shroff-data/03-deployment.yaml +++ b/deployment/shroff-data/03-deployment.yaml @@ -263,6 +263,37 @@ spec: failureThreshold: 10 periodSeconds: 30 + - name: modified-times + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/web_modified_times.jl + ports: + - containerPort: 9400 + workingDir: /app/ShroffCelegansModels.jl + env: + - name: SHROFF_HOST + value: "shroff-data.int.janelia.org" + - name: MODIFIED_TIMES_DIR + value: /data/annotations/modified_times + volumeMounts: + - name: annotations + mountPath: /data/annotations + readOnly: true + resources: + requests: + memory: 512Mi + cpu: 100m + limits: + memory: 1Gi + cpu: "1" + startupProbe: + tcpSocket: + port: 9400 + failureThreshold: 10 + periodSeconds: 30 + - name: fix-ap-axis image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest command: diff --git a/deployment/shroff-data/07-cronjob-modified-times.yaml b/deployment/shroff-data/07-cronjob-modified-times.yaml new file mode 100644 index 0000000..a91b8cf --- /dev/null +++ b/deployment/shroff-data/07-cronjob-modified-times.yaml @@ -0,0 +1,61 @@ +# Daily snapshot of integrated_annotation CSV mtimes across all datasets. +# Writes /data/annotations/modified_times/modified_times_YYYY_mm_dd_HHMMSS.h5 +# plus /data/annotations/modified_times/modified_times.h5 (latest) to the +# shroff-data-annotations PVC. +apiVersion: batch/v1 +kind: CronJob +metadata: + name: save-modified-times + namespace: shroff-data + labels: + app: shroff-data + component: save-modified-times +spec: + schedule: "0 2 * * *" + timeZone: "America/New_York" + concurrencyPolicy: Forbid + successfulJobsHistoryLimit: 3 + failedJobsHistoryLimit: 3 + startingDeadlineSeconds: 3600 + jobTemplate: + spec: + backoffLimit: 1 + activeDeadlineSeconds: 7200 + template: + metadata: + labels: + app: shroff-data + component: save-modified-times + spec: + restartPolicy: Never + containers: + - name: save-modified-times + image: image-registry.openshift-image-registry.svc:5000/shroff-data/shroff-data:latest + command: + - julia + - --project=/app/ShroffCelegansModels.jl/web + - /app/ShroffCelegansModels.jl/web/scripts/save_modified_times.jl + workingDir: /app/ShroffCelegansModels.jl + env: + - name: MODIFIED_TIMES_DIR + value: /data/annotations/modified_times + volumeMounts: + - name: nearline + mountPath: /nearline/shroff + readOnly: true + - name: annotations + mountPath: /data/annotations + resources: + requests: + memory: 2Gi + cpu: 250m + limits: + memory: 4Gi + cpu: "2" + volumes: + - name: nearline + persistentVolumeClaim: + claimName: shroff-data-nearline + - name: annotations + persistentVolumeClaim: + claimName: shroff-data-annotations From 95566e3233c0c32a14b6d389a7a824202ea52a93 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Thu, 21 May 2026 14:04:42 -0400 Subject: [PATCH 39/39] Restore Main-scope names removed by commenting out makie.jl include Commit a619e1f commented out `include("../makie.jl")` in show_average_annotations.jl, which left web apps that include this file into `Main` (via launch_show_average_annotations.jl) without swapyz_scale, swapyz_unscale, transverse_splines, colorschemes, Point3/Point3f, and throttle. Add explicit `using` statements so these names are imported into Main before fix_annotation_ap_axis.jl is included. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/demo_averaging/show_average_annotations.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/demo_averaging/show_average_annotations.jl b/src/demo_averaging/show_average_annotations.jl index 060bcc7..12a11e4 100644 --- a/src/demo_averaging/show_average_annotations.jl +++ b/src/demo_averaging/show_average_annotations.jl @@ -2,6 +2,10 @@ using ShroffCelegansModels.ProgressMeter using ShroffCelegansModels.Statistics: mean, var using ShroffCelegansModels.CoordinateTransformations using ShroffCelegansModels.FFTW: fftfreq, fft, ifft +using ShroffCelegansModels: swapyz_scale, swapyz_unscale, transverse_splines +using ShroffCelegansModels.ColorSchemes: colorschemes +using ShroffCelegansModels.GeometryBasics: Point3, Point3f +using ShroffCelegansModels.Observables: throttle #include("../makie.jl") #include("get_group_annotation_positions_over_time.jl")