]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/TTreeStream.cxx
Label for the ITS tracklets (Jan Fiete)
[u/mrichter/AliRoot.git] / STEER / TTreeStream.cxx
index ec145f276dac649c7a4c0099da0d6de6764e0c76..2287454cc2d547bb73d2acd071c97f16970298bd 100644 (file)
@@ -1,3 +1,20 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id$ */
+
 //
 //  marian.ivanov@cern.ch
 //
 //  Run and see   TTreeSRedirector::Test() as an example of TTreeSRedirectorer functionality 
 // 
 
-/* $Id$ */
-
-#include "TFile.h"
-#include "TObjArray.h"
-#include "TTree.h"
-#include "TTreeStream.h"
-
+#include <TClass.h>
+#include <TFile.h>
+#include <TDirectory.h>
+#include <TObjArray.h>
+#include <TTree.h>
+#include <TTreeStream.h>
 
 ClassImp(TTreeDataElement)
 ClassImp(TTreeStream)
@@ -148,7 +164,7 @@ void TTreeSRedirector::StoreObject(TObject* object){
   //
   //
   //
-  TFile * backup = gFile;
+  TDirectory * backup = gDirectory;
   fFile->cd();
   object->Write();
   if (backup) backup->cd();
@@ -173,12 +189,14 @@ TTreeStream  & TTreeSRedirector::operator<<(Int_t id)
     }
   }
   if (!clayout){
+    TDirectory * backup = gDirectory;
     fFile->cd();
     char chname[100];
     sprintf(chname,"Tree%d",id);
     clayout = new TTreeStream(chname);
     clayout->fId=id;
     fDataLayouts->AddAt(clayout,entries);
+    if (backup) backup->cd();
   }
   return *clayout;
 }
@@ -194,11 +212,13 @@ TTreeStream  & TTreeSRedirector::operator<<(const char* name)
   Int_t entries = fDataLayouts->GetEntriesFast();
 
   if (!clayout){
+    TDirectory * backup = gDirectory;
     fFile->cd();
     clayout = new TTreeStream(name);
     clayout->fId=-1;
     clayout->SetName(name);
     fDataLayouts->AddAt(clayout,entries);    
+    if (backup) backup->cd();
   }
   return *clayout;
 }
@@ -209,7 +229,7 @@ TTreeStream  & TTreeSRedirector::operator<<(const char* name)
 void TTreeSRedirector::Close(){
   //
   //
-  TFile * backup = gFile;
+  TDirectory * backup = gDirectory;
   fFile->cd();
   if (fDataLayouts){
     Int_t entries = fDataLayouts->GetEntriesFast();
@@ -380,8 +400,8 @@ void TTreeStream::BuildTree(){
   //
   // Build the Tree
   //
-  if (fTree->GetEntries()>0) return;
-  fTree = new TTree(GetName(),GetName());
+  if (fTree && fTree->GetEntries()>0) return;
+  if (!fTree)  fTree = new TTree(GetName(),GetName());
   Int_t entries = fElements->GetEntriesFast();  
   fBranches = new TObjArray(entries);