Re: [ROOT] accessing a not existing TTree defined in an own class

From: Rene Brun (Rene.Brun@cern.ch)
Date: Mon Oct 29 2001 - 18:02:44 MET


Georges,

A quick look to your class. Explanation is simple.
You create a TTree object in the stack in your constructor.
When you leave teh constructor, this object is automatically deleted.
Replace:
     TTree fList("fList","fList");
by
     TTree *fList = new TTree("fList","fList");

For your question about the GUI on Windows, I suggest you read the most recent
debate in roottalk.

Rene Brun



Georges Lobo wrote:
> 
> Hi Rooters,
> 
> I've written a small class to read a file and display plot
> and another stuff. This class contains a TTree object which
> is created by the default constructor of MyClass by
> TTree fList("fList","Test") it has been previously declared
> in the class definition with TTree *fList. But I can't
> use  this tree in the other functions of the class, e.g.
> void Print() {
> fList->Print();
> }
> In a root session
> [root][1].L MyClass.C
> [root][2] MyClass t("f72_r1.rep");
> [root][3] t->Print();
> Error: illegal pointer to class object fList 0x0 17  FILE:MyClass.h LINE:165
> *** Interpreter error recovered ***
> 
> I can understand what is the error I think it is because
> fList is built afterwards. It works if I declare the ntuple
> as a main variable TTree tree("fList","Test") in MyClass.C and
> adding fList = tree in the constructor. I would like to avoid such
> a solution. Do you see any other ? What I don't understand is that all
> other declared types work (Int_t Float_t,...).
> The whole code I used is below.
> I'm sorry if this has been already asked in roottalk but I didn't manage to find it.
> I've also two  short question :
> - What is the status of Root GUI use under Windows ?
> - Is there someone using Root libraries with Labview ? (I've already asked this question some time ago)
> ------MyClass.h
> #include <TChain.h>
> #include <TFile.h>
> #include <TSelector.h>
> #include <iostream.h>
> #include <stdio.h>
> #include <strstream.h>
> #include <fstream.h>
> #include <string.h>
> 
> class MyClass {
> public:
>   Char_t name[32];
>   Int_t nList=0;
>   Int_t nWords;
>   Int_t nAcc;
>   Int_t Accorl[12];
>   Int_t Accorc[12];
>   Int_t wFormat;
>   Int_t tCM1;
>   Int_t tCM3;
>   Int_t tT0;
>   Float_t TCres;
>   TTree *fList;
>   Int_t num;
>   char fName[32];
>   Int_t CM1;
>   Int_t CM3;
>   Int_t T0;
>   Int_t Tout;
>   Int_t Tot;
>   Int_t runtime;
>   Char_t date[32];
>   Bool_t sel;
>   TBranch *b_num;
>   TBranch *b_fName;
>   TBranch *b_CM1;
>   TBranch *b_CM3;
>   TBranch *b_T0;
>   TBranch *b_Tout;
>   TBranch *b_T0;
>   TBranch *b_runtime;
>   TBranch *b_date ;
>   TBranch *b_sel;
>   //
>   MyClass (char *filename);
>   ~MyClass ();
>   void Print();
>   Bool_t Select(Int_t idfile);
> 
> };
> 
> //Default constructor
> MyClass::MyClass (char *filename){
>   //open the report file and fille all the structure
>   nAcc = 0;
>   ifstream file(filename);
>   if(!file) {
>     cout << "Report File not found " << endl;
>     break;
>   }
>   Int_t nlines = 0;
>   TString line;
> // skip lines
>       for(int kk=0;kk<3;kk++) {
>         line.ReadLine(file);
>     }
>      line.ReadToDelim(file, '\t');
>      line.ReadToDelim(file, ' ');
> // Number of words
>      nWords = atoi(line.Data());
>      line.ReadToDelim(file, ' ');
>      line.Remove(0,1);
> // Format of words
>      wFormat = atoi(line.Data());
>      line.ReadLine(file);
>      line.ReadLine(file);
>      line.ReadToDelim(file,'\t');
> // Read accordeon
>      for(int kk=0;kk<12;kk++) {
>        line.ReadToDelim(file, '\t');
>        Accorl[kk]=atoi(line.Data());
>        if ( Accorl[kk]!=0) nAcc++;
>        //cout << "nacc = " << nAcc <<" Accorl[kk]=" << Accorl[kk]<<" kk=" <<kk << endl;
>      }
>      line.ReadToDelim(file, '\t');
>      line.ReadToDelim(file, '\t');
>      for(int kk=0;kk<12;kk++) {
>        line.ReadToDelim(file, '\t');
>        if (Accorl[kk]!=0) Accorc[kk]=atoi(line.Data());
>        //cout << "nacc = " << nAcc <<" Accorc[kk]=" << Accorc[kk]<<" kk=" <<kk << endl;
> 
>      }
>      line.ReadToDelim(file, '=');
>      line.ReadLine(file);
> // Time-Coder Resolution
>      TCres=atof(line.Data());
> // Compute real accordeon compression in ns and Accordeon length in channels
>      for (kk=0;kk<nAcc; kk++) {
>        Accorc[kk] = TMath::Power(2,Accorc[kk]);
>        Accorc[kk] *= TCres;
>        Accorl[kk]*=1024;
>      }
> // Skip header
>      for (kk=0;kk<6; kk++) {
>        line.ReadLine(file);
>     }
> // Create Ntuple
>      TTree fList("fList","fList");
>      fList->Print();
>      fList->Branch("num",&num,"number");
>      fList->Branch("fName",&fName,"lst filename");
>      fList->Branch("CM1",&CM1,"CM1");
>      fList->Branch("CM3",&CM3,"CM3");
>      fList->Branch("T0",&T0,"T0");
>      fList->Branch("Tout",&Tout,"Tout");
>      fList->Branch("Tot",&Tot,"Tot");
>      fList->Branch("runtime",&runtime,"runtime");
>      fList->Branch("date",date,"date");
>      fList->Branch("sel",&sel,"selected");
> // Fill ntuple
>      while (file) {
>        line.ReadToDelim(file,'\t');
>        num = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        strcpy(fName,line.Data());
>        line.ReadToDelim(file,'\t');
>        strcpy(date,line.Data());
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        runtime = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        CM1 = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        CM3 = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        line.ReadToDelim(file,'\t');
>        T0 = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        Tout = atoi(line.Data());
>        line.ReadToDelim(file,'\t');
>        Tot = atoi(line.Data());
>        line.ReadToDelim(file,'\n');
>        sel = kTRUE;
>        fList->Fill();
>        tCM1 +=CM1;
>        tCM3 +=CM3;
>        tT0 +=T0;
>     }
>      cout << tT0 << endl;
> }
> MyClass::~MyClass() {
> 
> }
> MyClass::Print() {
>     fList->Print();
> }
> 
> -----MyClass.C
> #include "MyClass.h"
> {
> }



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:05 MET