diff --git a/src/scanfit.jl b/src/scanfit.jl index 02d4e7afada71936eb04debc935538c065624fd2..3eed0ff90693e8b242f28745130b6b891975df34 100644 --- a/src/scanfit.jl +++ b/src/scanfit.jl @@ -63,16 +63,18 @@ function (msf::MuonScanfit)(hits::Vector{T}) where T<:KM3io.AbstractHit # TODO: currently disabled until all the allocations are minimised # here, reusing a Vector{Direction} (attached to msf as buffer) might be a good idea. # By doing so, we need `fibonaccicone!` and `fibonaccisphere!` as mutating functions - directions = Vector{Vector{Direction{Float64}}}() - for idx in 1:min(msf.params.nprefits, length(candidates)) - most_likely_dir = candidates[idx].dir - push!(directions, fibonaccicone(most_likely_dir, msf.params.α₂, msf.params.θ)) - end - directionset = DirectionSet(vcat(directions...), msf.params.α₂) - candidates = scanfit(msf.params, rhits, directionset) + if msf.params.nprefits > 0 + directions = Vector{Vector{Direction{Float64}}}() + for idx in 1:min(msf.params.nprefits, length(candidates)) + most_likely_dir = candidates[idx].dir + push!(directions, fibonaccicone(most_likely_dir, msf.params.α₂, msf.params.θ)) + end + directionset = DirectionSet(vcat(directions...), msf.params.α₂) + candidates = scanfit(msf.params, rhits, directionset) - isempty(candidates) && return candidates - sort!(candidates, by=m->m.Q; rev=true) + isempty(candidates) && return candidates + sort!(candidates, by=m->m.Q; rev=true) + end candidates[1:msf.params.nfits] end