diff --git a/Manifest.toml b/Manifest.toml index 1c59403..889fab1 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.11.2" manifest_format = "2.0" -project_hash = "72412ae0f64cc39a16afe23fa1712ccaec97db17" +project_hash = "d3959b0c3a38b987e17c2e3e73afbe28669615d7" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] @@ -57,6 +57,44 @@ version = "1.2.0" uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.2" +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.4.0" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "017fcb757f8e921fb44ee063a7aafe5f89b86dd1" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.18.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.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" version = "1.11.0" @@ -88,6 +126,12 @@ git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.9" +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.6" + [[deps.BufferedStreams]] git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643" uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" @@ -104,6 +148,12 @@ git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.5.0" +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] +git-tree-sha1 = "5a97e67919535d6841172016c9530fd69494e5ec" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.6" + [[deps.CRC32c]] uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" version = "1.11.0" @@ -128,9 +178,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 = "77bc0964dd77811630e6c3329536a86b3b965cba" uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -version = "0.12.18" +version = "0.13.0" [[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"] @@ -138,6 +188,12 @@ git-tree-sha1 = "009060c9a6168704143100f36ab08f06c2af4642" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.18.2+1" +[[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" @@ -148,6 +204,18 @@ weakdeps = ["SparseArrays"] [deps.ChainRulesCore.extensions] ChainRulesCoreSparseArraysExt = "SparseArrays" +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.13" + +[[deps.Clustering]] +deps = ["Distances", "LinearAlgebra", "NearestNeighbors", "Printf", "Random", "SparseArrays", "Statistics", "StatsBase"] +git-tree-sha1 = "3e22db924e2945282e70c33b75d4dde8bfa44c94" +uuid = "aaaa29a8-35af-508c-8bc3-b662a17a0fe5" +version = "0.15.8" + [[deps.CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] git-tree-sha1 = "7eee164f122511d3e4e1ebadb7956939ea7e1c77" @@ -200,6 +268,11 @@ git-tree-sha1 = "3faae67b8899797592335832fccf4b3c80bb04fa" uuid = "a80b9123-70ca-4bc0-993e-6e3bcb318db6" version = "0.8.15" +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + [[deps.Compat]] deps = ["TOML", "UUIDs"] git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" @@ -215,6 +288,11 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.1+0" +[[deps.ComputationalResources]] +git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" +uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" +version = "0.3.2" + [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] git-tree-sha1 = "f36e5e8fdffcb5646ea5da81495a5a7566005127" @@ -249,11 +327,28 @@ git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.6.3" +[[deps.CoordinateTransformations]] +deps = ["LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "f9d7112bfff8a19a3a4ea4e03a8e6a91fe8456bf" +uuid = "150eb455-5306-5404-9cee-2592286d6298" +version = "0.6.3" + +[[deps.CpuId]] +deps = ["Markdown"] +git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" +uuid = "adafc99b-e345-5852-983c-f28acb93d879" +version = "0.3.1" + [[deps.Crayons]] 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" @@ -299,6 +394,17 @@ git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" +[[deps.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "c7e3a542b999843086e2f29dac96a618c105be1d" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.12" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" + [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" @@ -405,6 +511,12 @@ git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "4.4.2+2" +[[deps.FFTViews]] +deps = ["CustomUnitRanges", "FFTW"] +git-tree-sha1 = "cbdf14d1e8c7c8aacbe8b19862e0179fd08321c2" +uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" +version = "0.3.2" + [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] git-tree-sha1 = "4820348781ae578893311153d69049a93d05f39d" @@ -524,16 +636,16 @@ uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" version = "6.3.0+0" [[deps.GR]] -deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] -git-tree-sha1 = "ddda044ca260ee324c5fc07edb6d7cf3f0b9c350" +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "8e2d86e06ceb4580110d9e716be26658effc5bfd" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.73.5" +version = "0.72.8" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "278e5e0f820178e8a26df3184fcb2280717c79b1" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "da121cbdc95b065da07fbb93638367737969693f" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.73.5+0" +version = "0.72.8+0" [[deps.GarishPrint]] deps = ["Configurations", "Preferences"] @@ -595,10 +707,10 @@ uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" version = "1.4.0" [[deps.GeometryBasics]] -deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "c1a9c159c3ac53aa09663d8662c7277ef3fa508d" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.11" +version = "0.5.1" [[deps.Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] @@ -606,6 +718,12 @@ git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" version = "0.21.0+0" +[[deps.Ghostscript_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "43ba3d3c82c18d88471cfd2924931658838c9d8f" +uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" +version = "9.55.0+4" + [[deps.Giflib_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a" @@ -635,6 +753,12 @@ git-tree-sha1 = "01979f9b37367603e2848ea225918a3b3861b606" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" version = "1.3.14+1" +[[deps.Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "1dc470db8b1131cfc7fb4c115de89fe391b9e780" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.12.0" + [[deps.GridLayoutBase]] deps = ["GeometryBasics", "InteractiveUtils", "Observables"] git-tree-sha1 = "dc6bed05c15523624909b3953686c5f5ffa10adc" @@ -658,6 +782,18 @@ git-tree-sha1 = "55c53be97790242c29031e5cd45e8ac296dadda3" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "8.5.0+0" +[[deps.HistogramThresholding]] +deps = ["ImageBase", "LinearAlgebra", "MappedArrays"] +git-tree-sha1 = "7194dfbb2f8d945abdaf68fa9480a965d6661e69" +uuid = "2c695a8d-9458-5d45-9878-1b8a99cf7853" +version = "0.3.1" + +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] +git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.17" + [[deps.HttpCommon]] deps = ["Dates", "Nullables", "Test", "URIParser"] git-tree-sha1 = "46313284237aa6ca67a6bce6d6fbd323d19cff59" @@ -676,6 +812,11 @@ git-tree-sha1 = "7134810b1afce04bbc1045ca1985fbe81ce17653" uuid = "ac1192a8-f4b3-4bfe-ba22-af5b92cd3ab2" version = "0.9.5" +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + [[deps.ImageAxes]] deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" @@ -688,24 +829,102 @@ git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" uuid = "c817782e-172a-44cc-b673-b171935fbb9e" version = "0.1.7" +[[deps.ImageBinarization]] +deps = ["HistogramThresholding", "ImageCore", "LinearAlgebra", "Polynomials", "Reexport", "Statistics"] +git-tree-sha1 = "33485b4e40d1df46c806498c73ea32dc17475c59" +uuid = "cbc4b850-ae4b-5111-9e64-df94c024a13d" +version = "0.3.1" + +[[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.ImageCorners]] +deps = ["ImageCore", "ImageFiltering", "PrecompileTools", "StaticArrays", "StatsBase"] +git-tree-sha1 = "24c52de051293745a9bad7d73497708954562b79" +uuid = "89d5987c-236e-4e32-acd0-25bd6bd87b70" +version = "0.1.3" + +[[deps.ImageDistances]] +deps = ["Distances", "ImageCore", "ImageMorphology", "LinearAlgebra", "Statistics"] +git-tree-sha1 = "08b0e6354b21ef5dd5e49026028e41831401aca8" +uuid = "51556ac3-7006-55f5-8cb3-34580c88182d" +version = "0.2.17" + +[[deps.ImageFiltering]] +deps = ["CatIndices", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageBase", "ImageCore", "LinearAlgebra", "OffsetArrays", "PrecompileTools", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "TiledIteration"] +git-tree-sha1 = "33cb509839cc4011beb45bde2316e64344b0f92b" +uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" +version = "0.7.9" + [[deps.ImageIO]] deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" uuid = "82e4d734-157c-48bb-816b-45c225c6df19" version = "0.6.9" +[[deps.ImageMagick]] +deps = ["FileIO", "ImageCore", "ImageMagick_jll", "InteractiveUtils"] +git-tree-sha1 = "c5c5478ae8d944c63d6de961b19e6d3324812c35" +uuid = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" +version = "1.4.0" + +[[deps.ImageMagick_jll]] +deps = ["Artifacts", "Ghostscript_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "OpenJpeg_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "fa01c98985be12e5d75301c4527fff2c46fa3e0e" +uuid = "c73af94c-d91f-53ed-93a7-00f77d67a9d7" +version = "7.1.1+1" + [[deps.ImageMetadata]] deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" version = "0.9.10" +[[deps.ImageMorphology]] +deps = ["DataStructures", "ImageCore", "LinearAlgebra", "LoopVectorization", "OffsetArrays", "Requires", "TiledIteration"] +git-tree-sha1 = "6f0a801136cb9c229aebea0df296cdcd471dbcd1" +uuid = "787d08f9-d448-5407-9aad-5290dd7ab264" +version = "0.4.5" + +[[deps.ImageQualityIndexes]] +deps = ["ImageContrastAdjustment", "ImageCore", "ImageDistances", "ImageFiltering", "LazyModules", "OffsetArrays", "PrecompileTools", "Statistics"] +git-tree-sha1 = "783b70725ed326340adf225be4889906c96b8fd1" +uuid = "2996bd0c-7a13-11e9-2da2-2f5ce47296a9" +version = "0.3.7" + +[[deps.ImageSegmentation]] +deps = ["Clustering", "DataStructures", "Distances", "Graphs", "ImageCore", "ImageFiltering", "ImageMorphology", "LinearAlgebra", "MetaGraphs", "RegionTrees", "SimpleWeightedGraphs", "StaticArrays", "Statistics"] +git-tree-sha1 = "b217d9ded4a95052ffc09acc41ab781f7f72c7ba" +uuid = "80713f31-8817-5129-9cf8-209ff8fb23e1" +version = "1.8.3" + +[[deps.ImageShow]] +deps = ["Base64", "ColorSchemes", "FileIO", "ImageBase", "ImageCore", "OffsetArrays", "StackViews"] +git-tree-sha1 = "3b5344bcdbdc11ad58f3b1956709b5b9345355de" +uuid = "4e3cecfd-b093-5904-9786-8bbb286a6a31" +version = "0.3.8" + +[[deps.ImageTransformations]] +deps = ["AxisAlgorithms", "CoordinateTransformations", "ImageBase", "ImageCore", "Interpolations", "OffsetArrays", "Rotations", "StaticArrays"] +git-tree-sha1 = "e0884bdf01bbbb111aea77c348368a86fb4b5ab6" +uuid = "02fcd773-0e25-5acc-982a-7f6622650795" +version = "0.10.1" + +[[deps.Images]] +deps = ["Base64", "FileIO", "Graphics", "ImageAxes", "ImageBase", "ImageBinarization", "ImageContrastAdjustment", "ImageCore", "ImageCorners", "ImageDistances", "ImageFiltering", "ImageIO", "ImageMagick", "ImageMetadata", "ImageMorphology", "ImageQualityIndexes", "ImageSegmentation", "ImageShow", "ImageTransformations", "IndirectArrays", "IntegralArrays", "Random", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "TiledIteration"] +git-tree-sha1 = "12fdd617c7fe25dc4a6cc804d657cc4b2230302b" +uuid = "916415d5-f1e6-5110-898d-aaa5f9f070e0" +version = "0.26.1" + [[deps.Imath_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" @@ -741,6 +960,12 @@ version = "1.4.2" ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +[[deps.IntegralArrays]] +deps = ["ColorTypes", "FixedPointNumbers", "IntervalSets"] +git-tree-sha1 = "b842cbff3f44804a84fda409745cc8f04c029a20" +uuid = "1d092043-8f09-5a30-832f-7509e371ab51" +version = "0.1.6" + [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "10bd689145d2c3b2a9844005d01087cc1194e79e" @@ -827,6 +1052,12 @@ git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" +[[deps.JLD2]] +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "PrecompileTools", "Requires", "TranscodingStreams"] +git-tree-sha1 = "91d501cb908df6f134352ad73cde5efc50138279" +uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" +version = "0.5.11" + [[deps.JLFzf]] deps = ["Pipe", "REPL", "Random", "fzf_jll"] git-tree-sha1 = "71b48d857e86bf7a1838c4736545699974ce79a2" @@ -932,6 +1163,12 @@ version = "0.16.5" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.17" + [[deps.LazilyInitializedFields]] git-tree-sha1 = "0f2da712350b020bc3957f269c9caad516383ee0" uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf" @@ -1013,10 +1250,10 @@ uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" version = "2.40.3+0" [[deps.Libtiff_jll]] -deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.5.1+1" +version = "4.4.0+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1035,6 +1272,12 @@ deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" version = "1.11.0" +[[deps.LittleCMS_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg"] +git-tree-sha1 = "110897e7db2d6836be22c18bffd9422218ee6284" +uuid = "d3a379c0-f9a3-5b72-a4c0-6bf4d2e8af0f" +version = "2.12.0+0" + [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" @@ -1061,6 +1304,21 @@ git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" version = "1.1.0" +[[deps.LoopVectorization]] +deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +git-tree-sha1 = "8084c25a250e00ae427a379a5b607e7aed96a2dd" +uuid = "bdcacae8-1622-11e9-2a5c-532679323890" +version = "0.12.171" + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + SpecialFunctionsExt = "SpecialFunctions" + + [deps.LoopVectorization.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + [[deps.LoweredCodeUtils]] deps = ["JuliaInterpreter"] git-tree-sha1 = "688d6d9e098109051ae33d126fcfc88c4ce4a021" @@ -1084,16 +1342,16 @@ uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.15" [[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", "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", "PNGFiles", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "021b6b64b68f6ee09fb35a1528a2b5a7f48ac00c" uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" -version = "0.21.18" +version = "0.22.0" [[deps.MakieCore]] deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] -git-tree-sha1 = "9019b391d7d086e841cbeadc13511224bd029ab3" +git-tree-sha1 = "c731269d5a2c85ffdc689127a9ba6d73e978a4b1" uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" -version = "0.8.12" +version = "0.9.0" [[deps.Malt]] deps = ["Distributed", "Logging", "RelocatableFolders", "Serialization", "Sockets"] @@ -1101,6 +1359,11 @@ git-tree-sha1 = "02a728ada9d6caae583a0f87c1dd3844f99ec3fd" uuid = "36869731-bdee-424d-aa32-cab38c994e3b" version = "1.1.2" +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + [[deps.MappedArrays]] git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" @@ -1133,6 +1396,12 @@ git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" version = "0.3.2" +[[deps.MetaGraphs]] +deps = ["Graphs", "JLD2", "Random"] +git-tree-sha1 = "e9650bea7f91c3397eb9ae6377343963a22bf5b8" +uuid = "626554b9-1ddb-594c-aa3c-2596fe9399a5" +version = "0.8.0" + [[deps.Millboard]] git-tree-sha1 = "ea6a5b7e56e76d8051023faaa11d91d1d881dac3" uuid = "39ec1447-df44-5f4c-beaa-866f30b4d3b2" @@ -1181,6 +1450,12 @@ git-tree-sha1 = "eda490d06b9f7c00752ee81cfa451efe55521e21" uuid = "c020b1a1-e9b0-503a-9c33-f039bfc54a85" version = "1.0.0" +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "8a3271d8309285f4db73b4f662b1b290c715e85e" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.21" + [[deps.Netpbm]] deps = ["FileIO", "ImageCore", "ImageMetadata"] git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" @@ -1245,6 +1520,12 @@ git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e" uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" version = "3.2.4+0" +[[deps.OpenJpeg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libtiff_jll", "LittleCMS_jll", "Pkg", "libpng_jll"] +git-tree-sha1 = "76374b6e7f632c130e78100b166e5a48464256f8" +uuid = "643b3616-a352-519d-856d-80112ee9badc" +version = "2.4.0+0" + [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" @@ -1378,9 +1659,9 @@ version = "0.8.19" [[deps.Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "TOML", "UUIDs", "UnicodeFun", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "dae01f8c2e069a683d3a6e17bbae5070ab94786f" +git-tree-sha1 = "f202a1ca4f6e165238d8175df63a7e26a51e04dc" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.40.9" +version = "1.40.7" [deps.Plots.extensions] FileIOExt = "FileIO" @@ -1408,11 +1689,35 @@ git-tree-sha1 = "e0864c15334d2c4bac8137ce3359f1174565e719" uuid = "72656b73-756c-7461-726b-72656b6b696b" version = "1.2.0" +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.2" + [[deps.PolygonOps]] git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" uuid = "647866c9-e3ac-4575-94e7-e3d426903924" version = "0.1.2" +[[deps.Polynomials]] +deps = ["LinearAlgebra", "OrderedCollections", "RecipesBase", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "27f6107dc202e2499f0750c628a848ce5d6e77f5" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "4.0.13" + + [deps.Polynomials.extensions] + PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsFFTWExt = "FFTW" + PolynomialsMakieCoreExt = "MakieCore" + PolynomialsMutableArithmeticsExt = "MutableArithmetics" + + [deps.Polynomials.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" + MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" + [[deps.PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" @@ -1476,11 +1781,11 @@ git-tree-sha1 = "8b3fc30bc0390abdce15f8822c889f669baed73d" uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" version = "1.0.1" -[[deps.Qt6Base_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] -git-tree-sha1 = "7c29f0e8c575428bd84dc3c72ece5178caa67336" -uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" -version = "6.5.2+2" +[[deps.Qt5Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] +git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" +uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" +version = "5.15.3+2" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] @@ -1494,6 +1799,12 @@ version = "2.11.1" [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" @@ -1519,6 +1830,12 @@ 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" @@ -1536,6 +1853,12 @@ git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" +[[deps.RegionTrees]] +deps = ["IterTools", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "4618ed0da7a251c7f92e869ae1a19c74a7d2a7f9" +uuid = "dee08c22-ab7f-5625-9660-a9af2021b33f" +version = "0.3.2" + [[deps.RegistryInstances]] deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"] git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51" @@ -1588,6 +1911,16 @@ git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" version = "0.5.1+0" +[[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" @@ -1603,6 +1936,17 @@ git-tree-sha1 = "fea870727142270bdf7624ad675901a1ee3b4c87" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" version = "3.7.1" +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.43" + [[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" @@ -1619,11 +1963,17 @@ version = "1.4.8" uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + [[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"] @@ -1653,6 +2003,12 @@ git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" version = "0.9.4" +[[deps.SimpleWeightedGraphs]] +deps = ["Graphs", "LinearAlgebra", "Markdown", "SparseArrays"] +git-tree-sha1 = "4b33e0e081a825dbfaf314decf58fa47e53d6acb" +uuid = "47aef6b3-ad0c-573a-a1e2-d07658019622" +version = "1.4.0" + [[deps.Sixel]] deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" @@ -1696,6 +2052,23 @@ git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" version = "0.1.1" +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] +git-tree-sha1 = "87d51a3ee9a4b0d2fe054bdd3fc2436258db2603" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.1.1" + +[[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" + [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] git-tree-sha1 = "47091a0340a675c738b1304b58161f3b0839d454" @@ -1809,9 +2182,9 @@ version = "0.4.0" [[deps.StructArrays]] deps = ["ConstructionBase", "DataAPI", "Tables"] -git-tree-sha1 = "9537ef82c42cdd8c5d443cbc359110cbb36bae10" +git-tree-sha1 = "5a3a31c41e15a1e042d60f2f4942adccba05d3c9" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.21" +version = "0.7.0" [deps.StructArrays.extensions] StructArraysAdaptExt = "Adapt" @@ -1885,12 +2258,24 @@ git-tree-sha1 = "43044b737fa70bc12f6105061d3da38f881a3e3c" uuid = "b718987f-49a8-5099-9789-dcd902bef87d" version = "1.0.2" +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.2" + [[deps.TiffImages]] deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "SIMD", "UUIDs"] git-tree-sha1 = "3c0faa42f2bd3c6d994b06286bba2328eae34027" uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" version = "0.11.2" +[[deps.TiledIteration]] +deps = ["OffsetArrays", "StaticArrayInterface"] +git-tree-sha1 = "1176cc31e867217b06928e2f140c90bd1bc88283" +uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" +version = "0.5.0" + [[deps.Tokenize]] git-tree-sha1 = "468b4685af4abe0e9fd4d7bf495a6554a6276e75" uuid = "0796e94c-ce3b-5d07-9a54-7f471281c624" @@ -1964,17 +2349,17 @@ git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" version = "0.2.0" +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "4ab62a49f1d8d9548a1c8d1a75e5f55cf196f64e" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.71" + [[deps.VersionParsing]] git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" version = "1.3.0" -[[deps.Vulkan_Loader_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] -git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" -uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" -version = "1.3.243+0" - [[deps.Wayland_jll]] deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] git-tree-sha1 = "85c7811eddec9e7f22615371c3cc81a504c508ee" @@ -2011,24 +2396,6 @@ git-tree-sha1 = "7d1671acbe47ac88e981868a078bd6b4e27c5191" uuid = "aed1982a-8fda-507f-9586-7b0439959a61" version = "1.1.42+0" -[[deps.XZ_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "beef98d5aad604d9e7d60b2ece5181f7888e2fd6" -uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.6.4+0" - -[[deps.Xorg_libICE_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "326b4fea307b0b39892b3e85fa451692eda8d46c" -uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" -version = "1.1.1+0" - -[[deps.Xorg_libSM_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] -git-tree-sha1 = "3796722887072218eabafb494a13c963209754ce" -uuid = "c834827a-8449-5923-a945-d239c165b7dd" -version = "1.2.4+0" - [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] git-tree-sha1 = "9dafcee1d24c4f024e7edc92603cedba72118283" @@ -2107,12 +2474,6 @@ git-tree-sha1 = "dbc53e4cf7701c6c7047c51e17d6e64df55dca94" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" version = "1.1.2+1" -[[deps.Xorg_xcb_util_cursor_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] -git-tree-sha1 = "04341cb870f29dcd5e39055f895c39d016e18ccd" -uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" -version = "0.1.4+0" - [[deps.Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" @@ -2178,24 +2539,12 @@ git-tree-sha1 = "622cf78670d067c738667aaa96c553430b65e269" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+0" -[[deps.eudev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"] -git-tree-sha1 = "431b678a28ebb559d224c0b6b6d01afce87c51ba" -uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" -version = "3.2.9+0" - [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "6e50f145003024df4f5cb96c7fce79466741d601" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" version = "0.56.3+0" -[[deps.gperf_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0ba42241cb6809f1a278d0bcb976e0483c3f1f2d" -uuid = "1a1c6b14-54f6-533d-8383-74cd7377aa70" -version = "3.1.1+1" - [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" @@ -2233,24 +2582,12 @@ git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" version = "0.2.2+0" -[[deps.libevdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "141fe65dc3efabb0b1d5ba74e91f6ad26f84cc22" -uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" -version = "1.11.0+0" - [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" version = "2.0.3+0" -[[deps.libinput_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"] -git-tree-sha1 = "ad50e5b90f222cfe78aa3d5183a20a12de1322ce" -uuid = "36db933b-70db-51c0-b978-0f229ee0e533" -version = "1.18.0+0" - [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "d7b5bbf1efbafb5eca466700949625e07533aff2" @@ -2275,12 +2612,6 @@ git-tree-sha1 = "ccbb625a89ec6195856a50aa2b668a5c08712c94" uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" version = "1.4.0+0" -[[deps.mtdev_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "814e154bdb7be91d78b6802843f76b6ece642f11" -uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" -version = "1.1.6+0" - [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" diff --git a/Project.toml b/Project.toml index 9c8b741..607ce84 100644 --- a/Project.toml +++ b/Project.toml @@ -1,13 +1,11 @@ [deps] CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" -Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e" GenieFramework = "a59fdf5c-6bf0-4f5d-949c-a137c9e2f353" +Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" Libz = "2ec943e9-cfe8-584d-b93d-64dcb6d567b7" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" NaturalSort = "c020b1a1-e9b0-503a-9c33-f039bfc54a85" PlotlyBase = "a03496cd-edff-5a9b-9e67-9cda94a718b5" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" julia_mzML_imzML = "38eb50d3-2fb6-4afa-992a-964ed8562ed9" - -[Genie] -instantiated_pwd = "/var/home/pixelguy14/Documentos/CINVESTAV_2025/Julia_msi_GUI" diff --git a/app.jl b/app.jl index a155542..bde7bb0 100644 --- a/app.jl +++ b/app.jl @@ -9,7 +9,8 @@ using Colors using julia_mzML_imzML using Statistics using NaturalSort -# using ImageMagick +using Images +using LinearAlgebra @genietools # == Code import == @@ -19,6 +20,9 @@ rgb_ViridisPalette = reinterpret(ColorTypes.RGB24, ViridisPalette) # == Search functions == function increment_image(current_image, image_list) + if isempty(image_list) + return nothing + end current_index = findfirst(isequal(current_image), image_list) if current_index == nothing || current_index == length(image_list) || current_image === "" return image_list[length(image_list)] # Return the current image if it's the last one or not found @@ -28,6 +32,9 @@ function increment_image(current_image, image_list) end function decrement_image(current_image, image_list) + if isempty(image_list) + return nothing + end current_index = findfirst(isequal(current_image), image_list) if current_index == nothing || current_index == 1 || current_image === "" return image_list[1] # Return the current image if it's the first one or not found @@ -65,6 +72,8 @@ end @in createSumPlot = false # To generate sum spectrum plot @in image3dPlot = false # To generate 3d plot based on current image @in triq3dPlot = false # To generate 3d plot based on current triq image + @in imageCPlot = false # To generate contour plots of current image + @in triqCPlot = false # To generate contour plots of current triq image @in progress = false @in progressPlot = false @in triqEnabled = false @@ -133,7 +142,12 @@ end scene = attr( xaxis_title = "X", yaxis_title = "Y", - zaxis_title = "Z" + zaxis_title = "Z", + xaxis_nticks = 20, + yaxis_nticks = 20, + zaxis_nticks = 4, + camera = attr(eye = attr(x = 0, y = -1, z = 0.5)), + aspectratio = attr(x = 1, y = 1, z = 0.2) ) ) @@ -141,7 +155,7 @@ end x = 1:10 y = 1:10 z = [sin(i * j / 10) for i in x, j in y] - trace3D = PlotlyBase.surface(x=x, y=y, z=z, + trace3D = PlotlyBase.surface(x=[], y=[], z=[], contours_z=attr( show=true, usecolormap=true, @@ -157,15 +171,7 @@ end # == Reactive handlers == # Reactive handlers watch a variable and execute a block of code when its value changes # The onbutton handler will set the variable to false after the block is executed - @onchange triqEnabled begin - # just in case that they remove an image manually, we use the least intensive button to get all images and re-order them. - msi_bmp = sort(filter(filename -> startswith(filename, "MSI_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) - col_msi_png = sort(filter(filename -> startswith(filename, "colorbar_MSI_") && endswith(filename, ".png"), readdir("public")),lt=natural) - triq_bmp = sort(filter(filename -> startswith(filename, "TrIQ_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) - col_triq_png = sort(filter(filename -> startswith(filename, "colorbar_TrIQ_") && endswith(filename, ".png"), readdir("public")),lt=natural) - end - @onchange file_name begin msg = "" progress = false @@ -219,7 +225,12 @@ end msg = "Incorrect TrIQ values, please adjust accordingly and try again." warning_msg = true else + image_path = joinpath("./public", "TrIQ_$(text_nmass).bmp") SaveBitmap(joinpath("public", "TrIQ_$(text_nmass).bmp"),TrIQ(slice, Int(triqColor), triqProb),ViridisPalette) + # Flip te image vertically then save it again + img = load(image_path) + flipped_img = reverse(img, dims=1) + save(image_path, flipped_img) # Use timestamp to refresh image interface container imgIntT = "/TrIQ_$(text_nmass).bmp?t=$(timestamp)" # Get current image @@ -241,7 +252,12 @@ end #println("all col msi in folder= ",col_triq_png) end else # If we don't use TrIQ + image_path = joinpath("./public", "MSI_$(text_nmass).bmp") SaveBitmap(joinpath("public", "MSI_$(text_nmass).bmp"),IntQuant(slice),ViridisPalette) + # Flip te image vertically then save it again + img = load(image_path) + flipped_img = reverse(img, dims=1) + save(image_path, flipped_img) # Use timestamp to refresh image interface container imgInt = "/MSI_$(text_nmass).bmp?t=$(timestamp)" # Get current image @@ -293,11 +309,23 @@ end btnPlotDisable = true msg = "Loading plot..." spectraMz = LoadMzml(full_routeMz) + layoutSpectra = PlotlyBase.Layout( + title = "SUM Spectrum plot", + xaxis = PlotlyBase.attr( + title = "m/z", + showgrid = true + ), + yaxis = PlotlyBase.attr( + title = "Intensity", + showgrid = true + ) + ) # dims = size(spectraMz) # scansMax = dims[2] # we get the total of scansMax # traceSpectra = PlotlyBase.scatter(x = spectraMz[1, 1], y = spectraMz[2, 1], mode="lines") traceSpectra = PlotlyBase.scatter(x = mean(spectraMz[1,:]), y = mean(spectraMz[2,:]), mode="lines") plotdata = [traceSpectra] # We add the data from spectra to the plot + plotlayout = layoutSpectra spectraMz = nothing # Important for memory cleaning GC.gc() # Trigger garbage collection if Sys.islinux() @@ -319,6 +347,10 @@ end @onbutton ImgMinus begin # Append a query string to force the image to refresh timestamp = string(time_ns()) + # Update the array of images listed in the public folder + msi_bmp = sort(filter(filename -> startswith(filename, "MSI_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) + col_msi_png = sort(filter(filename -> startswith(filename, "colorbar_MSI_") && endswith(filename, ".png"), readdir("public")),lt=natural) + new_msi = decrement_image(current_msi, msi_bmp) new_col_msi = decrement_image(current_col_msi, col_msi_png) @@ -333,7 +365,11 @@ end end @onbutton ImgPlus begin # Append a query string to force the image to refresh - timestamp = string(time_ns()) + timestamp = string(time_ns()) + # Update the array of images listed in the public folder + msi_bmp = sort(filter(filename -> startswith(filename, "MSI_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) + col_msi_png = sort(filter(filename -> startswith(filename, "colorbar_MSI_") && endswith(filename, ".png"), readdir("public")),lt=natural) + new_msi = increment_image(current_msi, msi_bmp) new_col_msi = increment_image(current_col_msi, col_msi_png) @@ -352,6 +388,9 @@ end timestamp = string(time_ns()) new_msi = decrement_image(current_triq, triq_bmp) new_col_msi = decrement_image(current_col_triq, col_triq_png) + # Update the array of images with TrIQ filter listed in the public folder + triq_bmp = sort(filter(filename -> startswith(filename, "TrIQ_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) + col_triq_png = sort(filter(filename -> startswith(filename, "colorbar_TrIQ_") && endswith(filename, ".png"), readdir("public")),lt=natural) current_triq = new_msi current_col_triq = new_col_msi @@ -368,7 +407,10 @@ end timestamp = string(time_ns()) new_msi = increment_image(current_triq, triq_bmp) new_col_msi = increment_image(current_col_triq, col_triq_png) - + # Update the array of images with TrIQ filter listed in the public folder + triq_bmp = sort(filter(filename -> startswith(filename, "TrIQ_") && endswith(filename, ".bmp"), readdir("public")),lt=natural) + col_triq_png = sort(filter(filename -> startswith(filename, "colorbar_TrIQ_") && endswith(filename, ".png"), readdir("public")),lt=natural) + current_triq = new_msi current_col_triq = new_col_msi imgIntT = "/$(current_triq)" @@ -379,77 +421,270 @@ end msgtriq = "image with the Nmass of $(replace(text_nmass, "_" => "."))" end - # 3d plot + # 3d plot @onbutton image3dPlot begin msg = "Image 3D plot selected" cleaned_imgInt = replace(imgInt, r"\?.*" => "") cleaned_imgInt = lstrip(cleaned_imgInt, '/') - var1 = joinpath( "public", cleaned_imgInt ) - if isfile(var1) + var = joinpath( "./public", cleaned_imgInt ) + + if isfile(var) try - img = FileIO.load(File{DataFormat{:BMP}}(var1)) - img_gray = Gray.(img) # Convert to grayscale + img = load(var) + #println("Image type:", typeof(img)) + img_gray = Gray.(img) # Convert to grayscale + #println("Grayscale image type:", typeof(img_gray)) img_array = Array(img_gray) + elevation = Float32.(Array(img_gray)) ./ 255.0 # Normalize between 0 and 1 + #println("Elevation size:", size(elevation)) + # Smooth the image + sigma = 4.0 + kernel = Kernel.gaussian(sigma) + #println(size(kernel)) + elevation_smoothed = imfilter(elevation, kernel) + #println("Smoothed elevation size:", size(elevation_smoothed)) + # Transpose the elevation_smoothed array + # Create the X, Y meshgrid coordinates + x = 1:size(elevation_smoothed, 2) + y = 1:size(elevation_smoothed, 1) + X = repeat(reshape(x, 1, length(x)), length(y), 1) + #println("Size of X:", size(X)) + Y = repeat(reshape(y, length(y), 1), 1, length(x)) + #println("Size of Y:", size(Y)) + # Calculate the number of ticks and aspect ratio for the 3d plot + x_nticks = min(20, length(x)) + y_nticks = min(20, length(y)) + z_nticks = 5 + aspect_ratio = attr(x = 1, y = length(y) / length(x), z = 0.5) + + # Define the layout for the 3D plot + layout3D = PlotlyBase.Layout( + title = "3D Surface Plot", + scene = attr( + xaxis_nticks = x_nticks, + yaxis_nticks = y_nticks, + zaxis_nticks = z_nticks, + camera = attr(eye = attr(x = 0, y = -1, z = 0.5)), + aspectratio = aspect_ratio + ) + ) + if size(elevation_smoothed, 1) < size(elevation_smoothed, 2) + # Transpose the elevation_smoothed array if Y axis is longer than X axis to fix chopping + elevation_smoothed = transpose(elevation_smoothed) + Y = -Y + end + + trace3D = PlotlyBase.surface(x = X[1, :], y = Y[:, 1], z = elevation_smoothed, + contours_z = attr( + show = true, + usecolormap = true, + highlightcolor = "limegreen", + project_z = true + ), colorscale = "Viridis") + plotdata3d = [trace3D] # We add the data from the image to the plot + plotlayout3d = layout3D # we update the style of the plot to fit the image. + spectraMz = nothing # Important for memory cleaning + GC.gc() # Trigger garbage collection + if Sys.islinux() + ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure julia returns the freed memory to OS + end + msg = "Plot loaded." catch e msg = "Failed to load and process image: $e" warning_msg = true - println(msg) + println(msg) end - elevation = img_array / 255.0 # Normalize between 0 and 1 - # Smooth the image - sigma = 4.0 - elevation_smoothed = imfilter(elevation, Kernel.gaussian(sigma)) - # Create the X, Y meshgrid coordinates - x = 1:size(elevation_smoothed, 2) - y = 1:size(elevation_smoothed, 1) - X, Y = ndgrid(x, y) - trace3D = PlotlyBase.scatter(x = X[1, :], y =Y[:, 1], z=elevation_smoothed, colorscale="Viridis") - plotdata3d = [trace3D] # We add the data from the image to the plot - spectraMz = nothing # Important for memory cleaning - GC.gc() # Trigger garbage collection - if Sys.islinux() - ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure julia returns the freed memory to OS + else + msg = "image could not be 3d plotted" + warning_msg = true + end + end + # 3d plot for TrIQ + @onbutton triq3dPlot begin + msg = "TrIQ 3D plot selected" + cleaned_imgIntT = replace(imgIntT, r"\?.*" => "") + cleaned_imgIntT = lstrip(cleaned_imgIntT, '/') + var = joinpath( "./public", cleaned_imgIntT ) + + if isfile(var) + try + img = load(var) + img_gray = Gray.(img) # Convert to grayscale + img_array = Array(img_gray) + elevation = Float32.(Array(img_gray)) ./ 255.0 # Normalize between 0 and 1 + # Smooth the image + sigma = 4.0 + kernel = Kernel.gaussian(sigma) + elevation_smoothed = imfilter(elevation, kernel) + + # Create the X, Y meshgrid coordinates + x = 1:size(elevation_smoothed, 2) + y = 1:size(elevation_smoothed, 1) + X = repeat(reshape(x, 1, length(x)), length(y), 1) + Y = repeat(reshape(y, length(y), 1), 1, length(x)) + + # Calculate the number of ticks and aspect ratio for the 3d plot + x_nticks = min(20, length(x)) + y_nticks = min(20, length(y)) + z_nticks = 5 + aspect_ratio = attr(x = 1, y = length(y) / length(x), z = 0.5) + + # Define the layout for the 3D plot + layout3D = PlotlyBase.Layout( + title = "3D Surface Plot", + scene = attr( + xaxis_nticks = x_nticks, + yaxis_nticks = y_nticks, + zaxis_nticks = z_nticks, + camera = attr(eye = attr(x = 0, y = -1, z = 0.5)), + aspectratio = aspect_ratio + ) + ) + if size(elevation_smoothed, 1) < size(elevation_smoothed, 2) + # Transpose the elevation_smoothed array if Y axis is longer than X axis to fix chopping + elevation_smoothed = transpose(elevation_smoothed) + Y = -Y + end + + trace3D = PlotlyBase.surface(x = X[1, :], y = Y[:, 1], z = elevation_smoothed, + contours_z = attr( + show = true, + usecolormap = true, + highlightcolor = "limegreen", + project_z = true + ), colorscale = "Viridis") + plotdata3d = [trace3D] # We add the data from the image to the plot + plotlayout3d = layout3D # we update the style of the plot to fit the image. + spectraMz = nothing # Important for memory cleaning + GC.gc() # Trigger garbage collection + if Sys.islinux() + ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure julia returns the freed memory to OS + end + msg = "Plot loaded." + catch e + msg = "Failed to load and process image: $e" + warning_msg = true + println(msg) end - msg = "Plot loaded." else msg = "image could not be 3d plotted" warning_msg = true end end - @onbutton triq3dPlot begin - msg = "TrIQ 3D plot selected" + # Contour 2d plot + @onbutton imageCPlot begin + msg = "Image 2D plot selected" + cleaned_imgInt = replace(imgInt, r"\?.*" => "") + cleaned_imgInt = lstrip(cleaned_imgInt, '/') + var = joinpath("./public", cleaned_imgInt) + + if isfile(var) + try + img = load(var) + # Convert to grayscale + img_gray = Gray.(img) + img_array = Array(img_gray) + elevation = Float32.(Array(img_gray)) ./ 255.0 # Normalize between 0 and 1 + + # Smooth the image + sigma = 4.0 + kernel = Kernel.gaussian(sigma) + elevation_smoothed = imfilter(elevation, kernel) + + # Create the X, Y meshgrid coordinates + x = 1:size(elevation_smoothed, 2) + y = 1:size(elevation_smoothed, 1) + X = repeat(reshape(x, 1, length(x)), length(y), 1) + Y = repeat(reshape(y, length(y), 1), 1, length(x)) + + layoutContour = PlotlyBase.Layout( + title = "2D Topographic Map", + xaxis_title = "X", + yaxis_title = "Y", + margin = attr(l = 65, r = 50, b = 65, t = 90) + ) + traceContour = PlotlyBase.contour( + z = elevation_smoothed, + x = X[1, :], # Use the first row + y = -Y[:, 1], # Use the first column + contours_coloring = "lines", + colorscale = "Viridis" + ) + plotdata = [traceContour] + plotlayout = layoutContour + + spectraMz = nothing # Important for memory cleaning + GC.gc() # Trigger garbage collection + if Sys.islinux() + ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure Julia returns the freed memory to OS + end + msg = "Plot loaded." + catch e + msg = "Failed to load and process image: $e" + warning_msg = true + println(msg) + end + else + msg = "Image could not be 2D plotted" + warning_msg = true + end + end + # Contour 2d plot for TrIQ + @onbutton triqCPlot begin + msg = "Image 2D plot selected" cleaned_imgIntT = replace(imgIntT, r"\?.*" => "") cleaned_imgIntT = lstrip(cleaned_imgIntT, '/') - var1 = joinpath( "public", cleaned_imgIntT ) - if isfile(var1) + var = joinpath("./public", cleaned_imgIntT) + + if isfile(var) try - img = FileIO.load(File{DataFormat{:BMP}}(var1)) - img_gray = Gray.(img) # Convert to grayscale + img = load(var) + # Convert to grayscale + img_gray = Gray.(img) img_array = Array(img_gray) - catch e - msg = "Failed to load and process image: $e" - warning_msg = true - println(msg) + elevation = Float32.(Array(img_gray)) ./ 255.0 # Normalize between 0 and 1 + + # Smooth the image + sigma = 4.0 + kernel = Kernel.gaussian(sigma) + elevation_smoothed = imfilter(elevation, kernel) + + # Create the X, Y meshgrid coordinates + x = 1:size(elevation_smoothed, 2) + y = 1:size(elevation_smoothed, 1) + X = repeat(reshape(x, 1, length(x)), length(y), 1) + Y = repeat(reshape(y, length(y), 1), 1, length(x)) + + layoutContour = PlotlyBase.Layout( + title = "2D Topographic Map", + xaxis_title = "X", + yaxis_title = "Y", + margin = attr(l = 65, r = 50, b = 65, t = 90) + ) + traceContour = PlotlyBase.contour( + z = elevation_smoothed, + x = X[1, :], # Use the first row + y = -Y[:, 1], # Use the first column + contours_coloring = "lines", + colorscale = "Viridis" + ) + plotdata = [traceContour] + plotlayout = layoutContour + + spectraMz = nothing # Important for memory cleaning + GC.gc() # Trigger garbage collection + if Sys.islinux() + ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure Julia returns the freed memory to OS + end + msg = "Plot loaded." + catch e + msg = "Failed to load and process image: $e" + warning_msg = true + println(msg) end - elevation = img_array / 255.0 # Normalize between 0 and 1 - # Smooth the image - sigma = 4.0 - elevation_smoothed = imfilter(elevation, Kernel.gaussian(sigma)) - # Create the X, Y meshgrid coordinates - x = 1:size(elevation_smoothed, 2) - y = 1:size(elevation_smoothed, 1) - X, Y = ndgrid(x, y) - trace3D = PlotlyBase.scatter(x = X[1, :], y =Y[:, 1], z=elevation_smoothed, colorscale="Viridis") - plotdata3d = [trace3D] # We add the data from the image to the plot - spectraMz = nothing # Important for memory cleaning - GC.gc() # Trigger garbage collection - if Sys.islinux() - ccall(:malloc_trim, Int32, (Int32,), 0) # Ensure julia returns the freed memory to OS - end - msg = "Plot loaded." else - msg = "image could not be 3d plotted" + msg = "Image could not be 2D plotted" warning_msg = true end end diff --git a/app.jl.html b/app.jl.html index fceccb2..0141935 100644 --- a/app.jl.html +++ b/app.jl.html @@ -5,17 +5,17 @@
{{msg}}