* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.9 2002/10/14 14:55:34 hristov
-Merging the VirtualMC branch to the main development branch (HEAD)
-
-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$ */
///////////////////////////////////////////////////////////////////////////////
// //
///////////////////////////////////////////////////////////////////////////////
#include <Riostream.h>
-#include <TROOT.h>
#include <TTree.h>
+#include <TROOT.h>
+#include "AliRun.h"
+
#include "TClonesArray.h"
#include "TDirectory.h"
#include "AliArrayI.h"
#include "TClass.h"
#include "TFile.h"
-#include "AliRun.h"
#include "AliSegmentID.h"
#include "AliSegmentArray.h"
#include "TObjString.h"
fTree = 0;
fClass = 0;
fBranch = 0;
+ fTreeOwner = kFALSE;
}
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;
}
}
-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
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;
}
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");
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());
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)
{
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;
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());
fTree->Write();
}
}
+