go-hep.org/x/hep@v0.38.1/groot/example_test.go (about)

     1  // Copyright ©2018 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 groot_test
     6  
     7  import (
     8  	"compress/flate"
     9  	"fmt"
    10  	"log"
    11  	"os"
    12  
    13  	"go-hep.org/x/hep/groot"
    14  	"go-hep.org/x/hep/groot/rbase"
    15  	"go-hep.org/x/hep/groot/rhist"
    16  	"go-hep.org/x/hep/groot/riofs"
    17  	_ "go-hep.org/x/hep/groot/riofs/plugin/xrootd"
    18  	"go-hep.org/x/hep/groot/root"
    19  	"go-hep.org/x/hep/groot/rtree"
    20  )
    21  
    22  func ExampleCreate_emptyFile() {
    23  	const fname = "empty.root"
    24  	defer os.Remove(fname)
    25  
    26  	w, err := groot.Create(fname)
    27  	if err != nil {
    28  		log.Fatal(err)
    29  	}
    30  	defer w.Close()
    31  
    32  	// empty file. close it.
    33  	err = w.Close()
    34  	if err != nil {
    35  		log.Fatalf("could not close empty file: %v", err)
    36  	}
    37  
    38  	// read back.
    39  	r, err := groot.Open(fname)
    40  	if err != nil {
    41  		log.Fatalf("could not open empty file: %v", err)
    42  	}
    43  	defer r.Close()
    44  
    45  	fmt.Printf("file: %q\n", r.Name())
    46  
    47  	// Output:
    48  	// file: "empty.root"
    49  }
    50  
    51  func ExampleCreate() {
    52  	const fname = "objstring.root"
    53  	defer os.Remove(fname)
    54  
    55  	w, err := groot.Create(fname)
    56  	if err != nil {
    57  		log.Fatal(err)
    58  	}
    59  	defer w.Close()
    60  
    61  	var (
    62  		k = "my-objstring"
    63  		v = rbase.NewObjString("Hello World from Go-HEP!")
    64  	)
    65  
    66  	err = w.Put(k, v)
    67  	if err != nil {
    68  		log.Fatal(err)
    69  	}
    70  
    71  	fmt.Printf("wkeys: %d\n", len(w.Keys()))
    72  
    73  	err = w.Close()
    74  	if err != nil {
    75  		log.Fatalf("could not close file: %v", err)
    76  	}
    77  
    78  	r, err := groot.Open(fname)
    79  	if err != nil {
    80  		log.Fatalf("could not open file: %v", err)
    81  	}
    82  	defer r.Close()
    83  
    84  	fmt.Printf("rkeys: %d\n", len(r.Keys()))
    85  
    86  	for _, k := range r.Keys() {
    87  		fmt.Printf("key: name=%q, type=%q\n", k.Name(), k.ClassName())
    88  	}
    89  
    90  	obj, err := r.Get(k)
    91  	if err != nil {
    92  		log.Fatal(err)
    93  	}
    94  	rv := obj.(root.ObjString)
    95  	fmt.Printf("objstring=%q\n", rv)
    96  
    97  	// Output:
    98  	// wkeys: 1
    99  	// rkeys: 1
   100  	// key: name="my-objstring", type="TObjString"
   101  	// objstring="Hello World from Go-HEP!"
   102  }
   103  
   104  func ExampleCreate_withZlib() {
   105  	const fname = "objstring-zlib.root"
   106  	defer os.Remove(fname)
   107  
   108  	w, err := groot.Create(fname, riofs.WithZlib(flate.BestCompression))
   109  	if err != nil {
   110  		log.Fatal(err)
   111  	}
   112  	defer w.Close()
   113  
   114  	var (
   115  		k = "my-objstring"
   116  		v = rbase.NewObjString("Hello World from Go-HEP!")
   117  	)
   118  
   119  	err = w.Put(k, v)
   120  	if err != nil {
   121  		log.Fatal(err)
   122  	}
   123  
   124  	err = w.Close()
   125  	if err != nil {
   126  		log.Fatalf("could not close writable file: %v", err)
   127  	}
   128  
   129  	r, err := groot.Open(fname)
   130  	if err != nil {
   131  		log.Fatalf("could not open file: %v", err)
   132  	}
   133  	defer r.Close()
   134  
   135  	for _, k := range r.Keys() {
   136  		fmt.Printf("key: name=%q, type=%q\n", k.Name(), k.ClassName())
   137  	}
   138  
   139  	obj, err := r.Get(k)
   140  	if err != nil {
   141  		log.Fatalf("could not get key %q: %v", k, err)
   142  	}
   143  	rv := obj.(root.ObjString)
   144  	fmt.Printf("objstring=%q\n", rv)
   145  
   146  	// Output:
   147  	// key: name="my-objstring", type="TObjString"
   148  	// objstring="Hello World from Go-HEP!"
   149  }
   150  
   151  func ExampleOpen() {
   152  	f, err := groot.Open("testdata/simple.root")
   153  	if err != nil {
   154  		log.Fatal(err)
   155  	}
   156  	defer f.Close()
   157  
   158  	for _, key := range f.Keys() {
   159  		fmt.Printf("key:  %q cycle=%d title=%q\n", key.Name(), key.Cycle(), key.Title())
   160  	}
   161  
   162  	obj, err := f.Get("tree")
   163  	if err != nil {
   164  		log.Fatal(err)
   165  	}
   166  
   167  	tree := obj.(rtree.Tree)
   168  	fmt.Printf("tree: %q, entries=%d\n", tree.Name(), tree.Entries())
   169  
   170  	// Output:
   171  	// key:  "tree" cycle=1 title="fake data"
   172  	// tree: "tree", entries=4
   173  }
   174  
   175  func ExampleOpen_overXRootD() {
   176  	f, err := groot.Open("root://eospublic.cern.ch//eos/root-eos/cms_opendata_2012_nanoaod/Run2012B_DoubleMuParked.root")
   177  	if err != nil {
   178  		log.Fatal(err)
   179  	}
   180  	defer f.Close()
   181  
   182  	for _, key := range f.Keys() {
   183  		fmt.Printf("key:  %q cycle=%d title=%q\n", key.Name(), key.Cycle(), key.Title())
   184  	}
   185  
   186  	obj, err := f.Get("Events")
   187  	if err != nil {
   188  		log.Fatal(err)
   189  	}
   190  
   191  	tree := obj.(rtree.Tree)
   192  	fmt.Printf("tree: %q, entries=%d\n", tree.Name(), tree.Entries())
   193  
   194  	// Output:
   195  	// key:  "Events" cycle=1 title="Events"
   196  	// tree: "Events", entries=29308627
   197  }
   198  
   199  func ExampleOpen_graph() {
   200  	f, err := groot.Open("testdata/graphs.root")
   201  	if err != nil {
   202  		log.Fatal(err)
   203  	}
   204  	defer f.Close()
   205  
   206  	obj, err := f.Get("tg")
   207  	if err != nil {
   208  		log.Fatal(err)
   209  	}
   210  
   211  	g := obj.(rhist.Graph)
   212  	fmt.Printf("name:  %q\n", g.Name())
   213  	fmt.Printf("title: %q\n", g.Title())
   214  	fmt.Printf("#pts:  %d\n", g.Len())
   215  	for i := range g.Len() {
   216  		x, y := g.XY(i)
   217  		fmt.Printf("(x,y)[%d] = (%+e, %+e)\n", i, x, y)
   218  	}
   219  
   220  	// Output:
   221  	// name:  "tg"
   222  	// title: "graph without errors"
   223  	// #pts:  4
   224  	// (x,y)[0] = (+1.000000e+00, +2.000000e+00)
   225  	// (x,y)[1] = (+2.000000e+00, +4.000000e+00)
   226  	// (x,y)[2] = (+3.000000e+00, +6.000000e+00)
   227  	// (x,y)[3] = (+4.000000e+00, +8.000000e+00)
   228  }
   229  
   230  // ExampleOpen_file shows how users can open a local ROOT file with the 'file://' protocol.
   231  func ExampleOpen_file() {
   232  	f, err := groot.Open("file://./testdata/simple.root")
   233  	if err != nil {
   234  		log.Fatal(err)
   235  	}
   236  	defer f.Close()
   237  
   238  	for _, key := range f.Keys() {
   239  		fmt.Printf("key:  %q cycle=%d title=%q\n", key.Name(), key.Cycle(), key.Title())
   240  	}
   241  
   242  	obj, err := f.Get("tree")
   243  	if err != nil {
   244  		log.Fatal(err)
   245  	}
   246  
   247  	tree := obj.(rtree.Tree)
   248  	fmt.Printf("tree: %q, entries=%d\n", tree.Name(), tree.Entries())
   249  
   250  	// Output:
   251  	// key:  "tree" cycle=1 title="fake data"
   252  	// tree: "tree", entries=4
   253  }
   254  
   255  // ExampleOpen_mmap shows how users can open and mmap a local ROOT file.
   256  // mmap-ing a file may be useful for performances reasons.
   257  func ExampleOpen_mmap() {
   258  	f, err := groot.Open("file+mmap://./testdata/simple.root")
   259  	if err != nil {
   260  		log.Fatal(err)
   261  	}
   262  	defer f.Close()
   263  
   264  	for _, key := range f.Keys() {
   265  		fmt.Printf("key:  %q cycle=%d title=%q\n", key.Name(), key.Cycle(), key.Title())
   266  	}
   267  
   268  	obj, err := f.Get("tree")
   269  	if err != nil {
   270  		log.Fatal(err)
   271  	}
   272  
   273  	tree := obj.(rtree.Tree)
   274  	fmt.Printf("tree: %q, entries=%d\n", tree.Name(), tree.Entries())
   275  
   276  	// Output:
   277  	// key:  "tree" cycle=1 title="fake data"
   278  	// tree: "tree", entries=4
   279  }