go-hep.org/x/hep@v0.38.1/lcio/trackerdata.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 lcio 6 7 import ( 8 "fmt" 9 "strings" 10 11 "go-hep.org/x/hep/sio" 12 ) 13 14 type TrackerDataContainer struct { 15 Flags Flags // bits 0-15 are user/detector specific 16 Params Params 17 Data []TrackerData 18 } 19 20 type TrackerData struct { 21 CellID0 int32 22 CellID1 int32 23 Time float32 24 Charges []float32 25 } 26 27 func (data *TrackerData) GetCellID0() int32 { return data.CellID0 } 28 func (data *TrackerData) GetCellID1() int32 { return data.CellID1 } 29 30 func (tds *TrackerDataContainer) String() string { 31 o := new(strings.Builder) 32 fmt.Fprintf(o, "%[1]s print out of TrackerData collection %[1]s\n\n", strings.Repeat("-", 15)) 33 fmt.Fprintf(o, " flag: 0x%x\n", tds.Flags) 34 fmt.Fprintf(o, " LCIO::TRAWBIT_ID1 : %v\n", tds.Flags.Test(BitsTRawID1)) 35 36 fmt.Fprintf(o, "%v\n", tds.Params) 37 38 const ( 39 head = " [ id ] | cellid0 | cellid1 | time | cellid-fields \n" 40 tail = "------------|----------|----------|----------|----------------\n" 41 ) 42 o.WriteString(head) 43 o.WriteString(tail) 44 for i := range tds.Data { 45 data := &tds.Data[i] 46 fmt.Fprintf(o, 47 "[%09d] | %08d | %08d | %+.2e| unknown/default charge-ADC: %v\n", 48 ID(data), 49 data.CellID0, data.CellID1, 50 data.Time, 51 data.Charges, 52 ) 53 } 54 return o.String() 55 } 56 57 func (*TrackerDataContainer) VersionSio() uint32 { 58 return Version 59 } 60 61 func (tds *TrackerDataContainer) MarshalSio(w sio.Writer) error { 62 enc := sio.NewEncoder(w) 63 enc.Encode(&tds.Flags) 64 enc.Encode(&tds.Params) 65 enc.Encode(int32(len(tds.Data))) 66 for i := range tds.Data { 67 data := &tds.Data[i] 68 enc.Encode(&data.CellID0) 69 if tds.Flags.Test(BitsTRawID1) { 70 enc.Encode(&data.CellID1) 71 } 72 enc.Encode(&data.Time) 73 enc.Encode(&data.Charges) 74 enc.Tag(data) 75 } 76 return enc.Err() 77 } 78 79 func (tds *TrackerDataContainer) UnmarshalSio(r sio.Reader) error { 80 dec := sio.NewDecoder(r) 81 dec.Decode(&tds.Flags) 82 dec.Decode(&tds.Params) 83 var n int32 84 dec.Decode(&n) 85 tds.Data = make([]TrackerData, int(n)) 86 for i := range tds.Data { 87 data := &tds.Data[i] 88 dec.Decode(&data.CellID0) 89 if tds.Flags.Test(BitsTRawID1) { 90 dec.Decode(&data.CellID1) 91 } 92 dec.Decode(&data.Time) 93 dec.Decode(&data.Charges) 94 dec.Tag(data) 95 } 96 return dec.Err() 97 } 98 99 var ( 100 _ sio.Versioner = (*TrackerDataContainer)(nil) 101 _ sio.Codec = (*TrackerDataContainer)(nil) 102 _ Hit = (*TrackerData)(nil) 103 )