ROOT logo
#ifndef HMDCLISTCELLS_H
#define HMDCLISTCELLS_H

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

#include <string.h>

class HMdcList12GroupCells;
class HMdcCellGroup12;

class HMdcLayListCells : public TObject {
  protected:
    enum { arrSize=56,     // array size 
           maxCells=224};  // max.number of cells in layer (= arrSize*4)
    UChar_t  arr[arrSize]; // cells lis (two bits per wire)
    UChar_t* arrEnd;       // pointer of last element in "arr"
    Float_t* drTime1;      // array of drift times (time1!)
    Float_t* drTime2;      // array of drift times (time2!)
    Float_t* tof1;         // array of TOFs (time1!)
    Float_t* tof2;         // array of TOFs (time2!)
    UChar_t* nClust;       // array of cluster counters
    UChar_t* nRClust;      // array of "real" cluster counters
    UChar_t* nFitted;      // array of fitted wires counters
    UChar_t* nRFitted;     // array of "real" fitted wires counters
    Int_t    nFittedTot;   // total amount of fitted wires in layer
    Int_t*   gnTrackNum1;  // array of geant track num. (time1!)
    Int_t*   gnTrackNum2;  // array of geant track num. (time2!)
  public:
    HMdcLayListCells() {init();}
    ~HMdcLayListCells(void);
    void           copyListOfCells(HMdcLayListCells& lst);
    void           clear(void);
    void           clearClustCounter(void);
    void           clearFitWiresCounter(void);
    inline Bool_t  setTime(Int_t cell,UChar_t time);
    inline void    delTime(Int_t cell,UChar_t time);
    inline Int_t   getNCells(void) const;
    inline Int_t   getCell(Int_t idx) const;
    inline Int_t   getFirstCell(void) const;
    inline Int_t   getLastCell(void) const;
    inline Int_t   getGeantTrack(Int_t cell,UChar_t tm) const;
    inline Int_t   next(Int_t prCell) const;
    inline Bool_t  nextCell(Int_t& cell) const;
    Bool_t         nextNonFittedCell(Int_t& cell) const;
    Bool_t         previousNonFittedCell(Int_t& cell) const;
    inline Int_t   previous(Int_t prCell) const;
    inline Bool_t  previousCell(Int_t &cell) const;
    inline UChar_t getTime(Int_t cell) const;
    inline Bool_t  isCell(Int_t cell) const;
    void           print(void) const;
    void           printCellInfo(Int_t cell) const;
    
    inline Bool_t  addTime1(Int_t cell, Float_t timeValue);
    inline Bool_t  nextTime(Int_t& cell, Float_t& timeValue) const;
    inline Float_t getTimeValue(Int_t cell) const;
    Bool_t         addCell(Int_t c,UChar_t tm,Float_t dt1,Float_t dt2);
    Bool_t         addCellSim(Int_t c,UChar_t tm,Float_t dt1,Float_t dt2,
                              Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2);
    UChar_t        nextCell(Int_t& c,Float_t& dt1,Float_t& dt2) const;
    UChar_t        nextCellSim(Int_t& c,Float_t& dt1,Float_t& dt2,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    UChar_t        nextCellSim(Int_t& c,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    Bool_t         increaseClusCount(Int_t cell);
    Bool_t         increaseRClusCount(Int_t cell);
    Bool_t         increaseFittedCount(Int_t cell);
    Bool_t         increaseRFittedCount(Int_t cell);
    Bool_t         increaseFittedAndRealCount(Int_t cell);
    Bool_t         decreaseClusCount(Int_t cell);
    Bool_t         decreaseRClusCount(Int_t cell);
    Bool_t         decreaseFittedCount(Int_t cell);
    Bool_t         decreaseRFittedCount(Int_t cell);
    Bool_t         decreaseFittedAndRealCount(Int_t cell);
    inline UChar_t getNClusters(Int_t cell) const;
    inline UChar_t getNRClusters(Int_t cell) const;
    inline UChar_t getNFitted(Int_t cell) const;
    inline UChar_t getNRFitted(Int_t cell) const;
    Int_t          getNumNotFitted(void) const;            // Return number of not fitted wires

  protected:
    void init(void);
    inline Bool_t boundsOk(Int_t cell) const;

  ClassDef(HMdcLayListCells,0) //List of all cells in layer
};
  
inline Bool_t HMdcLayListCells::boundsOk(Int_t cell) const {
  return cell>=0 && cell < maxCells;
}

inline Bool_t HMdcLayListCells::setTime(Int_t cell,UChar_t time) {
  if(!boundsOk(cell)) return kFALSE;
  HMdcTBArray::set(arr,cell,time);
  return kTRUE;
}

inline void HMdcLayListCells::delTime(Int_t cell,UChar_t time) {
  if(boundsOk(cell)) HMdcTBArray::unset(arr,cell,time);
}

inline Int_t HMdcLayListCells::getNCells(void) const {
  return HMdcTBArray::getNSet(arr,arrEnd);
}

inline Int_t HMdcLayListCells::getCell(Int_t idx) const {
  return HMdcTBArray::position(arr,arrEnd,idx);
}

inline Int_t HMdcLayListCells::getFirstCell(void) const {
  return HMdcTBArray::first(arr,arrEnd);
}

inline Int_t HMdcLayListCells::getLastCell(void) const {
  return HMdcTBArray::last(arr,arrEnd);
}

inline Int_t HMdcLayListCells::next(Int_t prCell) const {
  return HMdcTBArray::next(arr,arrEnd,prCell);
}

inline Bool_t HMdcLayListCells::nextCell(Int_t& cell) const {
  cell = HMdcTBArray::next(arr,arrEnd,cell);
  return cell >= 0;
}

inline Int_t HMdcLayListCells::previous(Int_t prCell) const {
  return HMdcTBArray::previous(arr,arrEnd,prCell);
}

inline Bool_t HMdcLayListCells::previousCell(Int_t &cell) const {
  cell = HMdcTBArray::previous(arr,arrEnd,cell);
  return cell >= 0;
}


inline UChar_t HMdcLayListCells::getTime(Int_t cell) const {
  if(boundsOk(cell)) return HMdcTBArray::get(arr,cell);
  return 0;
}

inline Bool_t HMdcLayListCells::isCell(Int_t cell) const {
  return getTime(cell) != 0;
}

inline Bool_t HMdcLayListCells::addTime1(Int_t cell, Float_t timeValue) {
  // use this function for for storing time1 only
  if(!boundsOk(cell)) return kFALSE;
  if(drTime1 == NULL) drTime1 = new Float_t [maxCells];
  HMdcTBArray::set(arr,cell,1);  // time1 only !!!
  drTime1[cell] = timeValue;
  return kTRUE;
}

inline Bool_t HMdcLayListCells::nextTime(Int_t& cell, Float_t& timeValue) 
    const {
  if(!nextCell(cell) || drTime1 == NULL) return kFALSE;
  timeValue = drTime1[cell];
  return kTRUE;
}

inline Float_t HMdcLayListCells::getTimeValue(Int_t cell) const {
  return (drTime1 && getTime(cell)) ? drTime1[cell]:-999.F;
}

inline Int_t HMdcLayListCells::getGeantTrack(Int_t cell,UChar_t tm) const {
  if(boundsOk(cell)) {
    if(tm == 1 && gnTrackNum1 != NULL) return gnTrackNum1[cell];
    if(tm == 2 && gnTrackNum2 != NULL) return gnTrackNum2[cell];
  }
  return 0;
}

inline UChar_t HMdcLayListCells::getNClusters(Int_t cell) const {
  if(!boundsOk(cell) || nClust == NULL) return 0;
  return nClust[cell];
};

inline UChar_t HMdcLayListCells::getNRClusters(Int_t cell) const {
  if(!boundsOk(cell) || nRClust == NULL) return 0;
  return nRClust[cell];
};

inline UChar_t HMdcLayListCells::getNFitted(Int_t cell) const {
  if(!boundsOk(cell) || nFitted == NULL) return 0;
  return nFitted[cell];
};

inline UChar_t HMdcLayListCells::getNRFitted(Int_t cell) const {
  if(!boundsOk(cell) || nRFitted == NULL) return 0;
  return nRFitted[cell];
};
    
// - - - - - - - - - - - - - - - - - - - - - - - - - -

class HMdcModListCells : public TObject {
  protected:
    HMdcLayListCells list[6];
  public:
    HMdcModListCells(void) {clear();}
    ~HMdcModListCells(void) {}
    inline HMdcLayListCells& operator[](Int_t l);
    inline const HMdcLayListCells& operator[](Int_t l) const;
    
    inline void    clear(void);
    inline void    clearClustCounter(void);
    inline void    clearFitWiresCounter(void);
    inline Bool_t  setTime(Int_t lay, Int_t cell, UChar_t time);
    inline void    delTime(Int_t lay, Int_t cell, UChar_t time);
    inline Int_t   getNCells(void) const;
    inline Bool_t  nextCell(Int_t& lay, Int_t& cell) const;
    inline UChar_t getTime(Int_t lay, Int_t cell) const;
    inline Bool_t  isCell(Int_t lay, Int_t cell) const;
    inline Int_t   getNLayers(void) const;
    void           print(void) const;
    
    inline Bool_t  addTime1(Int_t l, Int_t c, Float_t tm);
    inline Bool_t  nextTime(Int_t& l, Int_t& c, Float_t& tm) const;
    inline Float_t getTimeValue(Int_t l, Int_t c) const;
    inline Bool_t  addCell(Int_t l,Int_t c,UChar_t tm,Float_t dt1,Float_t dt2);
    inline Bool_t  addCellSim(Int_t l,Int_t c,UChar_t tm,
                              Float_t dt1,Float_t dt2,
                              Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2);
    UChar_t        nextCell(Int_t& l,Int_t& c,Float_t& dt1,Float_t& dt2) const;
    UChar_t        nextCellSim(Int_t& l,Int_t& c,Float_t& dt1,Float_t& dt2,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    UChar_t        nextCellSim(Int_t& l,Int_t& c,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    inline Bool_t  increaseClusCount(Int_t l,Int_t cell);
    inline Bool_t  increaseRClusCount(Int_t l,Int_t cell);
    inline Bool_t  increaseFittedCount(Int_t l,Int_t cell);
    inline Bool_t  increaseRFittedCount(Int_t l,Int_t cell);
    inline Bool_t  increaseFittedAndRealCount(Int_t l,Int_t cell);
    inline Bool_t  decreaseClusCount(Int_t l,Int_t cell);
    inline Bool_t  decreaseRClusCount(Int_t l,Int_t cell);
    inline Bool_t  decreaseFittedCount(Int_t l,Int_t cell);
    inline Bool_t  decreaseRFittedCount(Int_t l,Int_t cell);
    inline Bool_t  decreaseFittedAndRealCount(Int_t l,Int_t cell);
    inline UChar_t getNClusters(Int_t l,Int_t cell) const;
    inline UChar_t getNRClusters(Int_t l,Int_t cell) const;
    inline UChar_t getNFitted(Int_t l,Int_t cell) const;
    inline UChar_t getNRFitted(Int_t l,Int_t cell) const;
    Int_t          genNumNotFittedLayers(void) const;
    Int_t          genNumNotFittedLayers(Int_t &nNFCells) const;

  protected:
    inline Bool_t  nLayOk(Int_t l) const {return l>=0 && l<6;}

  ClassDef(HMdcModListCells,0) //List of all cells in layer
};

inline HMdcLayListCells& HMdcModListCells::operator[](Int_t l) {
  if(nLayOk(l)) return list[l];
  HMdcLayListCells* null=0;
  return *null;
}

inline const HMdcLayListCells& HMdcModListCells::operator[](Int_t l) const {
  if(nLayOk(l)) return list[l];
  HMdcLayListCells* null=0;
  return *null;
}
    
inline void HMdcModListCells::clear(void) {
  for(Int_t l=0;l<6;l++) list[l].clear();
}

inline void HMdcModListCells::clearClustCounter(void) {
  for(Int_t l=0;l<6;l++) list[l].clearClustCounter();
}

inline void HMdcModListCells::clearFitWiresCounter(void) {
  for(Int_t l=0;l<6;l++) list[l].clearFitWiresCounter();
}

inline Bool_t HMdcModListCells::setTime(Int_t lay, Int_t cell, UChar_t time) {
  if(nLayOk(lay)) return list[lay].setTime(cell,time);
  return kFALSE;
}

inline Bool_t HMdcModListCells::nextCell(Int_t& lay, Int_t& cell) const {
  if(lay<0) {
    lay=0;
    cell=-1;
  }
  for(;lay<6;lay++) if(list[lay].nextCell(cell)) return kTRUE;
  lay=-1;
  return kFALSE;
}

inline void HMdcModListCells::delTime(Int_t lay, Int_t cell, UChar_t time) {
  if(nLayOk(lay)) list[lay].delTime(cell,time);
}

inline Int_t HMdcModListCells::getNCells(void) const {
  Int_t nCells=0;
  for(Int_t l=0;l<6;l++) nCells+=list[l].getNCells();
  return nCells;
}

inline UChar_t HMdcModListCells::getTime(Int_t lay, Int_t cell) const {
  if(nLayOk(lay)) return list[lay].getTime(cell);
  return 0;
}

inline Int_t HMdcModListCells::getNLayers(void) const {
  Int_t nLay=0;
  for(Int_t l=0;l<6;l++) if(list[l].getFirstCell()>=0) nLay++;
  return nLay;
}

inline Bool_t HMdcModListCells::isCell(Int_t lay, Int_t cell) const {
  if(nLayOk(lay)) return list[lay].isCell(cell);
  return kFALSE;
}


inline Bool_t HMdcModListCells::addTime1(Int_t l, Int_t c, Float_t tm) {
  if(nLayOk(l)) return list[l].addTime1(c,tm);
  return kFALSE;
}

inline Bool_t HMdcModListCells::nextTime(Int_t& l, Int_t& c, Float_t& tm) 
    const {
  if(!nextCell(l,c)) return kFALSE;
  tm = getTimeValue(l,c);
  return kTRUE;
}

inline Float_t HMdcModListCells::getTimeValue(Int_t l,Int_t c) 
    const {
  if(nLayOk(l)) return list[l].getTimeValue(c);
  return -999.F;
}

inline Bool_t HMdcModListCells::addCell(Int_t l,Int_t c,UChar_t tm,
    Float_t dt1,Float_t dt2) {
  if(nLayOk(l)) return list[l].addCell(c,tm,dt1,dt2);
  return kFALSE; 
}

inline Bool_t HMdcModListCells::addCellSim(Int_t l,Int_t c,
    UChar_t tm,Float_t dt1,Float_t dt2,
    Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2) {
  // tm can be eq. 1(time1 only), 2(time2 only) or 3(both)
  // dt1 and dt2 - driftTime1 and driftTime2 from HMdcCal1
  // tr1 and tr2 - geant track numbers for driftTime1 and driftTime2
  if(nLayOk(l)) return list[l].addCellSim(c,tm,dt1,dt2,tr1,tr2,tf1,tf2);
  return kFALSE; 
}

inline Bool_t HMdcModListCells::increaseClusCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].increaseClusCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::increaseRClusCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].increaseRClusCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::increaseFittedCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].increaseFittedCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::increaseRFittedCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].increaseRFittedCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::increaseFittedAndRealCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].increaseFittedAndRealCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::decreaseClusCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].decreaseClusCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::decreaseRClusCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].decreaseRClusCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::decreaseFittedCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].decreaseFittedCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::decreaseFittedAndRealCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].decreaseFittedAndRealCount(cell);
  return kFALSE;
}

inline Bool_t HMdcModListCells::decreaseRFittedCount(Int_t l,Int_t cell) {
  if(nLayOk(l)) return list[l].decreaseRFittedCount(cell);
  return kFALSE;
}

inline UChar_t HMdcModListCells::getNClusters(Int_t l,Int_t cell) const {
  if(nLayOk(l)) return list[l].getNClusters(cell);
  return kFALSE;
}

inline UChar_t HMdcModListCells::getNRClusters(Int_t l,Int_t cell) const {
  if(nLayOk(l)) return list[l].getNRClusters(cell);
  return kFALSE;
}

inline UChar_t HMdcModListCells::getNFitted(Int_t l,Int_t cell) const {
  if(nLayOk(l)) return list[l].getNFitted(cell);
  return kFALSE;
}

inline UChar_t HMdcModListCells::getNRFitted(Int_t l,Int_t cell) const {
  if(nLayOk(l)) return list[l].getNRFitted(cell);
  return kFALSE;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - -

class HMdcSecListCells : public TObject {
  protected:
    HMdcModListCells list[4];
  public:
    HMdcSecListCells(void) {clear();}
    ~HMdcSecListCells(void) {}
    inline HMdcModListCells& operator[](Int_t m);
    inline const HMdcModListCells& operator[](Int_t m) const;
    
    inline void    clear(void);
    void           clearClustCounter(Int_t seg);
    void           clearFitWiresCounter(Int_t seg);
    inline Bool_t  setTime(Int_t m, Int_t l, Int_t c, UChar_t t);
    inline void    delTime(Int_t m, Int_t l, Int_t c, UChar_t t);
    inline Int_t   getNCells(void) const;
    inline Bool_t  nextCell(Int_t& m, Int_t& l, Int_t& c) const;
    inline UChar_t getTime(Int_t m, Int_t l, Int_t c) const;
    inline Int_t   getNLayers(void) const;
    void           print(void) const;

    inline Bool_t  addTime1(Int_t m, Int_t l, Int_t c, Float_t tm);
    inline Bool_t  nextTime(Int_t& m, Int_t& l, Int_t& c, Float_t& tm) const;
    inline Float_t getTimeValue(Int_t m, Int_t l, Int_t c) const;
    inline Bool_t  addCell(Int_t m,Int_t l,Int_t c,UChar_t tm,Float_t dt1,Float_t dt2);
    inline Bool_t  addCellSim(Int_t m,Int_t l,Int_t c,UChar_t tm,Float_t dt1,Float_t dt2,
                              Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2);
    UChar_t        nextCell(Int_t& m,Int_t& l,Int_t& c,Float_t& dt1,Float_t& dt2) const;
    UChar_t        nextCellSim(Int_t& m,Int_t& l,Int_t& c,Float_t& dt1,Float_t& dt2,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    UChar_t        nextCellSim(Int_t& m,Int_t& l,Int_t& c,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    inline Bool_t  increaseClusCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseRClusCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseFittedCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseRFittedCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseFittedAndRealCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  decreaseClusCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  decreaseRClusCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  decreaseFittedCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  decreaseRFittedCount(Int_t m,Int_t l,Int_t cell);
    inline Bool_t  decreaseFittedAndRealCount(Int_t m,Int_t l,Int_t cell);
    inline UChar_t getNClusters(Int_t m,Int_t l,Int_t cell) const;
    inline UChar_t getNRClusters(Int_t m,Int_t l,Int_t cell) const;
    inline UChar_t getNFitted(Int_t m,Int_t l,Int_t cell) const;
    inline UChar_t getNRFitted(Int_t m,Int_t l,Int_t cell) const;
    Bool_t         addToClusCounters(Int_t seg,HMdcList12GroupCells& listCells);
    Bool_t         addToRClusCounters(Int_t seg,HMdcList12GroupCells& listCells);
    Bool_t         subFrClusCounters(Int_t seg,HMdcList12GroupCells& listCells);
    Bool_t         subFrRClusCounters(Int_t seg,HMdcList12GroupCells& listCells);
    Bool_t         subFittedCounters(Int_t seg, HMdcCellGroup12 *listCells);
    Bool_t         subRFittedCounters(Int_t seg,HMdcCellGroup12 *listCells);
    Bool_t         subFittedAndRealCounters(Int_t seg, HMdcCellGroup12 *listCells);
    Int_t          getNUniqueWires(Int_t seg,HMdcList12GroupCells& listCells) const;
    Int_t          getNUniqueWires2(Int_t seg,HMdcList12GroupCells& listCells) const;
    Int_t          getNUniqueWires(Int_t seg,HMdcList12GroupCells& listCells,Int_t& nLays) const;
    Int_t          getNUniqueWires2(Int_t seg,HMdcList12GroupCells& listCells,Int_t& nLays) const;
    Int_t          getNUniqueAndRWires(Int_t seg,HMdcList12GroupCells& listCells,
                                       Int_t& nWInReal) const;
    Int_t          getNUniqueAndRWires2(Int_t seg,HMdcList12GroupCells& listCells,
                                        Int_t& nWInReal) const;
    Bool_t         addToNFittedCounters(Int_t seg,HMdcCellGroup12 *listCells);
    Bool_t         addToNRFittedCounters(Int_t seg,HMdcCellGroup12 *listCells);
    Bool_t         addToFittedAndRealCounters(Int_t seg,HMdcCellGroup12 *listCells);
    inline Int_t   getNFittedUnWires(Int_t seg,HMdcCellGroup12 *listCells) const;
    inline Int_t   getNFittedUnWires2(Int_t seg,HMdcCellGroup12 *listCells) const;
    inline Int_t   getNFittedUnLayers(Int_t seg,HMdcCellGroup12 *listCells) const;
    inline Int_t   getNFittedUnAndRWires(Int_t seg,HMdcCellGroup12 *listCells,Int_t& nWInReal) const;
    inline Int_t   getNFittedUnAndRWires2(Int_t seg,HMdcCellGroup12 *listCells,Int_t& nWInReal) const;
    
    Float_t        getSegmentWeight(Int_t seg,HMdcCellGroup12 *listCells,Int_t& nWInReal,
                                    Bool_t isAdded=kTRUE) const;
  protected:
    inline Bool_t  nModOk(Int_t m) const {return m>=0 && m<4;}
    Int_t          getNFittedUnWires(Int_t seg,HMdcCellGroup12 *listCells,UChar_t ns) const;
    Int_t          getNFittedUnAndRWires(Int_t seg,HMdcCellGroup12 *listCells,Int_t& nWInReal,UChar_t ns) const;
    Int_t          getNFittedUnLayers(Int_t seg,HMdcCellGroup12 *listCells,UChar_t ns) const;
    
  ClassDef(HMdcSecListCells,0) //List of all cells in layer
};

inline HMdcModListCells& HMdcSecListCells::operator[](Int_t m) {
  if(nModOk(m)) return list[m];
  HMdcModListCells* null=0;
  return *null;
}

inline const HMdcModListCells& HMdcSecListCells::operator[](Int_t m) const {
  if(nModOk(m)) return list[m];
  HMdcModListCells* null=0;
  return *null;
}
  
inline void HMdcSecListCells::clear(void) {
  for(Int_t m=0;m<4;m++) list[m].clear();
}

inline Bool_t HMdcSecListCells::setTime(Int_t m, Int_t l, Int_t c, UChar_t t) {
  if(nModOk(m)) return list[m].setTime(l,c,t);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::nextCell(Int_t& m, Int_t& l, Int_t& c) const {
  if(m<0) {
    m = l = 0;
    c = -1;
  }
  for(;m<4;m++) if(list[m].nextCell(l,c)) return kTRUE;
  m = -1;
  return kFALSE;
}

inline void HMdcSecListCells::delTime(Int_t m, Int_t l, Int_t c, UChar_t t) {
  if(nModOk(m)) list[m].delTime(l,c,t);
}

inline Int_t HMdcSecListCells::getNCells(void) const {
  Int_t nCells=0;
  for(Int_t m=0;m<4;m++) nCells+=list[m].getNCells();
  return nCells;
}

inline UChar_t HMdcSecListCells::getTime(Int_t m, Int_t l, Int_t c) const {
  if(nModOk(m)) return list[m].getTime(l,c);
  return 0;
}

inline Int_t HMdcSecListCells::getNLayers(void) const {
  Int_t nLay=0;
  for(Int_t m=0;m<4;m++) nLay+=list[m].getNLayers();
  return nLay;
}

inline Bool_t HMdcSecListCells::addTime1(Int_t m, Int_t l, Int_t c, Float_t tm) {
  if(nModOk(m)) return list[m].addTime1(l,c,tm);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::nextTime(Int_t& m, Int_t& l, Int_t& c, 
    Float_t& tm) const {
  if(!nextCell(m,l,c)) return kFALSE;
  tm=getTimeValue(m,l,c);
  return kTRUE;
}

inline Float_t HMdcSecListCells::getTimeValue(Int_t m, Int_t l, Int_t c)
    const {
  if(nModOk(m)) return list[m].getTimeValue(l,c);
  return -999.F;
}

inline Bool_t HMdcSecListCells::addCell(Int_t m, Int_t l,Int_t c,UChar_t tm,
    Float_t dt1,Float_t dt2) {
  if(nModOk(m)) return list[m].addCell(l,c,tm,dt1,dt2);
  return kFALSE; 
}

inline Bool_t HMdcSecListCells::addCellSim(Int_t m, Int_t l,Int_t c,
    UChar_t tm,Float_t dt1,Float_t dt2,
    Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2) {
  // tm can be eq. 1(time1 only), 2(time2 only) or 3(both)
  // dt1 and dt2 - driftTime1 and driftTime2 from HMdcCal1
  // tr1 and tr2 - geant track numbers for driftTime1 and driftTime2
  if(nModOk(m)) return list[m].addCellSim(l,c,tm,dt1,dt2,tr1,tr2,tf1,tf2);
  return kFALSE; 
}

inline Bool_t HMdcSecListCells::increaseClusCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].increaseClusCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::increaseRClusCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].increaseRClusCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::increaseFittedCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].increaseFittedCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::increaseRFittedCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].increaseRFittedCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::increaseFittedAndRealCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].increaseFittedAndRealCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::decreaseClusCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].decreaseClusCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::decreaseRClusCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].decreaseRClusCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::decreaseFittedCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].decreaseFittedCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::decreaseFittedAndRealCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].decreaseFittedAndRealCount(l,cell);
  return kFALSE;
}

inline Bool_t HMdcSecListCells::decreaseRFittedCount(Int_t m,Int_t l,Int_t cell) {
  if(nModOk(m)) return list[m].decreaseRFittedCount(l,cell);
  return kFALSE;
}

inline UChar_t HMdcSecListCells::getNClusters(Int_t m,Int_t l,Int_t cell) const {
  if(nModOk(m)) return list[m].getNClusters(l,cell);
  return kFALSE;
}

inline UChar_t HMdcSecListCells::getNRClusters(Int_t m,Int_t l,Int_t cell) const {
  if(nModOk(m)) return list[m].getNRClusters(l,cell);
  return kFALSE;
}

inline UChar_t HMdcSecListCells::getNFitted(Int_t m,Int_t l,Int_t cell) const {
  if(nModOk(m)) return list[m].getNFitted(l,cell);
  return kFALSE;
}

inline UChar_t HMdcSecListCells::getNRFitted(Int_t m,Int_t l,Int_t cell) const {
  if(nModOk(m)) return list[m].getNRFitted(l,cell);
  return kFALSE;
}

inline Int_t HMdcSecListCells::getNFittedUnWires(Int_t seg,HMdcCellGroup12 *listCells) const {
  // call it if "listCells" was added to the wire counters of HMdcSecListCells
  return getNFittedUnWires(seg,listCells,1);
}

inline Int_t HMdcSecListCells::getNFittedUnWires2(Int_t seg,HMdcCellGroup12 *listCells) const {
  // call it if "listCells" was NOT added to the wire counters of HMdcSecListCells
  return getNFittedUnWires(seg,listCells,0);
}

inline Int_t HMdcSecListCells::getNFittedUnLayers(Int_t seg,HMdcCellGroup12 *listCells) const {
  // call it if "listCells" was added to the wire counters of HMdcSecListCells
  return getNFittedUnLayers(seg,listCells,1);
}

inline Int_t HMdcSecListCells::getNFittedUnAndRWires(Int_t seg,HMdcCellGroup12 *listCells,
                                                  Int_t& nWInReal) const {
  // call it if "listCells" was added to the wire counters of HMdcSecListCells
  return getNFittedUnAndRWires(seg,listCells,nWInReal,1);
}

inline Int_t HMdcSecListCells::getNFittedUnAndRWires2(Int_t seg,HMdcCellGroup12 *listCells,
                                                   Int_t& nWInReal) const {
  // call it if "listCells" was NOT added to the cluster conters of HMdcSecListCells
  return getNFittedUnAndRWires(seg,listCells,nWInReal,0);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - -
class HCategory;
class HIterator;
class HMdcTimeCut;

class HMdcEvntListCells : public TObject {
  protected:
    HMdcSecListCells list[6];
    HCategory*                pMdcCal1Cat;   // category MdcCal1
    HIterator*                iterMdcCal1;   // iterator for MdcCal1 category
    Bool_t                    isGeant;       // =kTRUE for GEANT data.
    HMdcTimeCut*              pDrTimeCut;    // drift time cuts 
    static HMdcEvntListCells* pGlobalLCells; // pointer to the global object
  public:
    HMdcEvntListCells(void);
    ~HMdcEvntListCells(void);
    static HMdcEvntListCells* getExObject(void) {return pGlobalLCells;}
    static HMdcEvntListCells* getObject(Bool_t& isCreated);
    static void               deleteCont(void);
    inline HMdcSecListCells& operator[](Int_t s);
    inline const HMdcSecListCells& operator[](Int_t s) const;
    Bool_t setMdcCal1Cat(void);
    Int_t  collectWires(Int_t sec=-1);
    
    inline void    clear(void);
    inline Bool_t  setTime(Int_t s, Int_t m, Int_t l, Int_t c, UChar_t t);
    inline void    delTime(Int_t s, Int_t m, Int_t l, Int_t c, UChar_t t);
    inline Int_t   getNCells(void) const;
    inline Bool_t  nextCell(Int_t& s, Int_t& m, Int_t& l, Int_t& c) const;
    inline Bool_t  nextCell(Int_t& s,Int_t& m,Int_t& l,Int_t& c,UChar_t& tm) const;
    inline UChar_t getTime(Int_t s, Int_t m, Int_t l, Int_t c) const;
    void print(void) const;

    inline Bool_t  addTime1(Int_t s, Int_t m, Int_t l, Int_t c, Float_t tm);
    inline Bool_t  nextTime(Int_t& s, Int_t& m, Int_t& l, Int_t& c, Float_t& tm) const;
    inline Float_t getTimeValue(Int_t s, Int_t m, Int_t l, Int_t c) const;
    inline Bool_t  addCell(Int_t s,Int_t m,Int_t l,Int_t c,UChar_t tm,
                           Float_t dt1,Float_t dt2);
    inline Bool_t  addCellSim(Int_t s,Int_t m,Int_t l,Int_t c,UChar_t tm,
                           Float_t dt1,Float_t dt2,
                           Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2);
    UChar_t        nextCell(Int_t& s,Int_t& m,Int_t& l,Int_t& c,
                            Float_t& dt1,Float_t& dt2) const;
    UChar_t        nextCellSim(Int_t& s,Int_t& m,Int_t& l,Int_t& c,
                       Float_t& dt1,Float_t& dt2,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    UChar_t        nextCellSim(Int_t& s,Int_t& m,Int_t& l,Int_t& c,
                       Int_t& tr1,Int_t& tr2,Float_t& tf1,Float_t& tf2) const;
    void           clearClustCounter(Int_t seg);
    void           clearFitWiresCounter(Int_t seg);
    inline Bool_t  increaseFittedCount(Int_t s,Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseRFittedCount(Int_t s,Int_t m,Int_t l,Int_t cell);
    inline Bool_t  increaseFittedAndRealCount(Int_t s,Int_t m,Int_t l,Int_t cell);
  protected:
    inline Bool_t nSecOk(Int_t s) const {return s>=0 && s<6;}

  ClassDef(HMdcEvntListCells,0) //List of all cells in layer
};

inline HMdcSecListCells& HMdcEvntListCells::operator[](Int_t s) {
  if(nSecOk(s)) return list[s];
  HMdcSecListCells* null=0;
  return *null;
}

inline const HMdcSecListCells& HMdcEvntListCells::operator[](Int_t s) const {
  if(nSecOk(s)) return list[s];
  HMdcSecListCells* null=0;
  return *null;
}
  
inline void HMdcEvntListCells::clear(void) {
  for(Int_t s=0;s<6;s++) list[s].clear();
}

inline Bool_t HMdcEvntListCells::setTime(Int_t s, Int_t m, Int_t l, Int_t c, 
    UChar_t t) {
  if(nSecOk(s)) return list[s].setTime(m,l,c,t);
  return kFALSE;
}

inline Bool_t HMdcEvntListCells::nextCell(Int_t& s,Int_t& m,Int_t& l,Int_t& c) 
    const {
  if(s<0) {
    s=m=l=0;
    c=-1;
  }
  for(;s<6;s++) if(list[s].nextCell(m,l,c)) return kTRUE;
  s=-1;
  return kFALSE;
}

inline Bool_t HMdcEvntListCells::nextCell(Int_t& s,Int_t& m,Int_t& l,Int_t& c,
    UChar_t& tm) const {
  if(nextCell(s,m,l,c)) {
    tm=getTime(s,m,l,c);
    if(tm) return kTRUE;
  }
  return kFALSE;
}

inline void HMdcEvntListCells::delTime(Int_t s, Int_t m, Int_t l, Int_t c, 
    UChar_t t) {
  if(nSecOk(s)) list[s].delTime(m,l,c,t);
}

inline Int_t HMdcEvntListCells::getNCells(void) const {
  Int_t nCells=0;
  for(Int_t s=0;s<6;s++) nCells+=list[s].getNCells();
  return nCells;
}

inline UChar_t HMdcEvntListCells::getTime(Int_t s, Int_t m, Int_t l, Int_t c) 
    const {
  if(nSecOk(s)) return list[s].getTime(m,l,c);
  return 0;
}

inline Bool_t HMdcEvntListCells::addTime1(Int_t s, Int_t m, Int_t l, Int_t c, 
    Float_t tm) {
  if(nSecOk(s)) return list[s].addTime1(m,l,c,tm);
  return kFALSE;
}

inline Bool_t HMdcEvntListCells::nextTime(Int_t& s, Int_t& m, Int_t& l, Int_t& c, 
    Float_t& tm) const {
  if(!nextCell(s,m,l,c)) return kFALSE;
  tm=getTimeValue(s,m,l,c);
  return kTRUE;
}

inline Float_t HMdcEvntListCells::getTimeValue(Int_t s, Int_t m, Int_t l, 
    Int_t c) const {
  if(nSecOk(s)) return list[s].getTimeValue(m,l,c);
  return -999.F;
}

inline Bool_t HMdcEvntListCells::addCell(Int_t s, Int_t m, Int_t l,Int_t c,
    UChar_t tm,Float_t dt1,Float_t dt2) {
  // tm can be eq. 1(time1 only), 2(time2 only) or 3(both)
  // dt1 and dt2 - driftTime1 and driftTime2 from HMdcCal1
  if(nSecOk(m)) return list[s].addCell(m,l,c,tm,dt1,dt2);
  return kFALSE; 
}

inline Bool_t HMdcEvntListCells::addCellSim(Int_t s, Int_t m, Int_t l,Int_t c,
    UChar_t tm,Float_t dt1,Float_t dt2,
    Int_t tr1,Int_t tr2,Float_t tf1,Float_t tf2) {
  // tm can be eq. 1(time1 only), 2(time2 only) or 3(both)
  // dt1 and dt2 - driftTime1 and driftTime2 from HMdcCal1
  // tr1 and tr2 - geant track numbers for driftTime1 and driftTime2
  if(nSecOk(m)) return list[s].addCellSim(m,l,c,tm,dt1,dt2,tr1,tr2,tf1,tf2);
  return kFALSE; 
}

inline Bool_t HMdcEvntListCells::increaseFittedCount(Int_t s,Int_t m,Int_t l,Int_t cell) {
  if(nSecOk(s)) return list[s].increaseFittedCount(m,l,cell);
  return kFALSE;
}

inline Bool_t HMdcEvntListCells::increaseRFittedCount(Int_t s,Int_t m,Int_t l,Int_t cell) {
  if(nSecOk(s)) return list[s].increaseRFittedCount(m,l,cell);
  return kFALSE;
}

inline Bool_t HMdcEvntListCells::increaseFittedAndRealCount(Int_t s,Int_t m,Int_t l,Int_t cell) {
  if(nSecOk(s)) return list[s].increaseFittedAndRealCount(m,l,cell);
  return kFALSE;
}

#endif
 hmdclistcells.h:1
 hmdclistcells.h:2
 hmdclistcells.h:3
 hmdclistcells.h:4
 hmdclistcells.h:5
 hmdclistcells.h:6
 hmdclistcells.h:7
 hmdclistcells.h:8
 hmdclistcells.h:9
 hmdclistcells.h:10
 hmdclistcells.h:11
 hmdclistcells.h:12
 hmdclistcells.h:13
 hmdclistcells.h:14
 hmdclistcells.h:15
 hmdclistcells.h:16
 hmdclistcells.h:17
 hmdclistcells.h:18
 hmdclistcells.h:19
 hmdclistcells.h:20
 hmdclistcells.h:21
 hmdclistcells.h:22
 hmdclistcells.h:23
 hmdclistcells.h:24
 hmdclistcells.h:25
 hmdclistcells.h:26
 hmdclistcells.h:27
 hmdclistcells.h:28
 hmdclistcells.h:29
 hmdclistcells.h:30
 hmdclistcells.h:31
 hmdclistcells.h:32
 hmdclistcells.h:33
 hmdclistcells.h:34
 hmdclistcells.h:35
 hmdclistcells.h:36
 hmdclistcells.h:37
 hmdclistcells.h:38
 hmdclistcells.h:39
 hmdclistcells.h:40
 hmdclistcells.h:41
 hmdclistcells.h:42
 hmdclistcells.h:43
 hmdclistcells.h:44
 hmdclistcells.h:45
 hmdclistcells.h:46
 hmdclistcells.h:47
 hmdclistcells.h:48
 hmdclistcells.h:49
 hmdclistcells.h:50
 hmdclistcells.h:51
 hmdclistcells.h:52
 hmdclistcells.h:53
 hmdclistcells.h:54
 hmdclistcells.h:55
 hmdclistcells.h:56
 hmdclistcells.h:57
 hmdclistcells.h:58
 hmdclistcells.h:59
 hmdclistcells.h:60
 hmdclistcells.h:61
 hmdclistcells.h:62
 hmdclistcells.h:63
 hmdclistcells.h:64
 hmdclistcells.h:65
 hmdclistcells.h:66
 hmdclistcells.h:67
 hmdclistcells.h:68
 hmdclistcells.h:69
 hmdclistcells.h:70
 hmdclistcells.h:71
 hmdclistcells.h:72
 hmdclistcells.h:73
 hmdclistcells.h:74
 hmdclistcells.h:75
 hmdclistcells.h:76
 hmdclistcells.h:77
 hmdclistcells.h:78
 hmdclistcells.h:79
 hmdclistcells.h:80
 hmdclistcells.h:81
 hmdclistcells.h:82
 hmdclistcells.h:83
 hmdclistcells.h:84
 hmdclistcells.h:85
 hmdclistcells.h:86
 hmdclistcells.h:87
 hmdclistcells.h:88
 hmdclistcells.h:89
 hmdclistcells.h:90
 hmdclistcells.h:91
 hmdclistcells.h:92
 hmdclistcells.h:93
 hmdclistcells.h:94
 hmdclistcells.h:95
 hmdclistcells.h:96
 hmdclistcells.h:97
 hmdclistcells.h:98
 hmdclistcells.h:99
 hmdclistcells.h:100
 hmdclistcells.h:101
 hmdclistcells.h:102
 hmdclistcells.h:103
 hmdclistcells.h:104
 hmdclistcells.h:105
 hmdclistcells.h:106
 hmdclistcells.h:107
 hmdclistcells.h:108
 hmdclistcells.h:109
 hmdclistcells.h:110
 hmdclistcells.h:111
 hmdclistcells.h:112
 hmdclistcells.h:113
 hmdclistcells.h:114
 hmdclistcells.h:115
 hmdclistcells.h:116
 hmdclistcells.h:117
 hmdclistcells.h:118
 hmdclistcells.h:119
 hmdclistcells.h:120
 hmdclistcells.h:121
 hmdclistcells.h:122
 hmdclistcells.h:123
 hmdclistcells.h:124
 hmdclistcells.h:125
 hmdclistcells.h:126
 hmdclistcells.h:127
 hmdclistcells.h:128
 hmdclistcells.h:129
 hmdclistcells.h:130
 hmdclistcells.h:131
 hmdclistcells.h:132
 hmdclistcells.h:133
 hmdclistcells.h:134
 hmdclistcells.h:135
 hmdclistcells.h:136
 hmdclistcells.h:137
 hmdclistcells.h:138
 hmdclistcells.h:139
 hmdclistcells.h:140
 hmdclistcells.h:141
 hmdclistcells.h:142
 hmdclistcells.h:143
 hmdclistcells.h:144
 hmdclistcells.h:145
 hmdclistcells.h:146
 hmdclistcells.h:147
 hmdclistcells.h:148
 hmdclistcells.h:149
 hmdclistcells.h:150
 hmdclistcells.h:151
 hmdclistcells.h:152
 hmdclistcells.h:153
 hmdclistcells.h:154
 hmdclistcells.h:155
 hmdclistcells.h:156
 hmdclistcells.h:157
 hmdclistcells.h:158
 hmdclistcells.h:159
 hmdclistcells.h:160
 hmdclistcells.h:161
 hmdclistcells.h:162
 hmdclistcells.h:163
 hmdclistcells.h:164
 hmdclistcells.h:165
 hmdclistcells.h:166
 hmdclistcells.h:167
 hmdclistcells.h:168
 hmdclistcells.h:169
 hmdclistcells.h:170
 hmdclistcells.h:171
 hmdclistcells.h:172
 hmdclistcells.h:173
 hmdclistcells.h:174
 hmdclistcells.h:175
 hmdclistcells.h:176
 hmdclistcells.h:177
 hmdclistcells.h:178
 hmdclistcells.h:179
 hmdclistcells.h:180
 hmdclistcells.h:181
 hmdclistcells.h:182
 hmdclistcells.h:183
 hmdclistcells.h:184
 hmdclistcells.h:185
 hmdclistcells.h:186
 hmdclistcells.h:187
 hmdclistcells.h:188
 hmdclistcells.h:189
 hmdclistcells.h:190
 hmdclistcells.h:191
 hmdclistcells.h:192
 hmdclistcells.h:193
 hmdclistcells.h:194
 hmdclistcells.h:195
 hmdclistcells.h:196
 hmdclistcells.h:197
 hmdclistcells.h:198
 hmdclistcells.h:199
 hmdclistcells.h:200
 hmdclistcells.h:201
 hmdclistcells.h:202
 hmdclistcells.h:203
 hmdclistcells.h:204
 hmdclistcells.h:205
 hmdclistcells.h:206
 hmdclistcells.h:207
 hmdclistcells.h:208
 hmdclistcells.h:209
 hmdclistcells.h:210
 hmdclistcells.h:211
 hmdclistcells.h:212
 hmdclistcells.h:213
 hmdclistcells.h:214
 hmdclistcells.h:215
 hmdclistcells.h:216
 hmdclistcells.h:217
 hmdclistcells.h:218
 hmdclistcells.h:219
 hmdclistcells.h:220
 hmdclistcells.h:221
 hmdclistcells.h:222
 hmdclistcells.h:223
 hmdclistcells.h:224
 hmdclistcells.h:225
 hmdclistcells.h:226
 hmdclistcells.h:227
 hmdclistcells.h:228
 hmdclistcells.h:229
 hmdclistcells.h:230
 hmdclistcells.h:231
 hmdclistcells.h:232
 hmdclistcells.h:233
 hmdclistcells.h:234
 hmdclistcells.h:235
 hmdclistcells.h:236
 hmdclistcells.h:237
 hmdclistcells.h:238
 hmdclistcells.h:239
 hmdclistcells.h:240
 hmdclistcells.h:241
 hmdclistcells.h:242
 hmdclistcells.h:243
 hmdclistcells.h:244
 hmdclistcells.h:245
 hmdclistcells.h:246
 hmdclistcells.h:247
 hmdclistcells.h:248
 hmdclistcells.h:249
 hmdclistcells.h:250
 hmdclistcells.h:251
 hmdclistcells.h:252
 hmdclistcells.h:253
 hmdclistcells.h:254
 hmdclistcells.h:255
 hmdclistcells.h:256
 hmdclistcells.h:257
 hmdclistcells.h:258
 hmdclistcells.h:259
 hmdclistcells.h:260
 hmdclistcells.h:261
 hmdclistcells.h:262
 hmdclistcells.h:263
 hmdclistcells.h:264
 hmdclistcells.h:265
 hmdclistcells.h:266
 hmdclistcells.h:267
 hmdclistcells.h:268
 hmdclistcells.h:269
 hmdclistcells.h:270
 hmdclistcells.h:271
 hmdclistcells.h:272
 hmdclistcells.h:273
 hmdclistcells.h:274
 hmdclistcells.h:275
 hmdclistcells.h:276
 hmdclistcells.h:277
 hmdclistcells.h:278
 hmdclistcells.h:279
 hmdclistcells.h:280
 hmdclistcells.h:281
 hmdclistcells.h:282
 hmdclistcells.h:283
 hmdclistcells.h:284
 hmdclistcells.h:285
 hmdclistcells.h:286
 hmdclistcells.h:287
 hmdclistcells.h:288
 hmdclistcells.h:289
 hmdclistcells.h:290
 hmdclistcells.h:291
 hmdclistcells.h:292
 hmdclistcells.h:293
 hmdclistcells.h:294
 hmdclistcells.h:295
 hmdclistcells.h:296
 hmdclistcells.h:297
 hmdclistcells.h:298
 hmdclistcells.h:299
 hmdclistcells.h:300
 hmdclistcells.h:301
 hmdclistcells.h:302
 hmdclistcells.h:303
 hmdclistcells.h:304
 hmdclistcells.h:305
 hmdclistcells.h:306
 hmdclistcells.h:307
 hmdclistcells.h:308
 hmdclistcells.h:309
 hmdclistcells.h:310
 hmdclistcells.h:311
 hmdclistcells.h:312
 hmdclistcells.h:313
 hmdclistcells.h:314
 hmdclistcells.h:315
 hmdclistcells.h:316
 hmdclistcells.h:317
 hmdclistcells.h:318
 hmdclistcells.h:319
 hmdclistcells.h:320
 hmdclistcells.h:321
 hmdclistcells.h:322
 hmdclistcells.h:323
 hmdclistcells.h:324
 hmdclistcells.h:325
 hmdclistcells.h:326
 hmdclistcells.h:327
 hmdclistcells.h:328
 hmdclistcells.h:329
 hmdclistcells.h:330
 hmdclistcells.h:331
 hmdclistcells.h:332
 hmdclistcells.h:333
 hmdclistcells.h:334
 hmdclistcells.h:335
 hmdclistcells.h:336
 hmdclistcells.h:337
 hmdclistcells.h:338
 hmdclistcells.h:339
 hmdclistcells.h:340
 hmdclistcells.h:341
 hmdclistcells.h:342
 hmdclistcells.h:343
 hmdclistcells.h:344
 hmdclistcells.h:345
 hmdclistcells.h:346
 hmdclistcells.h:347
 hmdclistcells.h:348
 hmdclistcells.h:349
 hmdclistcells.h:350
 hmdclistcells.h:351
 hmdclistcells.h:352
 hmdclistcells.h:353
 hmdclistcells.h:354
 hmdclistcells.h:355
 hmdclistcells.h:356
 hmdclistcells.h:357
 hmdclistcells.h:358
 hmdclistcells.h:359
 hmdclistcells.h:360
 hmdclistcells.h:361
 hmdclistcells.h:362
 hmdclistcells.h:363
 hmdclistcells.h:364
 hmdclistcells.h:365
 hmdclistcells.h:366
 hmdclistcells.h:367
 hmdclistcells.h:368
 hmdclistcells.h:369
 hmdclistcells.h:370
 hmdclistcells.h:371
 hmdclistcells.h:372
 hmdclistcells.h:373
 hmdclistcells.h:374
 hmdclistcells.h:375
 hmdclistcells.h:376
 hmdclistcells.h:377
 hmdclistcells.h:378
 hmdclistcells.h:379
 hmdclistcells.h:380
 hmdclistcells.h:381
 hmdclistcells.h:382
 hmdclistcells.h:383
 hmdclistcells.h:384
 hmdclistcells.h:385
 hmdclistcells.h:386
 hmdclistcells.h:387
 hmdclistcells.h:388
 hmdclistcells.h:389
 hmdclistcells.h:390
 hmdclistcells.h:391
 hmdclistcells.h:392
 hmdclistcells.h:393
 hmdclistcells.h:394
 hmdclistcells.h:395
 hmdclistcells.h:396
 hmdclistcells.h:397
 hmdclistcells.h:398
 hmdclistcells.h:399
 hmdclistcells.h:400
 hmdclistcells.h:401
 hmdclistcells.h:402
 hmdclistcells.h:403
 hmdclistcells.h:404
 hmdclistcells.h:405
 hmdclistcells.h:406
 hmdclistcells.h:407
 hmdclistcells.h:408
 hmdclistcells.h:409
 hmdclistcells.h:410
 hmdclistcells.h:411
 hmdclistcells.h:412
 hmdclistcells.h:413
 hmdclistcells.h:414
 hmdclistcells.h:415
 hmdclistcells.h:416
 hmdclistcells.h:417
 hmdclistcells.h:418
 hmdclistcells.h:419
 hmdclistcells.h:420
 hmdclistcells.h:421
 hmdclistcells.h:422
 hmdclistcells.h:423
 hmdclistcells.h:424
 hmdclistcells.h:425
 hmdclistcells.h:426
 hmdclistcells.h:427
 hmdclistcells.h:428
 hmdclistcells.h:429
 hmdclistcells.h:430
 hmdclistcells.h:431
 hmdclistcells.h:432
 hmdclistcells.h:433
 hmdclistcells.h:434
 hmdclistcells.h:435
 hmdclistcells.h:436
 hmdclistcells.h:437
 hmdclistcells.h:438
 hmdclistcells.h:439
 hmdclistcells.h:440
 hmdclistcells.h:441
 hmdclistcells.h:442
 hmdclistcells.h:443
 hmdclistcells.h:444
 hmdclistcells.h:445
 hmdclistcells.h:446
 hmdclistcells.h:447
 hmdclistcells.h:448
 hmdclistcells.h:449
 hmdclistcells.h:450
 hmdclistcells.h:451
 hmdclistcells.h:452
 hmdclistcells.h:453
 hmdclistcells.h:454
 hmdclistcells.h:455
 hmdclistcells.h:456
 hmdclistcells.h:457
 hmdclistcells.h:458
 hmdclistcells.h:459
 hmdclistcells.h:460
 hmdclistcells.h:461
 hmdclistcells.h:462
 hmdclistcells.h:463
 hmdclistcells.h:464
 hmdclistcells.h:465
 hmdclistcells.h:466
 hmdclistcells.h:467
 hmdclistcells.h:468
 hmdclistcells.h:469
 hmdclistcells.h:470
 hmdclistcells.h:471
 hmdclistcells.h:472
 hmdclistcells.h:473
 hmdclistcells.h:474
 hmdclistcells.h:475
 hmdclistcells.h:476
 hmdclistcells.h:477
 hmdclistcells.h:478
 hmdclistcells.h:479
 hmdclistcells.h:480
 hmdclistcells.h:481
 hmdclistcells.h:482
 hmdclistcells.h:483
 hmdclistcells.h:484
 hmdclistcells.h:485
 hmdclistcells.h:486
 hmdclistcells.h:487
 hmdclistcells.h:488
 hmdclistcells.h:489
 hmdclistcells.h:490
 hmdclistcells.h:491
 hmdclistcells.h:492
 hmdclistcells.h:493
 hmdclistcells.h:494
 hmdclistcells.h:495
 hmdclistcells.h:496
 hmdclistcells.h:497
 hmdclistcells.h:498
 hmdclistcells.h:499
 hmdclistcells.h:500
 hmdclistcells.h:501
 hmdclistcells.h:502
 hmdclistcells.h:503
 hmdclistcells.h:504
 hmdclistcells.h:505
 hmdclistcells.h:506
 hmdclistcells.h:507
 hmdclistcells.h:508
 hmdclistcells.h:509
 hmdclistcells.h:510
 hmdclistcells.h:511
 hmdclistcells.h:512
 hmdclistcells.h:513
 hmdclistcells.h:514
 hmdclistcells.h:515
 hmdclistcells.h:516
 hmdclistcells.h:517
 hmdclistcells.h:518
 hmdclistcells.h:519
 hmdclistcells.h:520
 hmdclistcells.h:521
 hmdclistcells.h:522
 hmdclistcells.h:523
 hmdclistcells.h:524
 hmdclistcells.h:525
 hmdclistcells.h:526
 hmdclistcells.h:527
 hmdclistcells.h:528
 hmdclistcells.h:529
 hmdclistcells.h:530
 hmdclistcells.h:531
 hmdclistcells.h:532
 hmdclistcells.h:533
 hmdclistcells.h:534
 hmdclistcells.h:535
 hmdclistcells.h:536
 hmdclistcells.h:537
 hmdclistcells.h:538
 hmdclistcells.h:539
 hmdclistcells.h:540
 hmdclistcells.h:541
 hmdclistcells.h:542
 hmdclistcells.h:543
 hmdclistcells.h:544
 hmdclistcells.h:545
 hmdclistcells.h:546
 hmdclistcells.h:547
 hmdclistcells.h:548
 hmdclistcells.h:549
 hmdclistcells.h:550
 hmdclistcells.h:551
 hmdclistcells.h:552
 hmdclistcells.h:553
 hmdclistcells.h:554
 hmdclistcells.h:555
 hmdclistcells.h:556
 hmdclistcells.h:557
 hmdclistcells.h:558
 hmdclistcells.h:559
 hmdclistcells.h:560
 hmdclistcells.h:561
 hmdclistcells.h:562
 hmdclistcells.h:563
 hmdclistcells.h:564
 hmdclistcells.h:565
 hmdclistcells.h:566
 hmdclistcells.h:567
 hmdclistcells.h:568
 hmdclistcells.h:569
 hmdclistcells.h:570
 hmdclistcells.h:571
 hmdclistcells.h:572
 hmdclistcells.h:573
 hmdclistcells.h:574
 hmdclistcells.h:575
 hmdclistcells.h:576
 hmdclistcells.h:577
 hmdclistcells.h:578
 hmdclistcells.h:579
 hmdclistcells.h:580
 hmdclistcells.h:581
 hmdclistcells.h:582
 hmdclistcells.h:583
 hmdclistcells.h:584
 hmdclistcells.h:585
 hmdclistcells.h:586
 hmdclistcells.h:587
 hmdclistcells.h:588
 hmdclistcells.h:589
 hmdclistcells.h:590
 hmdclistcells.h:591
 hmdclistcells.h:592
 hmdclistcells.h:593
 hmdclistcells.h:594
 hmdclistcells.h:595
 hmdclistcells.h:596
 hmdclistcells.h:597
 hmdclistcells.h:598
 hmdclistcells.h:599
 hmdclistcells.h:600
 hmdclistcells.h:601
 hmdclistcells.h:602
 hmdclistcells.h:603
 hmdclistcells.h:604
 hmdclistcells.h:605
 hmdclistcells.h:606
 hmdclistcells.h:607
 hmdclistcells.h:608
 hmdclistcells.h:609
 hmdclistcells.h:610
 hmdclistcells.h:611
 hmdclistcells.h:612
 hmdclistcells.h:613
 hmdclistcells.h:614
 hmdclistcells.h:615
 hmdclistcells.h:616
 hmdclistcells.h:617
 hmdclistcells.h:618
 hmdclistcells.h:619
 hmdclistcells.h:620
 hmdclistcells.h:621
 hmdclistcells.h:622
 hmdclistcells.h:623
 hmdclistcells.h:624
 hmdclistcells.h:625
 hmdclistcells.h:626
 hmdclistcells.h:627
 hmdclistcells.h:628
 hmdclistcells.h:629
 hmdclistcells.h:630
 hmdclistcells.h:631
 hmdclistcells.h:632
 hmdclistcells.h:633
 hmdclistcells.h:634
 hmdclistcells.h:635
 hmdclistcells.h:636
 hmdclistcells.h:637
 hmdclistcells.h:638
 hmdclistcells.h:639
 hmdclistcells.h:640
 hmdclistcells.h:641
 hmdclistcells.h:642
 hmdclistcells.h:643
 hmdclistcells.h:644
 hmdclistcells.h:645
 hmdclistcells.h:646
 hmdclistcells.h:647
 hmdclistcells.h:648
 hmdclistcells.h:649
 hmdclistcells.h:650
 hmdclistcells.h:651
 hmdclistcells.h:652
 hmdclistcells.h:653
 hmdclistcells.h:654
 hmdclistcells.h:655
 hmdclistcells.h:656
 hmdclistcells.h:657
 hmdclistcells.h:658
 hmdclistcells.h:659
 hmdclistcells.h:660
 hmdclistcells.h:661
 hmdclistcells.h:662
 hmdclistcells.h:663
 hmdclistcells.h:664
 hmdclistcells.h:665
 hmdclistcells.h:666
 hmdclistcells.h:667
 hmdclistcells.h:668
 hmdclistcells.h:669
 hmdclistcells.h:670
 hmdclistcells.h:671
 hmdclistcells.h:672
 hmdclistcells.h:673
 hmdclistcells.h:674
 hmdclistcells.h:675
 hmdclistcells.h:676
 hmdclistcells.h:677
 hmdclistcells.h:678
 hmdclistcells.h:679
 hmdclistcells.h:680
 hmdclistcells.h:681
 hmdclistcells.h:682
 hmdclistcells.h:683
 hmdclistcells.h:684
 hmdclistcells.h:685
 hmdclistcells.h:686
 hmdclistcells.h:687
 hmdclistcells.h:688
 hmdclistcells.h:689
 hmdclistcells.h:690
 hmdclistcells.h:691
 hmdclistcells.h:692
 hmdclistcells.h:693
 hmdclistcells.h:694
 hmdclistcells.h:695
 hmdclistcells.h:696
 hmdclistcells.h:697
 hmdclistcells.h:698
 hmdclistcells.h:699
 hmdclistcells.h:700
 hmdclistcells.h:701
 hmdclistcells.h:702
 hmdclistcells.h:703
 hmdclistcells.h:704
 hmdclistcells.h:705
 hmdclistcells.h:706
 hmdclistcells.h:707
 hmdclistcells.h:708
 hmdclistcells.h:709
 hmdclistcells.h:710
 hmdclistcells.h:711
 hmdclistcells.h:712
 hmdclistcells.h:713
 hmdclistcells.h:714
 hmdclistcells.h:715
 hmdclistcells.h:716
 hmdclistcells.h:717
 hmdclistcells.h:718
 hmdclistcells.h:719
 hmdclistcells.h:720
 hmdclistcells.h:721
 hmdclistcells.h:722
 hmdclistcells.h:723
 hmdclistcells.h:724
 hmdclistcells.h:725
 hmdclistcells.h:726
 hmdclistcells.h:727
 hmdclistcells.h:728
 hmdclistcells.h:729
 hmdclistcells.h:730
 hmdclistcells.h:731
 hmdclistcells.h:732
 hmdclistcells.h:733
 hmdclistcells.h:734
 hmdclistcells.h:735
 hmdclistcells.h:736
 hmdclistcells.h:737
 hmdclistcells.h:738
 hmdclistcells.h:739
 hmdclistcells.h:740
 hmdclistcells.h:741
 hmdclistcells.h:742
 hmdclistcells.h:743
 hmdclistcells.h:744
 hmdclistcells.h:745
 hmdclistcells.h:746
 hmdclistcells.h:747
 hmdclistcells.h:748
 hmdclistcells.h:749
 hmdclistcells.h:750
 hmdclistcells.h:751
 hmdclistcells.h:752
 hmdclistcells.h:753
 hmdclistcells.h:754
 hmdclistcells.h:755
 hmdclistcells.h:756
 hmdclistcells.h:757
 hmdclistcells.h:758
 hmdclistcells.h:759
 hmdclistcells.h:760
 hmdclistcells.h:761
 hmdclistcells.h:762
 hmdclistcells.h:763
 hmdclistcells.h:764
 hmdclistcells.h:765
 hmdclistcells.h:766
 hmdclistcells.h:767
 hmdclistcells.h:768
 hmdclistcells.h:769
 hmdclistcells.h:770
 hmdclistcells.h:771
 hmdclistcells.h:772
 hmdclistcells.h:773
 hmdclistcells.h:774
 hmdclistcells.h:775
 hmdclistcells.h:776
 hmdclistcells.h:777
 hmdclistcells.h:778
 hmdclistcells.h:779
 hmdclistcells.h:780
 hmdclistcells.h:781
 hmdclistcells.h:782
 hmdclistcells.h:783
 hmdclistcells.h:784
 hmdclistcells.h:785
 hmdclistcells.h:786
 hmdclistcells.h:787
 hmdclistcells.h:788
 hmdclistcells.h:789
 hmdclistcells.h:790
 hmdclistcells.h:791
 hmdclistcells.h:792
 hmdclistcells.h:793
 hmdclistcells.h:794
 hmdclistcells.h:795
 hmdclistcells.h:796
 hmdclistcells.h:797
 hmdclistcells.h:798
 hmdclistcells.h:799
 hmdclistcells.h:800
 hmdclistcells.h:801
 hmdclistcells.h:802
 hmdclistcells.h:803
 hmdclistcells.h:804
 hmdclistcells.h:805
 hmdclistcells.h:806
 hmdclistcells.h:807
 hmdclistcells.h:808
 hmdclistcells.h:809
 hmdclistcells.h:810
 hmdclistcells.h:811
 hmdclistcells.h:812
 hmdclistcells.h:813
 hmdclistcells.h:814
 hmdclistcells.h:815
 hmdclistcells.h:816
 hmdclistcells.h:817
 hmdclistcells.h:818
 hmdclistcells.h:819
 hmdclistcells.h:820
 hmdclistcells.h:821
 hmdclistcells.h:822
 hmdclistcells.h:823
 hmdclistcells.h:824
 hmdclistcells.h:825
 hmdclistcells.h:826
 hmdclistcells.h:827
 hmdclistcells.h:828
 hmdclistcells.h:829
 hmdclistcells.h:830
 hmdclistcells.h:831
 hmdclistcells.h:832
 hmdclistcells.h:833
 hmdclistcells.h:834
 hmdclistcells.h:835
 hmdclistcells.h:836
 hmdclistcells.h:837
 hmdclistcells.h:838
 hmdclistcells.h:839
 hmdclistcells.h:840
 hmdclistcells.h:841
 hmdclistcells.h:842
 hmdclistcells.h:843
 hmdclistcells.h:844
 hmdclistcells.h:845
 hmdclistcells.h:846
 hmdclistcells.h:847
 hmdclistcells.h:848
 hmdclistcells.h:849
 hmdclistcells.h:850
 hmdclistcells.h:851
 hmdclistcells.h:852
 hmdclistcells.h:853
 hmdclistcells.h:854
 hmdclistcells.h:855
 hmdclistcells.h:856
 hmdclistcells.h:857