ROOT logo
using namespace std;
#include <iostream>
#include <iomanip>
#include "hmdclistgroupcells.h"

//*-- Author : V. Pechenov
//*-- Modified : 25/06/2004 by V.Pechenov

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////
//
//  HMdcList12GroupCells - list groups of cells in 12 layers (2 mdc)
//                         It's base class for HMdcClus
//
//  HMdcList24GroupCells - list groups of cells in 24 layers (4 mdc)
//
///////////////////////////////////////////////////////////////////////

Int_t HMdcList12GroupCells::compare(const HMdcList12GroupCells* lst,
    Int_t l1, Int_t l2,HMdcList12GroupCells* lstIdent) const {
  // return the num. of layers which have one or more the same cells
  // if lstIdent!=0 list of identical wires will be stored in lstIdent
  if(l1>=12) return 0;
  setInBounds(l1,l2);
  Int_t nLay=0;
  if(lstIdent) lstIdent->clear();
  for(Int_t lay=l1; lay<=l2; lay++) {
    Int_t laySh = lay*laySz;
    if(arr[laySh]==0 || lst->arr[laySh]==0) continue;  // no cells in lay.
    Int_t c1=firstCell[lay];
    Int_t c2=lst->firstCell[lay];
    if( !findOverlap(c1,c2) ) continue;
    if(lstIdent) {
      if(HMdcTBArray::andArr(cellAddrC(lay,c1),lst->cellAddrC(lay,c1),
                             (c2-c1)>>2,lstIdent->layAddr(lay))) {
        lstIdent->firstCell[lay]=c1;
        if(lstIdent->arr[laySh] == 0) lstIdent->shiftLeft(lay);
        nLay++;
      }
    } else if(HMdcTBArray::isIdenBits(cellAddrC(lay,c1),lst->cellAddrC(lay,c1),
                                      (c2-c1)>>2)) nLay++;
  }
  return nLay;
}

Bool_t HMdcList12GroupCells::findOverlap(Int_t& c1, Int_t& c2) {
  // c1 and c2 - first cells in the same layers of two lists of cells
  // return kTRUE if overlap exist
  if(c1 < c2) {
    Int_t ct = c2;
    c2 = c1;
    c1 = ct;
  }
  c2 += 48;
  if(c1 <= c2) return kTRUE;
  return kFALSE;
}

Int_t HMdcList12GroupCells::compareAndUnset(const HMdcList12GroupCells* lst,
    HMdcList12GroupCells* lstIdent, Int_t modi) {
  // return the num. of identical drift times
  // lstIdent - list of identical drift times will be stored in lstIdent
  // Idendical drift times will be unseted in "this" obect.
  Int_t nIdDrTm = 0;
  lstIdent->clear();
  Int_t lay    = (modi != 1) ?  0 : 6;
  Int_t layEnd = (modi != 0) ? 12 : 6;
  for(;lay<layEnd; lay++) {
    Int_t laySh = lay*laySz;
    if(arr[laySh]==0 || lst->arr[laySh]==0) continue; // no cells in lay.
    Int_t c1 = firstCell[lay];
    Int_t c2 = lst->firstCell[lay];
    if( !findOverlap(c1,c2) ) continue;
    Int_t nId = HMdcBArray::andArrAndUnset(cellAddr(lay,c1),
        lst->cellAddrC(lay,c1),(c2-c1)>>2,lstIdent->layAddr(lay));
    if(nId > 0) {
      nIdDrTm += nId;
      lstIdent->firstCell[lay] = c1;
      if(lstIdent->arr[laySh] == 0) lstIdent->shiftLeft(lay);
      if(arr[laySh] == 0) shiftLeft(lay);
    }
  }
  return nIdDrTm;
}

Int_t HMdcList12GroupCells::nIdentDrTimes(const HMdcList12GroupCells* lst,
    Int_t l1, Int_t l2) const {
  // return the num. of identical drift times (cells now)
  if(l1>=12) return 0;
  setInBounds(l1,l2);
  Int_t nICells=0;
  for(Int_t lay=l1; lay<=l2; lay++) {
    Int_t laySh = lay*laySz;
    if(arr[laySh]==0 || lst->arr[laySh]==0) continue;  // no cells in lay.
    Int_t c1 = firstCell[lay];
    Int_t c2 = lst->firstCell[lay];
    if(c1 < c2) {
      Int_t ct = c2;
      c2 = c1;
      c1 = ct;
    }
    c2 += 48;
    if(c1 <= c2) nICells += HMdcTBArray::compare(cellAddrC(lay,c1),
                                            lst->cellAddrC(lay,c1),(c2-c1)>>2);
  }
  return nICells;
}

Int_t HMdcList12GroupCells::getMaxNCellsPerLay(void) const {
  Int_t maxNum=0;
  for(Int_t lay=0;lay<12;lay++) {
    Int_t nl=getNCells(lay);
    if(nl>maxNum) maxNum=nl;
  }
  return maxNum;
}

Int_t HMdcList12GroupCells::add(HMdcList12GroupCells* lst) {
  // return: 0 - ok.!;  n>0 - num.cells excl.from cl.
  Int_t nLay=0;
  for(Int_t lay=0; lay<12; lay++) {
    UChar_t *lst2=(lst->arr)+lay*laySz;
    if(HMdcTBArray::getNSet(lst2,lst2+11) == 0) continue;
    UChar_t *lst1=arr+lay*laySz;
    if(HMdcTBArray::getNSet(lst1,lst1+11) == 0) {
      for(Int_t n=0; n<laySz; n++) lst1[n] = lst2[n];
      firstCell[lay]=lst->firstCell[lay];
      continue;
    }
    Int_t sing=firstCell[lay] - lst->firstCell[lay];
    if(sing != 0) {
      Int_t shift=((sing<0) ? -sing:sing)>>2;  // == /4
      if(shift>12) shift=12;
      if( sing < 0 ) {
        nLay=HMdcTBArray::getNSet(lst2+laySz-shift,lst2+11); //only for message!
        for(Int_t n=shift; n<laySz; n++) lst1[n] |= lst2[n-shift];
      }
      else if( sing > 0 ){
        nLay=HMdcTBArray::getNSet(lst1+laySz-shift,lst1+11); //only for message!
        for(Int_t n=shift; n<laySz; n++) lst2[n] |= lst1[n-shift];
        for(Int_t n=0; n<laySz; n++) lst1[n] = lst2[n];
        firstCell[lay]=lst->firstCell[lay];
      }
    }
    else for(Int_t n=0; n<laySz; n++) lst1[n] |= lst2[n];
  }
  return nLay;
}

Bool_t HMdcList12GroupCells::isIncluded(const HMdcList12GroupCells& lst, Int_t l1,Int_t l2) const {
  // return kTRUE if all cells in "this" is included in "lst"
  for(Int_t lay=l1; lay<=l2; lay++) {
   Int_t lsh=lay*laySz;
    const UChar_t* arr1=arr+lsh;
    if((*arr1)==0) continue;
    const UChar_t* arr2=lst.arr+lsh;
    if((*arr2)==0) return kFALSE;
    Int_t shift=(firstCell[lay]-lst.firstCell[lay])>>2;
    if(shift<0 || shift>=laySz) return kFALSE;
    const UChar_t* arr1e2=arr1+laySz;
    const UChar_t* arr1e=arr1e2-shift;
    arr2 += shift;
    for(;arr1<arr1e;arr1++) {
      if(*arr1 && *arr1 != (*arr1 & *arr2)) return kFALSE;
      arr2++;
    }
    if(shift) for(;arr1<arr1e2;arr1++) if(*arr1) return kFALSE;
  }
  return kTRUE;
}

Int_t HMdcList12GroupCells::getActiveModule(void) const {
  //return 0, 1 or -2 (-2 - two modules have fired wires)
  Int_t mod = 0;
  for(Int_t lay=0; lay<6; lay++) {
    if(arr[lay*laySz] == 0) continue;
    mod |= 1;
    break;
  }
  for(Int_t lay=6; lay<12; lay++) {
    if(arr[lay*laySz] == 0) continue;
    mod |= 2;
    break;
  }
  return mod==3 ? -2 : --mod;
}

void HMdcList12GroupCells::print(void) const {
  for(Int_t lay=0; lay<12; lay++) print(lay);
}

void HMdcList12GroupCells::print(Int_t lay) const {
  if(getNCells(lay) == 0) return;
  printf("L.%2i  %2i cells:",lay+1,getNCells(lay));
  Int_t cell=-1;
  while((cell=next(lay,cell)) >= 0) printf(" %3i(%i)",cell+1,getTime(lay,cell));
  printf("\n");
}

void HMdcList12GroupCells::copyData(const UChar_t* a,const Int_t* fc) {
  memcpy(arr,a,144);
  memcpy(firstCell,fc,48);  // 48=12*sizeof(Int_t)
}
                            
Int_t HMdcList24GroupCells::compare(HMdcList24GroupCells* lst,
    Int_t l1, Int_t l2) const {
  // return the num. of layers which have one or more identical cells
  if(l1>=24) return 0;
  setInBounds(l1,l2);
  Int_t nLay=0;
  for(Int_t lay=l1; lay<=l2; lay++) {
    Int_t laySh = lay*laySz;
    if(arr[laySh]==0 || lst->arr[laySh]==0) continue;  // no cells in lay.
    Int_t c1=firstCell[lay];
    Int_t c2=lst->firstCell[lay];
    if( !HMdcList12GroupCells::findOverlap(c1,c2) ) continue;
    if(HMdcTBArray::isIdenBits(cellAddrC(lay,c1),lst->cellAddrC(lay,c1),
                               (c2-c1)>>2)) nLay++;
  }
  return nLay;
}

Int_t HMdcList24GroupCells::getMaxNCellsPerLay(void) const {
  Int_t maxNum=0;
  for(Int_t lay=0;lay<24;lay++) {
    Int_t nl=getNCells(lay);
    if(nl>maxNum) maxNum=nl;
  }
  return maxNum;
}

Int_t HMdcList24GroupCells::nIdentDrTimes(HMdcList24GroupCells* lst,Int_t l1,Int_t l2) const {
  // return the num. of identical drift times (cells now)
  if(l1>=24) return 0;
  setInBounds(l1,l2);
  Int_t nICells=0;
  for(Int_t lay=l1; lay<=l2; lay++) {
    Int_t laySh = lay*laySz;
    if(arr[laySh]==0 || lst->arr[laySh]==0) continue;  // no cells in lay.
    Int_t c1 = firstCell[lay];
    Int_t c2 = lst->firstCell[lay];
    if( HMdcList12GroupCells::findOverlap(c1,c2) ) nICells +=
      HMdcTBArray::compare(cellAddrC(lay,c1),lst->cellAddrC(lay,c1),(c2-c1)>>2);
  }
  return nICells;
}

Int_t HMdcList24GroupCells::add(HMdcList24GroupCells* lst) {
  // return: 0 - ok.!;  n>0 - num.cells excl.from cl.
  Int_t nLay=0;
  for(Int_t lay=0; lay<24; lay++) {
    UChar_t *lst2=(lst->arr)+lay*laySz;
    if(HMdcTBArray::getNSet(lst2,lst2+11) == 0) continue;
    UChar_t *lst1=arr+lay*laySz;
    if(HMdcTBArray::getNSet(lst1,lst1+11) == 0) {
      for(Int_t n=0; n<laySz; n++) lst1[n] = lst2[n];
      firstCell[lay]=lst->firstCell[lay];
      continue;
    }
    Int_t sing=firstCell[lay] - lst->firstCell[lay];
    if(sing != 0) {
      Int_t shift=((sing<0) ? -sing:sing)>>2;  // == /4
      if(shift>12) shift=12;
      if( sing < 0 ) {
        nLay=HMdcTBArray::getNSet(lst2+laySz-shift,lst2+11); //??? only for message!?
        for(Int_t n=shift; n<laySz; n++) lst1[n] |= lst2[n-shift];
      } else if( sing > 0 ){
        nLay=HMdcTBArray::getNSet(lst1+laySz-shift,lst1+11); //??? only for message!?
        for(Int_t n=shift; n<laySz; n++) lst2[n] |= lst1[n-shift];
        for(Int_t n=0; n<laySz; n++) lst1[n] = lst2[n];
        firstCell[lay]=lst->firstCell[lay];
      }
    }
    else for(Int_t n=0; n<laySz; n++) lst1[n] |= lst2[n];
  }
  return nLay;
}

Bool_t HMdcList24GroupCells::isIncluded(HMdcList24GroupCells& lst,
    Int_t l1, Int_t l2) const {
  // return kTRUE if all cells in "this" are included in "lst"
  for(Int_t lay=l1; lay<=l2; lay++) {
   Int_t lsh=lay*laySz;
    const UChar_t* arr1=arr+lsh;
    if((*arr1)==0) continue;
    const UChar_t* arr2=lst.arr+lsh;
    if((*arr2)==0) return kFALSE;
    Int_t shift=(firstCell[lay]-lst.firstCell[lay])>>2;
    if(shift<0 || shift>=laySz) return kFALSE;
    const UChar_t* arr1e2=arr1+laySz;
    const UChar_t* arr1e=arr1e2-shift;
    arr2 += shift;
    for(;arr1<arr1e;arr1++) {
      if(*arr1 && *arr1 != (*arr1 & *arr2)) return kFALSE;
      arr2++;
    }
    if(shift) for(;arr1<arr1e2;arr1++) if(*arr1) return kFALSE;
  }
  return kTRUE;
}

void HMdcList24GroupCells::print(void) const {
  for(Int_t lay=0; lay<24; lay++) print(lay);
}

void HMdcList24GroupCells::print(Int_t lay) const {
  if(getNCells(lay) == 0) return;
  printf("L.%i  %i cells:",lay+1,getNCells(lay));
  Int_t cell=-1;
  while((cell=next(lay,cell)) >= 0) printf(" %i(%i)",cell+1,getTime(lay,cell));
  printf("\n");
}

Bool_t HMdcList24GroupCells::getSeg(HMdcList12GroupCells& fSeg,Int_t seg) const {
  if(&fSeg==0 || seg<0 || seg>1) return kFALSE;
  fSeg.copyData(arr + 144*seg,firstCell + 12*seg);
  return kTRUE;
}

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