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  */