]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CONTAINERS/AliSegmentArray.cxx
Step size region by region.
[u/mrichter/AliRoot.git] / CONTAINERS / AliSegmentArray.cxx
index cc556d29677117a856279673fce39006eb4fefdf..cce3e88764be422a10d27ae827203f553c2cab0c 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.7.6.1  2002/06/10 15:00:53  hristov
-Merged with v3-08-02
-
-Revision 1.8  2002/04/04 16:38:52  kowal2
-Digits and Sdigits go to separate files
-
-Revision 1.7  2001/10/21 18:22:54  hristov
-BranchOld replaced by Branch. It works correctly with Root 2.02.xx
-
-Revision 1.6  2001/08/30 09:25:24  hristov
-The operator[] is replaced by At() or AddAt() in case of TObjArray. A temporary replacement of Branch with BranchOld is introduced
-
-Revision 1.5  2001/07/27 13:03:11  hristov
-Default Branch split level set to 99
-
-Revision 1.4  2001/06/07 18:23:52  buncic
-TPC branches now correctly diverted into Digits.TPS.root file
-
-Revision 1.3  2001/02/05 14:34:54  hristov
-Avoid deleting of Root class dictionary (R.Brun, M.Ivanov)
-
-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
-
-Revision 1.2.4.1  2000/06/25 08:38:41  kowal2
-Splitted from AliTPCtracking
-
-Revision 1.2  2000/04/17 09:37:33  kowal2
-removed obsolete AliTPCDigitsDisplay.C
-
-Revision 1.1.4.2  2000/04/10 11:39:36  kowal2
-
-New data structure handling
-
-*/
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //  Alice segment manager object                                             //
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
-#include <iostream.h>
+#include <Riostream.h>
 
-#include  <TROOT.h>
 #include <TTree.h>
+#include <TROOT.h>
+#include "AliRun.h"
+
 #include "TClonesArray.h"
 #include "TDirectory.h"
 #include "AliArrayI.h"
@@ -73,7 +33,6 @@ New data structure handling
 #include "TClass.h"
 #include "TFile.h"
 
-#include "AliRun.h"
 #include "AliSegmentID.h"
 #include "AliSegmentArray.h"
 #include "TObjString.h"
@@ -93,9 +52,10 @@ AliSegmentArray::AliSegmentArray()
   fTree  = 0;
   fClass = 0;
   fBranch = 0;
+  fTreeOwner = kFALSE;
 }
 
-AliSegmentArray::AliSegmentArray(Text_t *classname, Int_t n)
+AliSegmentArray::AliSegmentArray(const char *classname, Int_t n)
 {
   //
   //constructor which 
@@ -103,6 +63,7 @@ AliSegmentArray::AliSegmentArray(Text_t *classname, Int_t n)
   //  Create an array of objects of classname. The class must inherit from
   //  AliSegmentID .  The second argument adjust number of entries in 
   //  the array.
+  fTreeOwner = kFALSE;
   fNSegment=0;
   fSegment =0; 
   fTreeIndex = 0;
@@ -118,14 +79,15 @@ AliSegmentArray::AliSegmentArray(Text_t *classname, Int_t n)
    }
 }
 
-AliSegmentArray::AliSegmentArray(const AliSegmentArray &segment)
+AliSegmentArray::AliSegmentArray(const AliSegmentArray &segment):
+  TNamed(segment)
 {
   //
   //copy constructor
   // to be later implemented
 }
 
-AliSegmentArray &AliSegmentArray::operator = (const AliSegmentArray & segment)
+AliSegmentArray &AliSegmentArray::operator = (const AliSegmentArray & /*segment*/)
 {
   //assignment operator
   //to be later implemented
@@ -140,13 +102,16 @@ AliSegmentArray::~AliSegmentArray()
     fSegment->Delete();
     delete fSegment;
   }
-  if (fTree) delete fTree;
+  if (fTree) 
+   if (fTreeOwner) delete fTree;
+   else fTree->Reset();
+
   if (fTreeIndex) delete fTreeIndex;
   //  if (fClass!=0) delete fClass;
 }
 
 
-Bool_t AliSegmentArray::SetClass(Text_t *classname)
+Bool_t AliSegmentArray::SetClass(const char *classname)
 {
   //
   //set class of stored object
@@ -155,17 +120,20 @@ Bool_t AliSegmentArray::SetClass(Text_t *classname)
     fClass = 0;
   }
   if (fTree !=0) {
-    delete fTree;
+    if (fTreeOwner) delete fTree;
+    else fTree->Reset();
     fTree = 0;
     fBranch = 0;
     delete fTreeIndex;
     fTreeIndex = 0;
   } 
+  
   if (fSegment != 0) {
     fSegment->Delete();
     delete fSegment;
     fSegment = 0;
   }
+  
   if (!gROOT)
       ::Fatal("AliSegmentArray::AliSegmentArray", "ROOT system not initialized");
    
@@ -256,17 +224,33 @@ Bool_t AliSegmentArray::MakeArray(Int_t n)
   if (fSegment) return kTRUE;  
   else return kFALSE;            
 }
+void AliSegmentArray::MakeTree(TTree* tree)
+{
+             //Make tree with the name
+  AliSegmentID * psegment = NewSegment();  
+  fTree = tree;
+  //PH  fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000);
+  fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000,99);
 
+}
 
 void AliSegmentArray::MakeTree(char *file)
 {
   //  AliSegmentID  segment;
   AliSegmentID * psegment = NewSegment();  
-  if (fTree) delete fTree;
-  fTree = new TTree("Segment Tree","Tree with segments");
+  if (fTree) 
+    if (fTreeOwner) 
+     {
+       delete fTree;
+       fTree = new TTree("Segment Tree","Tree with segments");     
+     }
+    else fTree->Reset();
+
+  
   //PH  fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000);
    fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000,99);
- if (file) {
+  if (file) {
         TString outFile = gAlice->GetBaseFile();
         outFile = outFile + "/" + file;
         fBranch->SetFile(outFile.Data());
@@ -276,29 +260,12 @@ void AliSegmentArray::MakeTree(char *file)
         while ((b=(TBranch*)next())) {
            b->SetFile(outFile.Data());
         }
-           cout << "Diverting branch " << "Segment" << " to file " << outFile << endl;  
+        cout << "Diverting branch " << "Segment" << " to file " << outFile << endl;  
         wd->cd(); 
     }
   delete psegment;
 }              
 
-////////////////////////////////////////////////////////////////////////
-TTree* AliSegmentArray::MakeTree(TFile *file)
-{
-  // 
-  //  create the whole tree in the file file
-  //
-  AliSegmentID * psegment = NewSegment();  
-  if (fTree) delete fTree;
-  TDirectory *wd = gDirectory;
-  file->cd();
-  fTree = new TTree("Segment Tree","Tree with segments");
-  fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000,99);
-  wd->cd(); 
-  delete psegment;
-  return fTree;
-}              
-////////////////////////////////////////////////////////////////////////
 
 Bool_t  AliSegmentArray::MakeDictionary(Int_t size)
 {
@@ -325,15 +292,32 @@ Bool_t  AliSegmentArray::MakeDictionary(Int_t size)
   return kTRUE;
 }
 
+Bool_t AliSegmentArray::ConnectTree(TTree* tree)
+{
+  fTree =tree;
+  if (fTree == 0)    return kFALSE;
+  fBranch = fTree->GetBranch("Segment");
+  if (fBranch==0) return kFALSE;
+  MakeDictionary(TMath::Max(fNSegment,Int_t(fTree->GetEntries())));
+  MakeArray(fTreeIndex->fN);
+  return kTRUE;
+}
+
+
 Bool_t AliSegmentArray::ConnectTree(const char * treeName)
 {
   //connect tree from current directory  
   if (fTree){
-    delete fTree;
-    fTree = 0;
-    fBranch = 0;
+   if (fTreeOwner) 
+    {
+     delete fTree;
+     fTree = 0;
+    }
+   else fTree->Reset();
+   fBranch = 0;
   }
   fTree =(TTree*)gDirectory->Get(treeName);
+  
   if (fTree == 0)    return kFALSE;
   fBranch = fTree->GetBranch("Segment");
   if (fBranch==0) return kFALSE;
@@ -416,7 +400,7 @@ void AliSegmentArray::Streamer(TBuffer &R__b)
     Version_t R__v = R__b.ReadVersion(); if (R__v) { }
     TNamed::Streamer(R__b);
     R__b>>ptreeName;
-    if (fTree) delete fTree;
+    if (fTree && fTreeOwner) delete fTree;
     ConnectTree(ptreeName->String());   
   } else {
     R__b.WriteVersion(AliSegmentArray::IsA());
@@ -428,3 +412,4 @@ void AliSegmentArray::Streamer(TBuffer &R__b)
     fTree->Write();
   }
 }
+