Go Hackathon - CERN
GoHACK Devpost is LIVE!
Google and CERN are teaming up to host a Go hackathon and improve scientific applications or libraries written in Go.
Either working on general scientific apps/libs, or working on 3 CERN-related applications or libraries:
- Reva: a gRPC server written in Go to provide interoperability between different storage and applications,
- Golbd: a DNS load balancer written in Go to efficiently manage the thousands of computer nodes in the CERN Computer Center,
- Go-HEP
More informations about the hackathon are available here:
Don’t hesitate to spread the word.
In preparation for this hackathon, we have setup 3 projects (they are but suggestions):
groot-rntuple
: adding support for ROOT-7 RNTuple
file format
groot
should be able to read and write the new RNTuple file format from the upcoming ROOT v7.
as the format is still experimental, code for reading/writing such files should live under:
go-hep.org/x/hep/groot/exp/rntup
initially, support for the following items should be added:
- r/w support for “raw” file mode (ie: sans r/w into a ROOT file, just a “bare” UNIX file)
- r/w support for basic types
- support for envelopes
- support for std::string
- support for std::vector w/ T=builtin
support for std::vector where T
is a non-builtin may be added later.
groot-member-wise-streaming
: adding support for reading/writing member-wise objects
ROOT/C++ has support for reading/writing data object-wise or member-wise. ie:
type Data struct {
A float32
B int32
C string
D []Pair
}
type Pair struct {
P0, P1 float64
}
a collection of user []Data
of 3 Data
items may be written as:
[A B C [[P0 P1] [P0 P1] [P0 P1]]] [A B C [[P0 P1] [P0 P1]]] [A B C []]]
or, in member-wise mode:
[A A A B B B C C C [[P0 P1] [P0 P1] [P0 P1]] [[P0 P1] [P0 P1]] []]]
or, in member-wise mode (but “full split”):
[A A A B B B C C C [[P0 P0 P0] [P1 P1 P1]] [[P0 P0] [P1 P1]] []]]
as of Go-HEP@v0.30
, groot
has reasonable support for object-wise r/w of user types, but member-wise support is sub-par.
ROOT uses member-wise mode for:
std::map<K,V>
(which is written as a triplet[len, []K, []V]
)TClonesArray
std::vector<T>
hplot-zoom-pan
: adding support for plot interactivity in hplot
hplot
is built on top of gonum.org/v1/plot to easily create publication quality plots.
hplot
comes with a couple of HEP-oriented plotters.
at the moment (Go-HEP@v0.31
), hplot
only correctly handles “paper” plots: there is no facility to pan/zoom within the plot (even when the plot is displayed w/ the vggio
or vgsvg
backends).
there is no interactivity with an hplot
plot.
it would be great to be able to:
- pan a plot with the mouse (and/or with some
vi
-like keyboard bindings?) - zoom in/out a plot with the mouse wheel
- zoom in/out on the x- or y-axis with the mouse
- zoom in/out through a box with the mouse
a first iteration could be to implement functions to do this on top of the gonum/plot/vg/vggio
backend, inside the pawgo
program.
Let the fun begin!