Commit fabaca28 authored by Alberto Ramos's avatar Alberto Ramos

Adds support to tag ensembles with a String.

- Native BDIO format also adds this option
parent 6cd322d4
...@@ -8,18 +8,18 @@ version = "0.5.0" ...@@ -8,18 +8,18 @@ version = "0.5.0"
[[Adapt]] [[Adapt]]
deps = ["LinearAlgebra"] deps = ["LinearAlgebra"]
git-tree-sha1 = "0fac443759fa829ed8066db6cf1077d888bb6573" git-tree-sha1 = "95f8bda0555209f122bc796b0382ea4a3a121720"
uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
version = "2.0.2" version = "2.1.0"
[[ArgCheck]] [[ArgCheck]]
git-tree-sha1 = "59c256cf71c3982484ae4486ee86a3d7da891dea" git-tree-sha1 = "dedbbb2ddb876f899585c4ec4433265e3017215a"
uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
version = "2.0.0" version = "2.1.0"
[[BDIO]] [[BDIO]]
deps = ["Documenter", "Nettle"] deps = ["Documenter", "Nettle"]
git-tree-sha1 = "6097f62fdbf858aa97d928005f2bc511e06018bc" git-tree-sha1 = "31aa5298af4936ad33dd39f43ef0c3f7c45fb197"
repo-rev = "master" repo-rev = "master"
repo-url = "https://gitlab.ift.uam-csic.es/alberto/bdio.jl.git" repo-url = "https://gitlab.ift.uam-csic.es/alberto/bdio.jl.git"
uuid = "375f315e-f2c4-11e9-2ef9-134f02f79e27" uuid = "375f315e-f2c4-11e9-2ef9-134f02f79e27"
...@@ -42,9 +42,9 @@ version = "0.5.10" ...@@ -42,9 +42,9 @@ version = "0.5.10"
[[Bzip2_jll]] [[Bzip2_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "3663bfffede2ef41358b6fc2e1d8a6d50b3c3904" git-tree-sha1 = "03a44490020826950c68005cafb336e5ba08b7e8"
uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
version = "1.0.6+2" version = "1.0.6+4"
[[ColorSchemes]] [[ColorSchemes]]
deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"] deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"]
...@@ -54,15 +54,15 @@ version = "3.9.0" ...@@ -54,15 +54,15 @@ version = "3.9.0"
[[ColorTypes]] [[ColorTypes]]
deps = ["FixedPointNumbers", "Random"] deps = ["FixedPointNumbers", "Random"]
git-tree-sha1 = "6e7aa35d0294f647bb9c985ccc34d4f5d371a533" git-tree-sha1 = "4bffea7ed1a9f0f3d1a131bbcd4b925548d75288"
uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
version = "0.10.6" version = "0.10.9"
[[Colors]] [[Colors]]
deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"]
git-tree-sha1 = "5639e44833cfcf78c6a73fbceb4da75611d312cd" git-tree-sha1 = "008d6bc68dea6beb6303fdc37188cb557391ebf2"
uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
version = "0.12.3" version = "0.12.4"
[[CommonSubexpressions]] [[CommonSubexpressions]]
deps = ["Test"] deps = ["Test"]
...@@ -72,9 +72,9 @@ version = "0.2.1" ...@@ -72,9 +72,9 @@ version = "0.2.1"
[[Compat]] [[Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" git-tree-sha1 = "b0b7e8a0d054fada22b64095b46469627a138943"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "2.2.0" version = "2.2.1"
[[CompilerSupportLibraries_jll]] [[CompilerSupportLibraries_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
...@@ -84,9 +84,9 @@ version = "0.3.3+0" ...@@ -84,9 +84,9 @@ version = "0.3.3+0"
[[Contour]] [[Contour]]
deps = ["StaticArrays"] deps = ["StaticArrays"]
git-tree-sha1 = "0b17db36e7e03f8437e0d1f55aea3e4a60c74353" git-tree-sha1 = "d05a3a25b762720d40246d5bedf518c9c2614ef5"
uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
version = "0.5.3" version = "0.5.5"
[[DataAPI]] [[DataAPI]]
git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32" git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32"
...@@ -95,9 +95,9 @@ version = "1.3.0" ...@@ -95,9 +95,9 @@ version = "1.3.0"
[[DataStructures]] [[DataStructures]]
deps = ["InteractiveUtils", "OrderedCollections"] deps = ["InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "edad9434967fdc0a2631a65d902228400642120c" git-tree-sha1 = "88d48e133e6d3dd68183309877eac74393daa7eb"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.17.19" version = "0.17.20"
[[DataValueInterfaces]] [[DataValueInterfaces]]
git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
...@@ -136,15 +136,15 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" ...@@ -136,15 +136,15 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
[[DocStringExtensions]] [[DocStringExtensions]]
deps = ["LibGit2", "Markdown", "Pkg", "Test"] deps = ["LibGit2", "Markdown", "Pkg", "Test"]
git-tree-sha1 = "c5714d9bcdba66389612dc4c47ed827c64112997" git-tree-sha1 = "50ddf44c53698f5e784bbebb3f4b21c5807401b1"
uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
version = "0.8.2" version = "0.8.3"
[[Documenter]] [[Documenter]]
deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"] deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
git-tree-sha1 = "f3464968c65fc78846dad1c038c474a2c39bbb23" git-tree-sha1 = "fb1ff838470573adc15c71ba79f8d31328f035da"
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
version = "0.25.0" version = "0.25.2"
[[FFMPEG]] [[FFMPEG]]
deps = ["FFMPEG_jll"] deps = ["FFMPEG_jll"]
...@@ -154,9 +154,9 @@ version = "0.3.0" ...@@ -154,9 +154,9 @@ version = "0.3.0"
[[FFMPEG_jll]] [[FFMPEG_jll]]
deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
git-tree-sha1 = "0fa07f43e5609ea54848b82b4bb330b250e9645b" git-tree-sha1 = "13a934b9e74a8722bf1786c989de346a9602e695"
uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
version = "4.1.0+3" version = "4.3.1+2"
[[FFTW]] [[FFTW]]
deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"]
...@@ -177,9 +177,10 @@ uuid = "442a2c76-b920-505d-bb47-c5924d526838" ...@@ -177,9 +177,10 @@ uuid = "442a2c76-b920-505d-bb47-c5924d526838"
version = "0.4.2" version = "0.4.2"
[[FixedPointNumbers]] [[FixedPointNumbers]]
git-tree-sha1 = "8fb797c37a3b7ced4327a05ac4ca0dd6a4f1ba92" deps = ["Statistics"]
git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
version = "0.8.1" version = "0.8.4"
[[ForwardDiff]] [[ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"]
...@@ -189,15 +190,15 @@ version = "0.10.10" ...@@ -189,15 +190,15 @@ version = "0.10.10"
[[FreeType2_jll]] [[FreeType2_jll]]
deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"] deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "7d900f32a3788d4eacac2bfa3bf5c770179c8afd" git-tree-sha1 = "720eee04e3b496c15e5e2269669c2532fb5005c0"
uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
version = "2.10.1+2" version = "2.10.1+4"
[[FriBidi_jll]] [[FriBidi_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "2f56bee16bd0151de7b6a1eeea2ced190a2ad8d4" git-tree-sha1 = "cfc3485a0a968263c789e314fca5d66daf75ed6c"
uuid = "559328eb-81f9-559d-9380-de523a88c83c" uuid = "559328eb-81f9-559d-9380-de523a88c83c"
version = "1.0.5+3" version = "1.0.5+5"
[[GR]] [[GR]]
deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"]
...@@ -219,9 +220,9 @@ version = "0.8.3" ...@@ -219,9 +220,9 @@ version = "0.8.3"
[[HTTP]] [[HTTP]]
deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"] deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"]
git-tree-sha1 = "eca61b35cdd8cd2fcc5eec1eda766424a995b02f" git-tree-sha1 = "c7ec02c4c6a039a98a15f955462cd7aea5df4508"
uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
version = "0.8.16" version = "0.8.19"
[[IniFile]] [[IniFile]]
deps = ["Test"] deps = ["Test"]
...@@ -251,15 +252,15 @@ version = "1.0.0" ...@@ -251,15 +252,15 @@ version = "1.0.0"
[[JSON]] [[JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"] deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" git-tree-sha1 = "81690084b6198a2e1da36fcfda16eeca9f9f24e4"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.0" version = "0.21.1"
[[LAME_jll]] [[LAME_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "221cc8998b9060677448cbb6375f00032554c4fd" git-tree-sha1 = "a7999edc634307964d5651265ebf7c2e14b4ef91"
uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
version = "3.100.0+1" version = "3.100.0+2"
[[LaTeXStrings]] [[LaTeXStrings]]
git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8" git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8"
...@@ -272,9 +273,9 @@ uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" ...@@ -272,9 +273,9 @@ uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
[[LibVPX_jll]] [[LibVPX_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "e3549ca9bf35feb9d9d954f4c6a9032e92f46e7c" git-tree-sha1 = "e02378f5707d0f94af22b99e4aba798e20368f6e"
uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a" uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a"
version = "1.8.1+1" version = "1.9.0+0"
[[Libdl]] [[Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
...@@ -288,9 +289,9 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" ...@@ -288,9 +289,9 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
[[MKL_jll]] [[MKL_jll]]
deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] deps = ["IntelOpenMP_jll", "Libdl", "Pkg"]
git-tree-sha1 = "0ce9a7fa68c70cf83c49d05d2c04d91b47404b08" git-tree-sha1 = "eb540ede3aabb8284cb482aa41d00d6ca850b1f8"
uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
version = "2020.1.216+0" version = "2020.2.254+0"
[[MacroTools]] [[MacroTools]]
deps = ["Markdown", "Random"] deps = ["Markdown", "Random"]
...@@ -310,9 +311,9 @@ version = "1.0.2" ...@@ -310,9 +311,9 @@ version = "1.0.2"
[[MbedTLS_jll]] [[MbedTLS_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "a0cb0d489819fa7ea5f9fa84c7e7eba19d8073af" git-tree-sha1 = "c0b1286883cac4e2b617539de41111e0776d02e8"
uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
version = "2.16.6+1" version = "2.16.8+0"
[[Measures]] [[Measures]]
git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
...@@ -321,17 +322,17 @@ version = "0.3.1" ...@@ -321,17 +322,17 @@ version = "0.3.1"
[[Missings]] [[Missings]]
deps = ["DataAPI"] deps = ["DataAPI"]
git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" git-tree-sha1 = "ed61674a0864832495ffe0a7e889c0da76b0f4c8"
uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
version = "0.4.3" version = "0.4.4"
[[Mmap]] [[Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804" uuid = "a63ad114-7e13-5084-954f-fe012c677804"
[[NaNMath]] [[NaNMath]]
git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "0.3.3" version = "0.3.4"
[[Nettle]] [[Nettle]]
deps = ["BinDeps", "BinaryProvider", "Libdl", "Test"] deps = ["BinDeps", "BinaryProvider", "Libdl", "Test"]
...@@ -341,15 +342,15 @@ version = "0.4.0" ...@@ -341,15 +342,15 @@ version = "0.4.0"
[[Ogg_jll]] [[Ogg_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "59cf7a95bf5ac39feac80b796e0f39f9d69dc887" git-tree-sha1 = "4c3275cda1ba99d1244d0b82a9d0ca871c3cf66b"
uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
version = "1.3.4+0" version = "1.3.4+1"
[[OpenSSL_jll]] [[OpenSSL_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "7aaaded15bf393b5f34c2aad5b765c18d26cb495" git-tree-sha1 = "997359379418d233767f926ea0c43f0e731735c0"
uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
version = "1.1.1+4" version = "1.1.1+5"
[[OpenSpecFun_jll]] [[OpenSpecFun_jll]]
deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"]
...@@ -359,14 +360,14 @@ version = "0.5.3+3" ...@@ -359,14 +360,14 @@ version = "0.5.3+3"
[[Opus_jll]] [[Opus_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "002c18f222a542907e16c83c64a1338992da7e2c" git-tree-sha1 = "cc90a125aa70dbb069adbda2b913b02cf2c5f6fe"
uuid = "91d4177d-7536-5919-b921-800302f37372" uuid = "91d4177d-7536-5919-b921-800302f37372"
version = "1.3.1+1" version = "1.3.1+2"
[[OrderedCollections]] [[OrderedCollections]]
git-tree-sha1 = "293b70ac1780f9584c89268a6e2a560d938a7065" git-tree-sha1 = "16c08bf5dba06609fe45e30860092d6fa41fde7b"
uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
version = "1.3.0" version = "1.3.1"
[[PGFPlotsX]] [[PGFPlotsX]]
deps = ["ArgCheck", "DataStructures", "Dates", "DefaultApplication", "DocStringExtensions", "MacroTools", "Parameters", "Requires", "StatsBase"] deps = ["ArgCheck", "DataStructures", "Dates", "DefaultApplication", "DocStringExtensions", "MacroTools", "Parameters", "Requires", "StatsBase"]
...@@ -382,9 +383,9 @@ version = "0.12.1" ...@@ -382,9 +383,9 @@ version = "0.12.1"
[[Parsers]] [[Parsers]]
deps = ["Dates", "Test"] deps = ["Dates", "Test"]
git-tree-sha1 = "20ef902ea02f7000756a4bc19f7b9c24867c6211" git-tree-sha1 = "8077624b3c450b15c087944363606a6ba12f925e"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "1.0.6" version = "1.0.10"
[[Pkg]] [[Pkg]]
deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
...@@ -398,9 +399,9 @@ version = "2.0.0" ...@@ -398,9 +399,9 @@ version = "2.0.0"
[[PlotUtils]] [[PlotUtils]]
deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"] deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"]
git-tree-sha1 = "e18e0e51ff07bf92bb7e06dcb9c082a4e125e20c" git-tree-sha1 = "8d23333aee2e2733a5cd4e1985462df8203f47f7"
uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
version = "1.0.5" version = "1.0.6"
[[Plots]] [[Plots]]
deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"] deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"]
...@@ -427,15 +428,15 @@ deps = ["Serialization"] ...@@ -427,15 +428,15 @@ deps = ["Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
[[RecipesBase]] [[RecipesBase]]
git-tree-sha1 = "54f8ceb165a0f6d083f0d12cb4996f5367c6edbc" git-tree-sha1 = "6ee6c35fe69e79e17c455a386c1ccdc66d9f7da4"
uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
version = "1.0.1" version = "1.1.0"
[[RecipesPipeline]] [[RecipesPipeline]]
deps = ["Dates", "PlotUtils", "RecipesBase"] deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"]
git-tree-sha1 = "d2a58b8291d1c0abae6a91489973f8a92bf5c04a" git-tree-sha1 = "4a325c9bcc2d8e62a8f975b9666d0251d53b63b9"
uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
version = "0.1.11" version = "0.1.13"
[[Reexport]] [[Reexport]]
deps = ["Pkg"] deps = ["Pkg"]
...@@ -445,9 +446,9 @@ version = "0.2.0" ...@@ -445,9 +446,9 @@ version = "0.2.0"
[[Requires]] [[Requires]]
deps = ["UUIDs"] deps = ["UUIDs"]
git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" git-tree-sha1 = "2fc2e1ab606a5dca7bbad9036a694553c3a57926"
uuid = "ae029012-a4dd-5104-9daa-d747884805df" uuid = "ae029012-a4dd-5104-9daa-d747884805df"
version = "1.0.1" version = "1.0.3"
[[Roots]] [[Roots]]
deps = ["Printf"] deps = ["Printf"]
...@@ -492,9 +493,9 @@ version = "0.10.3" ...@@ -492,9 +493,9 @@ version = "0.10.3"
[[StaticArrays]] [[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"] deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "5c06c0aeb81bef54aed4b3f446847905eb6cbda0" git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35"
uuid = "90137ffa-7385-5640-81b9-e52037218182" uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "0.12.3" version = "0.12.4"
[[Statistics]] [[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"] deps = ["LinearAlgebra", "SparseArrays"]
...@@ -502,9 +503,9 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" ...@@ -502,9 +503,9 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
[[StatsBase]] [[StatsBase]]
deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"]
git-tree-sha1 = "a6102b1f364befdb05746f386b67c6b7e3262c45" git-tree-sha1 = "19bfcb46245f69ff4013b3df3b977a289852c3a1"
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
version = "0.33.0" version = "0.32.2"
[[StructArrays]] [[StructArrays]]
deps = ["Adapt", "DataAPI", "Tables"] deps = ["Adapt", "DataAPI", "Tables"]
...@@ -520,9 +521,9 @@ version = "1.0.0" ...@@ -520,9 +521,9 @@ version = "1.0.0"
[[Tables]] [[Tables]]
deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"]
git-tree-sha1 = "c45dcc27331febabc20d86cb3974ef095257dcf3" git-tree-sha1 = "b7f762e9820b7fab47544c36f26f54ac59cf8abf"
uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
version = "1.0.4" version = "1.0.5"
[[Test]] [[Test]]
deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
...@@ -539,9 +540,9 @@ deps = ["Random", "SHA"] ...@@ -539,9 +540,9 @@ deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
[[UnPack]] [[UnPack]]
git-tree-sha1 = "d4bfa022cd30df012700cf380af2141961bb3bfb" git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b"
uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
version = "1.0.1" version = "1.0.2"
[[Unicode]] [[Unicode]]
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
...@@ -554,36 +555,36 @@ version = "1.1.0" ...@@ -554,36 +555,36 @@ version = "1.1.0"
[[Zlib_jll]] [[Zlib_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "622d8b6dc0c7e8029f17127703de9819134d1b71" git-tree-sha1 = "fdd89e5ab270ea0f2a0174bd9093e557d06d4bfa"
uuid = "83775a58-1f1d-513f-b197-d71354ab007a" uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
version = "1.2.11+14" version = "1.2.11+16"
[[libass_jll]] [[libass_jll]]
deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"] deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"]
git-tree-sha1 = "027a304b2a90de84f690949a21f94e5ae0f92c73" git-tree-sha1 = "f02d0db58888592e98c5f4953cef620ce9274eee"
uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
version = "0.14.0+2" version = "0.14.0+3"
[[libfdk_aac_jll]] [[libfdk_aac_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "480c7ed04f68ea3edd4c757f5db5b6a0a4e0bd99" git-tree-sha1 = "e17b4513993b4413d31cffd1b36a63625ebbc3d3"
uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
version = "0.1.6+2" version = "0.1.6+3"
[[libvorbis_jll]] [[libvorbis_jll]]
deps = ["Libdl", "Ogg_jll", "Pkg"] deps = ["Libdl", "Ogg_jll", "Pkg"]
git-tree-sha1 = "6a66f65b5275dfa799036c8a3a26616a0a271c4a" git-tree-sha1 = "8014e1c1033009edcfe820ec25877a9f1862ba4c"
uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
version = "1.3.6+4" version = "1.3.6+5"
[[x264_jll]] [[x264_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "d89346fe63a6465a9f44e958ac0e3d366af90b74" git-tree-sha1 = "e496625b900df1b02ab0e02fad316b77446616ef"
uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
version = "2019.5.25+2" version = "2020.7.14+1"
[[x265_jll]] [[x265_jll]]
deps = ["Libdl", "Pkg"] deps = ["Libdl", "Pkg"]
git-tree-sha1 = "61324ad346b00a6e541896b94201c9426591e43a" git-tree-sha1 = "ac7d44fa1639a780d0ae79ca1a5a7f4181131825"
uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
version = "3.0.0+1" version = "3.0.0+2"
...@@ -7,7 +7,7 @@ contains variables with uncertainties. In very simple cases this is ...@@ -7,7 +7,7 @@ contains variables with uncertainties. In very simple cases this is
just a central value and an error just a central value and an error
```@repl gs ```@repl gs
using ADerrors using ADerrors
a = uwreal([1.0, 0.1], 1) # 1.0 +/- 0.1 a = uwreal([1.0, 0.1], "Var with error") # 1.0 +/- 0.1
``` ```
But it also supports the case where the uncertainty comes from Monte But it also supports the case where the uncertainty comes from Monte
Carlo measurements Carlo measurements
...@@ -23,10 +23,10 @@ for i in 2:1000 ...@@ -23,10 +23,10 @@ for i in 2:1000
end end
end end
b = uwreal(x.^2, 200) b = uwreal(x.^2, "Random walk ensemble in [-1,1]")
c = uwreal(x.^4, 200) c = uwreal(x.^4, "Random walk ensemble in [-1,1]")
``` ```
Correlations between variables are treated consistently. Each call to `uwreal` contains an ensemble `ID` tag. In the previous examples `a` has been measured on ensemble `ID` 1, while both `b` and `c` have been measured on ensemble `ID` 200. Monte Carlo measurements with the same `ID` tag are assumed to be measured on the same configurations: `b` and `c` above are statistically correlated, while `a` will be uncorrelated with both `b` and `c`. Correlations between variables are treated consistently. Each call to `uwreal` contains an ensemble `ID` tag. In the previous examples `a` has been measured on ensemble `ID` `Var with error`, while both `b` and `c` have been measured on ensemble `ID` `Random walk ensemble in [-1,1]`. Monte Carlo measurements with the same `ID` tag are assumed to be measured on the same configurations: `b` and `c` above are statistically correlated, while `a` will be uncorrelated with both `b` and `c`.
One can perform operations with `uwreal` variables as if there were normal floats One can perform operations with `uwreal` variables as if there were normal floats
```@repl gs ```@repl gs
...@@ -45,7 +45,7 @@ A call to `uwerr` will apply the ``\Gamma``-method to MC ensembles. `ADerrors.jl ...@@ -45,7 +45,7 @@ A call to `uwerr` will apply the ``\Gamma``-method to MC ensembles. `ADerrors.jl
println("Details on variable d: ") println("Details on variable d: ")
details(d) details(d)
``` ```
Here we can see that there are two ensembles contributing to the uncertainty in `d`. We recognize this as `d` being a function of both `a` (measured on ensemble 1), and `b` and `c`, measured on ensemble 200. Most of the error in `d` comes in fact from ensemble 200. Here we can see that there are two ensembles contributing to the uncertainty in `d`. We recognize this as `d` being a function of both `a` (measured on ensemble `Var with error`), and `b` and `c`, measured on ensemble `Random walk ensemble in [-1,1]`. Most of the error in `d` comes in fact from ensemble `Random walk ensemble in [-1,1]`.
Note that one does not need to use `uwerr` on a variable unless one is interested in the error on that variable. For example, continuing with the previous example Note that one does not need to use `uwerr` on a variable unless one is interested in the error on that variable. For example, continuing with the previous example
```@repl gs ```@repl gs
...@@ -84,8 +84,7 @@ using LsqFit, ADerrors ...@@ -84,8 +84,7 @@ using LsqFit, ADerrors
xdata = range(0, stop=10, length=20); xdata = range(0, stop=10, length=20);
ydata = Vector{uwreal}(undef, length(xdata)); ydata = Vector{uwreal}(undef, length(xdata));
for i in eachindex(ydata) for i in eachindex(ydata)
# Note that we assign to point i the ID 1000*i ydata[i] = uwreal([model(xdata[i], [1.0 2.0]) + 0.01*getindex(randn(1),1), 0.01], "Point "*string(i))
ydata[i] = uwreal([model(xdata[i], [1.0 2.0]) + 0.01*getindex(randn(1),1), 0.01], 1000*i)
uwerr(ydata[i]) # We will need the errors for the weights of the fit uwerr(ydata[i]) # We will need the errors for the weights of the fit
end end
p0 = [0.5, 0.5]; p0 = [0.5, 0.5];
...@@ -142,9 +141,9 @@ for i in 2:10000 ...@@ -142,9 +141,9 @@ for i in 2:10000
end end
# x^2 only measured on odd configurations # x^2 only measured on odd configurations
x2 = uwreal(x[1:2:9999].^2, 1001, collect(1:2:9999), 10000) x2 = uwreal(x[1:2:9999].^2, 1001, collect(1:2:9999), "Random walk in [-1,1]")
# x^4 only measured on even configurations # x^4 only measured on even configurations
x4 = uwreal(x[2:2:10000].^4, 1001, collect(2:2:10000), 10000) x4 = uwreal(x[2:2:10000].^4, 1001, collect(2:2:10000), "Random walk in [-1,1]")
``` ```
the variables `x2` and `x4` are normal `uwreal` variables, and one can work with them as with any other variable. Note however that the automatic determination of the summation window can fail in these cases, because the autocorrelation function with missing measurements can be very complicated. For example the variables `x2` and `x4` are normal `uwreal` variables, and one can work with them as with any other variable. Note however that the automatic determination of the summation window can fail in these cases, because the autocorrelation function with missing measurements can be very complicated. For example
```@repl gaps ```@repl gaps
...@@ -153,9 +152,9 @@ uwerr(rat); # Use automatic window: might fail! ...@@ -153,9 +152,9 @@ uwerr(rat); # Use automatic window: might fail!
``` ```
In this case `uwerr` complains because with the automatically chosen window the variance for ensemble with ID 1001 is negative. Let's have a look at the normalized autocorrelation function In this case `uwerr` complains because with the automatically chosen window the variance for ensemble with ID 1001 is negative. Let's have a look at the normalized autocorrelation function
```@repl gaps ```@repl gaps
iw = window(rat, 1001) iw = window(rat, "Random walk in [-1,1]")
r = rho(rat, 1001); r = rho(rat, "Random walk in [-1,1]");
dr = drho(rat, 1001); dr = drho(rat, "Random walk in [-1,1]");
plot(collect(1:100), plot(collect(1:100),
r[1:100], r[1:100],
yerr = dr[1:100], yerr = dr[1:100],
...@@ -166,7 +165,7 @@ savefig("rat_cf.png") # hide ...@@ -166,7 +165,7 @@ savefig("rat_cf.png") # hide
The normalized autocorrelation function is oscillating, and the automatically chosen window is 2, producing a negative variance! We better fix the window to 50 for this case The normalized autocorrelation function is oscillating, and the automatically chosen window is 2, producing a negative variance! We better fix the window to 50 for this case
```@repl gaps ```@repl gaps
wpm = Dict{Int64, Vector{Float64}}() wpm = Dict{Int64, Vector{Float64}}()
wpm[1001] = [50.0, -1.0, -1.0, -1.0] wpm["Random walk in [-1,1]"] = [50.0, -1.0, -1.0, -1.0]
uwerr(rat, wpm) # repeat error analysis with our choice (window=50) uwerr(rat, wpm) # repeat error analysis with our choice (window=50)
println("Ratio: ", rat) println("Ratio: ", rat)
``` ```
...@@ -175,9 +174,9 @@ Note however that it is very difficult to anticipate which observables will have ...@@ -175,9 +174,9 @@ Note however that it is very difficult to anticipate which observables will have
```@repl gaps ```@repl gaps
prod = x2*x4 prod = x2*x4
uwerr(prod) uwerr(prod)
iw = window(prod, 1001) iw = window(prod, "Random walk in [-1,1]")
r = rho(prod, 1001); r = rho(prod, "Random walk in [-1,1]");
dr = drho(prod, 1001); dr = drho(prod, "Random walk in [-1,1]");
plot(collect(1:2*iw), plot(collect(1:2*iw),
r[1:2*iw], r[1:2*iw],
yerr = dr[1:2*iw], yerr = dr[1:2*iw],
...@@ -197,11 +196,13 @@ All observables are stored in a single `BDIO` record of type `BDIO_BIN_GENERIC`. ...@@ -197,11 +196,13 @@ All observables are stored in a single `BDIO` record of type `BDIO_BIN_GENERIC`.
- ndata (`Vector{Int32}(neid)`): The length of each ensemble. - ndata (`Vector{Int32}(neid)`): The length of each ensemble.
- nrep (`Vector{Int32}(neid)`): The number of replica of each enemble. - nrep (`Vector{Int32}(neid)`): The number of replica of each enemble.
- vrep (`Vector{Int32}`): The replica vector for each ensemble. - vrep (`Vector{Int32}`): The replica vector for each ensemble.
- ids (`Vector{Int32}(neid)`): The ensemble `ID`'s. - ids (`Vector{Int32}(neid)`): The ensemble numeric `ID`'s.
- nt (`Vector{Int32}(neid)`): Half the largest replica of each ensemble. - nt (`Vector{Int32}(neid)`): Half the largest replica of each ensemble.
- zero (`Vector{Float64}(neid)`): just `neid` zeros. - zero (`Vector{Float64}(neid)`): just `neid` zeros.
- four (`Vector{Float64}(neid)`): just `neid` fours. - four (`Vector{Float64}(neid)`): just `neid` fours.
- delta (`Vector{Float64}`): The fluctuations for each ensemble. - delta (`Vector{Float64}`): The fluctuations for each ensemble.
- name (NULL terminated `String`): A description of the observable.
- `ID` tags: A list of `neid` tuples `(Int34, String)` that maps each numeric `ID` to an ensemble tag. All strings are NULL terminated.
!!! alert !!! alert
Obviously this weird format is what it is for some legacy reasons, but it is strongly encouraged that new implementations respect this standard with all its weirdness. Obviously this weird format is what it is for some legacy reasons, but it is strongly encouraged that new implementations respect this standard with all its weirdness.
......
...@@ -19,6 +19,8 @@ const iprm = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, ...@@ -19,6 +19,8 @@ const iprm = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,
const DEFAULT_STAU = 4.0 const DEFAULT_STAU = 4.0
const DO_BIN = false const DO_BIN = false
is_int32(str::String) = Base.tryparse(Int32, str) !== nothing
function get_nbin_vec(nd::Array{Int64, 1})::Int64 function get_nbin_vec(nd::Array{Int64, 1})::Int64
nbin::Int64 = 1 nbin::Int64 = 1
...@@ -56,25 +58,63 @@ function bin_data(vin::Array{Float64, 1}, nbin::Int64) ...@@ -56,25 +58,63 @@ function bin_data(vin::Array{Float64, 1}, nbin::Int64)
return vout return vout
end end
function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace) get_new_id(ws::wspace) = ws.newid = ws.newid - 1
function get_id_from_name(str::String, ws::wspace)
if (haskey(ws.str2id, str))
id = ws.str2id[str]
else
if is_int32(str)
id = Base.tryparse(Int32, str)
else
id = get_new_id(ws)
end
ws.id2str[id] = str
ws.str2id[str] = id
end
return id
end
function get_name_from_id(id::Int64, ws::wspace)
if haskey(ws.id2str, id)
str = ws.id2str[id]
else
str = string(id)
ws.id2str[id] = str
ws.str2id[str] = id
end
return str
end
function add_maps(id::Int64, ws::wspace)
nd = length(delta)
if (nd == 1)
ws.nob += 1 ws.nob += 1
new = fbd(1, 1, delta, [1], Dict{Int64,Vector{Complex{Float64}}}())
push!(ws.fluc, new)
push!(ws.map_nob, id) push!(ws.map_nob, id)
if (!haskey(ws.map_ids, id)) if (!haskey(ws.map_ids, id))
ws.map_ids[id] = ws.nob ws.map_ids[id] = ws.nob
end end
return nothing
end
function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace, do_maps::Bool = true)
nd = length(delta)
if (nd == 1)
new = fbd(1, 1, delta, [1], Dict{Int64,Vector{Complex{Float64}}}())
push!(ws.fluc, new)
else else
if (sum(iv) != length(delta)) if (sum(iv) != length(delta))
println(stderr, "ID: ", id) println(stderr, "ID: ", id)
ArgumentError("Sum of replica length does not match number of measurements") ArgumentError("Sum of replica length does not match number of measurements")
end end
ws.nob += 1
push!(ws.map_nob, id)
if (haskey(ws.map_ids, id)) if (haskey(ws.map_ids, id))
if (length(delta) != ws.fluc[ws.map_ids[id]].nd) if (length(delta) != ws.fluc[ws.map_ids[id]].nd)
println(stderr, "ID: ", id) println(stderr, "ID: ", id)
...@@ -88,8 +128,6 @@ function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace ...@@ -88,8 +128,6 @@ function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace
println(stderr, "obs replica: ", iv) println(stderr, "obs replica: ", iv)
error("Mistmatch in replica vector for the same ensemble ID") error("Mistmatch in replica vector for the same ensemble ID")
end end
else
ws.map_ids[id] = ws.nob
end end
fseries = Dict{Int64,Vector{Complex{Float64}}}() fseries = Dict{Int64,Vector{Complex{Float64}}}()
...@@ -109,9 +147,13 @@ function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace ...@@ -109,9 +147,13 @@ function add_DB(delta::Vector{Float64}, id::Int64, iv::Vector{Int64}, ws::wspace
iv, iv,
fseries) fseries)
push!(ws.fluc, new) push!(ws.fluc, new)
end
if do_maps
add_maps(id, ws)
end end
return nothing
end end
function uwcls(data::Vector{Float64}, id::Int64, ws::wspace, iv::Vector{Int64}) function uwcls(data::Vector{Float64}, id::Int64, ws::wspace, iv::Vector{Int64})
...@@ -634,29 +676,47 @@ end ...@@ -634,29 +676,47 @@ end
wsg = ADerrors.wspace(similar(Vector{ADerrors.fbd}, 0), wsg = ADerrors.wspace(similar(Vector{ADerrors.fbd}, 0),
0, 0,
similar(Vector{Int64}, 0), similar(Vector{Int64}, 0),
Dict{Int64, Int64}()) Dict{Int64, Int64}(),
Dict{Int64, String}(), Dict{String, Int64}(),
-12345)
get_id_from_name(str::String) = get_id_from_name(str, wsg)
taui(a::uwreal, str::String) = taui(a, get_id_from_name(str))
dtaui(a::uwreal, str::String) = dtaui(a, get_id_from_name(str))
window(a::uwreal, str::String) = window(a, get_id_from_name(str))
rho(a::uwreal, str::String) = rho(a, get_id_from_name(str))
drho(a::uwreal, str::String) = drho(a, get_id_from_name(str))
empt = Dict{Int64,Vector{Float64}}() empt = Dict{Int64,Vector{Float64}}()
function dict_name_to_id(wpm::Dict{String, Vector{Float64}})
wp = Dict{Int64, Vector{Float64}}()
for i in keys(wpm)
wp[get_id_from_name(i)] = wpm[i]
end
return wp
end
""" """
uwreal(x::Float64) uwreal(x::Float64)
uwreal([value::Float64, error::Float64], mcid) uwreal([value::Float64, error::Float64], mcid)
uwreal(data::Vector{Float64}, mcid::Int64[, replica::Vector{Int64}]) uwreal(data::Vector{Float64}, mcid[, replica::Vector{Int64}])
uwreal(data::Vector{Float64}, mcid::Int64[, replica::Vector{Int64}], idm::Vector{Int64}, nms::Int64) uwreal(data::Vector{Float64}, mcid[, replica::Vector{Int64}], idm::Vector{Int64}, nms::Int64)
Returns an `uwreal` data type. Depending on the first argument, the `uwreal` stores the following information: Returns an `uwreal` data type. Depending on the first argument, the `uwreal` stores the following information:
- Input is a single `Float64`. In this case the variable acts in exactly the same way as a real number. This is understood as a quantity with zero error. - Input is a single `Float64`. In this case the variable acts in exactly the same way as a real number. This is understood as a quantity with zero error.
- Input is a 2 element Vector of `Float64` `[value, error]`. In this case the data is understood as `value +/- error`. - Input is a 2 element Vector of `Float64` `[value, error]`. In this case the data is understood as `value +/- error`.
- Input is a Vector of `Float64` of length larger than 4. In this case the data is understood as consecutive measurements of an observable in a Monte Carlo (MC) simulation. - Input is a Vector of `Float64` of length larger than 4. In this case the data is understood as consecutive measurements of an observable in a Monte Carlo (MC) simulation.
In the last two cases, an ensemble `ID` is required as input. Data with the same `ID` are considered as correlated (i.e. fully correlated for the case of a `value +/- error` observables measured on the same sample for the case of data from a MC simulation). For example: In the last two cases, an ensemble `ID` is required as input. Data with the same `ID` are considered as correlated (i.e. fully correlated for the case of a `value +/- error` observables measured on the same sample for the case of data from a MC simulation). The preferred way to input the ensemble tag is via a `String` that uniquely identifies the ensemble, but an integer is also supported for legacy reasons. For example:
```@example ```@example
using ADerrors # hide using ADerrors # hide
a = uwreal([1.2, 0.2], 12) # a = 1.2 +/- 0.2 a = uwreal([1.2, 0.2], "Simple var with error") # a = 1.2 +/- 0.2
b = uwreal([1.2, 0.2], 12) # b = 1.2 +/- 0.2 b = uwreal([1.2, 0.2], "Simple var with error") # b = 1.2 +/- 0.2
c = uwreal([1.2, 0.2], 2000) # c = 1.2 +/- 0.2 c = uwreal([1.2, 0.2], "Another var with error") # c = 1.2 +/- 0.2
d = a-b d = a-b
uwerr(d) uwerr(d)
...@@ -674,7 +734,7 @@ println("e has non zero error because a and c are independent", e) ...@@ -674,7 +734,7 @@ println("e has non zero error because a and c are independent", e)
using ADerrors # hide using ADerrors # hide
# 1000 measurements in three replica of lengths # 1000 measurements in three replica of lengths
# 500, 100 and 400 # 500, 100 and 400
a = uwreal(rand(1000), 12, [500, 100, 400]) a = uwreal(rand(1000), "Ensemble with three replica", [500, 100, 400])
``` ```
### Gaps in the measurements ### Gaps in the measurements
...@@ -685,11 +745,11 @@ In some situations an observable is not measured in every configuration. In this ...@@ -685,11 +745,11 @@ In some situations an observable is not measured in every configuration. In this
using ADerrors # hide using ADerrors # hide
# Observable measured on the odd configurations # Observable measured on the odd configurations
# 1, 3, 5, ..., 999 on an emsemble of length 1000 # 1, 3, 5, ..., 999 on an emsemble of length 1000
a = uwreal(rand(500), 12, collect(1:2:999), 1000) a = uwreal(rand(500), "Observable with gaps", collect(1:2:999), 1000)
# Observable measured on the first 900 configurations # Observable measured on the first 900 configurations
# on the same emsemble # on the same emsemble
b = uwreal(rand(900), 12, collect(1:900), 1000) b = uwreal(rand(900), "Observable with gaps", collect(1:900), 1000)
``` ```
Note that in this case, if the ensemble has different replica, `sum(replica)` must match `nms` Note that in this case, if the ensemble has different replica, `sum(replica)` must match `nms`
```@example ```@example
...@@ -697,33 +757,78 @@ using ADerrors # hide ...@@ -697,33 +757,78 @@ using ADerrors # hide
# Observable measured on the even configurations # Observable measured on the even configurations
# 2, 4, 6, ..., 200 on an emsemble of length 200 # 2, 4, 6, ..., 200 on an emsemble of length 200
# with two replica of lengths 75, 125 # with two replica of lengths 75, 125
a = uwreal(data_a[1:500], 123, [75, 125], collect(2:2:200), 200) a = uwreal(data_a[1:500], "Observable with gaps in an ensemble with replica", [75, 125], collect(2:2:200), 200)
``` ```
""" """
uwreal(x::Float64) = ADerrors.uwreal(x, 0.0, 0.0, uwreal(x::Float64) = ADerrors.uwreal(x, 0.0, 0.0,
Vector{Bool}(), Vector{Float64}(), Vector{Bool}(), Vector{Float64}(),
Vector{Int64}(), Vector{cfdata}()) Vector{Int64}(), Vector{cfdata}())
uwreal(data::Vector{Float64}, id::Int64) = ADerrors.uwcls(data::Vector{Float64}, id::Int64, wsg, [length(data)]) uwreal(data::Vector{Float64},
uwreal(data::Vector{Float64}, id::Int64, iv::Vector{Int64}) = ADerrors.uwcls(data::Vector{Float64}, id::Int64, wsg, iv) id::Int64) = ADerrors.uwcls(data,
uwreal(data::Vector{Float64}, id::Int64, idm::Vector{Int64}, nms::Int64) = ADerrors.uwcls_gaps(data::Vector{Float64}, id,
id::Int64, wsg, wsg,
[length(data)])
uwreal(data::Vector{Float64},
id::Int64,
iv::Vector{Int64}) = ADerrors.uwcls(data,
id,
wsg,
iv)
uwreal(data::Vector{Float64},
id::Int64,
idm::Vector{Int64},
nms::Int64) = ADerrors.uwcls_gaps(data,
id,
wsg,
[nms], [nms],
idm,
nms)
uwreal(data::Vector{Float64},
id::Int64,
iv::Vector{Int64},
idm::Vector{Int64}, idm::Vector{Int64},
nms::Int64) nms::Int64) = ADerrors.uwcls_gaps(data,
uwreal(data::Vector{Float64}, id::Int64, iv::Vector{Int64}, idm::Vector{Int64}, nms::Int64) = ADerrors.uwcls_gaps(data::Vector{Float64}, id,
id::Int64, wsg, wsg,
iv,
idm,
nms)
uwreal(data::Vector{Float64}, str::String) = ADerrors.uwcls(data,
get_id_from_name(str, wsg),
wsg,
[length(data)])
uwreal(data::Vector{Float64},
str::String,
iv::Vector{Int64}) = ADerrors.uwcls(data, get_id_from_name(str, wsg), wsg, iv)
uwreal(data::Vector{Float64},
str::String,
idm::Vector{Int64},
nms::Int64) = ADerrors.uwcls_gaps(data,
get_id_from_name(str, wsg), wsg,
[nms],
idm,
nms)
uwreal(data::Vector{Float64},
str::String,
iv::Vector{Int64}, iv::Vector{Int64},
idm::Vector{Int64}, idm::Vector{Int64},
nms::Int64) nms::Int64) = ADerrors.uwcls_gaps(data,
get_id_from_name(str, wsg),
iv,
idm,
nms)
@doc raw""" @doc raw"""
uwerr(a::uwreal[, wpm::Dict{Int64,Vector{Float64}}]) uwerr(a::uwreal[, wpm::Dict{Int64,Vector{Float64}}])
uwerr(a::uwreal[, wpm::Dict{String,Vector{Float64}}])
Performs error analysis on the observable `a`. Performs error analysis on the observable `a`.
```@example ```@example
using ADerrors # hide using ADerrors # hide
a = uwreal([1.3, 0.01], 1) # 1.3 +/- 0.01 a = uwreal([1.3, 0.01], "Var with error") # 1.3 +/- 0.01
b = sin(2.0*a) b = sin(2.0*a)
uwerr(b) uwerr(b)
println("Look how I propagate errors: ", b) println("Look how I propagate errors: ", b)
...@@ -762,58 +867,58 @@ for i in 2:1000 ...@@ -762,58 +867,58 @@ for i in 2:1000
end end
# Load the data in a uwreal # Load the data in a uwreal
a = uwreal(x.^2, 1233) a = uwreal(x.^2, "Random walk in [-1,1]")
wpm = Dict{Int64,Vector{Float64}}() wpm = Dict{String,Vector{Float64}}()
# Use default analysis (stau = 4.0) # Use default analysis (stau = 4.0)
uwerr(a) uwerr(a)
println("default: ", a, " (tauint = ", taui(a, 1233), ")") println("default: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
# This will still do default analysis because # This will still do default analysis because
# a does not depend on emsemble 300 # a does not depend on emsemble foo
wpm[300] = [-1.0, 8.0, -1.0, 145.0] wpm["Ensemble foo"] = [-1.0, 8.0, -1.0, 145.0]
uwerr(a, wpm) uwerr(a, wpm)
println("default: ", a, " (tauint = ", taui(a, 1233), ")") println("default: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
# Fix the summation window to 1 (i.e. uncorrelated data) # Fix the summation window to 1 (i.e. uncorrelated data)
wpm[1233] = [1.0, -1.0, -1.0, -1.0] wpm["Random walk in [-1,1]"] = [1.0, -1.0, -1.0, -1.0]
uwerr(a, wpm) uwerr(a, wpm)
println("uncorrelated: ", a, " (tauint = ", taui(a, 1233), ")") println("uncorrelated: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
# Use stau = 1.5 # Use stau = 1.5
wpm[1233] = [-1.0, 1.5, -1.0, -1.0] wpm["Random walk in [-1,1]"] = [-1.0, 1.5, -1.0, -1.0]
uwerr(a, wpm) uwerr(a, wpm)
println("stau = 1.5: ", a, " (tauint = ", taui(a, 1233), ")") println("stau = 1.5: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
# Use fixed window 15 and add tail with texp = 100.0 # Use fixed window 15 and add tail with texp = 100.0
wpm[1233] = [15.0, -1.0, -1.0, 100.0] wpm["Random walk in [-1,1]"] = [15.0, -1.0, -1.0, 100.0]
uwerr(a, wpm) uwerr(a, wpm)
println("Fixed window 15, texp=100: ", a, " (tauint = ", taui(a, 1233), ")") println("Fixed window 15, texp=100: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
# Sum up to the point that the signal in Gamma is # Sum up to the point that the signal in Gamma is
# 1.5 times the error and add a tail with texp = 30.0 # 1.5 times the error and add a tail with texp = 10.0
wpm[1233] = [-1.0, -1.0, 1.5, 30.0] wpm["Random walk in [-1,1]"] = [-1.0, -1.0, 1.5, 30.0]
uwerr(a, wpm) uwerr(a, wpm)
println("signal/noise=1.5, texp=30: ", a, " (tauint = ", taui(a, 1233), ")") println("signal/noise=1.5, texp=10: ", a, " (tauint = ", taui(a, "Random walk in [-1,1]"), ")")
``` ```
""" """
uwerr(a::uwreal, wpm::Dict{Int64,Vector{Float64}}) = ADerrors.uwerror(a::uwreal, wsg, wpm) uwerr(a::uwreal, wpm::Dict{Int64,Vector{Float64}}) = ADerrors.uwerror(a, wsg, wpm)
uwerr(a::uwreal) = ADerrors.uwerror(a::uwreal, wsg, empt) uwerr(a::uwreal) = ADerrors.uwerror(a::uwreal, wsg, empt)
uwerr(a::uwreal, wpm::Dict{String,Vector{Float64}}) = uwerr(a, dict_name_to_id(wpm))
""" """
cov(a::Vector{uwreal}[, wpm::Dict{Int64,Vector{Float64}}]) cov(a::Vector{uwreal}[, wpm])
Determine the covariance matrix between the vector of observables `a[:]`. Determine the covariance matrix between the vector of observables `a[:]`.
```@example ```@example
using ADerrors, LinearAlgebra # hide using ADerrors, LinearAlgebra # hide
a = uwreal([1.3, 0.01], 1) # 1.3 +/- 0.01 a = uwreal([1.3, 0.01], "Var 1") # 1.3 +/- 0.01
b = uwreal([5.3, 0.23], 2) # 5.3 +/- 0.23 b = uwreal([5.3, 0.23], "Var 2") # 5.3 +/- 0.23
uwerr(a) uwerr(a)
uwerr(b) uwerr(b)
x = [a+b, a-b] x = [a+b, a-b]
mat = cov(x) mat = ADerrors.cov(x)
println("Covariance: ", mat[1,1], " ", mat[1,2]) println("Covariance: ", mat[1,1], " ", mat[1,2])
println(" ", mat[2,1], " ", mat[2,2]) println(" ", mat[2,1], " ", mat[2,2])
println("Check (should be zero): ", mat[1,1] - mat[2,2]) println("Check (should be zero): ", mat[1,1] - mat[2,2])
...@@ -825,17 +930,19 @@ println("Check (should be zero): ", mat[1,2] - (err(a)^2-err(b)^2)) ...@@ -825,17 +930,19 @@ println("Check (should be zero): ", mat[1,2] - (err(a)^2-err(b)^2))
An optional parameter `wpm` can be used to choose the summation window for the relevant autocorrelation functions. The situation is completely analogous to the case of error analysis of single variables. An optional parameter `wpm` can be used to choose the summation window for the relevant autocorrelation functions. The situation is completely analogous to the case of error analysis of single variables.
""" """
cov(a::Vector{uwreal}) = cov(a::Vector{uwreal}, wsg, empt) cov(a::Vector{uwreal}) = cov(a::Vector{uwreal}, wsg, empt)
cov(a::Vector{uwreal}, wpm::Dict{Int64,Vector{Float64}}) = cov(a::Vector{uwreal}, wsg, wpm::Dict{Int64,Vector{Float64}}) cov(a::Vector{uwreal}, wpm::Dict{Int64,Vector{Float64}}) = cov(a, wsg, wpm)
cov(a::Vector{uwreal}, wpm::Dict{String,Vector{Float64}}) = cov(a, wsg, dict_name_to_id(wpm))
@doc raw""" @doc raw"""
trcov(M::Array{Float64, 2}, a::Vector{uwreal}) trcov(M::Array{Float64, 2}, a::Vector{uwreal}[, wmp])
Given a vector of `uwreal`, `a[:]` and a two dimensional array `M`, this routine computes ``{\rm tr}(MC)``, where ``C_{ij} = {\rm cov}(a[i], a[j])``. Given a vector of `uwreal`, `a[:]` and a two dimensional symmtric positive definite array `M`, this routine computes ``{\rm tr}(MC)``, where ``C_{ij} = {\rm cov}(a[i], a[j])``.
```@example ```@example
using ADerrors, LinearAlgebra # hide using ADerrors, LinearAlgebra # hide
a = uwreal([1.3, 0.01], 1) # 1.3 +/- 0.01 a = uwreal([1.3, 0.01], "Var with error 1") # 1.3 +/- 0.01
b = uwreal([5.3, 0.23], 2) # 5.3 +/- 0.23 b = uwreal([5.3, 0.23], "Var with error 2") # 5.3 +/- 0.23
c = uwreal(rand(2000), 3) c = uwreal(rand(2000), "White noise ensemble")
x = [a+b+sin(c), a-b+cos(c), c-b/a] x = [a+b+sin(c), a-b+cos(c), c-b/a]
M = [1.0 0.2 0.1 M = [1.0 0.2 0.1
...@@ -845,17 +952,27 @@ M = [1.0 0.2 0.1 ...@@ -845,17 +952,27 @@ M = [1.0 0.2 0.1
mcov = cov(x) mcov = cov(x)
d = tr(mcov * M) d = tr(mcov * M)
println("Better be zero: ", d -trcov(M, x)) println("Better be zero: ", d -trcov(M, x))
# Case of Monte Carlo data
An optional parameter `wpm` can be used to choose the summation window for the relevant autocorrelation functions. The situation is completely analogous to the case of error analysis of single variables.
``` ```
""" """
trcov(M, a::Vector{uwreal}) = trcov(M, a::Vector{uwreal}, wsg, empt) trcov(M, a::Vector{uwreal}) = trcov(M, a, wsg, empt)
trcov(M, a::Vector{uwreal}, wpm::Dict{Int64,Vector{Float64}}) = trcov(M, a::Vector{uwreal}, wsg, wpm::Dict{Int64,Vector{Float64}}) trcov(M, a::Vector{uwreal}, wpm::Dict{Int64,Vector{Float64}}) = trcov(M, a, wsg, wpm)
trcov(M, a::Vector{uwreal}, wpm::Dict{String,Vector{Float64}}) =
trcov(M, a, wsg, dict_name_to_id(wpm))
trcorr(M, a::Vector{uwreal}, trcorr(M, a::Vector{uwreal},
W::Vector{Float64}=Vector{Float64}()) = trcorr(M, a::Vector{uwreal}, wsg, empt, W) W::Vector{Float64}=Vector{Float64}()) = trcorr(M, a, wsg, empt, W)
trcorr(M, a::Vector{uwreal}, W::Vector{Float64},
wpm::Dict{Int64,Vector{Float64}}) = trcorr(M, a, wsg, wpm, W)
trcorr(M, a::Vector{uwreal}, W::Vector{Float64},
wpm::Dict{String,Vector{Float64}}) = trcorr(M, a, wsg, dict_name_to_id(wpm), W)
trcorr(M, a::Vector{uwreal}, trcorr(M, a::Vector{uwreal},
W::Vector{Float64}, wpm::Dict{Int64,Vector{Float64}}) = trcorr(M, a::Vector{uwreal}, wsg, wpm::Dict{Int64,Vector{Float64}}, W) wpm::Dict{Int64,Vector{Float64}}) = trcorr(M, a, wsg, wpm, Vector{Float64}())
trcorr(M, a::Vector{uwreal}, trcorr(M, a::Vector{uwreal},
wpm::Dict{Int64,Vector{Float64}}) = trcorr(M, a::Vector{uwreal}, wsg, wpm::Dict{Int64,Vector{Float64}}, Vector{Float64}()) wpm::Dict{String,Vector{Float64}}) = trcorr(M, a, wsg, dict_name_to_id(wpm), Vector{Float64}())
""" """
......
...@@ -74,9 +74,9 @@ function derror(a::uwreal) ...@@ -74,9 +74,9 @@ function derror(a::uwreal)
end end
""" """
taui(a::uwreal, id::Int64) taui(a::uwreal, mcid)
Returns the value of tauint for the ensemble `id`. It is assumed that `uwerr` has been run on the variable and that `id` contributes to the observable `a`. Otherwise an error message is printed. Returns the value of tauint for the ensemble `mcid`. It is assumed that `uwerr` has been run on the variable and that `mcid` contributes to the observable `a`. Otherwise an error message is printed. `mcid` can be either an `Int64` (the proper ensemble ID), or a `String` (the ensemble tag).
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Generate some correlated data # Generate some correlated data
...@@ -90,9 +90,9 @@ for i in 2:1000 ...@@ -90,9 +90,9 @@ for i in 2:1000
end end
end end
a = uwreal(x.^2, 666) a = uwreal(x.^2, "Some simple ensemble")
uwerr(a) uwerr(a)
println("Error analysis result: ", a, " (tauint = ", taui(a, 666), ")") println("Error analysis result: ", a, " (tauint = ", taui(a, "Some simple ensemble"), ")")
``` ```
""" """
function taui(a::uwreal, mcid::Int64) function taui(a::uwreal, mcid::Int64)
...@@ -105,9 +105,9 @@ function taui(a::uwreal, mcid::Int64) ...@@ -105,9 +105,9 @@ function taui(a::uwreal, mcid::Int64)
end end
""" """
dtaui(a::uwreal, id::Int64) dtaui(a::uwreal, mcid)
Returns an estimate on the error of tauint for the ensemble `id`. It is assumed that `uwerr` has been run on the variable and that `id` contributes to the observable `a`. Otherwise an error message is printed. Returns an estimate on the error of tauint for the ensemble `mcid`. It is assumed that `uwerr` has been run on the variable and that `mcid` contributes to the observable `a`. Otherwise an error message is printed.
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Generate some correlated data # Generate some correlated data
...@@ -121,10 +121,10 @@ for i in 2:1000 ...@@ -121,10 +121,10 @@ for i in 2:1000
end end
end end
a = uwreal(x.^2, 666) a = uwreal(x.^2, "Some simple ensemble")
uwerr(a) uwerr(a)
println("Error analysis result: ", a, println("Error analysis result: ", a,
" (tauint = ", taui(a, 666), " +/- ", dtaui(a, 666), ")") " (tauint = ", taui(a, "Some simple ensemble"), " +/- ", dtaui(a, "Some simple ensemble"), ")")
``` ```
""" """
function dtaui(a::uwreal, mcid::Int64) function dtaui(a::uwreal, mcid::Int64)
...@@ -137,9 +137,9 @@ function dtaui(a::uwreal, mcid::Int64) ...@@ -137,9 +137,9 @@ function dtaui(a::uwreal, mcid::Int64)
end end
""" """
window(a::uwreal, id::Int64) window(a::uwreal, mcid)
Returns the summation window for the ensemble `id`. It is assumed that `uwerr` has been run on the variable and that `id` contributes to the observable `a`. Otherwise an error message is printed. Returns the summation window for the ensemble `mcid`. It is assumed that `uwerr` has been run on the variable and that `mcid` contributes to the observable `a`. Otherwise an error message is printed.
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Generate some correlated data # Generate some correlated data
...@@ -153,10 +153,10 @@ for i in 2:1000 ...@@ -153,10 +153,10 @@ for i in 2:1000
end end
end end
a = uwreal(x.^2, 666) a = uwreal(x.^2, "Some simple ensemble")
uwerr(a) uwerr(a)
println("Error analysis result: ", a, println("Error analysis result: ", a,
" (window = ", window(a, 666), ")") " (window = ", window(a, "Some simple ensemble"), ")")
``` ```
""" """
function window(a::uwreal, mcid::Int64) function window(a::uwreal, mcid::Int64)
...@@ -169,9 +169,9 @@ function window(a::uwreal, mcid::Int64) ...@@ -169,9 +169,9 @@ function window(a::uwreal, mcid::Int64)
end end
""" """
rho(a::uwreal, id::Int64) rho(a::uwreal, mcid)
Returns the normalized autocorrelation function of `a` for the ensemble `id`. It is assumed that `uwerr` has been run on the variable and that `id` contributes to the observable `a`. Otherwise an error message is printed. Returns the normalized autocorrelation function of `a` for the ensemble `mcid`. It is assumed that `uwerr` has been run on the variable and that `mcid` contributes to the observable `a`. Otherwise an error message is printed.
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Generate some correlated data # Generate some correlated data
...@@ -185,9 +185,9 @@ for i in 2:1000 ...@@ -185,9 +185,9 @@ for i in 2:1000
end end
end end
a = uwreal(x.^2, 666) a = uwreal(x.^2, "Some simple ensemble")
uwerr(a) uwerr(a)
v = rho(a, 666) v = rho(a, "Some simple ensemble")
for i in 1:length(v) for i in 1:length(v)
println(i, " ", v[i]) println(i, " ", v[i])
end end
...@@ -203,9 +203,9 @@ function rho(a::uwreal, mcid::Int64) ...@@ -203,9 +203,9 @@ function rho(a::uwreal, mcid::Int64)
end end
""" """
rho(a::uwreal, id::Int64) drho(a::uwreal, mcid)
Returns an estimate of the error on the normalized autocorrelation function of `a` for the ensemble `id`. It is assumed that `uwerr` has been run on the variable and that `id` contributes to the observable `a`. Otherwise an error message is printed. Returns an estimate of the error on the normalized autocorrelation function of `a` for the ensemble `mcid`. It is assumed that `uwerr` has been run on the variable and that `mcid` contributes to the observable `a`. Otherwise an error message is printed.
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Generate some correlated data # Generate some correlated data
...@@ -219,10 +219,10 @@ for i in 2:1000 ...@@ -219,10 +219,10 @@ for i in 2:1000
end end
end end
a = uwreal(x.^2, 666) a = uwreal(x.^2, "Some simple ensemble")
uwerr(a) uwerr(a)
v = rho(a, 666) v = rho(a, "Some simple ensemble")
dv = drho(a, 666) dv = drho(a, "Some simple ensemble")
for i in 1:length(v) for i in 1:length(v)
println(i, " ", v[i], " +/- ", dv[i]) println(i, " ", v[i], " +/- ", dv[i])
end end
...@@ -278,15 +278,33 @@ function read_bdio(fb, ws::wspace, mapids::Dict{Int64, Int64}) ...@@ -278,15 +278,33 @@ function read_bdio(fb, ws::wspace, mapids::Dict{Int64, Int64})
dfl = zeros(Float64, nds[i]) dfl = zeros(Float64, nds[i])
BDIO.BDIO_read(fb, dfl) BDIO.BDIO_read(fb, dfl)
id = convert(Int64, ids[i]) id = convert(Int64, ids[i])
add_DB(dfl, get(mapids, id, id), convert(Vector{Int64}, ivrep[is:ie]), ws) add_DB(dfl, get(mapids, id, id), convert(Vector{Int64}, ivrep[is:ie]), ws, false)
is = ie + 1 is = ie + 1
end end
if BDIO.BDIO_eor(fb)
for i in 1:nid
id = convert(Int64, ids[i])
add_maps(id, ws)
get_name_from_id(id, ws)
end
else
name = BDIO.BDIO_read_str(fb)
for i in 1:nid
BDIO.BDIO_read(fb, ifoo)
str = BDIO.BDIO_read_str(fb)
id = get_id_from_name(str, ws)
add_maps(id, ws)
end
end
return uwreal(dfoo[1], p, d) return uwreal(dfoo[1], p, d)
end end
function write_bdio(p::uwreal, fb, iu::Int, ws::wspace) function write_bdio(p::uwreal, fb, iu::Int, ws::wspace; name="NO NAME")
BDIO.BDIO_start_record!(fb, BDIO.BDIO_BIN_GENERIC, convert(Int32, iu), true) BDIO.BDIO_start_record!(fb, BDIO.BDIO_BIN_GENERIC, convert(Int32, iu), true)
nid = convert(Int32, unique_ids!(p, ws)) nid = convert(Int32, unique_ids!(p, ws))
...@@ -329,6 +347,12 @@ function write_bdio(p::uwreal, fb, iu::Int, ws::wspace) ...@@ -329,6 +347,12 @@ function write_bdio(p::uwreal, fb, iu::Int, ws::wspace)
BDIO.BDIO_write!(fb, dt, true) BDIO.BDIO_write!(fb, dt, true)
end end
BDIO.BDIO_write!(fb, name*"\0")
for i in 1:nid
BDIO.BDIO_write!(fb, [convert(Int32, p.ids[i])])
BDIO.BDIO_write!(fb, get_name_from_id(p.ids[i], ws)*"\0")
end
BDIO.BDIO_write_hash!(fb) BDIO.BDIO_write_hash!(fb)
return true return true
...@@ -341,24 +365,21 @@ Write out a detailed information on the error of `a`. ...@@ -341,24 +365,21 @@ Write out a detailed information on the error of `a`.
## Arguments ## Arguments
Optionally one can pass as a keyword argument (`io`) the `IO` stream to write to and a dictionary (`names`) that translates ensemble `ID`s into more human friendly `Strings` Optionally one can pass as a keyword argument (`io`) the `IO` stream to write to.
## Example ## Example
```@example ```@example
using ADerrors # hide using ADerrors # hide
a = uwreal(rand(2000), 120) a = uwreal(rand(2000), "Ensemble A12")
b = uwreal([1.2, 0.023], 121) b = uwreal([1.2, 0.023], "Ensemble XYZ")
c = uwreal([5.2, 0.03], 122) c = uwreal([5.2, 0.03], "Ensemble RRR")
d = a + b - c d = a + b - c
uwerr(d) uwerr(d)
bnm = Dict{Int64, String}() details(d)
bnm[120] = "Very important ensemble"
bnm[122] = "H12B K87"
details(d, bnm)
``` ```
""" """
function details(a::uwreal, ws::wspace, io::IO=stdout, names::Dict{Int64, String} = Dict{Int64, String}()) function details(a::uwreal, ws::wspace, io::IO=stdout)
if (length(a.prop) == 0) if (length(a.prop) == 0)
print(a.mean) print(a.mean)
...@@ -390,7 +411,7 @@ function details(a::uwreal, ws::wspace, io::IO=stdout, names::Dict{Int64, String ...@@ -390,7 +411,7 @@ function details(a::uwreal, ws::wspace, io::IO=stdout, names::Dict{Int64, String
for i in 1:length(a.cfd) for i in 1:length(a.cfd)
idx = ws.map_ids[a.ids[ip[i]]] idx = ws.map_ids[a.ids[ip[i]]]
sndt = join(ws.fluc[idx].ivrep, ",") sndt = join(ws.fluc[idx].ivrep, ",")
sid = truncate_ascii(get(names, a.ids[ip[i]], string(a.ids[ip[i]])), ntrunc) sid = truncate_ascii(get_name_from_id(a.ids[ip[i]], ws), ntrunc)
if (ws.fluc[idx].nd > 1) if (ws.fluc[idx].nd > 1)
Printf.@printf(io, " # %45s %6.2f %s\n", Printf.@printf(io, " # %45s %6.2f %s\n",
sid, 100.0 .* a.cfd[ip[i]].var ./ a.err^2, sndt) sid, 100.0 .* a.cfd[ip[i]].var ./ a.err^2, sndt)
...@@ -404,7 +425,7 @@ function details(a::uwreal, ws::wspace, io::IO=stdout, names::Dict{Int64, String ...@@ -404,7 +425,7 @@ function details(a::uwreal, ws::wspace, io::IO=stdout, names::Dict{Int64, String
end end
end end
details(a::uwreal; io::IO=stdout, names::Dict{Int64, String} = Dict{Int64, String}()) = details(a, wsg, io, names) details(a::uwreal; io::IO=stdout) = details(a, wsg, io)
""" """
read_uwreal(fb[, map_ids::Dict{Int64, Int64}]) read_uwreal(fb[, map_ids::Dict{Int64, Int64}])
......
...@@ -10,9 +10,10 @@ ...@@ -10,9 +10,10 @@
### ###
""" """
cobs(avgs::Vector{Float64}, Mcov::Array{Float64, 2}, str::String)
cobs(avgs::Vector{Float64}, Mcov::Array{Float64, 2}, ids::Vector{Int64}) cobs(avgs::Vector{Float64}, Mcov::Array{Float64, 2}, ids::Vector{Int64})
Returns a vector of `uwreal` such that their mean values are `avgs[:]` and their covariance is `Mcov[:,:]`. In order to construct these observables `n=length(avgs)` ensemble ID are used. These have to be specified in the vector `ids[:]`. Returns a vector of `uwreal` such that their mean values are `avgs[:]` and their covariance is `Mcov[:,:]`. In order to construct these observables `n=length(avgs)` ensemble ID are used. These are generated either from the string `str` or have to be specified in the vector `ids[:]`.
```@example ```@example
using ADerrors # hide using ADerrors # hide
# Put some average values and covariance # Put some average values and covariance
...@@ -23,7 +24,7 @@ Mcov = [0.478071 -0.176116 0.0135305 ...@@ -23,7 +24,7 @@ Mcov = [0.478071 -0.176116 0.0135305
# Produce observables with ensemble ID # Produce observables with ensemble ID
# [1, 2001, 32]. Do error analysis # [1, 2001, 32]. Do error analysis
p = cobs(avg, Mcov, [1, 2001, 32]) p = cobs(avg, Mcov, "GF beta function parameters")
uwerr.(p) uwerr.(p)
# Check central values are ok # Check central values are ok
...@@ -50,6 +51,19 @@ function cobs(avgs::Vector{Float64}, cov::Array{Float64, 2}, ids::Vector{Int64}) ...@@ -50,6 +51,19 @@ function cobs(avgs::Vector{Float64}, cov::Array{Float64, 2}, ids::Vector{Int64})
return p return p
end end
function cobs(avgs::Vector{Float64}, cov::Array{Float64, 2}, str::String)
n = length(avgs)
ids = Vector{Int64}(undef, n)
for i in 1:n
tstr = Printf.@sprintf "%s %8.8d" str i
ids[i] = get_id_from_name(tstr)
end
return cobs(avgs, cov, ids)
end
function addobs(a::Vector{uwreal}, der::Vector{Float64}, mvl::Float64) function addobs(a::Vector{uwreal}, der::Vector{Float64}, mvl::Float64)
n = 0 n = 0
......
...@@ -73,6 +73,11 @@ mutable struct wspace ...@@ -73,6 +73,11 @@ mutable struct wspace
map_nob::Array{Int64, 1} # The id that corresponds to each ob map_nob::Array{Int64, 1} # The id that corresponds to each ob
map_ids::Dict{Int64, Int64} # For each id, a fluc index map_ids::Dict{Int64, Int64} # For each id, a fluc index
id2str::Dict{Int64, String} # Ensemble id for each String
str2id::Dict{String, Int64} # Ensemble String for each id
newid::Int64
end end
......
...@@ -17,9 +17,9 @@ Returns `x` such that `fnew(x, data) = 0` (i.e. a root of the function). The err ...@@ -17,9 +17,9 @@ Returns `x` such that `fnew(x, data) = 0` (i.e. a root of the function). The err
using ADerrors # hide using ADerrors # hide
# First define some arbitrary data # First define some arbitrary data
data = Vector{uwreal}(undef, 3) data = Vector{uwreal}(undef, 3)
data[1] = uwreal([1.0, 0.2], 120) data[1] = uwreal([1.0, 0.2], "Var A")
data[2] = uwreal([1.2, 0.023], 121) data[2] = uwreal([1.2, 0.023], "Var B")
data[3] = uwreal(rand(1000), 122) data[3] = uwreal(rand(1000), "White noise ensemble")
# Now define a function # Now define a function
f(x, p) = x + p[1]*x + cos(p[2]*x+p[3]) f(x, p) = x + p[1]*x + cos(p[2]*x+p[3])
...@@ -33,7 +33,8 @@ println("Root: ", x) ...@@ -33,7 +33,8 @@ println("Root: ", x)
# Check # Check
z = f(x, data) z = f(x, data)
uwerr(z) uwerr(z)
println("Better be zero (with zero error): ", z) print("Better be zero (with zero error): ")
details(z)
``` ```
""" """
function root_error(fnew::Function, x::Float64, function root_error(fnew::Function, x::Float64,
...@@ -59,7 +60,7 @@ function root_error(fnew::Function, x::Float64, ...@@ -59,7 +60,7 @@ function root_error(fnew::Function, x::Float64,
return addobs(data, -gw ./ grad[1], xv[1]) return addobs(data, -gw ./ grad[1], xv[1])
end end
function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Vector{Float64}) function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Vector{Float64}, wpm::Dict{Int64,Vector{Float64}})
m = length(data) m = length(data)
n = size(hess, 1) - m n = size(hess, 1) - m
...@@ -77,10 +78,10 @@ function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Vector{Float64 ...@@ -77,10 +78,10 @@ function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Vector{Float64
Px[i,i] = W[i] + Px[i,i] Px[i,i] = W[i] + Px[i,i]
end end
return trcov(Px, data) return trcov(Px, data, wpm)
end end
function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Array{Float64, 2}) function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Array{Float64, 2}, wpm::Dict{Int64,Vector{Float64}})
m = length(data) m = length(data)
n = size(hess, 1) - m n = size(hess, 1) - m
...@@ -95,7 +96,7 @@ function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Array{Float64, ...@@ -95,7 +96,7 @@ function chiexp(hess::Array{Float64, 2}, data::Vector{uwreal}, W::Array{Float64,
hi = LinearAlgebra.pinv(maux) hi = LinearAlgebra.pinv(maux)
Px = W - hm' * hi * hm Px = W - hm' * hi * hm
return trcov(Px, data) return trcov(Px, data, wpm)
end end
@doc raw""" @doc raw"""
...@@ -153,8 +154,9 @@ println("chi^2 / chi_exp^2: ", chisq(xp, value.(dt)), " / ", chiexp(chisq, xp, d ...@@ -153,8 +154,9 @@ println("chi^2 / chi_exp^2: ", chisq(xp, value.(dt)), " / ", chiexp(chisq, xp, d
""" """
function chiexp(chisq::Function, function chiexp(chisq::Function,
xp::Vector{Float64}, xp::Vector{Float64},
data::Vector{uwreal}; data::Vector{uwreal},
W = Vector{Float64}()) wpm::Dict{Int64,Vector{Float64}};
W::Vector{Float64} = Vector{Float64}())
n = length(xp) # Number of fit parameters n = length(xp) # Number of fit parameters
m = length(data) # Number of data m = length(data) # Number of data
...@@ -182,7 +184,7 @@ function chiexp(chisq::Function, ...@@ -182,7 +184,7 @@ function chiexp(chisq::Function,
Ww = zeros(Float64, m) Ww = zeros(Float64, m)
for i in 1:m for i in 1:m
if (data[i].err == 0.0) if (data[i].err == 0.0)
uwerr(data[i]) uwerr(data[i], wpm)
if (data[i].err == 0.0) if (data[i].err == 0.0)
error("Zero error in fit data") error("Zero error in fit data")
end end
...@@ -193,15 +195,28 @@ function chiexp(chisq::Function, ...@@ -193,15 +195,28 @@ function chiexp(chisq::Function,
Ww = W Ww = W
end end
cse = chiexp(hess, data, Ww) cse = chiexp(hess, data, Ww, wpm)
end end
return cse return cse
end end
chiexp(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal};
W::Vector{Float64} = Vector{Float64}()) =
chiexp(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W)
chiexp(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{String,Vector{Float64}};
W::Vector{Float64} = Vector{Float64}()) =
chiexp(chisq, xp, data, dict_names_to_id(wpm), W)
@doc raw""" @doc raw"""
fit_error(chisq::Function, xp::Vector{Float64}, data::Vector{uwreal}; fit_error(chisq::Function, xp::Vector{Float64}, data::Vector{uwreal}[, wpm];
W = Vector{Float64}(), chi_exp = true) W = Vector{Float64}(), chi_exp = true)
Given a ``\chi^2(p, d)``, function of the fit parameters `p[:]` and the data `d[:]`, this routine return the fit parameters as `uwreal` type and optionally, the expected value of ``\chi^2(p, d)``. Given a ``\chi^2(p, d)``, function of the fit parameters `p[:]` and the data `d[:]`, this routine return the fit parameters as `uwreal` type and optionally, the expected value of ``\chi^2(p, d)``.
...@@ -215,6 +230,7 @@ Given a ``\chi^2(p, d)``, function of the fit parameters `p[:]` and the data `d[ ...@@ -215,6 +230,7 @@ Given a ``\chi^2(p, d)``, function of the fit parameters `p[:]` and the data `d[
where the function ``f_i(p)`` is an arbitrary function of the fit parameters. In simple words, the expected ``\chi^2(p, d)`` is determined assuming that the function ``\chi^2(p, d)`` is quadratic in the data. where the function ``f_i(p)`` is an arbitrary function of the fit parameters. In simple words, the expected ``\chi^2(p, d)`` is determined assuming that the function ``\chi^2(p, d)`` is quadratic in the data.
- `xp`: A vector of `Float64`. The value of the fit parameters at the minima. - `xp`: A vector of `Float64`. The value of the fit parameters at the minima.
- `data`: A vector of `uwreal`. The data whose fluctuations enter in the evaluation of the `chisq`. - `data`: A vector of `uwreal`. The data whose fluctuations enter in the evaluation of the `chisq`.
- `wpm`: `Dict{Int64,Vector{Float64}}` or `Dict{String,Vector{Float64}}`. The criteria to determine the summation window. See the documentation on `uwerr` function for more details.
- `W`: A matrix. The weights that enter in the evaluation of the `chisq` function. If a vector is passed, the matrix is assumed to be diagonal (i.e. **uncorrelated** fit). If no weights are passed, the routines assumes that `W` is diagonal with entries given by the inverse errors squared of the data (i.e. the `chisq` is weighted with the errors of the data). - `W`: A matrix. The weights that enter in the evaluation of the `chisq` function. If a vector is passed, the matrix is assumed to be diagonal (i.e. **uncorrelated** fit). If no weights are passed, the routines assumes that `W` is diagonal with entries given by the inverse errors squared of the data (i.e. the `chisq` is weighted with the errors of the data).
- `chi_exp`: Bool type. If false, do not compute the expected ``\chi^2(p, d)``. - `chi_exp`: Bool type. If false, do not compute the expected ``\chi^2(p, d)``.
...@@ -239,7 +255,7 @@ vs = rand(dmv, 1) ...@@ -239,7 +255,7 @@ vs = rand(dmv, 1)
# Create the uwreal data that we want to # Create the uwreal data that we want to
# fit to a constant # fit to a constant
dt = cobs(vs[:,1], sig, [100+n for n in 1:npt]) dt = cobs(vs[:,1], sig, "Data points")
# Define the chi^2 # Define the chi^2
chisq(p, d) = sum( (d .- p[1]) .^ 2 ./ dx .^2 ) chisq(p, d) = sum( (d .- p[1]) .^ 2 ./ dx .^2 )
...@@ -254,14 +270,18 @@ xp = [sum(value.(dt) ./ dx)/sum(1.0 ./ dx)] ...@@ -254,14 +270,18 @@ xp = [sum(value.(dt) ./ dx)/sum(1.0 ./ dx)]
(fitp, csqexp) = fit_error(chisq, xp, dt) (fitp, csqexp) = fit_error(chisq, xp, dt)
uwerr.(fitp) uwerr.(fitp)
println("Fit parameter: ", fitp[1]) println(" *** FIT RESULTS ***")
println("chi^2 / chi_exp^2: ", chisq(xp, value.(dt)), " / ", csqexp) print("Fit parameter: ")
details.(fitp)
println("chi^2 / chi_exp^2: ", chisq(xp, value.(dt)), " / ", csqexp, " (dof: ", npt-1, ")")
``` ```
""" """
function fit_error(chisq::Function, function fit_error(chisq::Function,
xp::Vector{Float64}, xp::Vector{Float64},
data::Vector{uwreal}; data::Vector{uwreal},
W = Vector{Float64}(), chi_exp = true) wpm::Dict{Int64,Vector{Float64}};
W::Vector{Float64} = Vector{Float64}(),
chi_exp::Bool = true)
n = length(xp) # Number of fit parameters n = length(xp) # Number of fit parameters
m = length(data) # Number of data m = length(data) # Number of data
...@@ -301,7 +321,7 @@ function fit_error(chisq::Function, ...@@ -301,7 +321,7 @@ function fit_error(chisq::Function,
Ww = zeros(Float64, m) Ww = zeros(Float64, m)
for i in 1:m for i in 1:m
if (data[i].err == 0.0) if (data[i].err == 0.0)
uwerr(data[i]) uwerr(data[i], wpm)
if (data[i].err == 0.0) if (data[i].err == 0.0)
error("Zero error in fit data") error("Zero error in fit data")
end end
...@@ -312,12 +332,87 @@ function fit_error(chisq::Function, ...@@ -312,12 +332,87 @@ function fit_error(chisq::Function,
Ww = W Ww = W
end end
cse = chiexp(hess, data, Ww) cse = chiexp(hess, data, Ww, wpm)
end end
return param, cse return param, cse
end end
function fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{Int64,Vector{Float64}},
W::Array{Float64, 2};
chi_exp::Bool = true)
n = length(xp) # Number of fit parameters
m = length(data) # Number of data
xav = Vector{Float64}(undef, n+m)
for i in 1:n
xav[i] = xp[i]
end
for i in n+1:n+m
xav[i] = data[i-n].mean
end
ccsq(x::Vector) = chisq(x[1:n], x[n+1:n+m])
if (n+m < 4)
cfg = ForwardDiff.HessianConfig(ccsq, xav, Chunk{1}());
else
cfg = ForwardDiff.HessianConfig(ccsq, xav, Chunk{4}());
end
hess = Array{Float64}(undef, n+m, n+m)
ForwardDiff.hessian!(hess, ccsq, xav, cfg)
hm = view(hess, 1:n, 1:n)
sm = view(hess, 1:n, n+1:n+m)
hinv = LinearAlgebra.pinv(hm)
grad = - hinv * sm
param = addobs(data, grad, xp)
if (!chi_exp)
return param
end
cse = 0.0
if (m-n > 0)
cse = chiexp(hess, data, W, wpm)
end
return param, cse
end
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal};
W::Vector{Float64} = Vector{Float64}(),
chi_exp::Bool = true) =
fit_error(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W=W, chi_exp=chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
W::Array{Float64,2};
chi_exp::Bool = true) =
fit_error(chisq, xp, data, Dict{Int64,Vector{Float64}}(), W=W, chi_exp=chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{String,Vector{Float64}};
W::Vector{Float64} = Vector{Float64}(),
chi_exp::Bool = true) =
fit_error(chisq, xp, data, dict_names_to_id(wpm), W=W, chi_exp=chi_exp)
fit_error(chisq::Function,
xp::Vector{Float64},
data::Vector{uwreal},
wpm::Dict{String,Vector{Float64}},
W::Array{Float64,2};
chi_exp::Bool = true) =
fit_error(chisq, xp, data, dict_names_to_id(wpm), W=W, chi_exp=chi_exp)
@doc raw""" @doc raw"""
int_error(fint::Function, a, b, p::Vector{uwreal}) int_error(fint::Function, a, b, p::Vector{uwreal})
...@@ -334,11 +429,11 @@ using ADerrors ...@@ -334,11 +429,11 @@ using ADerrors
# here we try to reproduce the result # here we try to reproduce the result
# Scale ratio = 21.86(42) Eq.5.6 # Scale ratio = 21.86(42) Eq.5.6
avg = [16.26, 0.12, -0.0038] avg = [16.26, 0.12, -0.0038]
Mcov = [0.478071 -0.176116 0.0135305 Mcov = [ 0.478071 -0.176116 0.0135305
-0.176116 0.0696489 -0.00554431 -0.176116 0.0696489 -0.00554431
0.0135305 -0.00554431 0.000454180] 0.0135305 -0.00554431 0.000454180]
p = cobs(avg, Mcov, [1, 2001, 32]) p = cobs(avg, Mcov, "Beta function fit parameters")
g1s = uwreal([2.6723, 0.0064], 4) g1s = uwreal([2.6723, 0.0064], 4)
g2s = 11.31 g2s = 11.31
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment