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 }