ROOT logo
/**************************************************************************
 * 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$ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Alice segment manager object                                             //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
#include <Riostream.h>

#include <TTree.h>
#include <TROOT.h>
#include "AliRun.h"

#include "TClonesArray.h"
#include "TDirectory.h"
#include <TArrayI.h>
#include "TError.h"
#include "TClass.h"
#include "TFile.h"

#include "AliSegmentID.h"
#include "AliSegmentArray.h"
#include "TObjString.h"

using std::endl;
using std::cout;
//_____________________________________________________________________________
ClassImp(AliSegmentArray)
  
  AliSegmentArray::AliSegmentArray()
                  :TNamed(),
                   fSegment(0),
                   fTreeIndex(0),
                   fNSegment(0),
                   fTree(0),
                   fTreeOwner(kFALSE),
                   fBranch(0),
                   fClass(0)                                      
{
  //
  // constructor
  //

}

AliSegmentArray::AliSegmentArray(const char *classname, Int_t n)
                :TNamed("SegmentArray","SegmentArray"),
                 fSegment(0),
                 fTreeIndex(0),
                 fNSegment(0),
                 fTree(0),
                 fTreeOwner(kFALSE),
                 fBranch(0),
                 fClass(0) 
{
  //
  //constructor which 
  // 
  //  Create an array of objects of classname. The class must inherit from
  //  AliSegmentID .  The second argument adjust number of entries in 
  //  the array.
 

  SetClass(classname);
  if (MakeArray(n)==kFALSE){
     Error("AliSegmentArray", "can't allocate %d segments in memory",n);
     return;
   }
}

AliSegmentArray::AliSegmentArray(const AliSegmentArray &segment)
                :TNamed(segment),
                 fSegment(0),
                 fTreeIndex(0),
                 fNSegment(0),
                 fTree(0),
                 fTreeOwner(kFALSE),
                 fBranch(0),
                 fClass(0)                                      
               
{
  //
  //copy constructor
  // to be later implemented
}

AliSegmentArray &AliSegmentArray::operator = (const AliSegmentArray & /*segment*/)
{
  //assignment operator
  //to be later implemented
  return (*this);
}

AliSegmentArray::~AliSegmentArray()
{
  //
  // default destructor
  if (fNSegment>0){
    fSegment->Delete();
    delete fSegment;
  }
  if (fTree) { 
   if (fTreeOwner) delete fTree;
   else fTree->Reset();}

  if (fTreeIndex) delete fTreeIndex;
  //  if (fClass!=0) delete fClass;
}


Bool_t AliSegmentArray::SetClass(const char *classname)
{
  //
  //set class of stored object
  if ( fClass !=0 ) {
    //delete fClass; not ower of fClass
    fClass = 0;
  }
  if (fTree !=0) {
    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");
   
   fClass = gROOT->GetClass(classname);
   if (!fClass) {
      Error("AliSegmentArray", "%s is not a valid class name", classname);
      return kFALSE;
   }
   if (!fClass->InheritsFrom(AliSegmentID::Class())) {
      Error("AliSegmentArray", "%s does not inherit from AliSegmentID", classname);
      return kFALSE;
   }  
   return kTRUE;
}


AliSegmentID * AliSegmentArray::NewSegment()
{
  //
  //create object according class information
  if (fClass==0) return 0;
  AliSegmentID * segment = (AliSegmentID * )fClass->New();
  if (segment == 0) return 0;
  return segment;
}


Bool_t AliSegmentArray::AddSegment(AliSegmentID *segment)
{
  //
  // add segment to array
  //
  if (segment==0) return kFALSE;
  if (fSegment==0) return kFALSE;
  if (fClass==0) return kFALSE;
  if (!(segment->IsA()->InheritsFrom(fClass))){
    Error("AliSegmentArray", "added class %s  is not of proper type ",
	  segment->IsA()->GetName());
      return kFALSE;
  }
  fSegment->AddAt(segment,segment->GetID());
  fNSegment = fSegment->GetLast()+1;
  return kTRUE;
}

AliSegmentID * AliSegmentArray::AddSegment(Int_t index)
{
  //
  // add segment to array
  //
  if (fSegment==0) return 0;
  if (fClass==0) return 0;
  AliSegmentID * segment = NewSegment();
  if (segment == 0) return 0;
  fSegment->AddAt(segment,index);
  segment->SetID(index);
  fNSegment = fSegment->GetLast()+1;
  return segment;
}


void AliSegmentArray::ClearSegment(Int_t index)
{
  //
  //remove segment from active memory    
  //
  //PH  if ((*fSegment)[index]){
  if (fSegment->At(index)){
    //    (*fSegment)[index]->Delete(); //not working for TClonesArray
    //PH    delete (*fSegment)[index]; //because problem with deleting TClonesArray
    //PH    fSegment->RemoveAt(index);
    delete fSegment->RemoveAt(index);
  }
}


Bool_t AliSegmentArray::MakeArray(Int_t n)
{
  //
  //make array of pointers to Segments
  //
  if (fSegment) {
    fSegment->Delete();
    delete fSegment;
  }  
  fSegment = new TObjArray(n);  
  fNSegment=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) {
    if (fTreeOwner) 
     {
       delete fTree;
       fTree = new TTree("Segment Tree","Tree with segments");     
     }
    else fTree->Reset();
  }
  else {
    cout << "Tree with segments does not exist"<<endl;
    return;
  }

  
  //PH  fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000);
   fBranch = fTree->Branch("Segment",psegment->IsA()->GetName(),&psegment,64000,99);
 
  if (file) {
        TString outFile = gAlice->GetBaseFile();
        outFile = outFile + "/" + file;
        fBranch->SetFile(outFile.Data());
        TDirectory *wd = gDirectory;
        TBranch *b = fBranch;
        TIter next( b->GetListOfBranches());
        while ((b=(TBranch*)next())) {
           b->SetFile(outFile.Data());
        }
        cout << "Diverting branch " << "Segment" << " to file " << outFile << endl;  
        wd->cd(); 
    }
  delete psegment;
}              


Bool_t  AliSegmentArray::MakeDictionary(Int_t size)
{
  //
  //create index table for tree
  //  
  if (size<1) return kFALSE;
  if (fTreeIndex) delete fTreeIndex;
  fTreeIndex = new TArrayI(); 
  fTreeIndex->Set(size);
  
  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=psegment->GetID();
    if (fTreeIndex->fN<treeIndex) fTreeIndex->Set(Int_t(Float_t(treeIndex)*1.5)+1);
    //    Int_t index = segment.GetID(); 
    (*fTreeIndex)[treeIndex]=i+1; //  
  }
  if (psegment) delete psegment;
  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){
   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;
  MakeDictionary(TMath::Max(fNSegment,Int_t(fTree->GetEntries())));
  MakeArray(fTreeIndex->fN);
  return kTRUE;
}

AliSegmentID *AliSegmentArray::LoadSegment(Int_t index)
{
  //
  //load segment with index to the memory
  //
  //
  if (fTreeIndex ==0 ) MakeDictionary(3000);
  //firstly try to load dictionary 
  if (fTreeIndex ==0 ) return 0;
  if (fBranch==0) return 0;
  if (index>fTreeIndex->fN) return 0;
  //PH  AliSegmentID *s = (AliSegmentID*)(*fSegment)[index];
  AliSegmentID *s = (AliSegmentID*)fSegment->At(index);
  if (s==0)  s=  NewSegment();

  
  if (s!=0) {
    s->SetID(index);
    //  new AliSegmentID(index);
    Int_t treeIndex =(*fTreeIndex)[index];
    if (treeIndex<1) return 0;
    else treeIndex--;   //I don't like it Int table I have index shifted by 1		       
    fBranch->SetAddress(&s);
    fTree->GetEvent(treeIndex);
    //PH    (*fSegment)[index] = (TObject*) s;
    fSegment->AddAt((TObject*) s, index);
  }
  else 
    return 0;
  return s;

}
AliSegmentID *AliSegmentArray::LoadEntry(Int_t index)
{
  //
  //load segment at position inex in tree  to the memory
  //
  //
  if (fBranch==0) return 0;
  if (index>fTree->GetEntries()) return 0;
  AliSegmentID * s =  NewSegment();
  
  if (s) {
    fBranch->SetAddress(&s);
    fTree->GetEvent(index);
  }
  else 
    return 0;
  Int_t nindex = s->GetID();
  ClearSegment(nindex);
  //PH  (*fSegment)[nindex] = (TObject*) s;
  fSegment->AddAt((TObject*) s, nindex);
  return s;
}

void AliSegmentArray::StoreSegment(Int_t index)
{
  //
  //make segment persistent 
  //
  const AliSegmentID *  ksegment = (*this)[index];
  if (ksegment == 0 ) return;
  if (fTree==0) MakeTree();
  fBranch->SetAddress(&ksegment);
  fTree->Fill();
}


void AliSegmentArray::Streamer(TBuffer &R__b)
{
  TObjString treeName, * ptreeName=&treeName;
  if (R__b.IsReading()) {
    Version_t R__v = R__b.ReadVersion(); if (R__v) { }
    TNamed::Streamer(R__b);
    R__b>>ptreeName;
    if (fTree && fTreeOwner) delete fTree;
    ConnectTree(ptreeName->String());   
  } else {
    R__b.WriteVersion(AliSegmentArray::IsA());
    TNamed::Streamer(R__b);      
    //  char  ch[200];
    //  sprintf(ch,"%s",fTrre->GetTitle());
    treeName.String() = fTree->GetTitle();
    R__b<<ptreeName;
    fTree->Write();
  }
}

 AliSegmentArray.cxx:1
 AliSegmentArray.cxx:2
 AliSegmentArray.cxx:3
 AliSegmentArray.cxx:4
 AliSegmentArray.cxx:5
 AliSegmentArray.cxx:6
 AliSegmentArray.cxx:7
 AliSegmentArray.cxx:8
 AliSegmentArray.cxx:9
 AliSegmentArray.cxx:10
 AliSegmentArray.cxx:11
 AliSegmentArray.cxx:12
 AliSegmentArray.cxx:13
 AliSegmentArray.cxx:14
 AliSegmentArray.cxx:15
 AliSegmentArray.cxx:16
 AliSegmentArray.cxx:17
 AliSegmentArray.cxx:18
 AliSegmentArray.cxx:19
 AliSegmentArray.cxx:20
 AliSegmentArray.cxx:21
 AliSegmentArray.cxx:22
 AliSegmentArray.cxx:23
 AliSegmentArray.cxx:24
 AliSegmentArray.cxx:25
 AliSegmentArray.cxx:26
 AliSegmentArray.cxx:27
 AliSegmentArray.cxx:28
 AliSegmentArray.cxx:29
 AliSegmentArray.cxx:30
 AliSegmentArray.cxx:31
 AliSegmentArray.cxx:32
 AliSegmentArray.cxx:33
 AliSegmentArray.cxx:34
 AliSegmentArray.cxx:35
 AliSegmentArray.cxx:36
 AliSegmentArray.cxx:37
 AliSegmentArray.cxx:38
 AliSegmentArray.cxx:39
 AliSegmentArray.cxx:40
 AliSegmentArray.cxx:41
 AliSegmentArray.cxx:42
 AliSegmentArray.cxx:43
 AliSegmentArray.cxx:44
 AliSegmentArray.cxx:45
 AliSegmentArray.cxx:46
 AliSegmentArray.cxx:47
 AliSegmentArray.cxx:48
 AliSegmentArray.cxx:49
 AliSegmentArray.cxx:50
 AliSegmentArray.cxx:51
 AliSegmentArray.cxx:52
 AliSegmentArray.cxx:53
 AliSegmentArray.cxx:54
 AliSegmentArray.cxx:55
 AliSegmentArray.cxx:56
 AliSegmentArray.cxx:57
 AliSegmentArray.cxx:58
 AliSegmentArray.cxx:59
 AliSegmentArray.cxx:60
 AliSegmentArray.cxx:61
 AliSegmentArray.cxx:62
 AliSegmentArray.cxx:63
 AliSegmentArray.cxx:64
 AliSegmentArray.cxx:65
 AliSegmentArray.cxx:66
 AliSegmentArray.cxx:67
 AliSegmentArray.cxx:68
 AliSegmentArray.cxx:69
 AliSegmentArray.cxx:70
 AliSegmentArray.cxx:71
 AliSegmentArray.cxx:72
 AliSegmentArray.cxx:73
 AliSegmentArray.cxx:74
 AliSegmentArray.cxx:75
 AliSegmentArray.cxx:76
 AliSegmentArray.cxx:77
 AliSegmentArray.cxx:78
 AliSegmentArray.cxx:79
 AliSegmentArray.cxx:80
 AliSegmentArray.cxx:81
 AliSegmentArray.cxx:82
 AliSegmentArray.cxx:83
 AliSegmentArray.cxx:84
 AliSegmentArray.cxx:85
 AliSegmentArray.cxx:86
 AliSegmentArray.cxx:87
 AliSegmentArray.cxx:88
 AliSegmentArray.cxx:89
 AliSegmentArray.cxx:90
 AliSegmentArray.cxx:91
 AliSegmentArray.cxx:92
 AliSegmentArray.cxx:93
 AliSegmentArray.cxx:94
 AliSegmentArray.cxx:95
 AliSegmentArray.cxx:96
 AliSegmentArray.cxx:97
 AliSegmentArray.cxx:98
 AliSegmentArray.cxx:99
 AliSegmentArray.cxx:100
 AliSegmentArray.cxx:101
 AliSegmentArray.cxx:102
 AliSegmentArray.cxx:103
 AliSegmentArray.cxx:104
 AliSegmentArray.cxx:105
 AliSegmentArray.cxx:106
 AliSegmentArray.cxx:107
 AliSegmentArray.cxx:108
 AliSegmentArray.cxx:109
 AliSegmentArray.cxx:110
 AliSegmentArray.cxx:111
 AliSegmentArray.cxx:112
 AliSegmentArray.cxx:113
 AliSegmentArray.cxx:114
 AliSegmentArray.cxx:115
 AliSegmentArray.cxx:116
 AliSegmentArray.cxx:117
 AliSegmentArray.cxx:118
 AliSegmentArray.cxx:119
 AliSegmentArray.cxx:120
 AliSegmentArray.cxx:121
 AliSegmentArray.cxx:122
 AliSegmentArray.cxx:123
 AliSegmentArray.cxx:124
 AliSegmentArray.cxx:125
 AliSegmentArray.cxx:126
 AliSegmentArray.cxx:127
 AliSegmentArray.cxx:128
 AliSegmentArray.cxx:129
 AliSegmentArray.cxx:130
 AliSegmentArray.cxx:131
 AliSegmentArray.cxx:132
 AliSegmentArray.cxx:133
 AliSegmentArray.cxx:134
 AliSegmentArray.cxx:135
 AliSegmentArray.cxx:136
 AliSegmentArray.cxx:137
 AliSegmentArray.cxx:138
 AliSegmentArray.cxx:139
 AliSegmentArray.cxx:140
 AliSegmentArray.cxx:141
 AliSegmentArray.cxx:142
 AliSegmentArray.cxx:143
 AliSegmentArray.cxx:144
 AliSegmentArray.cxx:145
 AliSegmentArray.cxx:146
 AliSegmentArray.cxx:147
 AliSegmentArray.cxx:148
 AliSegmentArray.cxx:149
 AliSegmentArray.cxx:150
 AliSegmentArray.cxx:151
 AliSegmentArray.cxx:152
 AliSegmentArray.cxx:153
 AliSegmentArray.cxx:154
 AliSegmentArray.cxx:155
 AliSegmentArray.cxx:156
 AliSegmentArray.cxx:157
 AliSegmentArray.cxx:158
 AliSegmentArray.cxx:159
 AliSegmentArray.cxx:160
 AliSegmentArray.cxx:161
 AliSegmentArray.cxx:162
 AliSegmentArray.cxx:163
 AliSegmentArray.cxx:164
 AliSegmentArray.cxx:165
 AliSegmentArray.cxx:166
 AliSegmentArray.cxx:167
 AliSegmentArray.cxx:168
 AliSegmentArray.cxx:169
 AliSegmentArray.cxx:170
 AliSegmentArray.cxx:171
 AliSegmentArray.cxx:172
 AliSegmentArray.cxx:173
 AliSegmentArray.cxx:174
 AliSegmentArray.cxx:175
 AliSegmentArray.cxx:176
 AliSegmentArray.cxx:177
 AliSegmentArray.cxx:178
 AliSegmentArray.cxx:179
 AliSegmentArray.cxx:180
 AliSegmentArray.cxx:181
 AliSegmentArray.cxx:182
 AliSegmentArray.cxx:183
 AliSegmentArray.cxx:184
 AliSegmentArray.cxx:185
 AliSegmentArray.cxx:186
 AliSegmentArray.cxx:187
 AliSegmentArray.cxx:188
 AliSegmentArray.cxx:189
 AliSegmentArray.cxx:190
 AliSegmentArray.cxx:191
 AliSegmentArray.cxx:192
 AliSegmentArray.cxx:193
 AliSegmentArray.cxx:194
 AliSegmentArray.cxx:195
 AliSegmentArray.cxx:196
 AliSegmentArray.cxx:197
 AliSegmentArray.cxx:198
 AliSegmentArray.cxx:199
 AliSegmentArray.cxx:200
 AliSegmentArray.cxx:201
 AliSegmentArray.cxx:202
 AliSegmentArray.cxx:203
 AliSegmentArray.cxx:204
 AliSegmentArray.cxx:205
 AliSegmentArray.cxx:206
 AliSegmentArray.cxx:207
 AliSegmentArray.cxx:208
 AliSegmentArray.cxx:209
 AliSegmentArray.cxx:210
 AliSegmentArray.cxx:211
 AliSegmentArray.cxx:212
 AliSegmentArray.cxx:213
 AliSegmentArray.cxx:214
 AliSegmentArray.cxx:215
 AliSegmentArray.cxx:216
 AliSegmentArray.cxx:217
 AliSegmentArray.cxx:218
 AliSegmentArray.cxx:219
 AliSegmentArray.cxx:220
 AliSegmentArray.cxx:221
 AliSegmentArray.cxx:222
 AliSegmentArray.cxx:223
 AliSegmentArray.cxx:224
 AliSegmentArray.cxx:225
 AliSegmentArray.cxx:226
 AliSegmentArray.cxx:227
 AliSegmentArray.cxx:228
 AliSegmentArray.cxx:229
 AliSegmentArray.cxx:230
 AliSegmentArray.cxx:231
 AliSegmentArray.cxx:232
 AliSegmentArray.cxx:233
 AliSegmentArray.cxx:234
 AliSegmentArray.cxx:235
 AliSegmentArray.cxx:236
 AliSegmentArray.cxx:237
 AliSegmentArray.cxx:238
 AliSegmentArray.cxx:239
 AliSegmentArray.cxx:240
 AliSegmentArray.cxx:241
 AliSegmentArray.cxx:242
 AliSegmentArray.cxx:243
 AliSegmentArray.cxx:244
 AliSegmentArray.cxx:245
 AliSegmentArray.cxx:246
 AliSegmentArray.cxx:247
 AliSegmentArray.cxx:248
 AliSegmentArray.cxx:249
 AliSegmentArray.cxx:250
 AliSegmentArray.cxx:251
 AliSegmentArray.cxx:252
 AliSegmentArray.cxx:253
 AliSegmentArray.cxx:254
 AliSegmentArray.cxx:255
 AliSegmentArray.cxx:256
 AliSegmentArray.cxx:257
 AliSegmentArray.cxx:258
 AliSegmentArray.cxx:259
 AliSegmentArray.cxx:260
 AliSegmentArray.cxx:261
 AliSegmentArray.cxx:262
 AliSegmentArray.cxx:263
 AliSegmentArray.cxx:264
 AliSegmentArray.cxx:265
 AliSegmentArray.cxx:266
 AliSegmentArray.cxx:267
 AliSegmentArray.cxx:268
 AliSegmentArray.cxx:269
 AliSegmentArray.cxx:270
 AliSegmentArray.cxx:271
 AliSegmentArray.cxx:272
 AliSegmentArray.cxx:273
 AliSegmentArray.cxx:274
 AliSegmentArray.cxx:275
 AliSegmentArray.cxx:276
 AliSegmentArray.cxx:277
 AliSegmentArray.cxx:278
 AliSegmentArray.cxx:279
 AliSegmentArray.cxx:280
 AliSegmentArray.cxx:281
 AliSegmentArray.cxx:282
 AliSegmentArray.cxx:283
 AliSegmentArray.cxx:284
 AliSegmentArray.cxx:285
 AliSegmentArray.cxx:286
 AliSegmentArray.cxx:287
 AliSegmentArray.cxx:288
 AliSegmentArray.cxx:289
 AliSegmentArray.cxx:290
 AliSegmentArray.cxx:291
 AliSegmentArray.cxx:292
 AliSegmentArray.cxx:293
 AliSegmentArray.cxx:294
 AliSegmentArray.cxx:295
 AliSegmentArray.cxx:296
 AliSegmentArray.cxx:297
 AliSegmentArray.cxx:298
 AliSegmentArray.cxx:299
 AliSegmentArray.cxx:300
 AliSegmentArray.cxx:301
 AliSegmentArray.cxx:302
 AliSegmentArray.cxx:303
 AliSegmentArray.cxx:304
 AliSegmentArray.cxx:305
 AliSegmentArray.cxx:306
 AliSegmentArray.cxx:307
 AliSegmentArray.cxx:308
 AliSegmentArray.cxx:309
 AliSegmentArray.cxx:310
 AliSegmentArray.cxx:311
 AliSegmentArray.cxx:312
 AliSegmentArray.cxx:313
 AliSegmentArray.cxx:314
 AliSegmentArray.cxx:315
 AliSegmentArray.cxx:316
 AliSegmentArray.cxx:317
 AliSegmentArray.cxx:318
 AliSegmentArray.cxx:319
 AliSegmentArray.cxx:320
 AliSegmentArray.cxx:321
 AliSegmentArray.cxx:322
 AliSegmentArray.cxx:323
 AliSegmentArray.cxx:324
 AliSegmentArray.cxx:325
 AliSegmentArray.cxx:326
 AliSegmentArray.cxx:327
 AliSegmentArray.cxx:328
 AliSegmentArray.cxx:329
 AliSegmentArray.cxx:330
 AliSegmentArray.cxx:331
 AliSegmentArray.cxx:332
 AliSegmentArray.cxx:333
 AliSegmentArray.cxx:334
 AliSegmentArray.cxx:335
 AliSegmentArray.cxx:336
 AliSegmentArray.cxx:337
 AliSegmentArray.cxx:338
 AliSegmentArray.cxx:339
 AliSegmentArray.cxx:340
 AliSegmentArray.cxx:341
 AliSegmentArray.cxx:342
 AliSegmentArray.cxx:343
 AliSegmentArray.cxx:344
 AliSegmentArray.cxx:345
 AliSegmentArray.cxx:346
 AliSegmentArray.cxx:347
 AliSegmentArray.cxx:348
 AliSegmentArray.cxx:349
 AliSegmentArray.cxx:350
 AliSegmentArray.cxx:351
 AliSegmentArray.cxx:352
 AliSegmentArray.cxx:353
 AliSegmentArray.cxx:354
 AliSegmentArray.cxx:355
 AliSegmentArray.cxx:356
 AliSegmentArray.cxx:357
 AliSegmentArray.cxx:358
 AliSegmentArray.cxx:359
 AliSegmentArray.cxx:360
 AliSegmentArray.cxx:361
 AliSegmentArray.cxx:362
 AliSegmentArray.cxx:363
 AliSegmentArray.cxx:364
 AliSegmentArray.cxx:365
 AliSegmentArray.cxx:366
 AliSegmentArray.cxx:367
 AliSegmentArray.cxx:368
 AliSegmentArray.cxx:369
 AliSegmentArray.cxx:370
 AliSegmentArray.cxx:371
 AliSegmentArray.cxx:372
 AliSegmentArray.cxx:373
 AliSegmentArray.cxx:374
 AliSegmentArray.cxx:375
 AliSegmentArray.cxx:376
 AliSegmentArray.cxx:377
 AliSegmentArray.cxx:378
 AliSegmentArray.cxx:379
 AliSegmentArray.cxx:380
 AliSegmentArray.cxx:381
 AliSegmentArray.cxx:382
 AliSegmentArray.cxx:383
 AliSegmentArray.cxx:384
 AliSegmentArray.cxx:385
 AliSegmentArray.cxx:386
 AliSegmentArray.cxx:387
 AliSegmentArray.cxx:388
 AliSegmentArray.cxx:389
 AliSegmentArray.cxx:390
 AliSegmentArray.cxx:391
 AliSegmentArray.cxx:392
 AliSegmentArray.cxx:393
 AliSegmentArray.cxx:394
 AliSegmentArray.cxx:395
 AliSegmentArray.cxx:396
 AliSegmentArray.cxx:397
 AliSegmentArray.cxx:398
 AliSegmentArray.cxx:399
 AliSegmentArray.cxx:400
 AliSegmentArray.cxx:401
 AliSegmentArray.cxx:402
 AliSegmentArray.cxx:403
 AliSegmentArray.cxx:404
 AliSegmentArray.cxx:405
 AliSegmentArray.cxx:406
 AliSegmentArray.cxx:407
 AliSegmentArray.cxx:408
 AliSegmentArray.cxx:409
 AliSegmentArray.cxx:410
 AliSegmentArray.cxx:411
 AliSegmentArray.cxx:412
 AliSegmentArray.cxx:413
 AliSegmentArray.cxx:414
 AliSegmentArray.cxx:415
 AliSegmentArray.cxx:416
 AliSegmentArray.cxx:417
 AliSegmentArray.cxx:418
 AliSegmentArray.cxx:419
 AliSegmentArray.cxx:420
 AliSegmentArray.cxx:421
 AliSegmentArray.cxx:422
 AliSegmentArray.cxx:423
 AliSegmentArray.cxx:424
 AliSegmentArray.cxx:425
 AliSegmentArray.cxx:426
 AliSegmentArray.cxx:427
 AliSegmentArray.cxx:428
 AliSegmentArray.cxx:429
 AliSegmentArray.cxx:430
 AliSegmentArray.cxx:431
 AliSegmentArray.cxx:432
 AliSegmentArray.cxx:433