-
Notifications
You must be signed in to change notification settings - Fork 35
/
gen-small-evnt-tree.go
114 lines (94 loc) · 2.24 KB
/
gen-small-evnt-tree.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// +build ignore
// Copyright ©2018 The go-hep Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"fmt"
"github.com/go-hep/croot"
)
const ARRAYSZ = 10
type Event struct {
I32 int32
I64 int64
U32 uint32
U64 uint64
F32 float32
F64 float64
Str string
ArrayI32 [ARRAYSZ]int32
ArrayI64 [ARRAYSZ]int64
ArrayU32 [ARRAYSZ]uint32
ArrayU64 [ARRAYSZ]uint64
ArrayF32 [ARRAYSZ]float32
ArrayF64 [ARRAYSZ]float64
N int32
SliceI32 []int32
SliceI64 []int64
SliceU32 []uint32
SliceU64 []uint64
SliceF32 []float32
SliceF64 []float64
}
func main() {
const fname = "test-small.root"
const evtmax = 100
const splitlevel = 32
const bufsiz = 32000
const compress = 1
const netopt = 0
f, err := croot.OpenFile(fname, "recreate", "small event file", compress, netopt)
if err != nil {
panic(err.Error())
}
// create a tree
tree := croot.NewTree("tree", "my tree title", splitlevel)
e := Event{}
_, err = tree.Branch("evt", &e, bufsiz, 0)
if err != nil {
panic(err.Error())
}
// fill some events with random numbers
for iev := int64(0); iev != evtmax; iev++ {
if iev%1000 == 0 {
fmt.Printf(":: processing event %d...\n", iev)
}
e.I32 = int32(iev)
e.I64 = int64(iev)
e.U32 = uint32(iev)
e.U64 = uint64(iev)
e.F32 = float32(iev)
e.F64 = float64(iev)
e.Str = fmt.Sprintf("evt-%03d", iev)
for ii := 0; ii < ARRAYSZ; ii++ {
e.ArrayI32[ii] = int32(iev)
e.ArrayI64[ii] = int64(iev)
e.ArrayU32[ii] = uint32(iev)
e.ArrayU64[ii] = uint64(iev)
e.ArrayF32[ii] = float32(iev)
e.ArrayF64[ii] = float64(iev)
}
e.N = int32(iev) % 10
e.SliceI32 = make([]int32, int(e.N))
e.SliceI64 = make([]int64, int(e.N))
e.SliceU32 = make([]uint32, int(e.N))
e.SliceU64 = make([]uint64, int(e.N))
e.SliceF32 = make([]float32, int(e.N))
e.SliceF64 = make([]float64, int(e.N))
for ii := 0; ii < int(e.N); ii++ {
e.SliceI32[ii] = int32(iev)
e.SliceI64[ii] = int64(iev)
e.SliceU32[ii] = uint32(iev)
e.SliceU64[ii] = uint64(iev)
e.SliceF32[ii] = float32(iev)
e.SliceF64[ii] = float64(iev)
}
_, err = tree.Fill()
if err != nil {
panic(err.Error())
}
}
f.Write("", 0, 0)
f.Close("")
}
// EOF