Hi Rooters,
I created a tree with two branches, each containing several arrays of
floats and ints. In order to loop over the entries, I used MakeClass to
create the skeleton analysis class (->Hits.C, Hits.h). Now instead of
opening each ROOT file by hand and typing
Root > .L Hits.C
Root > Hits t
Root > t.GetEntry(12); // Fill t data members with entry number
12
Root > t.Show(); // Show values of entry 12
Root > t.Show(16); // Read and show values of entry 16
Root > t.Loop(); // Loop on all entries,
I wrote a little macro (analHits.C) to do that, which I append to this
mail. The methods Hcreate and Hplot were added to the skeleton Hits.C to
create and plot some histograms.
However, I ran into two problems:
1. The Histograms are plotted on a canvas, which, however, gets cleared
immediately after the macro exits. I understand that this is due to the
loacl scope of the histograms created within Hits.C, but is there a way
of saving them to the global scope?
2. The macro runs without problems the first time it is executed, but
the second time I do it, I get an error message like
>>>>Function analHits() busy. loaded after
>>>>"/afs/cern.ch/user/k/ketzer/compass/2000/analysis/./Hits.C"
>>>>Error: G__unloadfile() Can not unload
>>>>"/afs/cern.ch/user/k/ketzer/compass/2000/analysis/./Hits.C", file busy
>>>>FILE:analHits.C LINE:11
Do I really have to type .U Hits.C before I reexecute the macro?
Any help would be greatly appreciated.
Cheers,
Bernhard
--
-----------------------------------------------------------------------------
Bernhard Ketzer Tel.: +41 22 76-76002 FAX: -77100
CERN, EP Division GSM : +41 79 201 4404 (CERN
164404)
CH-1211 Geneve 23 Email: Bernhard.Ketzer@cern.ch
#include <iostream>
#include "TString.h"
int analHits(int run=125, TString module="DGEM2",
TString dir="/shift/pccodt07/data01/compass/gem/hist") {
// Reset ROOT
gROOT->Reset();
// Load Hits.C class
gROOT->LoadMacro("Hits.C");
// Graphics setup
TCanvas *c0 = new TCanvas("c0","c0",100,20,700,700);
// Construct file name
char runstr[3];
sprintf(runstr, "%d", run);
TString fileName = dir;
fileName = fileName + "/run_" + runstr + "_001.root";
// Open file, if not already loaded
TFile *file = (TFile *)gROOT->GetListOfFiles()->
FindObject((const char *)fileName);
if (!file) {
file = new TFile((const char *)fileName);
file->cd((const char *)module);
}
// Read tree named "Hits" in memory
TTree *T = (TTree*)gDirectory->Get("Hits");
// Print
T->Print();
// Construct Hits object to loop over events
Hits h(T);
// Create histograms
h.Hcreate();
// Loop
h.Loop();
// Plot histograms filled in loop
h.Hplot();
// Close file
// file->Close();
// Unload Hits.C
// G__unloadfile("Hits.C");
// gInterpreter->ProcessLine(".U Hits.C");
return 0;
}
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:35 MET