diff --git a/Project.toml b/Project.toml index 2bcb091f173afbe6bb84e36809eb49e26e976b47..c4ee45ae3d0a23810d5eb51e60160447c54b00ff 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "KM3io" uuid = "2cab5852-6f21-4982-99b0-6a4792870cfb" authors = ["Tamas Gal", "Johannes Schumann"] -version = "0.16.1" +version = "0.16.2" [deps] Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" diff --git a/src/KM3io.jl b/src/KM3io.jl index 611f4321c8ac5bd80cb1ca89e11afcf54bfee2cb..75df8d56f9287e45870109ec9961c1822fc31b16 100644 --- a/src/KM3io.jl +++ b/src/KM3io.jl @@ -56,6 +56,8 @@ export most_frequent, categorize, nthbitset export cherenkov, CherenkovPhoton, azimuth, zenith, theta, phi +export MCEventMatcher + export CHClient, CHTag, subscribe, @ip_str @template (FUNCTIONS, METHODS, MACROS) = @@ -100,6 +102,7 @@ include("tools/general.jl") include("tools/daq.jl") include("tools/trigger.jl") include("tools/reconstruction.jl") +include("tools/helpers.jl") include("physics.jl") diff --git a/src/tools/helpers.jl b/src/tools/helpers.jl new file mode 100644 index 0000000000000000000000000000000000000000..cfaa44c798fd9c18e60c1ba1935c214619b66ee5 --- /dev/null +++ b/src/tools/helpers.jl @@ -0,0 +1,20 @@ +""" +A basic container type to assist the matching of MC events in the offline tree +with the events in the online tree. +""" +# TODO: add tests (need a proper testfile in km3net-testdata) +struct MCEventMatcher + f::ROOTFile +end +Base.length(itr::MCEventMatcher) = length(itr.f.online.events) +Base.lastindex(itr::MCEventMatcher) = length(itr) +function Base.getindex(itr::MCEventMatcher, idx::Integer) + event = itr.f.online.events[idx] + mc_idx = event.header.trigger_counter + 1 + mc_event = itr.f.offline[mc_idx] + (event, mc_event) +end +function Base.iterate(itr::MCEventMatcher, state=1) + state > length(itr) && return nothing + (itr[state], state + 1) +end diff --git a/test/tools.jl b/test/tools.jl index 4a920e0f3e911236c82ef3fcacb18d104a0f8405..83507ed4438643a205b52c20d4bf62208fceeacf 100644 --- a/test/tools.jl +++ b/test/tools.jl @@ -307,3 +307,23 @@ end close(f) end + + +@testset "helpers" begin + f = ROOTFile(datapath("mupage", "mcv8.1.mupage_tuned_100G.sirene.jterbr00013288.10.root")) + for (event, mc_event) in MCEventMatcher(f) + continue + end + + rbr = MCEventMatcher(f) + event, mc_event = rbr[1] + @assert 756 == length(event.snapshot_hits) + @assert 28 == length(event.triggered_hits) + @assert 94 == length(mc_event.mc_hits) + @assert 2 == length(mc_event.mc_trks) + event, mc_event = rbr[end] + @assert 707 == length(event.snapshot_hits) + @assert 27== length(event.triggered_hits) + @assert 111 == length(mc_event.mc_hits) + @assert 4 == length(mc_event.mc_trks) +end