go-hep.org/x/hep@v0.38.1/fwk/examples/fwk-ex-tuto-5-read-histo/htask.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 main 6 7 import ( 8 "fmt" 9 "reflect" 10 "strings" 11 12 "go-hep.org/x/hep/fwk" 13 ) 14 15 type testhsvc struct { 16 fwk.TaskBase 17 18 hsvc fwk.HistSvc 19 h1d fwk.H1D 20 stream string 21 } 22 23 func (tsk *testhsvc) Configure(ctx fwk.Context) error { 24 var err error 25 26 return err 27 } 28 29 func (tsk *testhsvc) StartTask(ctx fwk.Context) error { 30 var err error 31 32 svc, err := ctx.Svc("histsvc") 33 if err != nil { 34 return err 35 } 36 37 tsk.hsvc = svc.(fwk.HistSvc) 38 39 if !strings.HasPrefix(tsk.stream, "/") { 40 tsk.stream = "/" + tsk.stream 41 } 42 tsk.stream = strings.TrimSuffix(tsk.stream[:len(tsk.stream)-1], "/") 43 44 tsk.h1d, err = tsk.hsvc.BookH1D(tsk.stream+"/h1d-"+tsk.Name(), 100, -10, 10) 45 if err != nil { 46 return err 47 } 48 49 return err 50 } 51 52 func (tsk *testhsvc) StopTask(ctx fwk.Context) error { 53 var err error 54 55 h := tsk.h1d.Hist 56 if h.Entries() != *evtmax { 57 return fmt.Errorf("expected %d entries. got=%d", *evtmax, h.Entries()) 58 } 59 mean := h.XMean() 60 if mean != 4.5 { 61 return fmt.Errorf("expected mean=%v. got=%v", 4.5, mean) 62 } 63 64 rms := h.XRMS() 65 if rms != 2.8722813232690143 { 66 return fmt.Errorf("expected RMS=%v. got=%v", 2.8722813232690143, rms) 67 } 68 msg := ctx.Msg() 69 msg.Infof("histo[%s]: entries=%v mean=%v RMS=%v\n", 70 tsk.h1d.ID, 71 h.Entries(), 72 h.XMean(), 73 h.XRMS(), 74 ) 75 76 return err 77 } 78 79 func (tsk *testhsvc) Process(ctx fwk.Context) error { 80 var err error 81 return err 82 } 83 84 func newtesthsvc(typ, name string, mgr fwk.App) (fwk.Component, error) { 85 var err error 86 87 tsk := &testhsvc{ 88 TaskBase: fwk.NewTask(typ, name, mgr), 89 stream: "", 90 } 91 92 err = tsk.DeclProp("Stream", &tsk.stream) 93 if err != nil { 94 return nil, err 95 } 96 97 return tsk, err 98 } 99 100 func init() { 101 fwk.Register(reflect.TypeOf(testhsvc{}), newtesthsvc) 102 }