go-hep.org/x/hep@v0.38.1/lcio/reader_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 lcio_test
     6  
     7  import (
     8  	"fmt"
     9  	"io"
    10  	"log"
    11  	"reflect"
    12  	"testing"
    13  
    14  	"go-hep.org/x/hep/lcio"
    15  )
    16  
    17  func ExampleReader() {
    18  	r, err := lcio.Open("testdata/event_golden.slcio")
    19  	if err != nil {
    20  		log.Fatal(err)
    21  	}
    22  	defer r.Close()
    23  
    24  	for r.Next() {
    25  		evt := r.Event()
    26  		fmt.Printf("event number = %d (weight=%+e)\n", evt.EventNumber, evt.Weight())
    27  		fmt.Printf("run   number = %d\n", evt.RunNumber)
    28  		fmt.Printf("detector     = %q\n", evt.Detector)
    29  		fmt.Printf("collections  = %v\n", evt.Names())
    30  		calohits := evt.Get("CaloHits").(*lcio.CalorimeterHitContainer)
    31  		fmt.Printf("calohits: %d\n", len(calohits.Hits))
    32  		for i, hit := range calohits.Hits {
    33  			fmt.Printf(" calohit[%d]: cell-id0=%d cell-id1=%d ene=%+e ene-err=%+e\n",
    34  				i, hit.CellID0, hit.CellID1, hit.Energy, hit.EnergyErr,
    35  			)
    36  		}
    37  	}
    38  
    39  	err = r.Err()
    40  	if err == io.EOF {
    41  		err = nil
    42  	}
    43  
    44  	if err != nil {
    45  		log.Fatal(err)
    46  	}
    47  
    48  	// Output:
    49  	// event number = 52 (weight=+4.200000e+01)
    50  	// run   number = 42
    51  	// detector     = "my detector"
    52  	// collections  = [McParticles SimCaloHits CaloHits]
    53  	// calohits: 1
    54  	//  calohit[0]: cell-id0=1024 cell-id1=2048 ene=+1.000000e+03 ene-err=+1.000000e-01
    55  }
    56  
    57  func TestOpen(t *testing.T) {
    58  	ref := lcio.RunHeader{
    59  		RunNumber:    42,
    60  		Descr:        "a simple run header",
    61  		Detector:     "my detector",
    62  		SubDetectors: []string{"det-1", "det-2"},
    63  		Params: lcio.Params{
    64  			Floats: map[string][]float32{
    65  				"floats-1": {1, 2, 3},
    66  				"floats-2": {4, 5, 6},
    67  			},
    68  			Ints: map[string][]int32{
    69  				"ints-1": {1, 2, 3},
    70  				"ints-2": {4, 5, 6},
    71  			},
    72  			Strings: map[string][]string{
    73  				"strs-1": {"1", "2", "3"},
    74  			},
    75  		},
    76  	}
    77  
    78  	for _, fname := range []string{
    79  		"testdata/run-header_golden.slcio",
    80  		"testdata/run-header-compressed_golden.slcio",
    81  	} {
    82  		t.Run(fname, func(t *testing.T) {
    83  			r, err := lcio.Open(fname)
    84  			if err != nil {
    85  				t.Fatalf("%s: error opening file: %v", fname, err)
    86  			}
    87  			defer r.Close()
    88  
    89  			r.Next()
    90  			if err := r.Err(); err != nil && err != io.EOF {
    91  				t.Fatalf("%s: %v", fname, err)
    92  			}
    93  
    94  			rhdr := r.RunHeader()
    95  			if got, want := rhdr, ref; !reflect.DeepEqual(got, want) {
    96  				t.Fatalf("%s: run-headers differ.\ngot= %#v\nwant=%#v\n", fname, got, want)
    97  			}
    98  
    99  			if got, want := rhdr.String(), ref.String(); got != want {
   100  				t.Fatalf("%s: run-headers differ.\ngot= %q\nwant=%q\n", fname, got, want)
   101  			}
   102  
   103  			err = r.Close()
   104  			if err != nil {
   105  				t.Fatalf("%s: error closing file: %v", fname, err)
   106  			}
   107  		})
   108  	}
   109  }