ROOT logo
//////////////////////////////////////////////////////////////////////
// Author: Henrik Tydesjo                                           //
// This class implements the use of a map of integers.              //
// The values are kept in a binary tree, which is automatically     //
// reordered to be more balanced when the tree height gets too large//
//////////////////////////////////////////////////////////////////////  

#include "AliITSIntMap.h"
#include "AliITSIntMapNode.h"
#include <TMath.h>
#include <TError.h>

AliITSIntMap::AliITSIntMap():
  fNrEntries(0),
  fRoot(NULL),
  fFastAccess(kFALSE),
  fFastAccessSerialize(kFALSE),
  fFastAccessArray(NULL),
  fDummyIndex(0)
{}

AliITSIntMap::AliITSIntMap(AliITSIntMapNode* root, UInt_t nrEntries):
  fNrEntries(nrEntries),
  fRoot(root),
  fFastAccess(kFALSE),
  fFastAccessSerialize(kFALSE),
  fFastAccessArray(NULL),
  fDummyIndex(0)
{}

AliITSIntMap::AliITSIntMap(const AliITSIntMap& imap):
  fNrEntries(0),
  fRoot(NULL),
  fFastAccess(kFALSE),
  fFastAccessSerialize(kFALSE),
  fFastAccessArray(NULL),
  fDummyIndex(0)
{
  // copy constructor
  *this = imap;
}

AliITSIntMap::~AliITSIntMap() {
  Clear();
}

AliITSIntMap& AliITSIntMap::operator=(const AliITSIntMap& imap) {
  // assignment operator
  if (this!=&imap) {
    this->Clear();
    fRoot = CloneNode(imap.fRoot);
    fFastAccess=kFALSE;
    fFastAccessSerialize=kFALSE;
    fFastAccessArray=NULL;
    fDummyIndex=0;
  }
  return *this;
}

void AliITSIntMap::Clear() {
  // clear the whole map
  ClearFastAccess();
  ClearNode(fRoot);
}

void AliITSIntMap::ClearNode(AliITSIntMapNode* &node) {
  // clear this node and all children nodes
  if (node==NULL) return;
  ClearNode(node->Left());
  ClearNode(node->Right());
  delete node;
  fNrEntries--;
  node = NULL;
  fFastAccess=kFALSE;
  fFastAccessSerialize=kFALSE;
}

AliITSIntMap* AliITSIntMap::Clone() const {
  // returns a clone of the map
  AliITSIntMapNode* newRoot;
  newRoot = CloneNode(fRoot);
  AliITSIntMap* newMap = new AliITSIntMap(newRoot,fNrEntries);
  return newMap;
}

AliITSIntMapNode* AliITSIntMap::CloneNode(AliITSIntMapNode* node) const {
  if (node==NULL) return NULL;
  else return new AliITSIntMapNode(node->Key(),node->Val(),CloneNode(node->Left()),CloneNode(node->Right()));
}

Bool_t AliITSIntMap::Insert(Int_t key, Int_t val) {
  // insert a new node into the map (returns true if the node was not present before)
  UInt_t entriesBefore = fNrEntries;
  InsertNode(key,val,fRoot,0);
  if (fNrEntries>entriesBefore) return kTRUE;
  else return kFALSE;
}

void AliITSIntMap::InsertNode(Int_t key, Int_t val, AliITSIntMapNode* &node, UInt_t height) {
  // method to insert a node in the tree (used recursively)
  height++;
  if (node==NULL) {
    node = new AliITSIntMapNode(key,val,NULL,NULL);
    fNrEntries++;
    fFastAccess=kFALSE;
    fFastAccessSerialize=kFALSE;
    UInt_t balanceHeight = (UInt_t) (TMath::Log(fNrEntries+1)/TMath::Log(2)+1);
    if ( (height-balanceHeight)*(height-balanceHeight) > fNrEntries ) {
      Balance();
    }
  }
  else if (key < node->Key()) {
    InsertNode(key,val,node->Left(),height);
  }
  else if (key > node->Key()) {
    InsertNode(key,val,node->Right(),height);
  }
  else { // (key==node->Key()): do nothing (avoid duplicates)
    //    Warning("AliITSIntMap::InsertNode","Node with key %d already in map. Not inserted.",key);
  }
}

Bool_t AliITSIntMap::Remove(Int_t key) {
  // remove a node from the map (returns true if the node was found)
  UInt_t entriesBefore = fNrEntries;
  RemoveNode(key,fRoot);
  if (fNrEntries<entriesBefore) return kTRUE;
  else return kFALSE;
}

void AliITSIntMap::RemoveNode(Int_t key, AliITSIntMapNode* &node) {
  // method to remove a node in the tree (used recursively)
  if (node == NULL) return;   // node not found; do nothing
  if (key < node->Key()) {
    RemoveNode(key,node->Left());
  }
  else if (key > node->Key()) {
    RemoveNode(key,node->Right());
  }
  else if (node->Left()!=NULL && node->Right()!=NULL) { // Two children
    if (fNrEntries%2==0) { // for better balance, remove from left or right sub tree
      AliITSIntMapNode* moveNode = FindMinNode(node->Right());
      node->SetKey(moveNode->Key());
      node->SetVal(moveNode->Val());
      RemoveNode(moveNode->Key(),node->Right());
    }
    else {
      AliITSIntMapNode* moveNode = FindMaxNode(node->Left());
      node->SetKey(moveNode->Key());
      node->SetVal(moveNode->Val());
      RemoveNode(moveNode->Key(),node->Left());
    }
  }
  else {
    AliITSIntMapNode* oldNode = node;
    node = (node->Left()!=NULL) ? node->Left() : node->Right();
    fNrEntries--;
    delete oldNode;
    fFastAccess=kFALSE;
    fFastAccessSerialize=kFALSE;
  }
}

Bool_t AliITSIntMap::Pop(Int_t& key, Int_t& val) {
  // removes one entry (root) from tree, giving its key,val pair
  if (fRoot!=NULL) {
    key = fRoot->Key();
    val = fRoot->Val();
    return Remove(key);
  }
  else return kFALSE;
}

AliITSIntMapNode* AliITSIntMap::FindMinNode(AliITSIntMapNode* node) const {
  // returns the node with smallest key in the sub tree starting from node
  if (node==NULL) return NULL;
  else if (node->Left()==NULL) return node;
  else return FindMinNode(node->Left());
}

AliITSIntMapNode* AliITSIntMap::FindMaxNode(AliITSIntMapNode* node) const {
  // returns the node with largest key in the sub tree starting from node
  if (node==NULL) return NULL;
  else if (node->Right()==NULL) return node;
  else return FindMaxNode(node->Right());
}

AliITSIntMapNode* AliITSIntMap::Find(Int_t key) const {
  // finds a node and returns it (returns NULL if not found)
  return FindNode(key,fRoot,0);
}

AliITSIntMapNode*  AliITSIntMap::FindNode(Int_t key, AliITSIntMapNode* node, UInt_t height) const {
  // method to find a node in the tree (used recursively)
  if (node==NULL) return NULL;
  height++;
  if (key<node->Key()) return FindNode(key,node->Left(),height);
  else if (key>node->Key()) return FindNode(key,node->Right(),height);
  else { // Match
//    //*** balance if height too high. const above have to be removed if this is needed ***
//    UInt_t balanceHeight = (UInt_t) (TMath::Log(fNrEntries+1)/TMath::Log(2)+1);
//    if ( (height-balanceHeight)*(height-balanceHeight) > fNrEntries ) {
//      Balance();
//    }
    return node;
  }
}

Int_t AliITSIntMap::GetVal(Int_t key) const {
  // returns the value for the node with key
  AliITSIntMapNode* node = Find(key);
  if (node!=NULL) {
    return node->Val();
  }
  else {
    Warning("AliITSIntMap::GetVal","Node with key %d not found in map. Returning -999.",key);
    return -999;
  }
}

void AliITSIntMap::Balance() {
  // method to balance the tree
  //  printf("balance H=%d --> ",GetTreeHeight());
  if (fNrEntries==0) return;
  if (!fFastAccess) InitFastAccess();
  fRoot = BalanceNode(0,fNrEntries-1);
  //  printf("H=%d\n",GetTreeHeight());
}

AliITSIntMapNode* AliITSIntMap::BalanceNode(Int_t lowInd, Int_t highInd) {
  // balances the tree by selecting the center of an index range 
  // (used recursively)
  if (lowInd>highInd) return NULL;
  Int_t thisInd = lowInd+(highInd-lowInd)/2;
  fFastAccessArray[thisInd]->Left() = BalanceNode(lowInd,thisInd-1);
  fFastAccessArray[thisInd]->Right() = BalanceNode(thisInd+1,highInd);
  return fFastAccessArray[thisInd];
}

void AliITSIntMap::ClearFastAccess(){
  // clears the fast access array of pointers
  if (fFastAccessArray!=NULL) {
    delete [] fFastAccessArray;
    fFastAccessArray=NULL;
  }
  fFastAccess=kFALSE;
  fFastAccessSerialize=kFALSE;
}

void AliITSIntMap::InitFastAccess(){
  // initializes the fast access array
  if (fFastAccess) return;
  ClearFastAccess();
  if (fNrEntries>0) {
    fFastAccessArray = new AliITSIntMapNode*[fNrEntries];
    fDummyIndex=0;
    InitFastAccessNode(fRoot);
    fFastAccess=kTRUE;
  }
}

void AliITSIntMap::InitFastAccessNode(AliITSIntMapNode* node) {
  // initializes the fast access array starting from node (used recursively)
  if (node==NULL) return;
  InitFastAccessNode(node->Left());
  fFastAccessArray[fDummyIndex++] = node;
  InitFastAccessNode(node->Right());
}

void AliITSIntMap::InitFastAccessSerialize(){
  // initializes the fast access array
  if (fFastAccessSerialize) return;
  ClearFastAccess();
  if (fNrEntries>0) {
    fFastAccessArray = new AliITSIntMapNode*[fNrEntries];
    fDummyIndex=0;
    InitFastAccessSerializeNode(fRoot);
    fFastAccessSerialize=kTRUE;
  }
}

void AliITSIntMap::InitFastAccessSerializeNode(AliITSIntMapNode* node) {
  // initializes the fast access array for tree ordering starting from node (used recursively)
  if (node==NULL) return;
  fFastAccessArray[fDummyIndex++] = node;
  InitFastAccessSerializeNode(node->Left());
  InitFastAccessSerializeNode(node->Right());
}

Int_t AliITSIntMap::GetKeyIndex(UInt_t index) {
  // returns the key of the node at position 'index' in the map
  // returns -1 if out of bounds
  if (index<fNrEntries) {
    if (!fFastAccess && !fFastAccessSerialize) InitFastAccess();
    return fFastAccessArray[index]->Key();
  }
  return -1;
}

Int_t AliITSIntMap::GetValIndex(UInt_t index) {
  // returns the value of the node at position 'index' in the map
  // returns -1 if out of bounds
  if (index<fNrEntries) {
    if (!fFastAccess && !fFastAccessSerialize) InitFastAccess();
    return fFastAccessArray[index]->Val();
  }
  return -1;
}

AliITSIntMapNode* AliITSIntMap::FindNodeIndex(UInt_t index, AliITSIntMapNode* node) const {
  // method to find the index:th node in the tree (used recursively)
  // this method should not be needed anymore, since GetKeyIndex/GetValIndex is faster
  static UInt_t fTmpInd;
  if (node==fRoot) fTmpInd=0;
  if (node->Left()!=NULL) {
    AliITSIntMapNode* tmpResult = FindNodeIndex(index,node->Left());
    if (tmpResult != NULL) {
      return tmpResult;
    }
  }
  if (fTmpInd==index) return node;
  fTmpInd++;
  if (node->Right()!=NULL) {
    AliITSIntMapNode* tmpResult = FindNodeIndex(index,node->Right());
    if (tmpResult != NULL) {
      return tmpResult;
    }
  }
  return NULL;
}

void AliITSIntMap::PrintEntries() const {
  // prints all the entries (key,value pairs) of the map
  printf("*** Map Entries: (key , value)***\n");
  PrintNode(fRoot);
  printf("*********************************\n");
}

void AliITSIntMap::PrintNode(AliITSIntMapNode* node) const {
  // method to print node entry (key,value) (used recursively)
  if (node==NULL) return;
  if (node->Left()!=NULL) PrintNode(node->Left());
  printf("%d , %d\n",node->Key(),node->Val());
  if (node->Right()!=NULL) PrintNode(node->Right());
}

UInt_t AliITSIntMap::GetTreeHeight() const {
  // returns the height of the tree
  return GetTreeHeightNode(fRoot);
}

UInt_t AliITSIntMap::GetTreeHeightNode(AliITSIntMapNode* node) const {
  // returns tree height for the sub tree starting from node (used recursively)
  if (node==NULL) return 0;
  UInt_t leftH = GetTreeHeightNode(node->Left());
  UInt_t rightH = GetTreeHeightNode(node->Right());
  if (leftH>=rightH) return leftH+1;
  else               return rightH+1;
}
 AliITSIntMap.cxx:1
 AliITSIntMap.cxx:2
 AliITSIntMap.cxx:3
 AliITSIntMap.cxx:4
 AliITSIntMap.cxx:5
 AliITSIntMap.cxx:6
 AliITSIntMap.cxx:7
 AliITSIntMap.cxx:8
 AliITSIntMap.cxx:9
 AliITSIntMap.cxx:10
 AliITSIntMap.cxx:11
 AliITSIntMap.cxx:12
 AliITSIntMap.cxx:13
 AliITSIntMap.cxx:14
 AliITSIntMap.cxx:15
 AliITSIntMap.cxx:16
 AliITSIntMap.cxx:17
 AliITSIntMap.cxx:18
 AliITSIntMap.cxx:19
 AliITSIntMap.cxx:20
 AliITSIntMap.cxx:21
 AliITSIntMap.cxx:22
 AliITSIntMap.cxx:23
 AliITSIntMap.cxx:24
 AliITSIntMap.cxx:25
 AliITSIntMap.cxx:26
 AliITSIntMap.cxx:27
 AliITSIntMap.cxx:28
 AliITSIntMap.cxx:29
 AliITSIntMap.cxx:30
 AliITSIntMap.cxx:31
 AliITSIntMap.cxx:32
 AliITSIntMap.cxx:33
 AliITSIntMap.cxx:34
 AliITSIntMap.cxx:35
 AliITSIntMap.cxx:36
 AliITSIntMap.cxx:37
 AliITSIntMap.cxx:38
 AliITSIntMap.cxx:39
 AliITSIntMap.cxx:40
 AliITSIntMap.cxx:41
 AliITSIntMap.cxx:42
 AliITSIntMap.cxx:43
 AliITSIntMap.cxx:44
 AliITSIntMap.cxx:45
 AliITSIntMap.cxx:46
 AliITSIntMap.cxx:47
 AliITSIntMap.cxx:48
 AliITSIntMap.cxx:49
 AliITSIntMap.cxx:50
 AliITSIntMap.cxx:51
 AliITSIntMap.cxx:52
 AliITSIntMap.cxx:53
 AliITSIntMap.cxx:54
 AliITSIntMap.cxx:55
 AliITSIntMap.cxx:56
 AliITSIntMap.cxx:57
 AliITSIntMap.cxx:58
 AliITSIntMap.cxx:59
 AliITSIntMap.cxx:60
 AliITSIntMap.cxx:61
 AliITSIntMap.cxx:62
 AliITSIntMap.cxx:63
 AliITSIntMap.cxx:64
 AliITSIntMap.cxx:65
 AliITSIntMap.cxx:66
 AliITSIntMap.cxx:67
 AliITSIntMap.cxx:68
 AliITSIntMap.cxx:69
 AliITSIntMap.cxx:70
 AliITSIntMap.cxx:71
 AliITSIntMap.cxx:72
 AliITSIntMap.cxx:73
 AliITSIntMap.cxx:74
 AliITSIntMap.cxx:75
 AliITSIntMap.cxx:76
 AliITSIntMap.cxx:77
 AliITSIntMap.cxx:78
 AliITSIntMap.cxx:79
 AliITSIntMap.cxx:80
 AliITSIntMap.cxx:81
 AliITSIntMap.cxx:82
 AliITSIntMap.cxx:83
 AliITSIntMap.cxx:84
 AliITSIntMap.cxx:85
 AliITSIntMap.cxx:86
 AliITSIntMap.cxx:87
 AliITSIntMap.cxx:88
 AliITSIntMap.cxx:89
 AliITSIntMap.cxx:90
 AliITSIntMap.cxx:91
 AliITSIntMap.cxx:92
 AliITSIntMap.cxx:93
 AliITSIntMap.cxx:94
 AliITSIntMap.cxx:95
 AliITSIntMap.cxx:96
 AliITSIntMap.cxx:97
 AliITSIntMap.cxx:98
 AliITSIntMap.cxx:99
 AliITSIntMap.cxx:100
 AliITSIntMap.cxx:101
 AliITSIntMap.cxx:102
 AliITSIntMap.cxx:103
 AliITSIntMap.cxx:104
 AliITSIntMap.cxx:105
 AliITSIntMap.cxx:106
 AliITSIntMap.cxx:107
 AliITSIntMap.cxx:108
 AliITSIntMap.cxx:109
 AliITSIntMap.cxx:110
 AliITSIntMap.cxx:111
 AliITSIntMap.cxx:112
 AliITSIntMap.cxx:113
 AliITSIntMap.cxx:114
 AliITSIntMap.cxx:115
 AliITSIntMap.cxx:116
 AliITSIntMap.cxx:117
 AliITSIntMap.cxx:118
 AliITSIntMap.cxx:119
 AliITSIntMap.cxx:120
 AliITSIntMap.cxx:121
 AliITSIntMap.cxx:122
 AliITSIntMap.cxx:123
 AliITSIntMap.cxx:124
 AliITSIntMap.cxx:125
 AliITSIntMap.cxx:126
 AliITSIntMap.cxx:127
 AliITSIntMap.cxx:128
 AliITSIntMap.cxx:129
 AliITSIntMap.cxx:130
 AliITSIntMap.cxx:131
 AliITSIntMap.cxx:132
 AliITSIntMap.cxx:133
 AliITSIntMap.cxx:134
 AliITSIntMap.cxx:135
 AliITSIntMap.cxx:136
 AliITSIntMap.cxx:137
 AliITSIntMap.cxx:138
 AliITSIntMap.cxx:139
 AliITSIntMap.cxx:140
 AliITSIntMap.cxx:141
 AliITSIntMap.cxx:142
 AliITSIntMap.cxx:143
 AliITSIntMap.cxx:144
 AliITSIntMap.cxx:145
 AliITSIntMap.cxx:146
 AliITSIntMap.cxx:147
 AliITSIntMap.cxx:148
 AliITSIntMap.cxx:149
 AliITSIntMap.cxx:150
 AliITSIntMap.cxx:151
 AliITSIntMap.cxx:152
 AliITSIntMap.cxx:153
 AliITSIntMap.cxx:154
 AliITSIntMap.cxx:155
 AliITSIntMap.cxx:156
 AliITSIntMap.cxx:157
 AliITSIntMap.cxx:158
 AliITSIntMap.cxx:159
 AliITSIntMap.cxx:160
 AliITSIntMap.cxx:161
 AliITSIntMap.cxx:162
 AliITSIntMap.cxx:163
 AliITSIntMap.cxx:164
 AliITSIntMap.cxx:165
 AliITSIntMap.cxx:166
 AliITSIntMap.cxx:167
 AliITSIntMap.cxx:168
 AliITSIntMap.cxx:169
 AliITSIntMap.cxx:170
 AliITSIntMap.cxx:171
 AliITSIntMap.cxx:172
 AliITSIntMap.cxx:173
 AliITSIntMap.cxx:174
 AliITSIntMap.cxx:175
 AliITSIntMap.cxx:176
 AliITSIntMap.cxx:177
 AliITSIntMap.cxx:178
 AliITSIntMap.cxx:179
 AliITSIntMap.cxx:180
 AliITSIntMap.cxx:181
 AliITSIntMap.cxx:182
 AliITSIntMap.cxx:183
 AliITSIntMap.cxx:184
 AliITSIntMap.cxx:185
 AliITSIntMap.cxx:186
 AliITSIntMap.cxx:187
 AliITSIntMap.cxx:188
 AliITSIntMap.cxx:189
 AliITSIntMap.cxx:190
 AliITSIntMap.cxx:191
 AliITSIntMap.cxx:192
 AliITSIntMap.cxx:193
 AliITSIntMap.cxx:194
 AliITSIntMap.cxx:195
 AliITSIntMap.cxx:196
 AliITSIntMap.cxx:197
 AliITSIntMap.cxx:198
 AliITSIntMap.cxx:199
 AliITSIntMap.cxx:200
 AliITSIntMap.cxx:201
 AliITSIntMap.cxx:202
 AliITSIntMap.cxx:203
 AliITSIntMap.cxx:204
 AliITSIntMap.cxx:205
 AliITSIntMap.cxx:206
 AliITSIntMap.cxx:207
 AliITSIntMap.cxx:208
 AliITSIntMap.cxx:209
 AliITSIntMap.cxx:210
 AliITSIntMap.cxx:211
 AliITSIntMap.cxx:212
 AliITSIntMap.cxx:213
 AliITSIntMap.cxx:214
 AliITSIntMap.cxx:215
 AliITSIntMap.cxx:216
 AliITSIntMap.cxx:217
 AliITSIntMap.cxx:218
 AliITSIntMap.cxx:219
 AliITSIntMap.cxx:220
 AliITSIntMap.cxx:221
 AliITSIntMap.cxx:222
 AliITSIntMap.cxx:223
 AliITSIntMap.cxx:224
 AliITSIntMap.cxx:225
 AliITSIntMap.cxx:226
 AliITSIntMap.cxx:227
 AliITSIntMap.cxx:228
 AliITSIntMap.cxx:229
 AliITSIntMap.cxx:230
 AliITSIntMap.cxx:231
 AliITSIntMap.cxx:232
 AliITSIntMap.cxx:233
 AliITSIntMap.cxx:234
 AliITSIntMap.cxx:235
 AliITSIntMap.cxx:236
 AliITSIntMap.cxx:237
 AliITSIntMap.cxx:238
 AliITSIntMap.cxx:239
 AliITSIntMap.cxx:240
 AliITSIntMap.cxx:241
 AliITSIntMap.cxx:242
 AliITSIntMap.cxx:243
 AliITSIntMap.cxx:244
 AliITSIntMap.cxx:245
 AliITSIntMap.cxx:246
 AliITSIntMap.cxx:247
 AliITSIntMap.cxx:248
 AliITSIntMap.cxx:249
 AliITSIntMap.cxx:250
 AliITSIntMap.cxx:251
 AliITSIntMap.cxx:252
 AliITSIntMap.cxx:253
 AliITSIntMap.cxx:254
 AliITSIntMap.cxx:255
 AliITSIntMap.cxx:256
 AliITSIntMap.cxx:257
 AliITSIntMap.cxx:258
 AliITSIntMap.cxx:259
 AliITSIntMap.cxx:260
 AliITSIntMap.cxx:261
 AliITSIntMap.cxx:262
 AliITSIntMap.cxx:263
 AliITSIntMap.cxx:264
 AliITSIntMap.cxx:265
 AliITSIntMap.cxx:266
 AliITSIntMap.cxx:267
 AliITSIntMap.cxx:268
 AliITSIntMap.cxx:269
 AliITSIntMap.cxx:270
 AliITSIntMap.cxx:271
 AliITSIntMap.cxx:272
 AliITSIntMap.cxx:273
 AliITSIntMap.cxx:274
 AliITSIntMap.cxx:275
 AliITSIntMap.cxx:276
 AliITSIntMap.cxx:277
 AliITSIntMap.cxx:278
 AliITSIntMap.cxx:279
 AliITSIntMap.cxx:280
 AliITSIntMap.cxx:281
 AliITSIntMap.cxx:282
 AliITSIntMap.cxx:283
 AliITSIntMap.cxx:284
 AliITSIntMap.cxx:285
 AliITSIntMap.cxx:286
 AliITSIntMap.cxx:287
 AliITSIntMap.cxx:288
 AliITSIntMap.cxx:289
 AliITSIntMap.cxx:290
 AliITSIntMap.cxx:291
 AliITSIntMap.cxx:292
 AliITSIntMap.cxx:293
 AliITSIntMap.cxx:294
 AliITSIntMap.cxx:295
 AliITSIntMap.cxx:296
 AliITSIntMap.cxx:297
 AliITSIntMap.cxx:298
 AliITSIntMap.cxx:299
 AliITSIntMap.cxx:300
 AliITSIntMap.cxx:301
 AliITSIntMap.cxx:302
 AliITSIntMap.cxx:303
 AliITSIntMap.cxx:304
 AliITSIntMap.cxx:305
 AliITSIntMap.cxx:306
 AliITSIntMap.cxx:307
 AliITSIntMap.cxx:308
 AliITSIntMap.cxx:309
 AliITSIntMap.cxx:310
 AliITSIntMap.cxx:311
 AliITSIntMap.cxx:312
 AliITSIntMap.cxx:313
 AliITSIntMap.cxx:314
 AliITSIntMap.cxx:315
 AliITSIntMap.cxx:316
 AliITSIntMap.cxx:317
 AliITSIntMap.cxx:318
 AliITSIntMap.cxx:319
 AliITSIntMap.cxx:320
 AliITSIntMap.cxx:321
 AliITSIntMap.cxx:322
 AliITSIntMap.cxx:323
 AliITSIntMap.cxx:324
 AliITSIntMap.cxx:325
 AliITSIntMap.cxx:326
 AliITSIntMap.cxx:327
 AliITSIntMap.cxx:328
 AliITSIntMap.cxx:329
 AliITSIntMap.cxx:330
 AliITSIntMap.cxx:331
 AliITSIntMap.cxx:332
 AliITSIntMap.cxx:333
 AliITSIntMap.cxx:334
 AliITSIntMap.cxx:335
 AliITSIntMap.cxx:336
 AliITSIntMap.cxx:337
 AliITSIntMap.cxx:338
 AliITSIntMap.cxx:339
 AliITSIntMap.cxx:340
 AliITSIntMap.cxx:341
 AliITSIntMap.cxx:342
 AliITSIntMap.cxx:343
 AliITSIntMap.cxx:344
 AliITSIntMap.cxx:345
 AliITSIntMap.cxx:346
 AliITSIntMap.cxx:347
 AliITSIntMap.cxx:348
 AliITSIntMap.cxx:349
 AliITSIntMap.cxx:350
 AliITSIntMap.cxx:351
 AliITSIntMap.cxx:352
 AliITSIntMap.cxx:353
 AliITSIntMap.cxx:354
 AliITSIntMap.cxx:355
 AliITSIntMap.cxx:356
 AliITSIntMap.cxx:357
 AliITSIntMap.cxx:358
 AliITSIntMap.cxx:359