go-hep.org/x/hep@v0.38.1/fwk/examples/fwk-ex-tuto-4-write-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 69 msg := ctx.Msg() 70 msg.Infof("histo[%s]: entries=%v mean=%v RMS=%v\n", 71 tsk.h1d.ID, 72 h.Entries(), 73 h.XMean(), 74 h.XRMS(), 75 ) 76 77 return err 78 } 79 80 func (tsk *testhsvc) Process(ctx fwk.Context) error { 81 var err error 82 id := ctx.ID() 83 tsk.hsvc.FillH1D(tsk.h1d.ID, float64(id), 1) 84 return err 85 } 86 87 func newtesthsvc(typ, name string, mgr fwk.App) (fwk.Component, error) { 88 var err error 89 90 tsk := &testhsvc{ 91 TaskBase: fwk.NewTask(typ, name, mgr), 92 stream: "", 93 } 94 95 err = tsk.DeclProp("Stream", &tsk.stream) 96 if err != nil { 97 return nil, err 98 } 99 100 return tsk, err 101 } 102 103 func init() { 104 fwk.Register(reflect.TypeOf(testhsvc{}), newtesthsvc) 105 }