[ROOT] General questions

From: Matt Palmer (palmer@hep.phy.cam.ac.uk)
Date: Fri Dec 07 2001 - 13:28:42 MET


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