Dear Thomas, Did you ever sort out the TChain problem : >Hi rooters, > >I have two identical files (same trees, branches, etc. except the number >of stored events and the data which is stored). I use a chain to read >both files. >This works fine for the first file. But the TChain object doesn't read >the last file. It returns the last event of the first file n-times >(where n is the number of events in the second file) >What can be wrong? > >Thanks, >Thomas. I am currently having a similar problem with the following file, Version 3.02/07, and Solaris 5.9. Is this related to LoadTree() ? or am I not defining addresses correctly ? Thanks, Karl ********************************************************************** #include <stdlib.h> #include <stdio.h> #include <string.h> int ReadTree(); #ifndef __CINT__ #include "CintIncludes.h" #include "ProtoExoScan.h" #include "ProtoExoScan.cxx" //______________________________________________________________________ int main() { int n = ReadTree(); return n; } #endif #define TRIGGER 1 #include "hdrs/Define.h" #define DATAFILE "/home/crash6/gamma/karl/ScanB.root" static int bits[4] = {1,2,4,8}; //______________________________________________________________________ //______________________________________________________________________ int ReadTree() { #ifdef __CINT__ //Load class if needed if (!TClassTable::GetDict("ProtoExoScan")) { gSystem.Load("libProtoExoScan.so"); } #endif //Compressed Scanning Data event class //ProtoExoScan::Class()->IgnoreTObjectStreamer(); //Remove fUniqueId, fBits TChain *chain = new TChain("Crystal B"); //Chain the tree "Crystal B" chain->Add("/home/crash6/gamma/karl/ScanB.root"); if (chain == 0) return 0; Int_t nevents1 = Int_t(chain->GetEntries()); printf("\n %d events",nevents1); chain->Add("/home/crash6/gamma/karl/ScanB2.root"); if (chain == 0) return 0; Int_t nevents = Int_t(chain->GetEntries()); printf("\n %d events",nevents); chain.Draw("fX"); //return 0; //=============================================== // Specify address where to read the event object // The event was stored in a branch called "Prototype" //=============================================== //object must be created before setting the branch address ProtoExoScan *Data = new ProtoExoScan(); //Super branch : CompData TBranch *branch = chain->GetBranch("ProtoType"); branch->SetAddress(&Data); //Trigger Energy/Time branch TBranch *bTrigE = chain->GetBranch("fTrigger_E"); //Scan Position branches TBranch *bX = chain->GetBranch("fX"); TBranch *bY = chain->GetBranch("fY"); //Output Root File TFile *hfile = new TFile("tempspec.root","RECREATE","Scanning Crystal B"); Int_t comp = 3; // by default all files compressed hfile->SetCompressionLevel(comp); //Data Rates TStopwatch timer; timer.Start(); double told = timer.RealTime(); double start = timer.RealTime(); timer.Continue(); double tnew = 0; int printev = 1000; //Data Variables unsigned char pulse[4][250]; unsigned char **p_pulse; int x, y, Gamma, Sid; int iGamma[4] = {121,344,964,1408}; int nCrystals, nSegments; int segE[4], segT[4]; int num; int TrigE, TrigT; Int_t seg, i, j, n; Int_t ngam = 4; Int_t nseg = 4; Int_t jentry, ientry; Int_t nbytes = 0; Int_t nb = 0; #include "hdrs/HistDefs.h" //Loop over all chained events..... for (jentry=0; jentry<nevents;jentry++) { ientry = chain->LoadTree(jentry); ////////////////////////////////////////////////////// //Examine ALL Data nb = chain->GetEntry(jentry); nbytes += nb; Data->GetData(&x, &y, &TrigE, &TrigT, &segE[0], &segT[0], &pulse[0][0]); //Read just the Trigger Energy //nb = bTrigE->GetEntry(jentry); //assign trigger energy //TrigE = Data->GetTrigger_E(); //hTrigger_E->Fill(TrigE); //Read just the Position //nb = bX->GetEntry(jentry); nbytes += nb; //nb = bY->GetEntry(jentry); nbytes += nb; //assign position... //Data->GetPosition(&x, &y); hPosition->Fill(x,y); // Timing //if ( (jentry%printev == 0) && (jentry != 0) ) { if ( (jentry%15000 == 0) && (jentry != 0) ) { tnew = timer.RealTime(); printf("Entry:%d, rtime=%.2f s -> %.2f Events/s [%.2f]\n", jentry,tnew-told,(printev)/(tnew-told),0.001*nbytes/(tnew-told)); told=tnew; nbytes = 0; timer.Continue(); } } hfile->Write(); hfile->Close(); //if (f) f->Close(); return jentry; } ========================================================================== CEA Saclay, DAPNIA/SPhN Phone : (33) 01 69 08 7553 Bat 703 - l'Orme des Merisiers Fax : (33) 01 69 08 7584 F-91191 Gif-sur-Yvette E-mail : khauschild@cea.fr France karl_hauschild@yahoo.co.uk WWW: http://www-dapnia.cea.fr/Sphn
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:40 MET