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  )