-#include "TObjArray.h"
+//
+// marian.ivanov@cern.ch
+//
+// ------------------------------------------------------------------------------------------------
+// TTreeStream
+// Standard stream (cout) like input for the tree
+// Run and see TTreeStreamer::Test() - to see TTreeStreamer functionality
+// ------------------------------------------------------------------------------------------------
+//
+// -------------------------------------------------------------------------------------------------
+// TTreeSRedirector
+// Redirect file to different TTreeStreams
+// Run and see TTreeSRedirector::Test() as an example of TTreeSRedirectorer functionality
+//
+
+/* $Id$ */
+
#include "TFile.h"
+#include "TObjArray.h"
#include "TTree.h"
-#include "TBrowser.h"
#include "TTreeStream.h"
ClassImp(TTreeStream)
ClassImp(TTreeSRedirector)
-/*
- marian.ivanov@cern.ch
- //
- ------------------------------------------------------------------------------------------------
- TTreeStream
- Standard stream (cout) like input for the tree
- Run and see TTreeStreamer::Test() - to see TTreeStreamer functionality
- ------------------------------------------------------------------------------------------------
- //
- -------------------------------------------------------------------------------------------------
- TTreeSRedirector
- Redirect file to different TTreeStreams
- Run and see TTreeSRedirector::Test() as an example of TTreeSRedirectorer functionality
- //
-*/
void TTreeStream::Test()
fFile->Close();
delete fFile;
}
+void TTreeSRedirector::StoreObject(TObject* object){
+ //
+ //
+ //
+ TFile * backup = gFile;
+ fFile->cd();
+ object->Write();
+ if (backup) backup->cd();
+}
+
+
TTreeStream & TTreeSRedirector::operator<<(Int_t id)
{
delete fDataLayouts;
fDataLayouts=0;
}
- backup->cd();
+ if (backup) backup->cd();
}
//-------------------------------------------------------------
TTreeDataElement:: TTreeDataElement(Char_t type) :
- fName(),
+ TNamed(),
fType(type),
fDType(0),
fClass(0),
}
TTreeDataElement:: TTreeDataElement(TDataType* type) :
- fName(),
- fType(' '),
+ TNamed(),
+ fType(0),
fDType(type),
fClass(0),
fPointer(0)
}
TTreeDataElement:: TTreeDataElement(TClass* cl) :
- fName(),
- fType(' '),
+ TNamed(),
+ fType(0),
fDType(0),
fClass(cl),
fPointer(0)
fNextNameCounter(),
fStatus(0)
{
+ //
+ // Standard ctor
+ //
}
TTreeStream::~TTreeStream()
{
+ //
+ // Class dtor
+ //
fElements->Delete();
fBranches->Clear();
delete fElements;
void TTreeStream::Close()
{
+ //
+ // Flush data to disk and close
//
fTree->Write();
}
Int_t TTreeStream::CheckIn(Char_t type, void *pointer)
{
+ //
+ // Insert object of given type
+ //
if (!fElements) fElements = new TObjArray(1000);
TTreeDataElement* element = (TTreeDataElement*)fElements->At(fCurrentIndex);
if (!element) {
Int_t TTreeStream::CheckIn(TObject *o){
//
+ // Insert TObject
//
if (!o) return 0;
if (!fElements) fElements = new TObjArray(1000);
void TTreeStream::BuildTree(){
//
+ // Build the Tree
//
if (fTree->GetEntries()>0) return;
fTree = new TTree(GetName(),GetName());
}
if (element->fClass){
if (element->fClass->GetBaseClass("TClonesArray")){
- TBranch * br = fTree->Branch(bname1,&(element->fPointer));
+ TBranch * br = fTree->Branch(bname1,element->fClass->GetName(),&(element->fPointer));
fBranches->AddAt(br,i);
}else
{
void TTreeStream::Fill(){
//
+ // Fill the tree
//
if (fTree) {
Int_t entries=fElements->GetEntriesFast();
}
}
-TTreeStream & TTreeStream::Endl(){
+TTreeStream & TTreeStream::Endl()
+{
+ //
+ // Perform pseudo endl operation
+ //
if (fTree->GetNbranches()==0) BuildTree();
Fill();
fStatus =0;
TTreeStream &TTreeStream::operator<<(Char_t *name)
{
//
+ // Endl
//
- //
- //Endl
if (name[0]=='\n'){
return Endl();
}