Avoid deleting of Root class dictionary (R.Brun, M.Ivanov)
[u/mrichter/AliRoot.git] / CONTAINERS / AliSegmentArray.cxx
index 6c51fec485fdc2c659618ccfd0e5cd84190c181b..107099cb174fa656e70f946f49927ef84c377316 100644 (file)
 
 /*
 $Log$
+Revision 1.2  2001/01/26 20:29:00  hristov
+Major upgrade of AliRoot code
+
+Revision 1.1  2000/11/01 15:57:13  kowal2
+Moved from the TPC directory
+
 Revision 1.3  2000/06/30 12:07:49  kowal2
 Updated from the TPC-PreRelease branch
 
@@ -35,6 +41,7 @@ New data structure handling
 //  Alice segment manager object                                             //
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
+#include <iostream.h>
 
 #include  <TROOT.h>
 #include <TTree.h>
@@ -44,6 +51,7 @@ New data structure handling
 #include "TError.h"
 #include "TClass.h"
 
+#include "AliRun.h"
 #include "AliSegmentID.h"
 #include "AliSegmentArray.h"
 #include "TObjString.h"
@@ -111,7 +119,7 @@ AliSegmentArray::~AliSegmentArray()
   }
   if (fTree) delete fTree;
   if (fTreeIndex) delete fTreeIndex;
-  if (fClass!=0) delete fClass;
+  //  if (fClass!=0) delete fClass;
 }
 
 
@@ -120,7 +128,7 @@ Bool_t AliSegmentArray::SetClass(Text_t *classname)
   //
   //set class of stored object
   if ( fClass !=0 ) {
-    delete fClass;
+    //delete fClass; not ower of fClass
     fClass = 0;
   }
   if (fTree !=0) {
@@ -225,13 +233,24 @@ Bool_t AliSegmentArray::MakeArray(Int_t n)
 }
 
 
-void AliSegmentArray::MakeTree()
+void AliSegmentArray::MakeTree(char *file)
 {
   //  AliSegmentID  segment;
   AliSegmentID * psegment = NewSegment();  
   if (fTree) delete fTree;
   fTree = new TTree("Segment Tree","Tree with segments");
   fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000,1);
+  if (file) {
+        TDirectory *wd = gDirectory;
+        fBranch->SetFile(file);
+        TBranch *b = fBranch;
+        TIter next( b->GetListOfBranches());
+        while ((b=(TBranch*)next())) {
+           b->SetFile(file);
+        }
+           cout << "Diverting branch " << "Segment" << " to file " << file << endl;  
+        wd->cd(); 
+    }
   delete psegment;
 }              
 
@@ -245,18 +264,18 @@ Bool_t  AliSegmentArray::MakeDictionary(Int_t size)
   fTreeIndex = new AliArrayI(); 
   fTreeIndex->Set(size);
   
-  AliSegmentID  segment;
-  AliSegmentID * psegment = &segment;
+  AliSegmentID * psegment = NewSegment(); //MI change
   fBranch->SetAddress(&psegment);
   TBranch * brindix = fTree->GetBranch("fSegmentID");
   Int_t nevent = (Int_t)fTree->GetEntries();  
   for (Int_t i = 0; i<nevent; i++){
     brindix->GetEvent(i);
-    Int_t treeIndex=segment.GetID();
+    Int_t treeIndex=psegment->GetID();
     if (fTreeIndex->fN<treeIndex) fTreeIndex->Expand(Int_t(Float_t(treeIndex)*1.5)+1);
     //    Int_t index = segment.GetID(); 
     (*fTreeIndex)[treeIndex]=i+1; //  
   }
+  if (psegment) delete psegment;
   return kTRUE;
 }