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:

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!