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