22 #include <Riostream.h>
28 #include "TClonesArray.h"
29 #include "TDirectory.h"
37 #include "TObjString.h"
63 :TNamed(
"SegmentArray",
"SegmentArray"),
81 Error(
"AliSegmentArray",
"can't allocate %d segments in memory",n);
120 else fTree->Reset();}
151 ::Fatal(
"AliSegmentArray::AliSegmentArray",
"ROOT system not initialized");
155 Error(
"AliSegmentArray",
"%s is not a valid class name", classname);
158 if (!
fClass->InheritsFrom(AliSegmentID::Class())) {
159 Error(
"AliSegmentArray",
"%s does not inherit from AliSegmentID", classname);
172 if (segment == 0)
return 0;
181 if (segment==0)
return kFALSE;
183 if (
fClass==0)
return kFALSE;
184 if (!(segment->IsA()->InheritsFrom(
fClass))){
185 Error(
"AliSegmentArray",
"added class %s is not of proper type ",
186 segment->IsA()->GetName());
201 if (segment == 0)
return 0;
203 segment->
SetID(index);
244 fBranch =
fTree->Branch(
"Segment",psegment->IsA()->GetName(),&psegment,64000,99);
257 fTree =
new TTree(
"Segment Tree",
"Tree with segments");
262 cout <<
"Tree with segments does not exist"<<endl;
268 fBranch =
fTree->Branch(
"Segment",psegment->IsA()->GetName(),&psegment,64000,99);
271 TString outFile =
gAlice->GetBaseFile();
272 outFile = outFile +
"/" + file;
273 fBranch->SetFile(outFile.Data());
274 TDirectory *wd = gDirectory;
276 TIter next( b->GetListOfBranches());
277 while ((b=(TBranch*)next())) {
278 b->SetFile(outFile.Data());
280 cout <<
"Diverting branch " <<
"Segment" <<
" to file " << outFile << endl;
291 if (size<1)
return kFALSE;
297 fBranch->SetAddress(&psegment);
298 TBranch * brindix =
fTree->GetBranch(
"fSegmentID");
299 Int_t nevent = (Int_t)
fTree->GetEntries();
300 for (Int_t i = 0; i<nevent; i++){
301 brindix->GetEvent(i);
302 Int_t treeIndex=psegment->
GetID();
305 (*fTreeIndex)[treeIndex]=i+1;
307 if (psegment)
delete psegment;
314 if (
fTree == 0)
return kFALSE;
336 fTree =(TTree*)gDirectory->Get(treeName);
338 if (
fTree == 0)
return kFALSE;
363 Int_t treeIndex =(*fTreeIndex)[index];
364 if (treeIndex<1)
return 0;
367 fTree->GetEvent(treeIndex);
369 fSegment->AddAt((TObject*) s, index);
381 if (index>
fTree->GetEntries())
return 0;
386 fTree->GetEvent(index);
390 Int_t nindex = s->
GetID();
393 fSegment->AddAt((TObject*) s, nindex);
402 if (ksegment == 0 )
return;
404 fBranch->SetAddress(&ksegment);
409 void AliSegmentArray::Streamer(TBuffer &R__b)
411 TObjString treeName, * ptreeName=&treeName;
412 if (R__b.IsReading()) {
413 Version_t R__v = R__b.ReadVersion();
if (R__v) { }
414 TNamed::Streamer(R__b);
419 R__b.WriteVersion(AliSegmentArray::IsA());
420 TNamed::Streamer(R__b);
423 treeName.String() =
fTree->GetTitle();
Bool_t AddSegment(AliSegmentID *segment)
void ClearSegment(Int_t index)
virtual AliSegmentID * LoadSegment(Int_t index)
AliSegmentArray & operator=(const AliSegmentArray &segment)
Bool_t MakeArray(Int_t n)
Int_t fNSegment
number of alocated segments
TObjArray * fSegment
! pointer to array of pointers to segment
virtual void StoreSegment(Int_t index)
virtual void MakeTree(char *file=0)
virtual Bool_t ConnectTree(const char *treeName)
Bool_t fTreeOwner
flag determing the ownership of the fTree
virtual ~AliSegmentArray()
virtual AliSegmentID * LoadEntry(Int_t index)
Bool_t SetClass(const char *classname)
virtual AliSegmentID * NewSegment()
TBranch * fBranch
! total branch
TTree * fTree
! tree with segment objects
TArrayI * fTreeIndex
! pointers(index) table in tree
Bool_t MakeDictionary(Int_t size)
TClass * fClass
! class type of included objects