// @(#)root/proof:$Name: $:$Id: TEventIter.cxx,v 1.3 2002/03/13 01:52:20 rdm Exp $
// Author: Maarten Ballintijn 07/01/02
/*************************************************************************
* Copyright (C) 1995-2001, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
//////////////////////////////////////////////////////////////////////////
// //
// TEventIter //
// //
//////////////////////////////////////////////////////////////////////////
#include "TEventIter.h"
#include "TDSet.h"
#include "TKey.h"
#include "TFile.h"
#include "TCollection.h"
#include "TError.h"
#include "TTree.h"
#include "TSelector.h"
//------------------------------------------------------------------------
ClassImp(TEventIter)
//______________________________________________________________________________
TEventIter::TEventIter()
{
fDSet = 0;
fDir = 0;
fSel = 0;
fNum = 0;
}
//______________________________________________________________________________
TEventIter::TEventIter(TDSet *dset, TDirectory *dir, TSelector *sel)
: fDSet(dset), fDir(dir), fSel(sel)
{
fNum = 0;
}
//______________________________________________________________________________
TEventIter::~TEventIter()
{
}
//______________________________________________________________________________
TEventIter *TEventIter::Create(TDSet *dset, TDirectory *dir, TSelector *sel)
{
if ( dset->IsTree() ) {
return new TEventIterTree(dset, dir, sel);
} else {
return new TEventIterObj(dset, dir, sel);
}
}
//------------------------------------------------------------------------
ClassImp(TEventIterObj)
//______________________________________________________________________________
TEventIterObj::TEventIterObj()
{
// Default ctor.
fKeys = 0;
fNextKey = 0;
fObj = 0;
}
//______________________________________________________________________________
TEventIterObj::TEventIterObj(TDSet *dset, TDirectory *dir, TSelector *sel)
: TEventIter(dset,dir,sel)
{
fClassName = dset->GetType();
fKeys = 0;
fNextKey = 0;
fObj = 0;
}
//______________________________________________________________________________
TEventIterObj::~TEventIterObj()
{
// delete fKeys ?
delete fNextKey;
delete fObj;
}
//______________________________________________________________________________
Bool_t TEventIterObj::GetNextEvent()
{
delete fObj; fObj = 0;
if ( fNum > 0 ) {
--fNum;
++fCur;
TKey *key = (TKey*) fNextKey->Next();
fObj = key->ReadObj();
fSel->SetObject( fObj );
return kTRUE;
}
return kFALSE;
}
//______________________________________________________________________________
Bool_t TEventIterObj::InitRange(Double_t first, Double_t num)
{
// new file / directory?
if ( fKeys == 0 ) {
fKeys = fDir->GetListOfKeys();
fNextKey = new TIter(fKeys);
}
fFirst = first;
fNum = num;
fCur = first-1;
if ( fFirst >= fKeys->GetSize() ) {
Error("TEventIterObj::InitRange","First larger the number of keys");
return kFALSE;
}
if ( fFirst + fNum > fKeys->GetSize() ) {
Warning("TEventIterObj::InitRange","Num larger the number of keys");
fNum = fKeys->GetSize() - fFirst;
}
// Position the iterator FIXME: should be more efficient?
fNextKey->Reset();
for( fCur = 0; fCur < fFirst ; fCur++, fNextKey->Next() );
return kTRUE;
}
//------------------------------------------------------------------------
ClassImp(TEventIterTree)
//______________________________________________________________________________
TEventIterTree::TEventIterTree()
{
// Default ctor.
fTree = 0;
fNum = 999999999; // TODO: proper max event
fFirst = 0;
fCur = -1;
}
//______________________________________________________________________________
TEventIterTree::TEventIterTree(TDSet *dset, TDirectory *dir, TSelector *sel)
: TEventIter(dset,dir,sel)
{
fTreeName = dset->GetObjName();
fTree = 0;
fNum = 999999999; // TODO: proper max event
fFirst = 0;
fCur = -1;
}
//______________________________________________________________________________
TEventIterTree::~TEventIterTree()
{
// delete fTree ?
}
//______________________________________________________________________________
Bool_t TEventIterTree::GetNextEvent()
{
if ( fNum > 0 ) {
--fNum;
++fCur;
return kTRUE;
}
return kFALSE;
}
//______________________________________________________________________________
Bool_t TEventIterTree::InitRange(Double_t first, Double_t num)
{
// New Tree?
if ( fTree == 0 ) {
TKey *key;
if ( (key = fDir->GetKey(fTreeName)) == 0 ) {
Error("InitRange","Cannot find tree "%s"",
fTreeName.Data());
return kFALSE;
}
Info("TEventIterTree::InitRange","Reading: %s", fTreeName.Data() );
fTree = (TTree *) key->ReadObj(); // TODO: check result and type?
fSel->Notify( /* fTree */ ); // TODO: change API
}
// TODO: add checks for first and num vs. the tree
fFirst = first;
fNum = num;
fCur = first-1;
return kTRUE;
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.