go-hep.org/x/hep@v0.38.1/fastjet/fastjet_test.go (about) 1 // Copyright ©2017 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fastjet_test 6 7 import ( 8 "sort" 9 "testing" 10 11 "go-hep.org/x/hep/fastjet" 12 "go-hep.org/x/hep/fmom" 13 ) 14 15 func TestSimple(t *testing.T) { 16 t.Parallel() 17 18 particles := []fastjet.Jet{ 19 fastjet.NewJet(+99.0, +0.1, 0, 100.0), 20 fastjet.NewJet(+04.0, -0.1, 0, 005.0), 21 fastjet.NewJet(-99.0, +0.0, 0, 099.0), 22 fastjet.NewJet(+99.0, +0.1, 0, 199.0), 23 fastjet.NewJet(-99.0, +0.0, 0, 299.0), 24 fastjet.NewJet(-99.0, +1.0, 0, 399.0), 25 fastjet.NewJet(+50.0, +1.0, 100, 399.0), 26 } 27 28 // for i, jet := range particles { 29 // fmt.Printf("part[%d]: pt=%+e eta=%+e rap=%+e phi=%+e\n", 30 // i, jet.Pt(), jet.Eta(), jet.Rapidity(), jet.Phi(), 31 // ) 32 // } 33 34 // choose a jet definition 35 r := 0.7 36 def := fastjet.NewJetDefinition(fastjet.AntiKtAlgorithm, r, fastjet.EScheme, fastjet.BestStrategy) 37 38 if def.R() != r { 39 t.Fatalf("expected r-param=%v. got=%v", r, def.R()) 40 } 41 42 if def.RecombinationScheme() != fastjet.EScheme { 43 t.Fatalf("expected scheme=%v. got=%v", def.RecombinationScheme(), fastjet.EScheme) 44 } 45 46 if def.Strategy() != fastjet.BestStrategy { 47 t.Fatalf("expected strategy=%v. got=%v", def.Strategy(), fastjet.BestStrategy) 48 } 49 50 // run the clustering, extract jets 51 cs, err := fastjet.NewClusterSequence(particles, def) 52 if err != nil { 53 t.Fatalf("clustering failed: %v", err) 54 } 55 56 expected := []struct { 57 jet fmom.PxPyPzE 58 cts []fmom.PxPyPzE 59 }{ 60 { 61 jet: fmom.NewPxPyPzE(-2.970000e+02, +1.000000e+00, +0.000000e+00, +7.970000e+02), 62 cts: []fmom.PxPyPzE{ 63 64 fmom.NewPxPyPzE(-9.900000e+01, +1.000000e+00, +0.000000e+00, +3.990000e+02), 65 fmom.NewPxPyPzE(-9.900000e+01, +0.000000e+00, +0.000000e+00, +9.900000e+01), 66 fmom.NewPxPyPzE(-9.900000e+01, +0.000000e+00, +0.000000e+00, +2.990000e+02), 67 }, 68 }, 69 { 70 jet: fmom.NewPxPyPzE(+2.520000e+02, +1.100000e+00, +1.000000e+02, +7.030000e+02), 71 cts: []fmom.PxPyPzE{ 72 fmom.NewPxPyPzE(+5.000000e+01, +1.000000e+00, +1.000000e+02, +3.990000e+02), 73 fmom.NewPxPyPzE(+4.000000e+00, -1.000000e-01, +0.000000e+00, +5.000000e+00), 74 fmom.NewPxPyPzE(+9.900000e+01, +1.000000e-01, +0.000000e+00, +1.000000e+02), 75 fmom.NewPxPyPzE(+9.900000e+01, +1.000000e-01, +0.000000e+00, +1.990000e+02), 76 }, 77 }, 78 } 79 80 const ptmin = 0 81 jets, err := cs.InclusiveJets(ptmin) 82 if err != nil { 83 t.Fatalf("could not retrieve inclusive jets: %v", err) 84 } 85 sort.Sort(fastjet.ByPt(jets)) 86 87 if len(jets) != len(expected) { 88 t.Fatalf("expected %d jets. got=%d", len(expected), len(jets)) 89 } 90 // print the jets 91 for i := range jets { 92 ref := &expected[i] 93 jet := &jets[i] 94 if !fmom.Equal(&ref.jet, jet) { 95 t.Fatalf("jet[%d] differ:\nexp: %v\ngot: %v\n", i, 96 ref.jet, 97 jet.PxPyPzE, 98 ) 99 } 100 constituents := jet.Constituents() 101 if len(constituents) != len(ref.cts) { 102 t.Fatalf("jet[%d]: expected %d constituents. got=%d", 103 i, len(ref.cts), len(constituents), 104 ) 105 } 106 for j := range constituents { 107 jj := &constituents[j] 108 if !fmom.Equal(&ref.cts[j], jj) { 109 t.Fatalf("jet[%d].constituent[%d] differ:\nexp: %v\ngot: %v\n", 110 i, j, 111 ref.cts[j], 112 jj.PxPyPzE, 113 ) 114 } 115 } 116 } 117 }