ROOT tree to CSV file format

Hello everyone,

I want to convert a root file into .csv file format. Could someone provide the best way to go about this?.

Many Thanks,

Hi,

I think there is no out-of-the-box procedure for that: you’ll have to implement the converter yourself.
What we provide, on the other hand, is the opposite, i.e. seamless csv reading into ROOT:

Cheers,
D

depending on the layout of the TTree stored in your ROOT file, go-hep/rootio might help do what you want.

I’ve just whipped up a little naive root2csv command:

e.g.:

$> root-ls -t ./small-flat-tree.root 
=== [./small-flat-tree.root] ===
version: 60806
TTree          tree                 my tree title (entries=100)
  Int32        "Int32/I"            TBranch
  Int64        "Int64/L"            TBranch
  UInt32       "UInt32/i"           TBranch
  UInt64       "UInt64/l"           TBranch
  Float32      "Float32/F"          TBranch
  Float64      "Float64/D"          TBranch
  Str          "Str/C"              TBranch
  ArrayInt32   "ArrayInt32[10]/I"   TBranch
  ArrayInt64   "ArrayInt64[10]/L"   TBranch
  ArrayUInt32  "ArrayInt32[10]/i"   TBranch
  ArrayUInt64  "ArrayInt64[10]/l"   TBranch
  ArrayFloat32 "ArrayFloat32[10]/F" TBranch
  ArrayFloat64 "ArrayFloat64[10]/D" TBranch
  N            "N/I"                TBranch
  SliceInt32   "SliceInt32[N]/I"    TBranch
  SliceInt64   "SliceInt64[N]/L"    TBranch
  SliceUInt32  "SliceInt32[N]/i"    TBranch
  SliceUInt64  "SliceInt64[N]/l"    TBranch
  SliceFloat32 "SliceFloat32[N]/F"  TBranch
  SliceFloat64 "SliceFloat64[N]/D"  TBranch

and now, converting it:

$> root2csv -o out.csv -t tree -f ./small-flat-tree.root
root2csv: scanning leaves...
root2csv: >>> "ArrayInt32" [10]int32 not supported
root2csv: >>> "ArrayInt64" [10]int64 not supported
root2csv: >>> "ArrayInt32" [10]int32 not supported
root2csv: >>> "ArrayInt64" [10]int64 not supported
root2csv: >>> "ArrayFloat32" [10]float32 not supported
root2csv: >>> "ArrayFloat64" [10]float64 not supported
root2csv: >>> "SliceInt32" []int32 not supported
root2csv: >>> "SliceInt64" []int64 not supported
root2csv: >>> "SliceInt32" []int32 not supported
root2csv: >>> "SliceInt64" []int64 not supported
root2csv: >>> "SliceFloat32" []float32 not supported
root2csv: >>> "SliceFloat64" []float64 not supported
root2csv: scanning leaves... [done]

$> head out.csv 
## Automatically generated from "./small-flat-tree.root"
Int32;Int64;UInt32;UInt64;Float32;Float64;Str;N
0;0;0;0;0;0;evt-000;0
1;1;1;1;1;1;evt-001;1
2;2;2;2;2;2;evt-002;2
3;3;3;3;3;3;evt-003;3
4;4;4;4;4;4;evt-004;4
5;5;5;5;5;5;evt-005;5
6;6;6;6;6;6;evt-006;6
7;7;7;7;7;7;evt-007;7

hth,
-s

1 Like

forgot to say that, if you want to test it, you either need to have Go installed and then do:

$> go get go-hep.org/x/hep/cmd/root2csv

or (if you haven’t installed Go already, but really, you should as it is such a nice language :P) directly download the binary for your platform I put there:

many thanks for your help

(if that was directed to me: thanks :slight_smile: )
(also, feel free to bug me if you need some more features (like writing or not the CSV header, changing the default CSV-delimiter, etc…) or – god forbid! – find a bug. that’s quite possible, I really hacked it together in a few minutes)

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.