go-hep.org/x/hep@v0.38.1/groot/rphys/vector3.go (about) 1 // Copyright ©2020 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 rphys 6 7 import ( 8 "fmt" 9 "reflect" 10 11 "go-hep.org/x/hep/groot/rbase" 12 "go-hep.org/x/hep/groot/rbytes" 13 "go-hep.org/x/hep/groot/root" 14 "go-hep.org/x/hep/groot/rtypes" 15 "go-hep.org/x/hep/groot/rvers" 16 ) 17 18 type Vector3 struct { 19 obj rbase.Object 20 x float64 21 y float64 22 z float64 23 } 24 25 func NewVector3(x, y, z float64) *Vector3 { 26 return &Vector3{ 27 obj: *rbase.NewObject(), 28 x: x, 29 y: y, 30 z: z, 31 } 32 } 33 34 func (*Vector3) RVersion() int16 { 35 return rvers.Vector3 36 } 37 38 func (*Vector3) Class() string { 39 return "TVector3" 40 } 41 42 func (vec *Vector3) X() float64 { return vec.x } 43 func (vec *Vector3) Y() float64 { return vec.y } 44 func (vec *Vector3) Z() float64 { return vec.z } 45 46 func (vec *Vector3) SetX(x float64) { vec.x = x } 47 func (vec *Vector3) SetY(y float64) { vec.y = y } 48 func (vec *Vector3) SetZ(z float64) { vec.z = z } 49 50 func (vec *Vector3) MarshalROOT(w *rbytes.WBuffer) (int, error) { 51 if w.Err() != nil { 52 return 0, w.Err() 53 } 54 55 hdr := w.WriteHeader(vec.Class(), vec.RVersion()) 56 w.WriteObject(&vec.obj) 57 w.WriteF64(vec.x) 58 w.WriteF64(vec.y) 59 w.WriteF64(vec.z) 60 61 return w.SetHeader(hdr) 62 } 63 64 func (vec *Vector3) UnmarshalROOT(r *rbytes.RBuffer) error { 65 if r.Err() != nil { 66 return r.Err() 67 } 68 69 hdr := r.ReadHeader(vec.Class(), vec.RVersion()) 70 71 if hdr.Vers == 1 || hdr.Vers > 2 { 72 r.ReadObject(&vec.obj) 73 } 74 75 vec.x = r.ReadF64() 76 vec.y = r.ReadF64() 77 vec.z = r.ReadF64() 78 79 r.CheckHeader(hdr) 80 return r.Err() 81 } 82 83 func (vec *Vector3) String() string { 84 return fmt.Sprintf( 85 "TVector3{%v, %v, %v}", 86 vec.x, vec.y, vec.z, 87 ) 88 } 89 90 func init() { 91 { 92 f := func() reflect.Value { 93 o := &Vector3{} 94 return reflect.ValueOf(o) 95 } 96 rtypes.Factory.Add("TVector3", f) 97 } 98 } 99 100 var ( 101 _ root.Object = (*Vector3)(nil) 102 _ rbytes.Marshaler = (*Vector3)(nil) 103 _ rbytes.Unmarshaler = (*Vector3)(nil) 104 )