Skip to content

Commit 7cb4dbb

Browse files
committed
Clean up VLC tests to use a version of ComparisonTest instead, add references with alternative parameter settings. Some tests still failing.
1 parent 3f3d7c1 commit 7cb4dbb

11 files changed

+185
-384
lines changed

test/_common.jl

Lines changed: 136 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,40 @@ struct ComparisonTest
5858
end
5959

6060
"""Constructor where there is no selector_name given"""
61-
function ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R,
62-
selector)
61+
function ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector)
6362
selector_name = ""
64-
ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector,
65-
selector_name, addjets, nothing)
63+
ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector, selector_name, addjets, nothing)
6664
end
6765

6866
"""Constructor with no recombine or preprocess specified"""
69-
function ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R,
70-
selector, selector_name)
71-
ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector,
72-
selector_name, addjets, nothing)
67+
function ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector, selector_name)
68+
ComparisonTest(events_file, fastjet_outputs, algorithm, strategy, power, R, selector, selector_name, addjets, nothing)
7369
end
7470

71+
"""
72+
struct ComparisonTestValencia
73+
74+
Test parameters for Valencia jet algorithm comparison, with explicit gamma parameter.
75+
"""
76+
struct ComparisonTestValencia
77+
events_file::AbstractString
78+
fastjet_outputs::AbstractString
79+
algorithm::JetAlgorithm.Algorithm
80+
strategy::RecoStrategy.Strategy
81+
power::Real
82+
R::Real
83+
γ::Real
84+
selector::Any
85+
selector_name::AbstractString
86+
recombine::Any
87+
preprocess::Any
88+
end
89+
90+
function ComparisonTestValencia(events_file, fastjet_outputs, algorithm, strategy, power, R, γ, selector, selector_name)
91+
ComparisonTestValencia(events_file, fastjet_outputs, algorithm, strategy, power, R, γ, selector, selector_name, addjets, nothing)
92+
end
93+
94+
7595
"""Read JSON file with fastjet jets in it"""
7696
function read_fastjet_outputs(fname)
7797
f = JetReconstruction.open_with_stream(fname)
@@ -106,11 +126,22 @@ function run_reco_test(test::ComparisonTest; testname = nothing)
106126
# Run the jet reconstruction
107127
jet_collection = Vector{FinalJets}()
108128
for (ievent, event) in enumerate(events)
109-
cluster_seq = JetReconstruction.jet_reconstruct(event; R = test.R, p = test.power,
110-
algorithm = test.algorithm,
111-
strategy = test.strategy,
112-
recombine = test.recombine,
113-
preprocess = test.preprocess)
129+
if test.algorithm == JetAlgorithm.Valencia
130+
# For VLC: pass both beta (power) and γ
131+
cluster_seq = JetReconstruction.jet_reconstruct(event; R = test.R, p = test.power,
132+
γ = getfield(test, ),
133+
algorithm = test.algorithm,
134+
strategy = test.strategy,
135+
recombine = test.recombine,
136+
preprocess = test.preprocess)
137+
else
138+
# All other algorithms
139+
cluster_seq = JetReconstruction.jet_reconstruct(event; R = test.R, p = test.power,
140+
algorithm = test.algorithm,
141+
strategy = test.strategy,
142+
recombine = test.recombine,
143+
preprocess = test.preprocess)
144+
end
114145
finaljets = final_jets(test.selector(cluster_seq))
115146
sort_jets!(finaljets)
116147
push!(jet_collection, FinalJets(ievent, finaljets))
@@ -146,3 +177,95 @@ function run_reco_test(test::ComparisonTest; testname = nothing)
146177
end
147178
end
148179
end
180+
181+
function run_reco_test(test::ComparisonTestValencia; testname = nothing)
182+
events = JetReconstruction.read_final_state_particles(test.events_file)
183+
fastjet_jets = read_fastjet_outputs(test.fastjet_outputs)
184+
sort_jets!(fastjet_jets)
185+
186+
jet_collection = Vector{FinalJets}()
187+
for (ievent, event) in enumerate(events)
188+
cluster_seq = JetReconstruction.jet_reconstruct(event; R = test.R, p = test.power,
189+
γ = test.γ,
190+
algorithm = test.algorithm,
191+
strategy = test.strategy,
192+
recombine = test.recombine,
193+
preprocess = test.preprocess)
194+
finaljets = final_jets(test.selector(cluster_seq))
195+
sort_jets!(finaljets)
196+
push!(jet_collection, FinalJets(ievent, finaljets))
197+
end
198+
199+
if isnothing(testname)
200+
testname = "FastJet comparison: alg=$(test.algorithm), p=$(test.power), R=$(test.R), strategy=$(test.strategy)"
201+
if test.selector_name != ""
202+
testname *= ", $(test.selector_name)"
203+
end
204+
end
205+
206+
@testset "$testname" begin
207+
for (ievt, event) in enumerate(jet_collection)
208+
@testset "Event $(ievt)" begin
209+
@test size(event.jets) == size(fastjet_jets[ievt]["jets"])
210+
# For each reconstructed jet, find the closest reference jet in deltaR
211+
ref_jets = fastjet_jets[ievt]["jets"]
212+
used_refs = falses(length(ref_jets))
213+
function deltaR(rap1, phi1, rap2, phi2)
214+
dphi = abs(phi1 - phi2)
215+
if dphi > π
216+
dphi -= 2π
217+
end
218+
return sqrt((rap1 - rap2)^2 + dphi^2)
219+
end
220+
for (ijet, jet) in enumerate(event.jets)
221+
# Find closest reference jet in deltaR that hasn't been used
222+
minidx = 0
223+
mindr = Inf
224+
norm_phi = jet.phi < 0.0 ? jet.phi + 2π : jet.phi
225+
for (ridx, rjet) in enumerate(ref_jets)
226+
if used_refs[ridx]
227+
continue
228+
end
229+
norm_phi_ref = rjet["phi"] < 0.0 ? rjet["phi"] + 2π : rjet["phi"]
230+
dr = deltaR(jet.rap, norm_phi, rjet["rap"], norm_phi_ref)
231+
if dr < mindr
232+
mindr = dr
233+
minidx = ridx
234+
end
235+
end
236+
if minidx == 0
237+
println("No unused reference jet found for reconstructed jet $(ijet)")
238+
continue
239+
end
240+
used_refs[minidx] = true
241+
rjet = ref_jets[minidx]
242+
rap_ref = rjet["rap"]
243+
phi_ref = rjet["phi"]
244+
pt_ref = rjet["pt"]
245+
normalised_phi_ref = phi_ref < 0.0 ? phi_ref + 2π : phi_ref
246+
rap_test = isapprox(jet.rap, rap_ref; atol=2e-1)
247+
phi_test = isapprox(norm_phi, normalised_phi_ref; atol=2e-1)
248+
pt_test = isapprox(jet.pt, pt_ref; rtol=2e0)
249+
if !rap_test || !phi_test || !pt_test
250+
println("Jet mismatch in Event $(ievt), Jet $(ijet):")
251+
println(" Failing Jet: pt=$(jet.pt), rap=$(jet.rap), phi=$(norm_phi)")
252+
println(" Reference Jet: pt=$(pt_ref), rap=$(rap_ref), phi=$(phi_ref)")
253+
println(" Passes: pt=$(pt_test), rap=$(rap_test), phi=$(phi_test)")
254+
println("\nAll jets in this event:")
255+
for (jidx, j) in enumerate(event.jets)
256+
norm_phi_j = j.phi < 0.0 ? j.phi + 2π : j.phi
257+
println(" Jet $(jidx): pt=$(j.pt), rap=$(j.rap), phi=$(norm_phi_j)")
258+
end
259+
println("\nAll reference jets in this event:")
260+
for (ridx, rjet2) in enumerate(ref_jets)
261+
println(" Ref Jet $(ridx): pt=$(rjet2["pt"]), rap=$(rjet2["rap"]), phi=$(rjet2["phi"])")
262+
end
263+
end
264+
@test rap_test
265+
@test phi_test
266+
@test pt_test
267+
end
268+
end
269+
end
270+
end
271+
end
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-4.09 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)