ROOT logo
#ifndef HMDCLISTGROUPCELLS_H
#define HMDCLISTGROUPCELLS_H

#include "hmdctbarray.h"
#include "TObject.h"

#include <string.h>

class HMdcList12GroupCells : public TObject {
  private:
    enum {laySz=12};        // size of on layer
    UChar_t arr[144];       // 144= 12bytes * 12layers
    Int_t firstCell[12];    // firstCell[layer] - first cell in layer
  public:
    HMdcList12GroupCells(void)  {clear();}
    ~HMdcList12GroupCells(void) {}
    inline HMdcList12GroupCells& operator = (const HMdcList12GroupCells& v);
    inline void    clear(void);
    inline Int_t   setTime(Int_t lay, Int_t cell, UChar_t time);
    Int_t          add(HMdcList12GroupCells *lst);
    inline void    delTime(Int_t lay, Int_t cell, UChar_t time);
    inline Int_t   getNCells(Int_t lay, Int_t layEnd=-1) const;
    inline Int_t   getNCells(void) const;          // Total num.of hits
    Int_t          getMaxNCellsPerLay(void) const; // Max.number of cells per layer
    inline Int_t   getNDrTimes(void) const;
    inline Int_t   getNDrTimes(Int_t lay) const;
    inline Int_t   getNDrTimes(Int_t lay1,Int_t lay2) const;
    inline Int_t   getNDrTimesMod(Int_t m) const {return getNDrTimes(m*6,m*6+5);}
    inline Int_t   getNLayers(void) const;    // Num. of layers with fired wires
    inline Int_t   getNLayers(Int_t imod) const;
    inline Int_t   getNLayersMod(Int_t mod) const; // -/- in module
    inline UChar_t getListLayers(Int_t imod=-1) const;
    inline Int_t   getCell(Int_t lay, Int_t idx) const;
    inline Int_t   getFirstCell(Int_t lay) const;
    inline Int_t   getLastCell(Int_t lay) const;
    Int_t          getActiveModule(void) const;
    inline Int_t   get4FirstCells(Int_t lay, Int_t* list) const; // for Hit&Seg
    inline UShort_t getOneLayerGroup(Int_t lay) const;
    inline Int_t   next(Int_t lay, Int_t prCell) const;
    inline Int_t   next(Int_t lay, Int_t prCell, UChar_t& tm) const;
    inline Bool_t  getNext(Int_t lay, Int_t& cell) const;
    inline Bool_t  getNextCell(Int_t& lay, Int_t& cell) const;
    inline Int_t   previous(Int_t lay, Int_t prCell) const;
    inline UChar_t getTime(Int_t lay, Int_t cell) const;
    Int_t          compare(const HMdcList12GroupCells* lst, Int_t l1=-1,
                           Int_t l2=-1, HMdcList12GroupCells* lstIdent=0) const;
    Int_t          compareAndUnset(const HMdcList12GroupCells* lst,
                                  HMdcList12GroupCells* lstIdent,Int_t modi=-1);
    Bool_t         isIncluded(const HMdcList12GroupCells& lst, Int_t l1=0,Int_t l2=11) const;
    Int_t          nIdentDrTimes(const HMdcList12GroupCells* lst,Int_t l1=0,Int_t l2=11) const;
    void           print(void) const;
    void           print(Int_t lay) const;
    
    // Next functions NOT for user:
    const  UChar_t*       getArr(void) const             {return arr;}
    const  Int_t*         getFirstCell(void) const       {return firstCell;}
    static Bool_t         findOverlap(Int_t& c1, Int_t& c2);
    void                  copyData(const UChar_t* a,const Int_t* fc);
    
  private:
    inline void           setInBounds(Int_t& l1, Int_t& l2) const;
    inline Bool_t         isLayOk(Int_t l) const;
    inline void           shiftLeft(Int_t lay);
    inline UChar_t*       layAddr(Int_t lay) {return arr+lay*laySz;}
    inline UChar_t*       cellAddr(Int_t lay,Int_t cell) {
                              return arr+lay*laySz+((cell-firstCell[lay])>>2);}
    inline const UChar_t* layAddrC(Int_t lay) const {return arr+lay*laySz;}
    inline const UChar_t* cellAddrC(Int_t lay,Int_t cell) const {
                              return arr+lay*laySz+((cell-firstCell[lay])>>2);}

  ClassDef(HMdcList12GroupCells,1) //List of all cells in layer
};

inline HMdcList12GroupCells& HMdcList12GroupCells::operator =
    (const HMdcList12GroupCells& lst) {
  memcpy(arr,lst.arr,144);
  memcpy(firstCell,lst.firstCell,48); // 12*sizeof(Int_t)
  return *this;
}

inline void HMdcList12GroupCells::clear(void) {
  memset(arr,0,144);
  for(Int_t l=0; l<12; l++) firstCell[l]=0;
}

inline Bool_t HMdcList12GroupCells::isLayOk(Int_t l) const {
  return l>=0 && l<12;
}
    
inline Int_t HMdcList12GroupCells::setTime(Int_t lay, Int_t cell, UChar_t time) {
  // return: 0 - ok.!;  n>0 - num.cells excl.from cl.
  if( cell<0 || (time&3)==0 || !isLayOk(lay)) return 0;
  Int_t nCellsDel=0;
  UChar_t *iLayer=arr+lay*laySz;
  UChar_t *pEnd=iLayer+11;
  if(*iLayer == 0) firstCell[lay]=cell & 0xFFFFFFFC;  // =(cell/4)*4
  else if(cell < firstCell[lay]) {
    if(firstCell[lay]-cell >= 48) {
      nCellsDel = getNCells(lay);
      memset(iLayer,0,laySz);
      firstCell[lay] = cell;
    } else {
      Int_t sh=(firstCell[lay]>>2)-(cell>>2);
      nCellsDel=HMdcTBArray::getNSet(pEnd-sh+1,pEnd);
      HMdcTBArray::shiftRight(iLayer,pEnd,pEnd-sh);
      firstCell[lay] = cell & 0xFFFFFFFC;
    }
  }
  else if( cell-firstCell[lay] >= 48 ) return 1; // out of data array
  HMdcTBArray::set(iLayer, cell-firstCell[lay], time);
  return nCellsDel;
}

inline void HMdcList12GroupCells::delTime(Int_t lay, Int_t cell, UChar_t time) {
  Int_t pos=cell-firstCell[lay];
  if(pos < 0 || pos >=  48) return;
  UChar_t* iLayer=arr+lay*laySz;
  HMdcTBArray::unset(iLayer, pos, time);
  if(*iLayer == 0) shiftLeft(lay);
}

inline void HMdcList12GroupCells::shiftLeft(Int_t lay) {
  UChar_t* iLayer=arr+lay*laySz;
  UChar_t* pEnd=iLayer+11;
  Int_t sh=HMdcTBArray::first(iLayer,pEnd);
  if(sh < 0) firstCell[lay]=0;
  else {
    sh = sh>>2;
    HMdcTBArray::shiftLeft(iLayer,pEnd,iLayer+sh);
    firstCell[lay] += (sh<<2);
  }
}

inline Int_t HMdcList12GroupCells::getNCells(Int_t lay, Int_t layEnd) const {
  if(layEnd==-1) layEnd=lay;
  if(!isLayOk(lay) || !isLayOk(layEnd) || lay>layEnd) return -1;
  return HMdcTBArray::getNSet(arr+lay*laySz,arr+layEnd*laySz+11);
}

inline Int_t HMdcList12GroupCells::getNCells(void) const {
  return HMdcTBArray::getNSet(arr,arr+143);
}

inline Int_t HMdcList12GroupCells::getNDrTimes(void) const {
  return HMdcBArray::getNSet(arr,arr+143);
}

inline Int_t HMdcList12GroupCells::getNDrTimes(Int_t lay) const {
  if(!isLayOk(lay)) return 0;
  const UChar_t* layArr = arr+lay*laySz;
  if( *layArr ) return HMdcBArray::getNSet(layArr,layArr+11);
  return 0;
}

inline Int_t HMdcList12GroupCells::getNDrTimes(Int_t lay1,Int_t lay2) const {
  if(lay1<0 || lay2>=12) return -1;
  return HMdcBArray::getNSet(arr+lay1*laySz,arr+lay2*laySz+11);
}

inline Int_t HMdcList12GroupCells::getCell(Int_t lay, Int_t idx) const {
  // return: -1 - idx <0 or >num.cells
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  Int_t pos=HMdcTBArray::position(layArr,layArr+11,idx);
  if(pos >= 0) return pos+firstCell[lay];
  return -1;
}

inline Int_t HMdcList12GroupCells::getFirstCell(Int_t lay) const {
  // return: -1 - num.cells=0
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;
  Int_t pos=HMdcTBArray::first(layArr,layArr+11);
  if(pos >= 0) return pos+firstCell[lay];
  return -1;
}

inline Int_t HMdcList12GroupCells::get4FirstCells(Int_t lay, Int_t* list) const {
  // return: first cell (frCell) or -1 (num.cells=0)
  // fill list[0]-time of frCell, time frCell+1, ..., time frCell+3
  if(!isLayOk(lay)) return -1;
  const UChar_t* addr=arr+lay*laySz;
  Int_t pos=HMdcTBArray::first(addr,addr+11);
  if(pos < 0) return -1;
  Int_t fcell=firstCell[lay]+pos;
  Int_t posLast=pos+4;
  for(Int_t ps=pos; ps<posLast; ps++) {
    *list=HMdcTBArray::get(addr,ps);
    list++;
  }
  return fcell;
}

inline UShort_t HMdcList12GroupCells::getOneLayerGroup(Int_t lay) const {
  // Return list of cells of one layer in format of HMdcSeg
  if(!isLayOk(lay)) return 0;
  const UChar_t* addr=arr+lay*laySz;
  Int_t pos = HMdcTBArray::first(addr,addr+11);
  Int_t bin = pos >> 2;  // >>2 eq. /4
  Int_t sh  = (pos & 3) << 1;
  UChar_t  l4wr = (addr[bin]>>sh) | (addr[bin+1]<<(8-sh));
  return (UShort_t(firstCell[lay]+pos) << 8) | UShort_t(l4wr);
}

inline Int_t HMdcList12GroupCells::getNLayers(Int_t imod) const {
  if(imod<0||imod>1) return getNLayers();
  return getNLayersMod(imod);
}

inline Int_t HMdcList12GroupCells::getNLayers(void) const {
  Int_t nLayers=0;
  for(Int_t lay=0; lay<12; lay++) if(arr[lay*laySz] > 0) nLayers++;
  return nLayers;
}

inline UChar_t HMdcList12GroupCells::getListLayers(Int_t imod) const {
  // imod - module number in segment (0 or 1)
  // imod== -1 - List_imod0|List_imod1
  // return 6 bits, one bit per layer
  if(imod<-1 || imod>1) return 0;
  Int_t im1 = imod==-1 ? 0:imod;
  Int_t im2 = imod==-1 ? 1:imod;
  UChar_t layList = 0;
  for(Int_t im=im1;im<=im2;im++) {
    Int_t lsh = im*6;
    for(Int_t l=0;l<6;l++) if(arr[(l+lsh)*laySz] > 0) layList |= 1<<l;
  }
  return layList;
}

inline Int_t HMdcList12GroupCells::getNLayersMod(Int_t mod) const {
  if(mod<0 || mod>1) return 0;
  Int_t nLayers=0;
  for(Int_t lay=mod*6; lay<(mod+1)*6; lay++) if(arr[lay*laySz] > 0) nLayers++;
  return nLayers;
}
    
inline Int_t HMdcList12GroupCells::getLastCell(Int_t lay) const {
  // return: -2 - num.cells=0
  if(!isLayOk(lay)) return -2;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -2;
  Int_t pos=HMdcTBArray::last(layArr,layArr+11);
  if(pos >= 0) return pos+firstCell[lay];
  return -2;
}

inline Int_t HMdcList12GroupCells::next(Int_t lay, Int_t prCell) const {
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;          // no wires in layer
  Int_t cell = HMdcTBArray::next(layArr,layArr+11,prCell-firstCell[lay]);
  if(cell>=0) return cell+firstCell[lay];
  return -1;
}

inline Int_t HMdcList12GroupCells::next(Int_t lay, Int_t prCell, UChar_t& tm) 
    const {
  // return newxt cell and drift time indexis ( 1 - time1 in HMdcCal1,
  // 2 - time2 in HMdcCal2 and 3 for time1+time2
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;
  Int_t cell = HMdcTBArray::next(layArr,layArr+11,prCell-firstCell[lay]);
  if(cell<0) return cell;
  tm = HMdcTBArray::get(layArr,cell);
  return cell+firstCell[lay];
}

inline Bool_t HMdcList12GroupCells::getNext(Int_t lay, Int_t& cell) const {
  cell=next(lay,cell);
  if(cell>=0) return kTRUE;
  return kFALSE;
}

inline Bool_t HMdcList12GroupCells::getNextCell(Int_t& lay, Int_t& cell) const {
  if(lay<0) {
    lay=0;
    cell=-1;
  }
  for(;lay<12;lay++) if(getNext(lay,cell)) return kTRUE;
  return kFALSE;
}

inline Int_t HMdcList12GroupCells::previous(Int_t lay, Int_t prCell) const {
  if(!isLayOk(lay)) return kFALSE;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;          // no wires in layer
  Int_t cell = HMdcTBArray::previous(layArr,layArr+11,prCell-firstCell[lay]);
  if(cell>=0) return cell+firstCell[lay];
  return -1;
}

inline UChar_t HMdcList12GroupCells::getTime(Int_t lay, Int_t cell) const {
  Int_t pos=cell-firstCell[lay];
  if(pos<0 || pos>=48) return 0;
  return HMdcTBArray::get(arr+lay*laySz,pos);
}

inline void HMdcList12GroupCells::setInBounds(Int_t& l1, Int_t& l2) const {
  if(l1<0) {
    l1=0;
    l2=11;
  } else  {
    if(l2<0) l2=l1;
    else if(l2>=12) l2=11;
  }
}

class HMdcList24GroupCells : public TObject {
  private:
    enum {laySz=12};
    UChar_t arr[288];       // 288= 12bytes * 24layers 
    Int_t firstCell[24];    // firstCell[layer] - first cell in layer
  public:
    HMdcList24GroupCells() {clear();}
    ~HMdcList24GroupCells(void) {}
    inline HMdcList24GroupCells& operator = (const HMdcList24GroupCells& v);
    inline void    clear(Int_t seg=-1);
    inline void    setSeg1(const HMdcList12GroupCells* seg);
    inline void    setSeg2(const HMdcList12GroupCells* seg);
    inline void    set(const HMdcList12GroupCells* seg1,
                       const HMdcList12GroupCells* seg2);
    inline Int_t   setTime(Int_t lay, Int_t cell, UChar_t time);
    Int_t          add(HMdcList24GroupCells *lst);
    inline void    delTime(Int_t lay, Int_t cell, UChar_t time);
    
//    inline Int_t   getNCells(Int_t lay, Int_t layEnd=-1) const;
    inline Int_t   getNCells(Int_t lay) const;
    inline Int_t   getNCellsMod(Int_t mod) const;
    inline Int_t   getNCells(void) const;          // Total num.of cells
    Int_t          getMaxNCellsPerLay(void) const; // Max. numb.of cells/layer
    inline Int_t   getNDrTimes(void) const;
    inline Int_t   getNDrTimes(Int_t lay) const;
    inline Int_t   getNDrTimes(Int_t lay1,Int_t lay2) const;
    inline Int_t   getNDrTimesMod(Int_t m) const {return getNDrTimes(m*6,m*6+5);}
    inline Int_t   getNLayers(void) const;          // Num. fired layers
    inline Int_t   getNLayersMod(Int_t mod) const;  // -/- in module
    inline UChar_t getListLayers(Int_t imod=-1) const;
    inline Int_t   getCell(Int_t lay, Int_t idx) const;
    inline Int_t   getFirstCell(Int_t lay) const;
    inline Int_t   getLastCell(Int_t lay) const;
    inline Int_t   get4FirstCells(Int_t lay, Int_t* list) const; // for Hit&Seg
    inline UShort_t getOneLayerGroup(Int_t lay) const;
    inline Int_t   next(Int_t lay, Int_t prCell) const;
    inline Bool_t  getNext(Int_t lay, Int_t& cell) const;
    inline Bool_t  getNextCell(Int_t& lay, Int_t& cell) const;
    inline Int_t   previous(Int_t lay, Int_t prCell) const;
    inline UChar_t getTime(Int_t lay, Int_t cell) const;
    Bool_t         getSeg(HMdcList12GroupCells& fSeg,Int_t seg) const;
    
    Int_t  compare(HMdcList24GroupCells* lst, Int_t l1=-1, Int_t l2=-1) const;
    Int_t  compareAndUnset(const HMdcList24GroupCells* lst,HMdcList24GroupCells* lstIdent);
    Bool_t isIncluded(HMdcList24GroupCells& lst, Int_t l1=0,Int_t l2=23) const;
    Int_t  nIdentDrTimes(HMdcList24GroupCells* lst,Int_t l1=0,Int_t l2=23) const;
    
    void print(void) const;
    void print(Int_t lay) const;
  private:
    inline void           setInBounds(Int_t& l1, Int_t& l2) const;
    inline Bool_t         isLayOk(Int_t l) const;
    inline Bool_t         isModOk(Int_t m) const;
    inline void           shiftLeft(Int_t lay);
    inline const UChar_t* layAddrC(Int_t lay) const {return arr+lay*laySz;}
    inline const UChar_t* cellAddrC(Int_t lay,Int_t cell) const {
                              return arr+lay*laySz+((cell-firstCell[lay])>>2);}
    inline UChar_t*       layAddr(Int_t lay)        {return arr+lay*laySz;}
    inline UChar_t*       cellAddr(Int_t lay,Int_t cell) {
                              return arr+lay*laySz+((cell-firstCell[lay])>>2);}

  ClassDef(HMdcList24GroupCells,1) //List of all cells in layer
};

inline HMdcList24GroupCells& HMdcList24GroupCells::operator =
    (const HMdcList24GroupCells& lst) {
  memcpy(arr,lst.arr,288);
  memcpy(firstCell,lst.firstCell,96); // 24*sizeof(Int_t)
  return *this;
}

inline void HMdcList24GroupCells::setSeg1(const HMdcList12GroupCells* seg) {
  if(seg) {
    memcpy(arr,seg->getArr(),144);
    memcpy(firstCell,seg->getFirstCell(),48); // 12*sizeof(Int_t)
  }
}

inline void HMdcList24GroupCells::setSeg2(const HMdcList12GroupCells* seg) {
  if(seg) {
    memcpy(arr+144,seg->getArr(),144);
    memcpy(firstCell+12,seg->getFirstCell(),48); // 12*sizeof(Int_t)
  }
}

inline void HMdcList24GroupCells::set(const HMdcList12GroupCells* seg1,
                    const HMdcList12GroupCells* seg2) {
  if(seg1) setSeg1(seg1);
  else clear(0);
  if(seg2) setSeg2(seg2);
  else clear(1);
}
 
inline void HMdcList24GroupCells::clear(Int_t seg) {
  if(seg<0 || seg>1) {
    memset(arr,0,288);
    for(Int_t l=0; l<24; l++) firstCell[l]=0;
  } else {
    Int_t l0=seg*12;
    memset(arr+l0*laySz,0,12*laySz);
    for(Int_t l=0; l<12; l++) firstCell[l+l0]=0;
  }
}

inline Bool_t HMdcList24GroupCells::isLayOk(Int_t l) const {
  return l>=0 && l<24;
}

inline Bool_t HMdcList24GroupCells::isModOk(Int_t m) const {
  return m>=0 && m<4;
}

inline Int_t HMdcList24GroupCells::setTime(Int_t lay, Int_t cell, UChar_t time) {
  // return: 0 - ok.!;  n>0 - num.cells excl.from cl.
  if( cell<0 || (time&3)==0 || !isLayOk(lay)) return 0;
  Int_t nCellsDel=0;
  UChar_t *iLayer=arr+lay*laySz;
  UChar_t *pEnd=iLayer+11;
  if(*iLayer == 0) firstCell[lay]=cell & 0xFFFFFFFC;  // =(cell/4)*4
  else if(cell < firstCell[lay]) {
    Int_t sh=(firstCell[lay]>>2)-(cell>>2);
    nCellsDel=HMdcTBArray::getNSet(pEnd-sh+1,pEnd);
    HMdcTBArray::shiftRight(iLayer,pEnd,pEnd-sh);
    firstCell[lay]=cell & 0xFFFFFFFC;
  }
  else if( cell-firstCell[lay] >= 48 ) return 1; // out of data array
  HMdcTBArray::set(iLayer, cell-firstCell[lay], time);
  return nCellsDel;
}

inline void HMdcList24GroupCells::delTime(Int_t lay, Int_t cell, UChar_t time) {
  Int_t pos=cell-firstCell[lay];
  if(pos < 0 || pos >=  48) return;
  UChar_t *iLayer=arr+lay*laySz;
  HMdcTBArray::unset(iLayer, pos, time);
  if(*iLayer == 0) shiftLeft(lay);
}

inline void HMdcList24GroupCells::shiftLeft(Int_t lay) {
  UChar_t* iLayer=arr+lay*laySz;
  UChar_t* pEnd=iLayer+11;
  Int_t sh=HMdcTBArray::first(iLayer,pEnd);
  if(sh < 0) firstCell[lay]=0;
  else {
    sh = sh>>2;
    HMdcTBArray::shiftLeft(iLayer,pEnd,iLayer+sh);
    firstCell[lay] += (sh<<2);
  }
}

// inline Int_t HMdcList24GroupCells::getNCells(Int_t lay, Int_t layEnd) const {
//   if(layEnd==-1) layEnd=lay;
//   if(!isLayOk(lay) || !isLayOk(layEnd) || lay>layEnd) return -1;
//   return HMdcTBArray::getNSet(arr+lay*laySz,arr+layEnd*laySz+11);
// }

inline Int_t HMdcList24GroupCells::getNCells(Int_t lay) const {
  if(!isLayOk(lay)) return -1;
  const UChar_t *arrLay = arr+lay*laySz;
  return HMdcTBArray::getNSet(arrLay,arrLay+11);
}

inline Int_t HMdcList24GroupCells::getNCellsMod(Int_t mod) const {
  if( !isModOk(mod) ) return -1;
  const UChar_t *arrLay = arr+mod*6*laySz;
  return HMdcTBArray::getNSet(arrLay,arrLay+71); // 71 = 5*laySz+11
}

inline Int_t HMdcList24GroupCells::getNCells(void) const {
  return HMdcTBArray::getNSet(arr,arr+287);   // 287 = 23*laySz+11
}

inline Int_t HMdcList24GroupCells::getNDrTimes(void) const {
  return HMdcBArray::getNSet(arr,arr+287);
}

inline Int_t HMdcList24GroupCells::getNDrTimes(Int_t lay) const {
  if(!isLayOk(lay)) return 0;
  const UChar_t* layArr = arr+lay*laySz;
  if( *layArr ) return HMdcBArray::getNSet(layArr,layArr+11);
  return 0;
}

inline Int_t HMdcList24GroupCells::getNDrTimes(Int_t lay1,Int_t lay2) const {
  if(lay1<0 || lay2>=24) return -1;
  return HMdcBArray::getNSet(arr+lay1*laySz,arr+lay2*laySz+11);
}

inline Int_t HMdcList24GroupCells::getCell(Int_t lay, Int_t idx) const {
  // return: -1 - idx <0 or >num.cells
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  Int_t pos=HMdcTBArray::position(layArr,layArr+11,idx);
  if(pos >= 0) return pos+firstCell[lay];
  return -1;
}

inline Int_t HMdcList24GroupCells::getFirstCell(Int_t lay) const {
  // return: -1 - num.cells=0
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;
  Int_t pos=HMdcTBArray::first(layArr,layArr+11);
  if(pos >= 0) return pos+firstCell[lay];
  return -1;
}

inline Int_t HMdcList24GroupCells::get4FirstCells(Int_t lay, Int_t* list) const {
  // return: first cell (frCell) or -1 (num.cells=0)
  // fill list[0]-time of frCell, time frCell+1, ..., time frCell+3
  if(!isLayOk(lay)) return -1;
  const UChar_t* addr=arr+lay*laySz;
  Int_t pos=HMdcTBArray::first(addr,addr+11);
  if(pos < 0) return -1;
  Int_t fcell=firstCell[lay]+pos;
  Int_t posLast=pos+4;
  for(Int_t ps=pos; ps<posLast; ps++,list++) *list = HMdcTBArray::get(addr,ps);
  return fcell;
}

inline UShort_t HMdcList24GroupCells::getOneLayerGroup(Int_t lay) const {
  // For comparing with list in HMdcCellGroup!
  // return cell list in format of HMdcCellGroup
  if(!isLayOk(lay)) return 0;
  const UChar_t* addr=arr+lay*laySz;
  Int_t pos=HMdcTBArray::first(addr,addr+11);
  if(pos < 0) return 0;
  Int_t    posLast = pos+4;
  UShort_t list    = UShort_t(firstCell[lay]+pos) << 8;
  Int_t    sh      = 0;
  for(Int_t ps=pos; ps<posLast; ps++,sh += 2) {
    UChar_t t = HMdcTBArray::get(addr,ps);
    if(t != 0) list |= t<<sh;
  }
  return list;
}

inline Int_t HMdcList24GroupCells::getNLayers(void) const {
  Int_t nLayers=0;
  for(Int_t lay=0; lay<24; lay++) if(getFirstCell(lay)>=0) nLayers++;
  return nLayers;
}

inline Int_t HMdcList24GroupCells::getNLayersMod(Int_t mod) const {
  if(mod<0 || mod>3) return 0;
  Int_t nLayers=0;
  for(Int_t lay=mod*6; lay<(mod+1)*6; lay++) if(getFirstCell(lay)>=0) nLayers++;
  return nLayers;
}

inline UChar_t HMdcList24GroupCells::getListLayers(Int_t imod) const {
  // imod - module number in sector (0 - 4)
  // imod== -1 - List_imod0 | List_imod1 | List_imod2 | List_imod3
  // return 6 bits, one bit per layer
  if(imod<-1 || imod>3) return 0;
  Int_t im1 = imod==-1 ? 0:imod;
  Int_t im2 = imod==-1 ? 3:imod;
  UChar_t layList = 0;
  for(Int_t im=im1;im<=im2;im++) {
    Int_t lsh       = im*6;
    for(Int_t l=0;l<6;l++) if(arr[(l+lsh)*laySz] > 0) layList |= 1<<l;
  }
  return layList;
}

inline Int_t HMdcList24GroupCells::getLastCell(Int_t lay) const {
  // return: -2 - num.cells=0
  if(!isLayOk(lay)) return -2;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -2;
  Int_t pos=HMdcTBArray::last(layArr,layArr+11);
  if(pos >= 0) return pos+firstCell[lay];
  return -2;
}

inline Int_t HMdcList24GroupCells::next(Int_t lay, Int_t prCell) const {
  if(!isLayOk(lay)) return -1;
  const UChar_t* layArr = arr+lay*laySz;
  Int_t cell=HMdcTBArray::next(layArr,layArr+11,prCell-firstCell[lay]);
  if(cell>=0) return cell+firstCell[lay];
  return -1;
}

inline Bool_t HMdcList24GroupCells::getNext(Int_t lay, Int_t& cell) const {
  cell=next(lay,cell);
  if(cell>=0) return kTRUE;
  return kFALSE;
}

inline Bool_t HMdcList24GroupCells::getNextCell(Int_t& lay, Int_t& cell) const {
  if(lay<0) {
    lay=0;
    cell=-1;
  }
  for(;lay<24;lay++) if(getNext(lay,cell)) return kTRUE;
  return kFALSE;
}

inline Int_t HMdcList24GroupCells::previous(Int_t lay, Int_t prCell) const {
  if(!isLayOk(lay)) return kFALSE;
  const UChar_t* layArr = arr+lay*laySz;
  if(*layArr == 0) return -1;          // no wires in layer
  Int_t cell = HMdcTBArray::previous(layArr,layArr+11,prCell-firstCell[lay]);
  if(cell>=0) return cell+firstCell[lay];
  return -1;
}

inline UChar_t HMdcList24GroupCells::getTime(Int_t lay, Int_t cell) const {
  Int_t pos=cell-firstCell[lay];
  if(pos<0 || pos>=48) return 0;
  return HMdcTBArray::get(arr+lay*laySz,pos);
}

inline void HMdcList24GroupCells::setInBounds(Int_t& l1, Int_t& l2) const {
  if(l1<0) {
    l1=0;
    l2=23;
  } else  {
    if(l2<0) l2=l1;
    else if(l2>23) l2=23;
  }
}


#endif
 hmdclistgroupcells.h:1
 hmdclistgroupcells.h:2
 hmdclistgroupcells.h:3
 hmdclistgroupcells.h:4
 hmdclistgroupcells.h:5
 hmdclistgroupcells.h:6
 hmdclistgroupcells.h:7
 hmdclistgroupcells.h:8
 hmdclistgroupcells.h:9
 hmdclistgroupcells.h:10
 hmdclistgroupcells.h:11
 hmdclistgroupcells.h:12
 hmdclistgroupcells.h:13
 hmdclistgroupcells.h:14
 hmdclistgroupcells.h:15
 hmdclistgroupcells.h:16
 hmdclistgroupcells.h:17
 hmdclistgroupcells.h:18
 hmdclistgroupcells.h:19
 hmdclistgroupcells.h:20
 hmdclistgroupcells.h:21
 hmdclistgroupcells.h:22
 hmdclistgroupcells.h:23
 hmdclistgroupcells.h:24
 hmdclistgroupcells.h:25
 hmdclistgroupcells.h:26
 hmdclistgroupcells.h:27
 hmdclistgroupcells.h:28
 hmdclistgroupcells.h:29
 hmdclistgroupcells.h:30
 hmdclistgroupcells.h:31
 hmdclistgroupcells.h:32
 hmdclistgroupcells.h:33
 hmdclistgroupcells.h:34
 hmdclistgroupcells.h:35
 hmdclistgroupcells.h:36
 hmdclistgroupcells.h:37
 hmdclistgroupcells.h:38
 hmdclistgroupcells.h:39
 hmdclistgroupcells.h:40
 hmdclistgroupcells.h:41
 hmdclistgroupcells.h:42
 hmdclistgroupcells.h:43
 hmdclistgroupcells.h:44
 hmdclistgroupcells.h:45
 hmdclistgroupcells.h:46
 hmdclistgroupcells.h:47
 hmdclistgroupcells.h:48
 hmdclistgroupcells.h:49
 hmdclistgroupcells.h:50
 hmdclistgroupcells.h:51
 hmdclistgroupcells.h:52
 hmdclistgroupcells.h:53
 hmdclistgroupcells.h:54
 hmdclistgroupcells.h:55
 hmdclistgroupcells.h:56
 hmdclistgroupcells.h:57
 hmdclistgroupcells.h:58
 hmdclistgroupcells.h:59
 hmdclistgroupcells.h:60
 hmdclistgroupcells.h:61
 hmdclistgroupcells.h:62
 hmdclistgroupcells.h:63
 hmdclistgroupcells.h:64
 hmdclistgroupcells.h:65
 hmdclistgroupcells.h:66
 hmdclistgroupcells.h:67
 hmdclistgroupcells.h:68
 hmdclistgroupcells.h:69
 hmdclistgroupcells.h:70
 hmdclistgroupcells.h:71
 hmdclistgroupcells.h:72
 hmdclistgroupcells.h:73
 hmdclistgroupcells.h:74
 hmdclistgroupcells.h:75
 hmdclistgroupcells.h:76
 hmdclistgroupcells.h:77
 hmdclistgroupcells.h:78
 hmdclistgroupcells.h:79
 hmdclistgroupcells.h:80
 hmdclistgroupcells.h:81
 hmdclistgroupcells.h:82
 hmdclistgroupcells.h:83
 hmdclistgroupcells.h:84
 hmdclistgroupcells.h:85
 hmdclistgroupcells.h:86
 hmdclistgroupcells.h:87
 hmdclistgroupcells.h:88
 hmdclistgroupcells.h:89
 hmdclistgroupcells.h:90
 hmdclistgroupcells.h:91
 hmdclistgroupcells.h:92
 hmdclistgroupcells.h:93
 hmdclistgroupcells.h:94
 hmdclistgroupcells.h:95
 hmdclistgroupcells.h:96
 hmdclistgroupcells.h:97
 hmdclistgroupcells.h:98
 hmdclistgroupcells.h:99
 hmdclistgroupcells.h:100
 hmdclistgroupcells.h:101
 hmdclistgroupcells.h:102
 hmdclistgroupcells.h:103
 hmdclistgroupcells.h:104
 hmdclistgroupcells.h:105
 hmdclistgroupcells.h:106
 hmdclistgroupcells.h:107
 hmdclistgroupcells.h:108
 hmdclistgroupcells.h:109
 hmdclistgroupcells.h:110
 hmdclistgroupcells.h:111
 hmdclistgroupcells.h:112
 hmdclistgroupcells.h:113
 hmdclistgroupcells.h:114
 hmdclistgroupcells.h:115
 hmdclistgroupcells.h:116
 hmdclistgroupcells.h:117
 hmdclistgroupcells.h:118
 hmdclistgroupcells.h:119
 hmdclistgroupcells.h:120
 hmdclistgroupcells.h:121
 hmdclistgroupcells.h:122
 hmdclistgroupcells.h:123
 hmdclistgroupcells.h:124
 hmdclistgroupcells.h:125
 hmdclistgroupcells.h:126
 hmdclistgroupcells.h:127
 hmdclistgroupcells.h:128
 hmdclistgroupcells.h:129
 hmdclistgroupcells.h:130
 hmdclistgroupcells.h:131
 hmdclistgroupcells.h:132
 hmdclistgroupcells.h:133
 hmdclistgroupcells.h:134
 hmdclistgroupcells.h:135
 hmdclistgroupcells.h:136
 hmdclistgroupcells.h:137
 hmdclistgroupcells.h:138
 hmdclistgroupcells.h:139
 hmdclistgroupcells.h:140
 hmdclistgroupcells.h:141
 hmdclistgroupcells.h:142
 hmdclistgroupcells.h:143
 hmdclistgroupcells.h:144
 hmdclistgroupcells.h:145
 hmdclistgroupcells.h:146
 hmdclistgroupcells.h:147
 hmdclistgroupcells.h:148
 hmdclistgroupcells.h:149
 hmdclistgroupcells.h:150
 hmdclistgroupcells.h:151
 hmdclistgroupcells.h:152
 hmdclistgroupcells.h:153
 hmdclistgroupcells.h:154
 hmdclistgroupcells.h:155
 hmdclistgroupcells.h:156
 hmdclistgroupcells.h:157
 hmdclistgroupcells.h:158
 hmdclistgroupcells.h:159
 hmdclistgroupcells.h:160
 hmdclistgroupcells.h:161
 hmdclistgroupcells.h:162
 hmdclistgroupcells.h:163
 hmdclistgroupcells.h:164
 hmdclistgroupcells.h:165
 hmdclistgroupcells.h:166
 hmdclistgroupcells.h:167
 hmdclistgroupcells.h:168
 hmdclistgroupcells.h:169
 hmdclistgroupcells.h:170
 hmdclistgroupcells.h:171
 hmdclistgroupcells.h:172
 hmdclistgroupcells.h:173
 hmdclistgroupcells.h:174
 hmdclistgroupcells.h:175
 hmdclistgroupcells.h:176
 hmdclistgroupcells.h:177
 hmdclistgroupcells.h:178
 hmdclistgroupcells.h:179
 hmdclistgroupcells.h:180
 hmdclistgroupcells.h:181
 hmdclistgroupcells.h:182
 hmdclistgroupcells.h:183
 hmdclistgroupcells.h:184
 hmdclistgroupcells.h:185
 hmdclistgroupcells.h:186
 hmdclistgroupcells.h:187
 hmdclistgroupcells.h:188
 hmdclistgroupcells.h:189
 hmdclistgroupcells.h:190
 hmdclistgroupcells.h:191
 hmdclistgroupcells.h:192
 hmdclistgroupcells.h:193
 hmdclistgroupcells.h:194
 hmdclistgroupcells.h:195
 hmdclistgroupcells.h:196
 hmdclistgroupcells.h:197
 hmdclistgroupcells.h:198
 hmdclistgroupcells.h:199
 hmdclistgroupcells.h:200
 hmdclistgroupcells.h:201
 hmdclistgroupcells.h:202
 hmdclistgroupcells.h:203
 hmdclistgroupcells.h:204
 hmdclistgroupcells.h:205
 hmdclistgroupcells.h:206
 hmdclistgroupcells.h:207
 hmdclistgroupcells.h:208
 hmdclistgroupcells.h:209
 hmdclistgroupcells.h:210
 hmdclistgroupcells.h:211
 hmdclistgroupcells.h:212
 hmdclistgroupcells.h:213
 hmdclistgroupcells.h:214
 hmdclistgroupcells.h:215
 hmdclistgroupcells.h:216
 hmdclistgroupcells.h:217
 hmdclistgroupcells.h:218
 hmdclistgroupcells.h:219
 hmdclistgroupcells.h:220
 hmdclistgroupcells.h:221
 hmdclistgroupcells.h:222
 hmdclistgroupcells.h:223
 hmdclistgroupcells.h:224
 hmdclistgroupcells.h:225
 hmdclistgroupcells.h:226
 hmdclistgroupcells.h:227
 hmdclistgroupcells.h:228
 hmdclistgroupcells.h:229
 hmdclistgroupcells.h:230
 hmdclistgroupcells.h:231
 hmdclistgroupcells.h:232
 hmdclistgroupcells.h:233
 hmdclistgroupcells.h:234
 hmdclistgroupcells.h:235
 hmdclistgroupcells.h:236
 hmdclistgroupcells.h:237
 hmdclistgroupcells.h:238
 hmdclistgroupcells.h:239
 hmdclistgroupcells.h:240
 hmdclistgroupcells.h:241
 hmdclistgroupcells.h:242
 hmdclistgroupcells.h:243
 hmdclistgroupcells.h:244
 hmdclistgroupcells.h:245
 hmdclistgroupcells.h:246
 hmdclistgroupcells.h:247
 hmdclistgroupcells.h:248
 hmdclistgroupcells.h:249
 hmdclistgroupcells.h:250
 hmdclistgroupcells.h:251
 hmdclistgroupcells.h:252
 hmdclistgroupcells.h:253
 hmdclistgroupcells.h:254
 hmdclistgroupcells.h:255
 hmdclistgroupcells.h:256
 hmdclistgroupcells.h:257
 hmdclistgroupcells.h:258
 hmdclistgroupcells.h:259
 hmdclistgroupcells.h:260
 hmdclistgroupcells.h:261
 hmdclistgroupcells.h:262
 hmdclistgroupcells.h:263
 hmdclistgroupcells.h:264
 hmdclistgroupcells.h:265
 hmdclistgroupcells.h:266
 hmdclistgroupcells.h:267
 hmdclistgroupcells.h:268
 hmdclistgroupcells.h:269
 hmdclistgroupcells.h:270
 hmdclistgroupcells.h:271
 hmdclistgroupcells.h:272
 hmdclistgroupcells.h:273
 hmdclistgroupcells.h:274
 hmdclistgroupcells.h:275
 hmdclistgroupcells.h:276
 hmdclistgroupcells.h:277
 hmdclistgroupcells.h:278
 hmdclistgroupcells.h:279
 hmdclistgroupcells.h:280
 hmdclistgroupcells.h:281
 hmdclistgroupcells.h:282
 hmdclistgroupcells.h:283
 hmdclistgroupcells.h:284
 hmdclistgroupcells.h:285
 hmdclistgroupcells.h:286
 hmdclistgroupcells.h:287
 hmdclistgroupcells.h:288
 hmdclistgroupcells.h:289
 hmdclistgroupcells.h:290
 hmdclistgroupcells.h:291
 hmdclistgroupcells.h:292
 hmdclistgroupcells.h:293
 hmdclistgroupcells.h:294
 hmdclistgroupcells.h:295
 hmdclistgroupcells.h:296
 hmdclistgroupcells.h:297
 hmdclistgroupcells.h:298
 hmdclistgroupcells.h:299
 hmdclistgroupcells.h:300
 hmdclistgroupcells.h:301
 hmdclistgroupcells.h:302
 hmdclistgroupcells.h:303
 hmdclistgroupcells.h:304
 hmdclistgroupcells.h:305
 hmdclistgroupcells.h:306
 hmdclistgroupcells.h:307
 hmdclistgroupcells.h:308
 hmdclistgroupcells.h:309
 hmdclistgroupcells.h:310
 hmdclistgroupcells.h:311
 hmdclistgroupcells.h:312
 hmdclistgroupcells.h:313
 hmdclistgroupcells.h:314
 hmdclistgroupcells.h:315
 hmdclistgroupcells.h:316
 hmdclistgroupcells.h:317
 hmdclistgroupcells.h:318
 hmdclistgroupcells.h:319
 hmdclistgroupcells.h:320
 hmdclistgroupcells.h:321
 hmdclistgroupcells.h:322
 hmdclistgroupcells.h:323
 hmdclistgroupcells.h:324
 hmdclistgroupcells.h:325
 hmdclistgroupcells.h:326
 hmdclistgroupcells.h:327
 hmdclistgroupcells.h:328
 hmdclistgroupcells.h:329
 hmdclistgroupcells.h:330
 hmdclistgroupcells.h:331
 hmdclistgroupcells.h:332
 hmdclistgroupcells.h:333
 hmdclistgroupcells.h:334
 hmdclistgroupcells.h:335
 hmdclistgroupcells.h:336
 hmdclistgroupcells.h:337
 hmdclistgroupcells.h:338
 hmdclistgroupcells.h:339
 hmdclistgroupcells.h:340
 hmdclistgroupcells.h:341
 hmdclistgroupcells.h:342
 hmdclistgroupcells.h:343
 hmdclistgroupcells.h:344
 hmdclistgroupcells.h:345
 hmdclistgroupcells.h:346
 hmdclistgroupcells.h:347
 hmdclistgroupcells.h:348
 hmdclistgroupcells.h:349
 hmdclistgroupcells.h:350
 hmdclistgroupcells.h:351
 hmdclistgroupcells.h:352
 hmdclistgroupcells.h:353
 hmdclistgroupcells.h:354
 hmdclistgroupcells.h:355
 hmdclistgroupcells.h:356
 hmdclistgroupcells.h:357
 hmdclistgroupcells.h:358
 hmdclistgroupcells.h:359
 hmdclistgroupcells.h:360
 hmdclistgroupcells.h:361
 hmdclistgroupcells.h:362
 hmdclistgroupcells.h:363
 hmdclistgroupcells.h:364
 hmdclistgroupcells.h:365
 hmdclistgroupcells.h:366
 hmdclistgroupcells.h:367
 hmdclistgroupcells.h:368
 hmdclistgroupcells.h:369
 hmdclistgroupcells.h:370
 hmdclistgroupcells.h:371
 hmdclistgroupcells.h:372
 hmdclistgroupcells.h:373
 hmdclistgroupcells.h:374
 hmdclistgroupcells.h:375
 hmdclistgroupcells.h:376
 hmdclistgroupcells.h:377
 hmdclistgroupcells.h:378
 hmdclistgroupcells.h:379
 hmdclistgroupcells.h:380
 hmdclistgroupcells.h:381
 hmdclistgroupcells.h:382
 hmdclistgroupcells.h:383
 hmdclistgroupcells.h:384
 hmdclistgroupcells.h:385
 hmdclistgroupcells.h:386
 hmdclistgroupcells.h:387
 hmdclistgroupcells.h:388
 hmdclistgroupcells.h:389
 hmdclistgroupcells.h:390
 hmdclistgroupcells.h:391
 hmdclistgroupcells.h:392
 hmdclistgroupcells.h:393
 hmdclistgroupcells.h:394
 hmdclistgroupcells.h:395
 hmdclistgroupcells.h:396
 hmdclistgroupcells.h:397
 hmdclistgroupcells.h:398
 hmdclistgroupcells.h:399
 hmdclistgroupcells.h:400
 hmdclistgroupcells.h:401
 hmdclistgroupcells.h:402
 hmdclistgroupcells.h:403
 hmdclistgroupcells.h:404
 hmdclistgroupcells.h:405
 hmdclistgroupcells.h:406
 hmdclistgroupcells.h:407
 hmdclistgroupcells.h:408
 hmdclistgroupcells.h:409
 hmdclistgroupcells.h:410
 hmdclistgroupcells.h:411
 hmdclistgroupcells.h:412
 hmdclistgroupcells.h:413
 hmdclistgroupcells.h:414
 hmdclistgroupcells.h:415
 hmdclistgroupcells.h:416
 hmdclistgroupcells.h:417
 hmdclistgroupcells.h:418
 hmdclistgroupcells.h:419
 hmdclistgroupcells.h:420
 hmdclistgroupcells.h:421
 hmdclistgroupcells.h:422
 hmdclistgroupcells.h:423
 hmdclistgroupcells.h:424
 hmdclistgroupcells.h:425
 hmdclistgroupcells.h:426
 hmdclistgroupcells.h:427
 hmdclistgroupcells.h:428
 hmdclistgroupcells.h:429
 hmdclistgroupcells.h:430
 hmdclistgroupcells.h:431
 hmdclistgroupcells.h:432
 hmdclistgroupcells.h:433
 hmdclistgroupcells.h:434
 hmdclistgroupcells.h:435
 hmdclistgroupcells.h:436
 hmdclistgroupcells.h:437
 hmdclistgroupcells.h:438
 hmdclistgroupcells.h:439
 hmdclistgroupcells.h:440
 hmdclistgroupcells.h:441
 hmdclistgroupcells.h:442
 hmdclistgroupcells.h:443
 hmdclistgroupcells.h:444
 hmdclistgroupcells.h:445
 hmdclistgroupcells.h:446
 hmdclistgroupcells.h:447
 hmdclistgroupcells.h:448
 hmdclistgroupcells.h:449
 hmdclistgroupcells.h:450
 hmdclistgroupcells.h:451
 hmdclistgroupcells.h:452
 hmdclistgroupcells.h:453
 hmdclistgroupcells.h:454
 hmdclistgroupcells.h:455
 hmdclistgroupcells.h:456
 hmdclistgroupcells.h:457
 hmdclistgroupcells.h:458
 hmdclistgroupcells.h:459
 hmdclistgroupcells.h:460
 hmdclistgroupcells.h:461
 hmdclistgroupcells.h:462
 hmdclistgroupcells.h:463
 hmdclistgroupcells.h:464
 hmdclistgroupcells.h:465
 hmdclistgroupcells.h:466
 hmdclistgroupcells.h:467
 hmdclistgroupcells.h:468
 hmdclistgroupcells.h:469
 hmdclistgroupcells.h:470
 hmdclistgroupcells.h:471
 hmdclistgroupcells.h:472
 hmdclistgroupcells.h:473
 hmdclistgroupcells.h:474
 hmdclistgroupcells.h:475
 hmdclistgroupcells.h:476
 hmdclistgroupcells.h:477
 hmdclistgroupcells.h:478
 hmdclistgroupcells.h:479
 hmdclistgroupcells.h:480
 hmdclistgroupcells.h:481
 hmdclistgroupcells.h:482
 hmdclistgroupcells.h:483
 hmdclistgroupcells.h:484
 hmdclistgroupcells.h:485
 hmdclistgroupcells.h:486
 hmdclistgroupcells.h:487
 hmdclistgroupcells.h:488
 hmdclistgroupcells.h:489
 hmdclistgroupcells.h:490
 hmdclistgroupcells.h:491
 hmdclistgroupcells.h:492
 hmdclistgroupcells.h:493
 hmdclistgroupcells.h:494
 hmdclistgroupcells.h:495
 hmdclistgroupcells.h:496
 hmdclistgroupcells.h:497
 hmdclistgroupcells.h:498
 hmdclistgroupcells.h:499
 hmdclistgroupcells.h:500
 hmdclistgroupcells.h:501
 hmdclistgroupcells.h:502
 hmdclistgroupcells.h:503
 hmdclistgroupcells.h:504
 hmdclistgroupcells.h:505
 hmdclistgroupcells.h:506
 hmdclistgroupcells.h:507
 hmdclistgroupcells.h:508
 hmdclistgroupcells.h:509
 hmdclistgroupcells.h:510
 hmdclistgroupcells.h:511
 hmdclistgroupcells.h:512
 hmdclistgroupcells.h:513
 hmdclistgroupcells.h:514
 hmdclistgroupcells.h:515
 hmdclistgroupcells.h:516
 hmdclistgroupcells.h:517
 hmdclistgroupcells.h:518
 hmdclistgroupcells.h:519
 hmdclistgroupcells.h:520
 hmdclistgroupcells.h:521
 hmdclistgroupcells.h:522
 hmdclistgroupcells.h:523
 hmdclistgroupcells.h:524
 hmdclistgroupcells.h:525
 hmdclistgroupcells.h:526
 hmdclistgroupcells.h:527
 hmdclistgroupcells.h:528
 hmdclistgroupcells.h:529
 hmdclistgroupcells.h:530
 hmdclistgroupcells.h:531
 hmdclistgroupcells.h:532
 hmdclistgroupcells.h:533
 hmdclistgroupcells.h:534
 hmdclistgroupcells.h:535
 hmdclistgroupcells.h:536
 hmdclistgroupcells.h:537
 hmdclistgroupcells.h:538
 hmdclistgroupcells.h:539
 hmdclistgroupcells.h:540
 hmdclistgroupcells.h:541
 hmdclistgroupcells.h:542
 hmdclistgroupcells.h:543
 hmdclistgroupcells.h:544
 hmdclistgroupcells.h:545
 hmdclistgroupcells.h:546
 hmdclistgroupcells.h:547
 hmdclistgroupcells.h:548
 hmdclistgroupcells.h:549
 hmdclistgroupcells.h:550
 hmdclistgroupcells.h:551
 hmdclistgroupcells.h:552
 hmdclistgroupcells.h:553
 hmdclistgroupcells.h:554
 hmdclistgroupcells.h:555
 hmdclistgroupcells.h:556
 hmdclistgroupcells.h:557
 hmdclistgroupcells.h:558
 hmdclistgroupcells.h:559
 hmdclistgroupcells.h:560
 hmdclistgroupcells.h:561
 hmdclistgroupcells.h:562
 hmdclistgroupcells.h:563
 hmdclistgroupcells.h:564
 hmdclistgroupcells.h:565
 hmdclistgroupcells.h:566
 hmdclistgroupcells.h:567
 hmdclistgroupcells.h:568
 hmdclistgroupcells.h:569
 hmdclistgroupcells.h:570
 hmdclistgroupcells.h:571
 hmdclistgroupcells.h:572
 hmdclistgroupcells.h:573
 hmdclistgroupcells.h:574
 hmdclistgroupcells.h:575
 hmdclistgroupcells.h:576
 hmdclistgroupcells.h:577
 hmdclistgroupcells.h:578
 hmdclistgroupcells.h:579
 hmdclistgroupcells.h:580
 hmdclistgroupcells.h:581
 hmdclistgroupcells.h:582
 hmdclistgroupcells.h:583
 hmdclistgroupcells.h:584
 hmdclistgroupcells.h:585
 hmdclistgroupcells.h:586
 hmdclistgroupcells.h:587
 hmdclistgroupcells.h:588
 hmdclistgroupcells.h:589
 hmdclistgroupcells.h:590
 hmdclistgroupcells.h:591
 hmdclistgroupcells.h:592
 hmdclistgroupcells.h:593
 hmdclistgroupcells.h:594
 hmdclistgroupcells.h:595
 hmdclistgroupcells.h:596
 hmdclistgroupcells.h:597
 hmdclistgroupcells.h:598
 hmdclistgroupcells.h:599
 hmdclistgroupcells.h:600
 hmdclistgroupcells.h:601
 hmdclistgroupcells.h:602
 hmdclistgroupcells.h:603
 hmdclistgroupcells.h:604
 hmdclistgroupcells.h:605
 hmdclistgroupcells.h:606
 hmdclistgroupcells.h:607
 hmdclistgroupcells.h:608
 hmdclistgroupcells.h:609
 hmdclistgroupcells.h:610
 hmdclistgroupcells.h:611
 hmdclistgroupcells.h:612
 hmdclistgroupcells.h:613
 hmdclistgroupcells.h:614
 hmdclistgroupcells.h:615
 hmdclistgroupcells.h:616
 hmdclistgroupcells.h:617
 hmdclistgroupcells.h:618
 hmdclistgroupcells.h:619
 hmdclistgroupcells.h:620
 hmdclistgroupcells.h:621
 hmdclistgroupcells.h:622
 hmdclistgroupcells.h:623
 hmdclistgroupcells.h:624
 hmdclistgroupcells.h:625
 hmdclistgroupcells.h:626
 hmdclistgroupcells.h:627
 hmdclistgroupcells.h:628
 hmdclistgroupcells.h:629
 hmdclistgroupcells.h:630
 hmdclistgroupcells.h:631
 hmdclistgroupcells.h:632
 hmdclistgroupcells.h:633
 hmdclistgroupcells.h:634
 hmdclistgroupcells.h:635