go-hep.org/x/hep@v0.38.1/fastjet/clustersequence_area_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 /* FIXME 8 9 import ( 10 "bufio" 11 "fmt" 12 "os" 13 "sort" 14 "strings" 15 "testing" 16 17 "go-hep.org/x/hep/fastjet" 18 "gonum.org/v1/gonum/floats/scalar" 19 ) 20 21 func TestClusterSequenceArea(t *testing.T) { 22 const tol = 1e-6 23 24 for _, test := range []struct { 25 input string 26 name string 27 def fastjet.JetDefinition 28 area fastjet.AreaDefinition 29 ptmin float64 30 }{ 31 { 32 input: "testdata/single-pp-event.dat", 33 name: "area_ghost_active_kt_r1.0_escheme_best", 34 def: fastjet.NewJetDefinition( 35 fastjet.KtAlgorithm, 1.0, fastjet.EScheme, fastjet.BestStrategy, 36 ), 37 area: fastjet.AreaDefinition{}, // ghost-area, active-area 38 ptmin: 5.0, 39 }, 40 { 41 input: "testdata/single-pp-event.dat", 42 name: "area_ghost_passive_kt_r1.0_escheme_best", 43 def: fastjet.NewJetDefinition( 44 fastjet.KtAlgorithm, 1.0, fastjet.EScheme, fastjet.BestStrategy, 45 ), 46 area: fastjet.AreaDefinition{}, // ghost-area, passive-area 47 ptmin: 5.0, 48 }, 49 { 50 input: "testdata/single-pp-event.dat", 51 name: "area_ghost_active_antikt_r1.0_escheme_best", 52 def: fastjet.NewJetDefinition( 53 fastjet.AntiKtAlgorithm, 1.0, fastjet.EScheme, fastjet.BestStrategy, 54 ), 55 area: fastjet.AreaDefinition{}, // ghost-area, active-area 56 ptmin: 5.0, 57 }, 58 { 59 input: "testdata/single-pp-event.dat", 60 name: "area_ghost_passive_antikt_r1.0_escheme_best", 61 def: fastjet.NewJetDefinition( 62 fastjet.AntiKtAlgorithm, 1.0, fastjet.EScheme, fastjet.BestStrategy, 63 ), 64 area: fastjet.AreaDefinition{}, // ghost-area, passive-area 65 ptmin: 5.0, 66 }, 67 } { 68 t.Run(test.name, func(t *testing.T) { 69 t.Parallel() 70 71 // TODO 72 if strings.Contains(test.name, "passive") { 73 t.Skipf("passive area: not implemented") 74 } 75 // TODO 76 if strings.Contains(test.name, "active") { 77 t.Skipf("active area: not implemented") 78 } 79 test := test 80 particles, err := loadParticles(test.input) 81 if err != nil { 82 t.Fatal(err) 83 } 84 85 csa, err := fastjet.NewClusterSequenceArea(particles, test.def, test.area) 86 if err != nil { 87 t.Fatalf("error for jet definition: %v", err) 88 } 89 90 jets, err := csa.InclusiveJets(test.ptmin) 91 if err != nil { 92 t.Fatalf("incl-jets error: %v", err) 93 } 94 95 sort.Sort(fastjet.ByPt(jets)) 96 97 want, err := loadRefAreas("testdata/" + test.name + ".ref") 98 if err != nil { 99 t.Fatalf("error reading reference file: %v", err) 100 } 101 102 if len(want) != len(jets) { 103 t.Fatalf("got %d jets, want %d", len(jets), len(want)) 104 } 105 106 n := len(jets) 107 if len(want) < n { 108 n = len(want) 109 } 110 for i := 0; i < n; i++ { 111 ref := want[i][:] 112 jet := &jets[i] 113 rap := jet.Rapidity() 114 phi := angle0to2Pi(jet.Phi()) 115 pt := jet.Pt() 116 117 area := csa.Area(jet) 118 areaErr := csa.AreaErr(jet) 119 120 got := []float64{rap, phi, pt, area, areaErr} 121 if !scalar.EqualApprox(got, ref, tol) { 122 t.Errorf("#%d\ngot= %v\nwant=%v", i, got, ref) 123 } 124 } 125 }) 126 } 127 128 } 129 130 func loadRefAreas(name string) ([][5]float64, error) { 131 f, err := os.Open(name) 132 if err != nil { 133 return nil, err 134 } 135 defer f.Close() 136 137 var refs [][5]float64 138 scan := bufio.NewScanner(f) 139 for scan.Scan() { 140 var i int 141 var ref [5]float64 142 _, err = fmt.Sscanf(scan.Text(), "%5d %f %f %f %f +- %f", &i, &ref[0], &ref[1], &ref[2], &ref[3], &ref[4]) 143 if err != nil { 144 return nil, err 145 } 146 refs = append(refs, ref) 147 } 148 err = scan.Err() 149 if err != nil { 150 return nil, err 151 } 152 return refs, nil 153 } 154 */