tree0.C: simple Event class example
// Author: Heiko.Scheit@mpi-hd.mpg.de
//
// simple Event class example
//
// execute as: .x tree0.C++
//
// You have to copy it first to a directory where you have write access!
// Note that .x tree0.C cannot work with this example
//
//
///////////////////////////////
// Effect of ClassDef() and ClassImp() macros
//===============================================
//
// After running this macro create an instance of Det and Event
//
// Det d;
// Event e;
//
// now you can see the effect of the ClassDef() and ClassImp() macros.
// (for the Det class these commands are commented!)
// For instance 'e' now knows who it is:
//
// cout<<e.Class_Name()<<endl;
//
// whereas d does not.
//
// The methods that are added by the ClassDef()/Imp() marcro can be listed with
// .class
// .class Event
// .class Det
///////////////////
#include <TRandom.h>
#include <TTree.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <Riostream.h>
//class Det : public TObject {
class Det { // each detector gives an energy and time signal
public:
Double_t e; //energy
Double_t t; //time
// ClassDef(Det,1)
};
//ClassImp(Det)
//class Event { //TObject is not required by this example
class Event : public TObject {
public:
Det a; // say there are two detectors (a and b) in the experiment
Det b;
ClassDef(Event,1)
};
ClassImp(Event)
void tree0() {
// create a TTree
TTree *tree = new TTree("tree","treelibrated tree");
Event *e = new Event;
// create a branch with energy
tree->Branch("event",&e);
// fill some events with random numbers
Int_t nevent=10000;
for (Int_t iev=0;iev<nevent;iev++) {
if (iev%1000==0) cout<<"Processing event "<<iev<<"..."<<endl;
Float_t ea,eb;
gRandom->Rannor(ea,eb); // the two energies follow a gaus distribution
e->a.e=ea;
e->b.e=eb;
e->a.t=gRandom->Rndm(); // random
e->b.t=e->a.t + gRandom->Gaus(0.,.1); // identical to a.t but a gaussian
// 'resolution' was added with sigma .1
tree->Fill(); // fill the tree with the current event
}
// start the viewer
// here you can investigate the structure of your Event class
tree->StartViewer();
//gROOT->SetStyle("Plain"); // uncomment to set a different style
gStyle->SetPalette(1); // use precomputed color palette 1
// now draw some tree variables
TCanvas *c1 = new TCanvas();
c1->Divide(2,2);
c1->cd(1);
tree->Draw("a.e"); //energy of det a
tree->Draw("a.e","3*(-.2<b.e && b.e<.2)","same"); // same but with condition on energy b; scaled by 3
c1->cd(2);
tree->Draw("b.e:a.e","","colz"); // one energy against the other
c1->cd(3);
tree->Draw("b.t","","e"); // time of b with errorbars
tree->Draw("a.t","","same"); // overlay time of detector a
c1->cd(4);
tree->Draw("b.t:a.t"); // plot time b again time a
cout<<endl;
cout<<"You can now examine the structure of your tree in the TreeViewer"<<endl;
cout<<endl;
}