Dear root team, When creating the class TreeH0.C and the header file TreeH0.h in the following way: root[] TChain hits("TreeH0") root[] hits.Add("galice.root/TreeH0") . . root[] hits.MakeClass() ... TreeH0.C and TreeH0.h are created. When compiling TreeH0.C the following error occured: TreeH0.h:302: `b_TTRAC' undeclared (first use this function) In line 83 (see attachment) there is a definition: TBranch *b_TTRAC_; When I delete the last underline the thing compiles. So could it be that there is an error in naming the branches of the tree? Unfortunately I still did not manage to run the thing, because the main() that I added in TreeH0.C produces a segmentation fault when declaring TreeH0 hit; (see attachment) Can you please help me?? Best greetings, Martin ////////////////////////////////////////////////////////// // This class has been automatically generated // (Fri Jan 11 10:35:08 2002 by ROOT version3.02/06) // from TChain TreeH0/ ////////////////////////////////////////////////////////// #ifndef TreeH0_h #define TreeH0_h #include <TBranch.h> #include <TROOT.h> #include <TChain.h> #include <TFile.h> const Int_t kMaxTTRAC = 28351; const Int_t kMaxBRICK = 10122; const Int_t kMaxDRIFT = 48; class TreeH0 { public : TTree *fChain; //!pointer to the analyzed TTree or TChain Int_t fCurrent; //!current Tree number in a TChain //Declaration of leaves types Int_t TTRAC_; UInt_t TTRAC_fUniqueID[kMaxTTRAC]; //[TTRAC_] UInt_t TTRAC_fBits[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fTrack[kMaxTTRAC]; //[TTRAC_] Float_t TTRAC_fX[kMaxTTRAC]; //[TTRAC_] Float_t TTRAC_fY[kMaxTTRAC]; //[TTRAC_] Float_t TTRAC_fZ[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol0[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol1[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol2[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol3[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol4[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol5[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol6[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol7[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol8[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fVol9[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fId[kMaxTTRAC]; //[TTRAC_] Int_t TTRAC_fEvNumber[kMaxTTRAC]; //[TTRAC_] Int_t BRICK_; UInt_t BRICK_fUniqueID[kMaxBRICK]; //[BRICK_] UInt_t BRICK_fBits[kMaxBRICK]; //[BRICK_] Int_t BRICK_fTrack[kMaxBRICK]; //[BRICK_] Float_t BRICK_fX[kMaxBRICK]; //[BRICK_] Float_t BRICK_fY[kMaxBRICK]; //[BRICK_] Float_t BRICK_fZ[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol0[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol1[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol2[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol3[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol4[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol5[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol6[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol7[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol8[kMaxBRICK]; //[BRICK_] Int_t BRICK_fVol9[kMaxBRICK]; //[BRICK_] Int_t BRICK_fId[kMaxBRICK]; //[BRICK_] Int_t BRICK_fEvNumber[kMaxBRICK]; //[BRICK_] Int_t DRIFT_; UInt_t DRIFT_fUniqueID[kMaxDRIFT]; //[DRIFT_] UInt_t DRIFT_fBits[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fTrack[kMaxDRIFT]; //[DRIFT_] Float_t DRIFT_fX[kMaxDRIFT]; //[DRIFT_] Float_t DRIFT_fY[kMaxDRIFT]; //[DRIFT_] Float_t DRIFT_fZ[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol0[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol1[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol2[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol3[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol4[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol5[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol6[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol7[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol8[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fVol9[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fId[kMaxDRIFT]; //[DRIFT_] Int_t DRIFT_fEvNumber[kMaxDRIFT]; //[DRIFT_] //List of branches TBranch *b_TTRAC; //! TBranch *b_TTRAC_fUniqueID; //! TBranch *b_TTRAC_fBits; //! TBranch *b_TTRAC_fTrack; //! TBranch *b_TTRAC_fX; //! TBranch *b_TTRAC_fY; //! TBranch *b_TTRAC_fZ; //! TBranch *b_TTRAC_fVol0; //! TBranch *b_TTRAC_fVol1; //! TBranch *b_TTRAC_fVol2; //! TBranch *b_TTRAC_fVol3; //! TBranch *b_TTRAC_fVol4; //! TBranch *b_TTRAC_fVol5; //! TBranch *b_TTRAC_fVol6; //! TBranch *b_TTRAC_fVol7; //! TBranch *b_TTRAC_fVol8; //! TBranch *b_TTRAC_fVol9; //! TBranch *b_TTRAC_fId; //! TBranch *b_TTRAC_fEvNumber; //! TBranch *b_BRICK; //! TBranch *b_BRICK_fUniqueID; //! TBranch *b_BRICK_fBits; //! TBranch *b_BRICK_fTrack; //! TBranch *b_BRICK_fX; //! TBranch *b_BRICK_fY; //! TBranch *b_BRICK_fZ; //! TBranch *b_BRICK_fVol0; //! TBranch *b_BRICK_fVol1; //! TBranch *b_BRICK_fVol2; //! TBranch *b_BRICK_fVol3; //! TBranch *b_BRICK_fVol4; //! TBranch *b_BRICK_fVol5; //! TBranch *b_BRICK_fVol6; //! TBranch *b_BRICK_fVol7; //! TBranch *b_BRICK_fVol8; //! TBranch *b_BRICK_fVol9; //! TBranch *b_BRICK_fId; //! TBranch *b_BRICK_fEvNumber; //! TBranch *b_DRIFT; //! TBranch *b_DRIFT_fUniqueID; //! TBranch *b_DRIFT_fBits; //! TBranch *b_DRIFT_fTrack; //! TBranch *b_DRIFT_fX; //! TBranch *b_DRIFT_fY; //! TBranch *b_DRIFT_fZ; //! TBranch *b_DRIFT_fVol0; //! TBranch *b_DRIFT_fVol1; //! TBranch *b_DRIFT_fVol2; //! TBranch *b_DRIFT_fVol3; //! TBranch *b_DRIFT_fVol4; //! TBranch *b_DRIFT_fVol5; //! TBranch *b_DRIFT_fVol6; //! TBranch *b_DRIFT_fVol7; //! TBranch *b_DRIFT_fVol8; //! TBranch *b_DRIFT_fVol9; //! TBranch *b_DRIFT_fId; //! TBranch *b_DRIFT_fEvNumber; //! TreeH0(TTree *tree=0); ~TreeH0(); Int_t Cut(Int_t entry); Int_t GetEntry(Int_t entry); Int_t LoadTree(Int_t entry); void Init(TTree *tree); void Loop(Int_t nn = 0); Bool_t Notify(); void Show(Int_t entry = -1); }; #endif #ifdef TreeH0_cxx TreeH0::TreeH0(TTree *tree) { // if parameter tree is not specified (or zero), connect the file // used to generate this class and read the Tree. if (tree == 0) { #ifdef SINGLE_TREE // The following code should be used if you want this class to access // a single tree instead of a chain TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("Memory Directory"); if (!f) { f = new TFile("Memory Directory"); f->cd("Rint:/"); } tree = (TTree*)gDirectory->Get("TreeH0"); #else // SINGLE_TREE // The following code should be used if you want this class to access a chain // of trees. TChain * chain = new TChain("TreeH0",""); chain->Add("galice.root/TreeH0"); chain->Add("galice.root/TreeH1"); chain->Add("galice.root/TreeH2"); chain->Add("galice.root/TreeH3"); chain->Add("galice.root/TreeH4"); chain->Add("galice.root/TreeH5"); chain->Add("galice.root/TreeH6"); chain->Add("galice.root/TreeH7"); chain->Add("galice.root/TreeH8"); chain->Add("galice.root/TreeH9"); chain->Add("galice.root/TreeH10"); chain->Add("galice.root/TreeH11"); chain->Add("galice.root/TreeH12"); chain->Add("galice.root/TreeH13"); chain->Add("galice.root/TreeH14"); chain->Add("galice.root/TreeH15"); chain->Add("galice.root/TreeH16"); chain->Add("galice.root/TreeH17"); chain->Add("galice.root/TreeH18"); chain->Add("galice.root/TreeH19"); tree = chain; #endif // SINGLE_TREE } Init(tree); } TreeH0::~TreeH0() { if (!fChain) return; delete fChain->GetCurrentFile(); } Int_t TreeH0::GetEntry(Int_t entry) { // Read contents of entry. if (!fChain) return 0; return fChain->GetEntry(entry); } Int_t TreeH0::LoadTree(Int_t entry) { // Set the environment to read one entry if (!fChain) return -5; Int_t centry = fChain->LoadTree(entry); if (centry < 0) return centry; if (fChain->IsA() != TChain::Class()) return centry; TChain *chain = (TChain*)fChain; if (chain->GetTreeNumber() != fCurrent) { fCurrent = chain->GetTreeNumber(); Notify(); } return centry; } void TreeH0::Init(TTree *tree) { // Set branch addresses if (tree == 0) return; fChain = tree; fCurrent = -1; fChain->SetMakeClass(1); fChain->SetBranchAddress("TTRAC",&TTRAC_); fChain->SetBranchAddress("TTRAC.fUniqueID",TTRAC_fUniqueID); fChain->SetBranchAddress("TTRAC.fBits",TTRAC_fBits); fChain->SetBranchAddress("TTRAC.fTrack",TTRAC_fTrack); fChain->SetBranchAddress("TTRAC.fX",TTRAC_fX); fChain->SetBranchAddress("TTRAC.fY",TTRAC_fY); fChain->SetBranchAddress("TTRAC.fZ",TTRAC_fZ); fChain->SetBranchAddress("TTRAC.fVol0",TTRAC_fVol0); fChain->SetBranchAddress("TTRAC.fVol1",TTRAC_fVol1); fChain->SetBranchAddress("TTRAC.fVol2",TTRAC_fVol2); fChain->SetBranchAddress("TTRAC.fVol3",TTRAC_fVol3); fChain->SetBranchAddress("TTRAC.fVol4",TTRAC_fVol4); fChain->SetBranchAddress("TTRAC.fVol5",TTRAC_fVol5); fChain->SetBranchAddress("TTRAC.fVol6",TTRAC_fVol6); fChain->SetBranchAddress("TTRAC.fVol7",TTRAC_fVol7); fChain->SetBranchAddress("TTRAC.fVol8",TTRAC_fVol8); fChain->SetBranchAddress("TTRAC.fVol9",TTRAC_fVol9); fChain->SetBranchAddress("TTRAC.fId",TTRAC_fId); fChain->SetBranchAddress("TTRAC.fEvNumber",TTRAC_fEvNumber); fChain->SetBranchAddress("BRICK",&BRICK_); fChain->SetBranchAddress("BRICK.fUniqueID",BRICK_fUniqueID); fChain->SetBranchAddress("BRICK.fBits",BRICK_fBits); fChain->SetBranchAddress("BRICK.fTrack",BRICK_fTrack); fChain->SetBranchAddress("BRICK.fX",BRICK_fX); fChain->SetBranchAddress("BRICK.fY",BRICK_fY); fChain->SetBranchAddress("BRICK.fZ",BRICK_fZ); fChain->SetBranchAddress("BRICK.fVol0",BRICK_fVol0); fChain->SetBranchAddress("BRICK.fVol1",BRICK_fVol1); fChain->SetBranchAddress("BRICK.fVol2",BRICK_fVol2); fChain->SetBranchAddress("BRICK.fVol3",BRICK_fVol3); fChain->SetBranchAddress("BRICK.fVol4",BRICK_fVol4); fChain->SetBranchAddress("BRICK.fVol5",BRICK_fVol5); fChain->SetBranchAddress("BRICK.fVol6",BRICK_fVol6); fChain->SetBranchAddress("BRICK.fVol7",BRICK_fVol7); fChain->SetBranchAddress("BRICK.fVol8",BRICK_fVol8); fChain->SetBranchAddress("BRICK.fVol9",BRICK_fVol9); fChain->SetBranchAddress("BRICK.fId",BRICK_fId); fChain->SetBranchAddress("BRICK.fEvNumber",BRICK_fEvNumber); fChain->SetBranchAddress("DRIFT",&DRIFT_); fChain->SetBranchAddress("DRIFT.fUniqueID",DRIFT_fUniqueID); fChain->SetBranchAddress("DRIFT.fBits",DRIFT_fBits); fChain->SetBranchAddress("DRIFT.fTrack",DRIFT_fTrack); fChain->SetBranchAddress("DRIFT.fX",DRIFT_fX); fChain->SetBranchAddress("DRIFT.fY",DRIFT_fY); fChain->SetBranchAddress("DRIFT.fZ",DRIFT_fZ); fChain->SetBranchAddress("DRIFT.fVol0",DRIFT_fVol0); fChain->SetBranchAddress("DRIFT.fVol1",DRIFT_fVol1); fChain->SetBranchAddress("DRIFT.fVol2",DRIFT_fVol2); fChain->SetBranchAddress("DRIFT.fVol3",DRIFT_fVol3); fChain->SetBranchAddress("DRIFT.fVol4",DRIFT_fVol4); fChain->SetBranchAddress("DRIFT.fVol5",DRIFT_fVol5); fChain->SetBranchAddress("DRIFT.fVol6",DRIFT_fVol6); fChain->SetBranchAddress("DRIFT.fVol7",DRIFT_fVol7); fChain->SetBranchAddress("DRIFT.fVol8",DRIFT_fVol8); fChain->SetBranchAddress("DRIFT.fVol9",DRIFT_fVol9); fChain->SetBranchAddress("DRIFT.fId",DRIFT_fId); fChain->SetBranchAddress("DRIFT.fEvNumber",DRIFT_fEvNumber); Notify(); } Bool_t TreeH0::Notify() { // Called when loading a new file. // Get branch pointers. b_TTRAC = fChain->GetBranch("TTRAC"); b_TTRAC_fUniqueID = fChain->GetBranch("TTRAC.fUniqueID"); b_TTRAC_fBits = fChain->GetBranch("TTRAC.fBits"); b_TTRAC_fTrack = fChain->GetBranch("TTRAC.fTrack"); b_TTRAC_fX = fChain->GetBranch("TTRAC.fX"); b_TTRAC_fY = fChain->GetBranch("TTRAC.fY"); b_TTRAC_fZ = fChain->GetBranch("TTRAC.fZ"); b_TTRAC_fVol0 = fChain->GetBranch("TTRAC.fVol0"); b_TTRAC_fVol1 = fChain->GetBranch("TTRAC.fVol1"); b_TTRAC_fVol2 = fChain->GetBranch("TTRAC.fVol2"); b_TTRAC_fVol3 = fChain->GetBranch("TTRAC.fVol3"); b_TTRAC_fVol4 = fChain->GetBranch("TTRAC.fVol4"); b_TTRAC_fVol5 = fChain->GetBranch("TTRAC.fVol5"); b_TTRAC_fVol6 = fChain->GetBranch("TTRAC.fVol6"); b_TTRAC_fVol7 = fChain->GetBranch("TTRAC.fVol7"); b_TTRAC_fVol8 = fChain->GetBranch("TTRAC.fVol8"); b_TTRAC_fVol9 = fChain->GetBranch("TTRAC.fVol9"); b_TTRAC_fId = fChain->GetBranch("TTRAC.fId"); b_TTRAC_fEvNumber = fChain->GetBranch("TTRAC.fEvNumber"); b_BRICK = fChain->GetBranch("BRICK"); b_BRICK_fUniqueID = fChain->GetBranch("BRICK.fUniqueID"); b_BRICK_fBits = fChain->GetBranch("BRICK.fBits"); b_BRICK_fTrack = fChain->GetBranch("BRICK.fTrack"); b_BRICK_fX = fChain->GetBranch("BRICK.fX"); b_BRICK_fY = fChain->GetBranch("BRICK.fY"); b_BRICK_fZ = fChain->GetBranch("BRICK.fZ"); b_BRICK_fVol0 = fChain->GetBranch("BRICK.fVol0"); b_BRICK_fVol1 = fChain->GetBranch("BRICK.fVol1"); b_BRICK_fVol2 = fChain->GetBranch("BRICK.fVol2"); b_BRICK_fVol3 = fChain->GetBranch("BRICK.fVol3"); b_BRICK_fVol4 = fChain->GetBranch("BRICK.fVol4"); b_BRICK_fVol5 = fChain->GetBranch("BRICK.fVol5"); b_BRICK_fVol6 = fChain->GetBranch("BRICK.fVol6"); b_BRICK_fVol7 = fChain->GetBranch("BRICK.fVol7"); b_BRICK_fVol8 = fChain->GetBranch("BRICK.fVol8"); b_BRICK_fVol9 = fChain->GetBranch("BRICK.fVol9"); b_BRICK_fId = fChain->GetBranch("BRICK.fId"); b_BRICK_fEvNumber = fChain->GetBranch("BRICK.fEvNumber"); b_DRIFT = fChain->GetBranch("DRIFT"); b_DRIFT_fUniqueID = fChain->GetBranch("DRIFT.fUniqueID"); b_DRIFT_fBits = fChain->GetBranch("DRIFT.fBits"); b_DRIFT_fTrack = fChain->GetBranch("DRIFT.fTrack"); b_DRIFT_fX = fChain->GetBranch("DRIFT.fX"); b_DRIFT_fY = fChain->GetBranch("DRIFT.fY"); b_DRIFT_fZ = fChain->GetBranch("DRIFT.fZ"); b_DRIFT_fVol0 = fChain->GetBranch("DRIFT.fVol0"); b_DRIFT_fVol1 = fChain->GetBranch("DRIFT.fVol1"); b_DRIFT_fVol2 = fChain->GetBranch("DRIFT.fVol2"); b_DRIFT_fVol3 = fChain->GetBranch("DRIFT.fVol3"); b_DRIFT_fVol4 = fChain->GetBranch("DRIFT.fVol4"); b_DRIFT_fVol5 = fChain->GetBranch("DRIFT.fVol5"); b_DRIFT_fVol6 = fChain->GetBranch("DRIFT.fVol6"); b_DRIFT_fVol7 = fChain->GetBranch("DRIFT.fVol7"); b_DRIFT_fVol8 = fChain->GetBranch("DRIFT.fVol8"); b_DRIFT_fVol9 = fChain->GetBranch("DRIFT.fVol9"); b_DRIFT_fId = fChain->GetBranch("DRIFT.fId"); b_DRIFT_fEvNumber = fChain->GetBranch("DRIFT.fEvNumber"); return kTRUE; } void TreeH0::Show(Int_t entry) { // Print contents of entry. // If entry is not specified, print current entry if (!fChain) return; fChain->Show(entry); } Int_t TreeH0::Cut(Int_t entry) { // This function may be called from Loop. // returns 1 if entry is accepted. // returns -1 otherwise. return 1; } #endif // #ifdef TreeH0_cxx #define TreeH0_cxx #include "TreeH0.h" #include "TH2.h" #include "TStyle.h" #include "TCanvas.h" #include "TBranch.h" #include "TApplication.h" #include "TFrame.h" int main(int argc, char **argv){ TreeH0 hit; //TApplication theApp("App",&argc, argv); hit.Loop(7); //theApp.Run(); return 0; } void TreeH0::Loop(Int_t nn) { // In a ROOT session, you can do: // Root > .L TreeH0.C // Root > TreeH0 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 // // This is the loop skeleton // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(i); // read all branches //by b_branchname->GetEntry(i); //read only this branch if (fChain == 0) return; TCanvas *c1; c1 = new TCanvas("c1","Track Display",200,10,700,500); c1->SetFillColor(21); c1->GetFrame()->SetFillColor(21); c1->GetFrame()->SetBorderSize(6); c1->GetFrame()->SetBorderMode(-2); Int_t nentries = Int_t(fChain->GetEntries()); if(nentries>nn&&nn) nentries=nn; Int_t nbytes = 0, nb = 0; TH2F *coord = new TH2F("coord","x and y coordinates of hits",50,-400,400,50,-400,400); TH1F *track = new TH1F("track","angle against z-axis",20,0.,2.); track->SetFillColor(44); for (Int_t jentry=0; jentry<nentries;jentry++) { Int_t ientry = LoadTree(jentry); //in case of a TChain, ientry is the entry number in the current file nb = fChain->GetEntry(jentry); nbytes += nb; // if (Cut(ientry) < 0) continue; printf("jentry=%d, LoadTree gives %d, BRICK=%d\n",jentry,ientry,BRICK_); Int_t ftrack=0; Float_t xold=BRICK_fX[0],yold=BRICK_fY[0],zold=BRICK_fZ[0],angl; Int_t BRICKcc = BRICK_>kMaxBRICK ? kMaxBRICK : BRICK_ ; for (Int_t k=0; k<BRICKcc;k++){ coord->Fill(BRICK_fX[k],BRICK_fY[k]); if(ftrack==BRICK_fTrack[k]&&k==BRICK_-1){ if(k>0&&fabs(BRICK_fZ[k]-zold)!=0.){ angl=atan(sqrt(pow(BRICK_fX[k]-xold,2.)+pow(BRICK_fY[k]-yold,2.))/fabs(BRICK_fZ[k]-zold)); track->Fill(angl); } } if(ftrack!=BRICK_fTrack[k]){ if(k>1&&fabs(BRICK_fZ[k-1]-zold)!=0.){ angl=atan(sqrt(pow(BRICK_fX[k-1]-xold,2.)+pow(BRICK_fY[k-1]-yold,2.))/fabs(BRICK_fZ[k-1]-zold)); printf("The angle is %f\n",angl); track->Fill(angl); } ftrack=BRICK_fTrack[k]; xold=BRICK_fX[k];yold=BRICK_fY[k];zold=BRICK_fZ[k]; } printf(" Brick hit %d, fTrack=%d (%f|%f|%f)\n",k,BRICK_fTrack[k],BRICK_fX[k],BRICK_fY[k],BRICK_fZ[k]); // if(k==10) break; } } track->Draw(); c1->Update(); getchar(); coord->Draw("LEGO1"); c1->Update(); }
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:37 MET