go-hep.org/x/hep@v0.38.1/groot/rphys/lorentzvector.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 LorentzVector struct {
    19  	obj rbase.Object
    20  	p   Vector3 // 3-vector component
    21  	e   float64 // time or energy
    22  }
    23  
    24  func NewLorentzVector(px, py, pz, e float64) *LorentzVector {
    25  	return &LorentzVector{
    26  		obj: *rbase.NewObject(),
    27  		p:   *NewVector3(px, py, pz),
    28  		e:   e,
    29  	}
    30  }
    31  
    32  func (*LorentzVector) RVersion() int16 {
    33  	return rvers.LorentzVector
    34  }
    35  
    36  func (*LorentzVector) Class() string {
    37  	return "TLorentzVector"
    38  }
    39  
    40  func (vec *LorentzVector) Px() float64 { return vec.p.x }
    41  func (vec *LorentzVector) Py() float64 { return vec.p.y }
    42  func (vec *LorentzVector) Pz() float64 { return vec.p.z }
    43  func (vec *LorentzVector) E() float64  { return vec.e }
    44  
    45  func (vec *LorentzVector) SetPxPyPzE(px, py, pz, e float64) {
    46  	vec.p.x = px
    47  	vec.p.y = py
    48  	vec.p.z = pz
    49  	vec.e = e
    50  }
    51  
    52  func (vec *LorentzVector) MarshalROOT(w *rbytes.WBuffer) (int, error) {
    53  	if w.Err() != nil {
    54  		return 0, w.Err()
    55  	}
    56  
    57  	hdr := w.WriteHeader(vec.Class(), vec.RVersion())
    58  	w.WriteObject(&vec.obj)
    59  	w.WriteObject(&vec.p)
    60  	w.WriteF64(vec.e)
    61  
    62  	return w.SetHeader(hdr)
    63  }
    64  
    65  func (vec *LorentzVector) UnmarshalROOT(r *rbytes.RBuffer) error {
    66  	if r.Err() != nil {
    67  		return r.Err()
    68  	}
    69  
    70  	hdr := r.ReadHeader(vec.Class(), vec.RVersion())
    71  
    72  	r.ReadObject(&vec.obj)
    73  	r.ReadObject(&vec.p)
    74  	vec.e = r.ReadF64()
    75  
    76  	r.CheckHeader(hdr)
    77  	return r.Err()
    78  }
    79  
    80  func (vec *LorentzVector) String() string {
    81  	return fmt.Sprintf(
    82  		"TLorentzVector{P: {%v, %v, %v}, E: %v}",
    83  		vec.p.x, vec.p.y, vec.p.z,
    84  		vec.e,
    85  	)
    86  }
    87  
    88  func init() {
    89  	{
    90  		f := func() reflect.Value {
    91  			o := &LorentzVector{}
    92  			return reflect.ValueOf(o)
    93  		}
    94  		rtypes.Factory.Add("TLorentzVector", f)
    95  	}
    96  }
    97  
    98  var (
    99  	_ root.Object        = (*LorentzVector)(nil)
   100  	_ rbytes.Marshaler   = (*LorentzVector)(nil)
   101  	_ rbytes.Unmarshaler = (*LorentzVector)(nil)
   102  )