go-hep.org/x/hep@v0.38.1/hbook/rootcnv/root.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 rootcnv provides tools to convert ROOT histograms and graphs to go-hep/hbook ones.
     6  package rootcnv
     7  
     8  import (
     9  	"go-hep.org/x/hep/groot/rhist"
    10  	"go-hep.org/x/hep/hbook"
    11  )
    12  
    13  type h1der interface {
    14  	AsH1D() *hbook.H1D
    15  }
    16  
    17  // H1D creates a new H1D from a TH1x.
    18  func H1D(h1 rhist.H1) *hbook.H1D {
    19  	return h1.(h1der).AsH1D()
    20  }
    21  
    22  type h2der interface {
    23  	AsH2D() *hbook.H2D
    24  }
    25  
    26  // H2D creates a new H2D from a TH2x.
    27  func H2D(h2 rhist.H2) *hbook.H2D {
    28  	return h2.(h2der).AsH2D()
    29  }
    30  
    31  // S2D creates a new S2D from a TGraph, TGraphErrors or TGraphAsymmErrors.
    32  func S2D(g rhist.Graph) *hbook.S2D {
    33  	pts := make([]hbook.Point2D, g.Len())
    34  	for i := range pts {
    35  		x, y := g.XY(i)
    36  		pts[i].X = x
    37  		pts[i].Y = y
    38  	}
    39  
    40  	if g, ok := g.(rhist.GraphErrors); ok {
    41  		for i := range pts {
    42  			xlo, xhi := g.XError(i)
    43  			ylo, yhi := g.YError(i)
    44  			pt := &pts[i]
    45  			pt.ErrX = hbook.Range{Min: xlo, Max: xhi}
    46  			pt.ErrY = hbook.Range{Min: ylo, Max: yhi}
    47  		}
    48  	}
    49  	s2d := hbook.NewS2D(pts...)
    50  	s2d.Annotation()["name"] = g.Name()
    51  	s2d.Annotation()["title"] = g.Title()
    52  	return s2d
    53  }
    54  
    55  // FromH1D creates a new ROOT TH1D from a 1-dim hbook histogram.
    56  func FromH1D(h1 *hbook.H1D) *rhist.H1D {
    57  	return rhist.NewH1DFrom(h1)
    58  }
    59  
    60  // FromH2D creates a new ROOT TH2D from a 2-dim hbook histogram.
    61  func FromH2D(h2 *hbook.H2D) *rhist.H2D {
    62  	return rhist.NewH2DFrom(h2)
    63  }
    64  
    65  // FromS2D creates a new ROOT TGraphAsymmErrors from 2-dim hbook data points.
    66  func FromS2D(s2 *hbook.S2D) rhist.GraphErrors {
    67  	return rhist.NewGraphAsymmErrorsFrom(s2)
    68  }