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  `