go-hep.org/x/hep@v0.38.1/groot/riofs/gendata/gen-ndim.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 //go:build ignore 6 7 package main 8 9 import ( 10 "flag" 11 "log" 12 13 "go-hep.org/x/hep/groot/internal/rtests" 14 ) 15 16 var ( 17 root = flag.String("f", "test-ndim.root", "output ROOT file") 18 split = flag.Int("split", 0, "default split-level for TTree") 19 ) 20 21 func main() { 22 flag.Parse() 23 24 out, err := rtests.RunCxxROOT("gentree", []byte(script), *root, *split) 25 if err != nil { 26 log.Fatalf("could not run ROOT macro:\noutput:\n%v\nerror: %+v", string(out), err) 27 } 28 } 29 30 const script = ` 31 #include <string.h> 32 #include <stdio.h> 33 34 #define OFFSET 0 35 #define N0 2 36 #define N1 3 37 #define N2 4 38 #define N3 5 39 40 struct Event { 41 bool ArrayBs[2][3][4][5]; 42 int8_t ArrayI8[2][3][4][5]; 43 int16_t ArrayI16[2][3][4][5]; 44 int32_t ArrayI32[2][3][4][5]; 45 int64_t ArrayI64[2][3][4][5]; 46 uint8_t ArrayU8[2][3][4][5]; 47 uint16_t ArrayU16[2][3][4][5]; 48 uint32_t ArrayU32[2][3][4][5]; 49 uint64_t ArrayU64[2][3][4][5]; 50 float ArrayF32[2][3][4][5]; 51 double ArrayF64[2][3][4][5]; 52 53 Float16_t ArrayD16[2][3][4][5]; 54 Double32_t ArrayD32[2][3][4][5]; 55 56 }; 57 58 void gentree(const char* fname, int splitlvl = 99) { 59 int bufsize = 32000; 60 int evtmax = 2; 61 62 auto f = TFile::Open(fname, "RECREATE"); 63 auto t = new TTree("tree", "my tree title"); 64 65 Event e; 66 67 t->Branch("ArrBs", e.ArrayBs, "ArrBs[2][3][4][5]/O"); 68 t->Branch("ArrI8", e.ArrayI8, "ArrI8[2][3][4][5]/B"); 69 t->Branch("ArrI16", e.ArrayI16, "ArrI16[2][3][4][5]/S"); 70 t->Branch("ArrI32", e.ArrayI32, "ArrI32[2][3][4][5]/I"); 71 t->Branch("ArrI64", e.ArrayI64, "ArrI64[2][3][4][5]/L"); 72 t->Branch("ArrU8", e.ArrayU8, "ArrU8[2][3][4][5]/b"); 73 t->Branch("ArrU16", e.ArrayU16, "ArrU16[2][3][4][5]/s"); 74 t->Branch("ArrU32", e.ArrayU32, "ArrU32[2][3][4][5]/i"); 75 t->Branch("ArrU64", e.ArrayU64, "ArrU64[2][3][4][5]/l"); 76 t->Branch("ArrF32", e.ArrayF32, "ArrF32[2][3][4][5]/F"); 77 t->Branch("ArrF64", e.ArrayF64, "ArrF64[2][3][4][5]/D"); 78 79 t->Branch("ArrD16", e.ArrayD16, "ArrD16[2][3][4][5]/f[0,0,16]"); 80 t->Branch("ArrD32", e.ArrayD32, "ArrD32[2][3][4][5]/d[0,0,32]"); 81 82 for (int j = 0; j != evtmax; j++) { 83 int i = j + OFFSET; 84 for (int i0 = 0; i0 != N0; i0++) { 85 for (int i1 = 0; i1 != N1; i1++) { 86 for (int i2 = 0; i2 != N2; i2++) { 87 for (int i3 = 0; i3 != N3; i3++) { 88 e.ArrayBs[i0][i1][i2][i3] = i3%2 == 0; 89 e.ArrayI8[i0][i1][i2][i3] = -i; 90 e.ArrayI16[i0][i1][i2][i3] = -i; 91 e.ArrayI32[i0][i1][i2][i3] = -i; 92 e.ArrayI64[i0][i1][i2][i3] = -i; 93 e.ArrayU8[i0][i1][i2][i3] = i; 94 e.ArrayU16[i0][i1][i2][i3] = i; 95 e.ArrayU32[i0][i1][i2][i3] = i; 96 e.ArrayU64[i0][i1][i2][i3] = i; 97 e.ArrayF32[i0][i1][i2][i3] = float(i); 98 e.ArrayF64[i0][i1][i2][i3] = double(i); 99 e.ArrayD16[i0][i1][i2][i3] = float(i); 100 e.ArrayD32[i0][i1][i2][i3] = double(i); 101 i++; 102 } 103 } 104 } 105 } 106 t->Fill(); 107 } 108 109 f->Write(); 110 f->Close(); 111 112 exit(0); 113 } 114 `