go-hep.org/x/hep@v0.38.1/groot/riofs/gendata/gen-bitset-tree.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 "os" 13 14 "go-hep.org/x/hep/groot/internal/rtests" 15 ) 16 17 var ( 18 root = flag.String("f", "std-bitset.root", "output ROOT file") 19 split = flag.Int("split", 0, "default split-level for TTree") 20 ) 21 22 func main() { 23 flag.Parse() 24 25 tmp, err := os.MkdirTemp("", "groot-") 26 if err != nil { 27 log.Fatalf("could not created tmp dir: %+v", err) 28 } 29 defer os.RemoveAll(tmp) 30 31 dict, err := rtests.GenROOTDictCode(event, link) 32 if err != nil { 33 log.Fatalf("could not run ROOT dict: %+v", err) 34 } 35 36 out, err := rtests.RunCxxROOT("gentree", []byte(event+string(dict)+script), *root, *split) 37 if err != nil { 38 log.Fatalf("could not run ROOT macro:\noutput:\n%v\nerror: %+v", string(out), err) 39 } 40 } 41 42 const event = ` 43 #ifndef EVENT_H 44 #define EVENT_H 1 45 46 #include <bitset> 47 #include <vector> 48 49 struct Event { 50 std::bitset<8> Bs8; 51 std::vector<std::bitset<8> > VecBs8; 52 53 void clear() { 54 this->VecBs8.clear(); 55 } 56 }; 57 58 #endif // EVENT_H 59 ` 60 61 const link = ` 62 #ifdef __CINT__ 63 64 #pragma link off all globals; 65 #pragma link off all classes; 66 #pragma link off all functions; 67 68 #pragma link C++ class Event+; 69 70 #endif 71 ` 72 73 const script = ` 74 void gentree(const char* fname, int splitlvl = 99) { 75 int bufsize = 32000; 76 int evtmax = 2; 77 78 auto f = TFile::Open(fname, "RECREATE"); 79 auto t = new TTree("tree", "my tree title"); 80 81 Event e; 82 83 t->Branch("evt", &e, bufsize, splitlvl); 84 85 // 0 86 e.clear(); 87 e.Bs8 = std::bitset<8>("00010001"); 88 e.VecBs8.push_back(std::bitset<8>("11101110")); 89 t->Fill(); 90 91 // 1 92 e.clear(); 93 e.Bs8 = std::bitset<8>("10011001"); 94 e.VecBs8.push_back(std::bitset<8>("00010001")); 95 e.VecBs8.push_back(std::bitset<8>("11101110")); 96 t->Fill(); 97 98 // 2 99 e.clear(); 100 e.Bs8 = std::bitset<8>("01100110"); 101 e.VecBs8.push_back(std::bitset<8>("10011001")); 102 e.VecBs8.push_back(std::bitset<8>("01100110")); 103 e.VecBs8.push_back(std::bitset<8>("11001100")); 104 t->Fill(); 105 106 f->Write(); 107 f->Close(); 108 109 exit(0); 110 } 111 `