Hi everyone,
I've been using ROOT now for the past few months - I've generally been quite
impressed- it's nice to work with 4-vectors and deal with things in an OO
way, but I have a few queries/observations about it....
1. I have signal and background files and when I generate my output I want to
be able to plot the signal and backgrounds stacked on top of each other
whilst still seeing which contribution came from where. The only way I've
found to do this so far is to add all the histograms together and plot that,
then add all but one of them and plot that on top in a different colour and
so on. This seems a very 'clunky' way of doing this - is there a better way?
2. I made a simple little 3D viewer for some of my data (which was
impressively easy :) ). However, I use TPolyLine3D to do the drawing and I
can't get any of the lines to be drawn in different colours. Currently I do
something like:
TPolyLine3D* beamaxis = new TPolyLine3D(2);
beamaxis->SetPoint(0, 1000, 1000, 0);
beamaxis->SetPoint(1, 1000, 1000, 2000);
gStyle->SetLineColor(2);
beamaxis->UseCurrentStyle();
beamaxis->Draw();
For each of the lines I want to draw, but they all come out the same colour
(the colour that I set the last one to). I tried using DrawCopy instead, but
that didn't help. (When I was doing the histograms above, I had to use
DrawClone, but there is no DrawClone for TPolyLine3Ds). Oh, one other thing,
when viewing a 3D object in a TCanvas, it appears that you can only rotate it
about 2 axes but not the third - to do that you have to launch an X3D window.
3. Why do the histogram classes derive from the TArray classes? I assume
this multiple inheritance is the reason for the TArray classes being some of
the very few in ROOT *not* to derive from TObject. Why not have the array as
a data member - then maybe you wouldn't have to have a different class for
each data type. As a general point tho, I think I am right in saying that
multiple inheritance of non-pure virtual classes (ie non-interfaces) in
object hierachies with a single shared parent base class (ie TObject) cannot
work ...that's why it isn't allowed in Java, .NET etc
4. When using TTree::Draw methods, would it be possible to have CINT
interpret the cut/draw strings because then any valid C++ code should work,
right? At the moment I'm doing things like:
MyTree->Draw("Pjet1.Eta()", "Pjet2.Pt()>50")
which works fine, but it'd be nice to do things like:
MyTree->Draw("(Pjet1+Pjet2).M()") or
MyTree->Draw("Pjet1.deltaR(Pjet2)")
neither of which work atm.
Thanks
Matt
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:11 MET