This project is read-only.


Rating: No reviews yet
Downloads: 0
Released: Nov 30, 2013
Updated: Sep 30, 2014 by gwatts
Dev status: Beta Help Icon

Available Downloads

There are no downloads associated with this release.

Release Notes

Major improvements and reorganization in the dynamic capability of ROOT.NET occurred in this release. This started as a bug-fix release for 2.5, but a number of major new features were added along with bug fixes.

Get this release from NuGet. Make sure, as usual, that you get the proper version of it depending on the version of ROOT you have installed!

As usual, a complete list of features and bug-fixes is available here.

Dynamic TTree processing

It is possible to iterate over a NTTree object using either LINQ or foreach. The iterator is a dynamic object that you can use to access a leaf name. Most basic objects are supported - like vector<int>, etc. As with all dynamic features in ROOT.NET right now, this isn't fast as you hit both CINT and dynamic features in .NET. However, for most common types you do by-pass CINT wit this infrastructure. This feature is still experimental, along with all dynamic features.


As anyone who works with .NET knows, how "==" and .Equals and GetHashCode are defined have special meanings. In work leading up to this release I stumbled upon the fact that, really, this isn't done correctly in .NET - especially when a C++ operator== is defined. Keep this in mind when using this code!

Other Improvements

  • Dynamic properties are now possible. The rules follow, approximately, the rules for the wrappers. So, if you have "X.GetNEentries()", then you can do "X.NEntries". However, in addition, if there is "X.X()", you can also do dynamically, "X.X".
  • Objects that don't inherit from TObject can be accessed dynamically. For example, you can do "var v = ROOTNET.Utility.ROOTCreator.CreateByName("vector<int>");" And then use the regular C++ methods. Note that using "string" works, but could be a lot easier when a wrapper for strings' is provided.
  • CreateByName now takes a nice list of parameters - so if you can't use the dynamic feature to create ROOT objects, this is now more natural.
  • The dynamic calling now supports calling C++ methods with both pointers and by-reference for objects (both TObject and non TObject).

Bug Fixes

A lot of small bug fixes and source code refactoring occurred, especially for the dynamic code (which still undergoes a lot of churn as I learn better how to work with and use this feature).
  • Operators (+, -, *, /, etc.), in many cases, weren't being translated correctly so that they could be used in the .NET world.
  • It is now possible to use the dynamic CreateByName for a STL template that is known by ROOT's CINT (vector<int>, TParameter<int>, etc.).

Reviews for this release

No reviews yet for this release.