46 #if defined(R__MACOSX)
55 TEventIter::TEventIter()
74 ResetBit(TEventIter::kData);
76 if ((fPackets =
new TList)) {
77 TString n(
"ProcessedPackets_");
78 if (gProofServ) n += gProofServ->GetOrdinal();
80 Info(
"TEventIter",
"fPackets list '%s' created", n.Data());
82 Warning(
"TEventIter",
"fPackets list could not be created");
89 TEventIter::TEventIter(TDSet *dset, TSelector *sel, Long64_t first, Long64_t num)
90 : fDSet(dset), fSel(sel)
107 ResetBit(TEventIter::kData);
109 if ((fPackets =
new TList)) {
110 TString n(
"ProcessedPackets_");
111 if (gProofServ) n += gProofServ->GetOrdinal();
112 fPackets->SetName(n);
113 Info(
"TEventIter",
"fPackets list '%s' created", n.Data());
115 Warning(
"TEventIter",
"fPackets list could not be created");
122 TEventIter::~TEventIter()
125 fPackets->SetOwner(kTRUE);
126 SafeDelete(fPackets);
134 void TEventIter::InvalidatePacket()
136 if (fElem) fElem->SetBit(TDSetElement::kCorrupted);
142 void TEventIter::StopProcess(Bool_t )
150 TEventIter *TEventIter::Create(TDSet *dset, TSelector *sel, Long64_t first, Long64_t num)
152 if (dset->TestBit(TDSet::kEmpty)) {
153 return new TEventIterUnit(dset, sel, num);
154 }
else if (dset->IsTree()) {
155 return new TEventIterTree(dset, sel, first, num);
157 return new TEventIterObj(dset, sel, first, num);
164 Int_t TEventIter::LoadDir()
169 if ( fFile == 0 || fFilename != fElem->GetFileName() ) {
171 delete fFile; fFile = 0;
173 fFilename = fElem->GetFileName();
175 TDirectory *dirsave = gDirectory;
178 if (gPerfStats) start = TTimeStamp();
181 TFile::EFileType typ = TFile::kDefault;
182 TString fname = gEnv->GetValue(
"Path.Localroot",
"");
184 typ = TFile::GetType(fFilename,
"", &fname);
185 if (typ != TFile::kLocal)
187 fFile = TFile::Open(fname);
190 gPerfStats->FileOpenEvent(fFile, fFilename, start);
194 if (dirsave) dirsave->cd();
196 if (!fFile || fFile->IsZombie() ) {
198 Error(
"Process",
"Cannot open file: %s (%s)",
199 fFilename.Data(), strerror(fFile->GetErrno()) );
201 Error(
"Process",
"Cannot open file: %s (errno unavailable)",
206 PDB(kLoop,2) Info("LoadDir","Opening file: %s", fFilename.Data() );
211 if ( fDir == 0 || fPath != fElem->GetDirectory() ) {
212 TDirectory *dirsave = gDirectory;
214 fPath = fElem->GetDirectory();
215 if ( !fFile->cd(fPath) ) {
216 Error(
"Process",
"Cannot cd to: %s",
220 PDB(kLoop,2) Info("Process","Cd to: %s", fPath.Data() );
222 if (dirsave) dirsave->cd();
230 Long64_t TEventIter::GetEntryNumber(Long64_t next)
234 Long64_t entry = next;
236 if (TestBit(TEventIter::kData)) {
238 entry = fEntryList->GetEntry(next);
239 }
else if (fEventList) {
240 entry = fEventList->GetEntry(next);
244 PreProcessEvent(entry);
252 ClassImp(TEventIterUnit);
257 TEventIterUnit::TEventIterUnit()
271 TEventIterUnit::TEventIterUnit(TDSet* dset, TSelector *sel, Long64_t num)
285 Int_t TEventIterUnit::GetNextPacket(Long64_t &fst, Long64_t &num)
288 Long64_t totBytesWritten = TFile::GetFileBytesWritten();
289 Long64_t bytesWritten = totBytesWritten - fOldBytesRead;
290 PDB(kLoop, 2) Info("GetNextPacket", "bytes written: %lld", bytesWritten);
291 gPerfStats->SetBytesRead(bytesWritten);
292 fOldBytesRead = totBytesWritten;
295 if (fDSet->TestBit(TDSet::kIsLocal)) {
298 fPackets->Add(fElem);
300 Info("GetNextEvent", "packet added to list (sz: %d)", fPackets->GetSize());
307 fElem =
new TDSetElement(
"",
"",
"", 0, fNum);
308 fElem->SetBit(TDSetElement::kEmpty);
311 if (fPackets && fElem) {
312 fPackets->Add(fElem);
314 Info("GetNextEvent", "packet added to list (sz: %d)", fPackets->GetSize());
319 if (!(fElem = fDSet->Next()))
322 fElem->SetBit(TDSetElement::kNewPacket);
324 if (!fElem->TestBit(TDSetElement::kEmpty)) {
325 Error(
"GetNextPacket",
"data element must be set to kEmtpy");
330 num = fElem->GetNum();
331 if (num == 0)
return -1;
332 fst = fElem->GetFirst();
341 Long64_t TEventIterUnit::GetNextEvent()
343 if (fStop || fNum == 0)
346 if (fElem) fElem->ResetBit(TDSetElement::kNewPacket);
348 while (fElem == 0 || fCurrent == 0) {
351 Long64_t totBytesWritten = TFile::GetFileBytesWritten();
352 Long64_t bytesWritten = totBytesWritten - fOldBytesRead;
353 PDB(kLoop, 2) Info("GetNextEvent", "bytes written: %lld", bytesWritten);
354 gPerfStats->SetBytesRead(bytesWritten);
355 fOldBytesRead = totBytesWritten;
358 if (fDSet->TestBit(TDSet::kIsLocal)) {
361 fPackets->Add(fElem);
363 Info("GetNextEvent", "packet added to list (sz: %d)", fPackets->GetSize());
370 fElem =
new TDSetElement(
"",
"",
"", 0, fNum);
371 fElem->SetBit(TDSetElement::kEmpty);
374 if (fPackets && fElem) {
375 fPackets->Add(fElem);
377 Info("GetNextEvent", "packet added to list (sz: %d)", fPackets->GetSize());
382 if (!(fElem = fDSet->Next()))
385 fElem->SetBit(TDSetElement::kNewPacket);
387 if (!fElem->TestBit(TDSetElement::kEmpty)) {
388 Error(
"GetNextEvent",
"data element must be set to kEmtpy");
392 fNum = fElem->GetNum();
393 if (!(fCurrent = fNum)) {
397 fFirst = fElem->GetFirst();
399 Long64_t
event = fNum - fCurrent + fFirst ;
407 ClassImp(TEventIterObj);
412 TEventIterObj::TEventIterObj()
422 TEventIterObj::TEventIterObj(TDSet *dset, TSelector *sel, Long64_t first, Long64_t num)
423 : TEventIter(dset,sel,first,num)
425 fClassName = dset->GetType();
435 TEventIterObj::~TEventIterObj()
445 Int_t TEventIterObj::GetNextPacket(Long64_t &first, Long64_t &num)
449 if (fStop || fNum == 0)
return -1;
451 while (fElem == 0 || fCur < fFirst-1) {
453 if (gPerfStats && fFile) {
454 Long64_t bytesRead = fFile->GetBytesRead();
455 gPerfStats->SetBytesRead(bytesRead - fOldBytesRead);
456 fOldBytesRead = bytesRead;
462 fPackets->Add(fElem);
468 fElem = fDSet->Next(fKeys->GetSize());
469 if (fElem && fElem->GetEntryList()) {
470 Error(
"GetNextPacket",
"entry- or event-list not available");
478 fElem->SetBit(TDSetElement::kNewPacket);
488 }
else if ( r == 1 ) {
491 fKeys = fDir->GetListOfKeys();
492 fNextKey =
new TIter(fKeys);
496 fElemFirst = fElem->GetFirst();
497 fElemNum = fElem->GetNum();
498 if (fElem->GetEntryList()) {
499 if (!(fEntryList = dynamic_cast<TEntryList *>(fElem->GetEntryList())))
500 fEventList = dynamic_cast<TEventList *>(fElem->GetEntryList());
504 fElemNum = fEntryList->GetEntriesToProcess();
506 fElemNum = fEventList->GetN();
508 Long64_t tnum = fKeys->GetSize();
510 if ( fElemFirst > tnum ) {
511 Error(
"GetNextPacket",
"First (%lld) higher then number of keys (%lld) in %s",
512 fElemFirst, tnum, fElem->GetName());
517 if ( fElemNum == -1 ) {
518 fElemNum = tnum - fElemFirst;
519 }
else if ( fElemFirst+fElemNum > tnum ) {
520 Error(
"GetNextPacket",
"Num (%lld) + First (%lld) larger then number of keys (%lld) in %s",
521 fElemNum, fElemFirst, tnum, fElem->GetDirectory());
522 fElemNum = tnum - fElemFirst;
526 if ( fCur + fElemNum < fFirst ) {
533 for(fElemCur = -1; fElemCur < fElemFirst-1 ; fElemCur++, fNextKey->Next()) { }
545 void TEventIterObj::PreProcessEvent(Long64_t)
549 TKey *key = (TKey*) fNextKey->Next();
550 TDirectory *dirsave = gDirectory;
552 fObj = key->ReadObj();
553 if (dirsave) dirsave->cd();
554 fSel->SetObject(fObj);
560 Long64_t TEventIterObj::GetNextEvent()
562 if (fStop || fNum == 0)
return -1;
564 if (fElem) fElem->ResetBit(TDSetElement::kNewPacket);
566 while ( fElem == 0 || fElemNum == 0 || fCur < fFirst-1 ) {
568 if (gPerfStats && fFile) {
569 Long64_t bytesRead = fFile->GetBytesRead();
570 gPerfStats->SetBytesRead(bytesRead - fOldBytesRead);
571 fOldBytesRead = bytesRead;
577 fPackets->Add(fElem);
583 fElem = fDSet->Next(fKeys->GetSize());
584 if (fElem && fElem->GetEntryList()) {
585 Error(
"GetNextEvent",
"Entry- or event-list not available");
593 fElem->SetBit(TDSetElement::kNewPacket);
603 }
else if ( r == 1 ) {
606 fKeys = fDir->GetListOfKeys();
607 fNextKey =
new TIter(fKeys);
611 fElemFirst = fElem->GetFirst();
612 fElemNum = fElem->GetNum();
613 if (fElem->GetEntryList()) {
614 if (!(fEntryList = dynamic_cast<TEntryList *>(fElem->GetEntryList())))
615 fEventList = dynamic_cast<TEventList *>(fElem->GetEntryList());
619 fElemNum = fEntryList->GetEntriesToProcess();
621 fElemNum = fEventList->GetN();
623 Long64_t num = fKeys->GetSize();
625 if ( fElemFirst > num ) {
626 Error(
"GetNextEvent",
"First (%lld) higher then number of keys (%lld) in %s",
627 fElemFirst, num, fElem->GetName());
632 if ( fElemNum == -1 ) {
633 fElemNum = num - fElemFirst;
634 }
else if ( fElemFirst+fElemNum > num ) {
635 Error(
"GetNextEvent",
"Num (%lld) + First (%lld) larger then number of keys (%lld) in %s",
636 fElemNum, fElemFirst, num, fElem->GetDirectory());
637 fElemNum = num - fElemFirst;
641 if ( fCur + fElemNum < fFirst ) {
648 for(fElemCur = -1; fElemCur < fElemFirst-1 ; fElemCur++, fNextKey->Next()) { }
655 PreProcessEvent(fElemCur);
665 TEventIterTree::TFileTree::TFileTree(
const char *name, TFile *f, Bool_t islocal)
666 : TNamed(name,
""), fUsed(kFALSE), fIsLocal(islocal), fFile(f)
674 TEventIterTree::TFileTree::~TFileTree()
677 TTree *tree = (TTree *)fTrees->First();
679 fFile->SetCacheRead(0, tree);
680 tree = (TTree *)fTrees->After(tree);
686 ClassImp(TEventIterTree);
691 TEventIterTree::TEventIterTree()
697 fTreeCacheIsLearning = kTRUE;
699 fUseParallelUnzip = 0;
700 fDontCacheFiles = kFALSE;
701 SetBit(TEventIter::kData);
707 TEventIterTree::TEventIterTree(TDSet *dset, TSelector *sel, Long64_t first, Long64_t num)
708 : TEventIter(dset,sel,first,num)
710 fTreeName = dset->GetObjName();
713 fTreeCacheIsLearning = kTRUE;
714 fFileTrees =
new TList;
715 fFileTrees->SetOwner();
716 fUseTreeCache = gEnv->GetValue(
"ProofPlayer.UseTreeCache", 1);
717 fCacheSize = gEnv->GetValue(
"ProofPlayer.CacheSize", -1);
718 fUseParallelUnzip = gEnv->GetValue(
"ProofPlayer.UseParallelUnzip", 0);
719 if (fUseParallelUnzip) {
720 TTreeCacheUnzip::SetParallelUnzip(TTreeCacheUnzip::kEnable);
722 TTreeCacheUnzip::SetParallelUnzip(TTreeCacheUnzip::kDisable);
724 fDontCacheFiles = gEnv->GetValue(
"ProofPlayer.DontCacheFiles", 0);
725 SetBit(TEventIter::kData);
731 TEventIterTree::~TEventIterTree()
734 SafeDelete(fTreeCache);
736 SafeDelete(fFileTrees);
743 Long64_t TEventIterTree::GetCacheSize()
745 if (fUseTreeCache)
return fCacheSize;
752 Int_t TEventIterTree::GetLearnEntries()
754 return TTreeCache::GetLearnEntries();
761 TTree* TEventIterTree::GetTrees(TDSetElement *elem)
764 TIter nxft(fFileTrees);
766 while ((ft = (TFileTree *)nxft()))
769 Bool_t localfile = kFALSE;
770 TTree* main = Load(elem, localfile);
772 if (main && main != fTree) {
775 TFile *curfile = main->GetCurrentFile();
778 main->SetCacheSize(fCacheSize);
779 fTreeCache = (TTreeCache *)curfile->GetCacheRead(main);
780 if (fCacheSize < 0) fCacheSize = main->GetCacheSize();
782 fTreeCache->ResetCache();
783 curfile->SetCacheRead(fTreeCache, main);
784 fTreeCache->UpdateBranches(main);
787 fTreeCacheIsLearning = fTreeCache->IsLearning();
788 if (fTreeCacheIsLearning)
789 Info(
"GetTrees",
"the tree cache is in learning phase");
792 Warning(
"GetTrees",
"default tree does nto have a file attached: corruption? Tree cache untouched");
796 main->SetCacheSize(0);
801 TList *friends = elem->GetListOfFriends();
804 TDSetElement *dse = 0;
805 while ((dse = (TDSetElement *) nxf())) {
807 TUrl uf(dse->GetName());
808 TString uo(uf.GetOptions()), alias;
810 if ((from = uo.Index(
"friend_alias=")) != kNPOS) {
811 from += strlen(
"friend_alias=");
812 if (!uo.Tokenize(alias, from,
"|"))
813 Warning(
"GetTrees",
"empty 'friend_alias' found for tree friend");
815 uo.ReplaceAll(TString::Format(
"friend_alias=%s|", alias.Data()),
"");
817 dse->SetName(uf.GetUrl());
819 TTree *friendTree = Load(dse, loc, dse->GetObjName());
820 if (friendTree && main) {
822 Bool_t addfriend = kTRUE;
823 TList *frnds = main->GetListOfFriends();
826 TFriendElement *fe = 0;
827 while ((fe = (TFriendElement *) xnxf())) {
828 if (fe->GetTree() == friendTree) {
836 main->AddFriend(friendTree);
838 main->AddFriend(friendTree, alias);
848 while ((ft = (TFileTree *)nxft())) {
850 fFileTrees->Remove(ft);
862 TTree* TEventIterTree::Load(TDSetElement *e, Bool_t &localfile,
const char *objname)
865 Error(
"Load",
"undefined element");
869 const char *fn = e->GetFileName();
870 const char *dn = e->GetDirectory();
872 if (objname && strlen(objname) > 0) {
875 tn = (fDSet->GetObjName() && strlen(fDSet->GetObjName()) > 0)
876 ? fDSet->GetObjName() : e->GetObjName();
877 if (!tn || (tn && strlen(tn) <= 0)) tn =
"*";
880 Info("Load","loading: fn:'%s' dn:'%s' tn:'%s'", fn, dn, tn);
889 while (names.Tokenize(name,from,"|")) {
890 TString key(TUrl(name).GetFileAndOptions());
891 if ((ft = (TFileTree *) fFileTrees->FindObject(key.Data()))) {
899 TFile::EFileType typ = TFile::kDefault;
900 TString fname = gEnv->GetValue(
"Path.Localroot",
"");
902 typ = TFile::GetType(fn,
"", &fname);
903 if (typ != TFile::kLocal) {
910 f = TFile::Open(fname);
912 Error(
"Load",
"file '%s' ('%s') could not be open", fn, fname.Data());
916 #if defined(R__MACOSX)
918 if (fDontCacheFiles && localfile) {
919 fcntl(f->GetFd(), F_NOCACHE, 1);
924 ft =
new TFileTree(TUrl(f->GetName()).GetFileAndOptions(), f, localfile);
928 localfile = ft->fIsLocal;
930 Info("Load","file '%s' already open (local:%d)", fn, localfile);
934 if (ft && ft->fTrees->GetSize() > 0) {
936 if (!strcmp(tn,
"*"))
937 t = (TTree *) ft->fTrees->First();
939 t = (TTree *) ft->fTrees->FindObject(tn);
948 if (dn && !(dd = f->GetDirectory(dn))) {
949 Error(
"Load",
"Cannot get to: %s", dn);
953 Info("Load","got directory: %s", dn);
959 if (sreg.Length() <= 0 || sreg == "" || sreg.Contains("*")) {
960 if (sreg.Contains(
"*"))
961 sreg.ReplaceAll(
"*",
".*");
965 if (dd->GetListOfKeys()) {
966 TIter nxk(dd->GetListOfKeys());
968 while ((k = (TKey *) nxk())) {
969 if (!strcmp(k->GetClassName(),
"TTree")) {
970 TString kn(k->GetName());
971 if (kn.Index(re) != kNPOS) {
981 TKey *key = dd->GetKey(gSystem->BaseName(on));
983 Error(
"Load",
"Cannot find tree \"%s\" in %s", tn, fn);
987 PDB(kLoop,2) Info("Load", "Reading: %s", tn);
989 TTree *tree = dynamic_cast<TTree*> (key->ReadObj());
993 Error(
"Load",
"Cannot <dynamic_cast> obj to tree \"%s\"", tn);
998 ft->fTrees->Add(tree);
1001 Info("Load","TFileTree for '%s' flagged as 'in-use' ...", ft->GetName());
1010 Int_t TEventIterTree::GetNextPacket(Long64_t &first, Long64_t &num)
1012 if (first > -1) fEntryListPos = first;
1014 if (fStop || fNum == 0)
return -1;
1016 Bool_t attach = kFALSE;
1020 Bool_t corrupted = kFALSE;
1023 corrupted = (fElem->TestBit(TDSetElement::kCorrupted)) ? kTRUE : kFALSE;
1024 rest = fElem->GetNum();
1025 if (fElemCur >= 0) rest -= (fElemCur + 1 - fElemFirst);
1030 while (fElem == 0 || fElemNum == 0 || fCur < fFirst-1) {
1032 if (gPerfStats && fTree) {
1033 Long64_t totBytesRead = fTree->GetCurrentFile()->GetBytesRead();
1034 Long64_t bytesRead = totBytesRead - fOldBytesRead;
1035 gPerfStats->SetBytesRead(bytesRead);
1036 fOldBytesRead = totBytesRead;
1042 fPackets->Add(fElem);
1052 fElem = fDSet->Next(rest);
1054 fElem = fDSet->Next(fTree->GetEntries());
1056 fElem = fDSet->Next();
1065 fElem->SetBit(TDSetElement::kNewPacket);
1066 fElem->ResetBit(TDSetElement::kCorrupted);
1068 TTree *newTree = GetTrees(fElem);
1070 if (newTree != fTree) {
1074 fOldBytesRead = (fTree->GetCurrentFile()) ? fTree->GetCurrentFile()->GetBytesRead() : 0;
1078 fTreeCache->SetEntryRange(fElem->GetFirst(),
1079 fElem->GetFirst() + fElem->GetNum() - 1);
1089 fElemFirst = fElem->GetFirst();
1090 fElemNum = fElem->GetNum();
1093 if (fElem->GetEntryList()) {
1094 if (!(fEntryList = dynamic_cast<TEntryList *>(fElem->GetEntryList())))
1095 fEventList = dynamic_cast<TEventList *>(fElem->GetEntryList());
1097 fEntryListPos = fElemFirst;
1100 fElemNum = fEntryList->GetEntriesToProcess();
1101 else if (fEventList)
1102 fElemNum = fEventList->GetN();
1104 Long64_t tnum = (Long64_t) fTree->GetEntries();
1106 if (!fEntryList && !fEventList) {
1107 if ( fElemFirst > tnum ) {
1108 Error(
"GetNextPacket",
"first (%lld) higher then number of entries (%lld) in %s",
1109 fElemFirst, tnum, fElem->GetObjName());
1113 if ( fElemNum == -1 ) {
1114 fElemNum = tnum - fElemFirst;
1115 }
else if ( fElemFirst+fElemNum > tnum ) {
1116 Error(
"GetNextPacket",
"num (%lld) + first (%lld) larger then number of entries (%lld) in %s",
1117 fElemNum, fElemFirst, tnum, fElem->GetName());
1118 fElemNum = tnum - fElemFirst;
1122 if ( fCur + fElemNum < fFirst ) {
1127 fElemCur = fElemFirst-1;
1132 PDB(kLoop,1) Info("GetNextPacket", "call Init(%p) and Notify()",fTree);
1135 TIter next(fSel->GetOutputList());
1136 TEntryList *elist=0;
1137 while ((elist=(TEntryList*)next())){
1138 if (elist->InheritsFrom(TEntryList::Class()))
1139 elist->SetTree(fTree->GetName(), fElem->GetFileName());
1141 if (fSel->GetAbort() == TSelector::kAbortProcess) {
1151 first = fEntryListPos;
1152 }
else if (fEventList){
1153 first = fEventListPos;
1166 void TEventIterTree::PreProcessEvent(Long64_t entry)
1168 if (!(fEntryList || fEventList)) {
1174 if (fTreeCache && fTreeCacheIsLearning) {
1175 if (!(fTreeCache->IsLearning())) {
1176 fTreeCacheIsLearning = kFALSE;
1177 if (gProofServ) gProofServ->RestartComputeTime();
1182 if (fTree->LoadTree(entry) < 0) {
1183 Warning(
"PreEventProcess",
"problems setting entry in TTree");
1190 Long64_t TEventIterTree::GetNextEvent()
1192 if (fStop || fNum == 0)
return -1;
1194 Bool_t attach = kFALSE;
1198 Bool_t corrupted = (fElem && fElem->TestBit(TDSetElement::kCorrupted)) ? kTRUE : kFALSE;
1200 if (fElem) fElem->ResetBit(TDSetElement::kNewPacket);
1202 while ( fElem == 0 || fElemNum == 0 || fCur < fFirst-1 || corrupted) {
1204 if (gPerfStats && fTree) {
1205 Long64_t totBytesRead = fTree->GetCurrentFile()->GetBytesRead();
1206 Long64_t bytesRead = totBytesRead - fOldBytesRead;
1207 gPerfStats->SetBytesRead(bytesRead);
1208 fOldBytesRead = totBytesRead;
1213 rest = fElem->GetNum();
1214 if (fElemCur >= 0) rest -= (fElemCur + 1 - fElemFirst);
1217 fPackets->Add(fElem);
1228 fElem = fDSet->Next(rest);
1230 fElem = fDSet->Next(fTree->GetEntries());
1232 fElem = fDSet->Next();
1241 fElem->SetBit(TDSetElement::kNewPacket);
1242 fElem->ResetBit(TDSetElement::kCorrupted);
1244 TTree *newTree = GetTrees(fElem);
1246 if (newTree != fTree) {
1250 fOldBytesRead = (fTree->GetCurrentFile()) ? fTree->GetCurrentFile()->GetBytesRead() : 0;
1254 fTreeCache->SetEntryRange(fElem->GetFirst(),
1255 fElem->GetFirst() + fElem->GetNum() - 1);
1265 fElemFirst = fElem->GetFirst();
1266 fElemNum = fElem->GetNum();
1267 fEntryList =
dynamic_cast<TEntryList *
>(fElem->GetEntryList());
1268 fEventList = (fEntryList) ? (TEventList *)0
1269 :
dynamic_cast<TEventList *
>(fElem->GetEntryList());
1270 fEntryListPos = fElemFirst;
1273 fElemNum = fEntryList->GetEntriesToProcess();
1274 else if (fEventList)
1275 fElemNum = fEventList->GetN();
1277 Long64_t num = (Long64_t) fTree->GetEntries();
1279 if (!fEntryList && !fEventList) {
1280 if ( fElemFirst > num ) {
1281 Error(
"GetNextEvent",
"first (%lld) higher then number of entries (%lld) in %s",
1282 fElemFirst, num, fElem->GetObjName());
1286 if ( fElemNum == -1 ) {
1287 fElemNum = num - fElemFirst;
1288 }
else if ( fElemFirst+fElemNum > num ) {
1289 Error(
"GetNextEvent",
"num (%lld) + first (%lld) larger then number of entries (%lld) in %s",
1290 fElemNum, fElemFirst, num, fElem->GetName());
1291 fElemNum = num - fElemFirst;
1295 if ( fCur + fElemNum < fFirst ) {
1300 fElemCur = fElemFirst-1;
1305 PDB(kLoop,1) Info("GetNextEvent", "call Init(%p) and Notify()",fTree);
1308 TIter next(fSel->GetOutputList());
1309 TEntryList *elist=0;
1310 while ((elist=(TEntryList*)next())){
1311 if (elist->InheritsFrom(TEntryList::Class()))
1312 elist->SetTree(fTree->GetName(), fElem->GetFileName());
1314 if (fSel->GetAbort() == TSelector::kAbortProcess) {
1324 rv = fEntryList->GetEntry(fEntryListPos);
1326 }
else if (fEventList) {
1328 rv = fEventList->GetEntry(fEventListPos);
1337 PreProcessEvent(rv);