Project Description
Translates LINQ queries from the .NET world in to CERN's ROOT language (C++) and then runs them (locally or on a PROOF server).


This project is an experiment in a different way to approach the large data set analysis that ROOT encourages. Instead of having to paste together multiple ROOT plots using scripts and other controls, the idea is to put it all under one roof. The goals of this project are. The high level goals of this project are:
  • Unify the ROOT event loop and all other code. That is the code to manipulate the plots and make the plots should stand on a more equal footing, and the code overhead to make a plot should be fairly minimal.
  • Aimed at a mid-size analysis (several 100 plots) with small amounts of in-loop calculations (i.e. not the case that you re-run a tracking algorithm in ROOT by coding it up in C#).
  • Should make it easy to develop an analysis in steps: first you make the basic pt and eta plots, then you add a few cuts and re-make the same plots, and perhaps compare them, and then you...

Those are fairly lofty goals, not really suitable for a project. So, I've turned them into the following more specific goals that can (I hope) be realized:
  • Be able to write and fill a ROOT histogram using LINQ, in much the same way that TTree::Draw does, except with actual code and local variables to control it rather than a string.
  • Be able to intelligently batch queries so that several plots (pT, eta, phi, etc.) can be run with a single query.
  • Use on either PROOF or on local root files (or PROOF-lite, I suppose).
  • Cache results for queires that have already been run and automatically pull them out w/out having to re-run if that is the case.
  • Fit well in the Visual Studio 2010 work flow, though make all the components stand-alone so they can be run outside that environment.

As of v0.4 it is possible to fill histograms using LINQ, run on local files, cache results, batch queries and fits quite well in the VS 2010 workflow. Distribution is by nuget package (feed on a slow server located at

This is currently a very experimental project. While I'd consider it still in the Alpha state, I do use it regularly for my own analysis and have shown quite a few plots in various ATLAS working group meetings - so it is robust enough for me. Many of the smaller features I add are motivated by what I need in the type of work I do.

This is one of the more complex projects I've undertaken and it could well collapse under its own weight!

Last edited Oct 15, 2011 at 8:11 AM by gwatts, version 5