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  )