@@ -26,3 +26,57 @@ for r in [2.0, 4.0]
2626 (cs) -> exclusive_jets (cs; njets = 4 ), " exclusive njets" )
2727 run_reco_test (eekt_njets)
2828end
29+
30+ # Optimization/helper coverage
31+
32+ @testset " E2p integer fast paths in fill/insert (e+e-)" begin
33+ E1, E2 = 3.0 , 2.0
34+ # PseudoJet signature is (px, py, pz, E); give nonzero momentum to avoid 1/0 in EEJet
35+ pj1 = PseudoJet (1.0 , 0.0 , 0.0 , E1)
36+ pj2 = PseudoJet (1.0 , 0.0 , 0.0 , E2)
37+ particles = EEJet[]
38+ push! (particles, EEJet (pj1; cluster_hist_index = 1 ))
39+ push! (particles, EEJet (pj2; cluster_hist_index = 2 ))
40+
41+ eereco = StructArray {EERecoJet} (undef, 2 )
42+ R = 1.0
43+ R2 = R^ 2
44+
45+ fill_reco_array! (eereco, particles, R2, 1 )
46+ @test eereco. E2p[1 ] ≈ E1^ 2
47+ @test eereco. E2p[2 ] ≈ E2^ 2
48+
49+ fill_reco_array! (eereco, particles, R2, 2 )
50+ @test eereco. E2p[1 ] ≈ E1^ 4
51+ @test eereco. E2p[2 ] ≈ E2^ 4
52+
53+ merged = EEJet (1.0 , 0.0 , 0.0 , 5.0 ; cluster_hist_index = 0 )
54+ insert_new_jet! (eereco, 1 , 3 , R2, merged, 1 )
55+ @test eereco. E2p[1 ] ≈ 5.0 ^ 2
56+
57+ insert_new_jet! (eereco, 2 , 4 , R2, merged, 2 )
58+ @test eereco. E2p[2 ] ≈ 5.0 ^ 4
59+ end
60+
61+ @testset " copy_to_slot! copies fields" begin
62+ eereco = StructArray {EERecoJet} (undef, 2 )
63+ eereco. index[1 ] = 10
64+ eereco. nni[1 ] = 1
65+ eereco. nndist[1 ] = 3.14
66+ eereco. dijdist[1 ] = 2.71
67+ eereco. nx[1 ] = 0.1
68+ eereco. ny[1 ] = 0.2
69+ eereco. nz[1 ] = 0.3
70+ eereco. E2p[1 ] = 7.0
71+ copy_to_slot! (eereco, 1 , 2 )
72+ @test eereco. index[2 ] == 10
73+ @test eereco. dijdist[2 ] == 2.71
74+ @test eereco. E2p[2 ] == 7.0
75+ end
76+
77+ @testset " dij_dist fallback error (non-Algorithm)" begin
78+ eereco = StructArray {EERecoJet} (undef, 1 )
79+ eereco. nndist[1 ] = 0.0
80+ eereco. E2p[1 ] = 1.0
81+ @test_throws ArgumentError dij_dist (eereco, 1 , 0 , 1.0 , :Foo , 1.0 )
82+ end
0 commit comments