ROOT logo
//*--- Author : V.Pechenov
//*--- Modified: 26.06.07 V.Pechenov
//*--- $Id: hmdc12fit.cc,v 1.68 2009-10-16 09:07:50 pechenov Exp $
//*--- Modified: 23.01.07 V.Pechenov
//*--- Modified: 17.06.05 V.Pechenov
//*--- Modified: 29.10.03 V.Pechenov
//*--- Modified: 21.07.03 V.Pechenov
//*--- Modified: 04.04.03 V.Pechenov
//*--- Modified: 17.07.02 V.Pechenov
//*--- Modified: 16.08.01 V.Pechenov
//*--- Modified: 17.10.00 A.Nekhaev

using namespace std;
#include "hmdc12fit.h"
#include "hdebug.h"
#include "hevent.h"
#include "hiterator.h"
#include "hspectrometer.h"
#include "hmatrixcategory.h"
#include <iostream>
#include <iomanip>
#include "hmdcsizescells.h"
#include "hgeomvector.h"
#include "hmdcsegsim.h"
#include "hmdchitsim.h"
#include "hmdcgetcontainers.h"
#include "hmdcclussim.h"
#include "hmdcdetector.h"
#include "hmdctrackfittera.h"
#include "hmdctrackfitterb.h"
#include "hmdctrackdset.h"
#include "hmdcclusinfsim.h"
#include "hruntimedb.h"
#include "hmdc34clfinder.h"
#include "hmdctrkcand.h"
#include "hmdcgeanttrack.h"
#include "hmdcclusfitsim.h"
#include "hmdclistcells.h"

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
// 
// HMdcTrackFittesrArray
//
// Array of HMdcTrackFitterA (B,...) objects
//
//
// HMdc12Fit
//
// Manager class for Dubna track straight piece fitter.
//
//////////////////////////////////////////////////////////////////////////////


ClassImp(HMdc12Fit)
ClassImp(HMdcFittersArray)

HMdcFittersArray::HMdcFittersArray(void) {
  nObj      = 0;
  fitAuthor = 1;
  fitpar    = 0;
  size      = 100;
  fitterArr = new HMdcTrackFitter* [size];
  for(Int_t i=0;i<size;i++) fitterArr[i] = 0;
}

HMdcFittersArray::~HMdcFittersArray(void) {
  if(fitterArr) {
    for(Int_t i=0;i<size;i++) if(fitterArr[i]!=0) delete fitterArr[i];
    delete [] fitterArr;
    fitterArr = NULL;
  }
}

void HMdcFittersArray::init(Int_t fitAut, HMdcTrackFitInOut* fpar) {
  fitpar    = fpar;
  fitAuthor = fitAut;
}

void HMdcFittersArray::expand(void) {
  Int_t newSize=size+50;
  HMdcTrackFitter** fitterArrOld=fitterArr;
  fitterArr=new HMdcTrackFitter* [newSize];
  for(Int_t i=0;i<size;i++) fitterArr[i]=fitterArrOld[i];
  for(Int_t i=size;i<newSize;i++) fitterArr[i]=0;
  size=newSize;
  delete [] fitterArrOld;
}

HMdcTrackFitter* HMdcFittersArray::getNewFitter(void) {
  if(nObj == size) expand();
  HMdcTrackFitter* fitter = fitterArr[nObj];
  if(fitter == NULL) {
    if(fitAuthor == 2) fitter = (HMdcTrackFitter*) new HMdcTrackFitterB(fitpar);
    else               fitter = (HMdcTrackFitter*) new HMdcTrackFitterA(fitpar);
    fitterArr[nObj]=fitter;
  }
  fitter->getInitParam()->setOneSecData();
  fitter->getFinalParam()->setOneSecData();
  nObj++;
  return fitter;
}

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

HMdc12Fit::HMdc12Fit(Int_t type,Int_t ver,Int_t dp,Bool_t hst,Bool_t prnt) {
  HMdcTrackDSet::setMdc12Fit(type,ver,dp,hst,prnt);
  setParContainers();
}

HMdc12Fit::HMdc12Fit(const Text_t *name,const Text_t *title,Int_t type,
    Int_t ver,Int_t dp,Bool_t hst, Bool_t prnt) : HReconstructor(name,title) {
  HMdcTrackDSet::setMdc12Fit(type,ver,dp,hst,prnt);
  setParContainers();
}

HMdc12Fit::HMdc12Fit() {
  setParContainers();
}

HMdc12Fit::HMdc12Fit(const Text_t *name,const Text_t *title)
    : HReconstructor(name,title) {
  setParContainers();
}

HMdc12Fit::~HMdc12Fit() {
  HMdcSizesCells::deleteCont();
  HMdcTrackDSet::clearP12Fit();
  if(iterClus){delete iterClus;iterClus=0;}
}

void HMdc12Fit::setParContainers(void) {
  HMdcTrackDSet::set12Fit(this);
  prntSt             = kFALSE;
  fSegCat            = NULL; 
  iterClus           = NULL;
  fHitCat            = NULL;
  fClusFitCat        = NULL;
  modForSeg[0]       = 1;
  modForSeg[1]       = 3;
  fitpar.setWeightCut(0.01);
  fitpar.setSignalSpeed(0.0);
  notFillByClus      = kFALSE;
  isCosmicData       = kFALSE;
  fillHitSeg         = kTRUE;
  pTrackInfSim       = NULL;
  useFitted          = kFALSE;
  useFittedTrPar     = kFALSE;
  findOffVertTrk     = kFALSE;
  nLayersCutOVT      = 0;
  nWiresCutOVT       = 0;

  // Fake suppression parameters:
  setFakeSupprStep1Par(0, 4,3,4, 8);
  setFakeSupprStep1Par(1, 4,3,5,10);

  Float_t cutRealS0[8] = { 0.0, 0.1, 0.5 , 0.7, 1.0, 1.1, 1.3, 1.6};  //Seg.0
  Float_t cutFakeS0[8] = { 0.1, 0.1, 0.5 , 0.8, 1.1, 1.2, 1.5, 1.7};  //Seg.0
  setFakeSupprStep2Par(0, cutRealS0,cutFakeS0);

  Float_t cutRealS1[8] = { 0.0, 0.1, 0.5 , 0.8, 1.1, 1.2, 1.3, 1.5};  //Seg.1
  Float_t cutFakeS1[8] = { 0.1, 0.1, 0.65, 1.1, 1.2, 1.4, 1.5, 1.6};  //Seg.1
  setFakeSupprStep2Par(1, cutRealS1,cutFakeS1);
}

void HMdc12Fit::setFakeSupprStep1Par(UInt_t seg,Int_t n1,Int_t n2,Int_t n3,Int_t n4) {
  if(seg>1) return;
  nSharedLayersCut[seg] = n1;
  nLayerOrientCut[seg]  = n2;
  nDCellsMinCut[seg]    = n3;
  nDCellsCut[seg]       = n4;
}

void HMdc12Fit::setFakeSupprStep2Par(UInt_t seg,Float_t *cutReal,Float_t *cutFake) {
  // cutFake[i] must be >= cutReal[i]
  if(seg>1) return;
  for(Int_t i=0;i<8;i++) {
    cutForReal[seg][i] = cutReal[i];
    cutForFake[seg][i] = cutFake[i];
  }
}

Bool_t HMdc12Fit::init(void) {
  HMdcGetContainers* fGetCont = HMdcGetContainers::getObject();
  fClusCat = fGetCont->getCatMdcClus();
  if( !fClusCat ) return kFALSE;
  iterClus=(HIterator *)fClusCat->MakeIterator();
  
  if(!fitpar.init()) return kFALSE;
  isGeant = fitpar.isGeant();
  HMdcDetector* fMdcDet = fGetCont->getMdcDetector();
  modForSeg[0] = HMdcTrackDSet::getModForSeg1();
  modForSeg[1] = HMdcTrackDSet::getModForSeg2();
  if(fillHitSeg) {
    if(modForSeg[0]>=0 && modForSeg[1]>0) {
      fSegCat = gHades->getCurrentEvent()->getCategory(catMdcSeg);
      if(!fSegCat) {
        if(isGeant) fSegCat = fMdcDet->buildMatrixCategory("HMdcSegSim",0.5F);
        else        fSegCat = fMdcDet->buildCategory(catMdcSeg);
        if (!fSegCat) return kFALSE;
        gHades->getCurrentEvent()->addCategory(catMdcSeg,fSegCat,"Mdc");
      }
    }

    fHitCat = gHades->getCurrentEvent()->getCategory(catMdcHit);
    if (!fHitCat) {
      if(isGeant) fHitCat = fMdcDet->buildMatrixCategory("HMdcHitSim",0.5F);
      else        fHitCat = fMdcDet->buildCategory(catMdcHit);
      if (!fHitCat) return kFALSE;
      gHades->getCurrentEvent()->addCategory(catMdcHit,fHitCat,"Mdc");
    }
  }
  if(isCosmicData) {
    fTrkCandCat = 0;
    fClusInfCat = 0;
  } else {
    fTrkCandCat = fGetCont->getCatMdcTrkCand(kTRUE);
    if(!fTrkCandCat) return kFALSE;
    fClusInfCat = fGetCont->getCatMdcClusInf(kTRUE);
    if(!fClusInfCat) return kFALSE;
    findOffVertTrk = HMdcTrackDSet::getFindOffVertTrkFlag();
  }


  locClInf.set(1,0);
  locSeg.set(2,0,0);
  locHit.set(2,0,0);
  locTrkCand.set(1,0);
  locClus.set(2,0,0);

  if(HMdcTrackDSet::getFitAuthor()==0) {
    Warning("init",
        "Hejdar's tack fitter not suported more, Alexander's tack fitter will used!");
    HMdcTrackDSet::setFitAuthor(1);
  }
      
  fittersArr[0].init(HMdcTrackDSet::getFitAuthor(),&fitpar);
  fittersArr[1].init(HMdcTrackDSet::getFitAuthor(),&fitpar);
  f34ClFinder  = HMdc34ClFinder::getExObject();
  if(isGeant) pTrackInfSim = HMdcGeantEvent::getMdcTrackInfSim();
  
  findOffVertTrk = HMdcTrackDSet::getFindOffVertTrkFlag();
  nLayersCutOVT  = HMdcTrackDSet::getNLayersCutOVT();
  nWiresCutOVT   = HMdcTrackDSet::getNWiresCutOVT();
  
  return kTRUE;
}

Bool_t HMdc12Fit::reinit(void) {
  if(!fitpar.reinit()) return kFALSE;
  if(isCosmicData) {
    clusFitAlg = 4;
    fitpar.setTargetScanFlag(kFALSE);
  } else {
    clusFitAlg = 1;
    if(HMdcTrackDSet::isCoilOff()) {
      if(HMdcTrackDSet::getClFinderType()==1) clusFitAlg = 2;
      else clusFitAlg = 3;
    } else useFittedTrPar = HMdcTrackDSet::useFittedSeg1ParFlag();
  }
  if(!prntSt) printStatusM();
  if(f34ClFinder != NULL) {
    printf("--------------------------------------------------------------------------------------------\n");
    printf("Outer cluster finder (HMdc34ClFinder):\n");
    printf("  Use track parameter of inner %s.\n",useFittedTrPar ? "segment (HMdcTrackParam)" :
                                                                   "cluster (HMdcClus)");
    if(useFitted) printf("  Skip not fitted inner segments.\n");
    f34ClFinder->printClFinderParam();
    printf("--------------------------------------------------------------------------------------------\n");
  }
  return kTRUE;
}

Int_t HMdc12Fit::execute(void) {
  if(HMdcTrackDSet::fPrint()) {
    fitpar.setPrintFlag(gHades->getEventCounter());
    if(fitpar.getPrintFlag()) printf(
      "============================== Event %i =============================\n",
      gHades->getEventCounter());
  }
  iterClus->Reset();
  for(Int_t s=0;s<6;s++) {
    indFirstSeg[s]  = -1;
    indLastSeg[s]   = -2;
    indFstTrCand[s] = -1;
    indLstTrCand[s] = -2;
  }
  if     (clusFitAlg == 1) fitAlgorithm1();   // magnet on                       
  else if(clusFitAlg == 2) fitAlgorithm2();   // magnet off + chanmer clusters   
  else if(clusFitAlg == 3) fitAlgorithm3b();  // magnet off + sector clusters    
  else if(clusFitAlg == 4) fitAlgorithm4();   // cosmic data
  return 0;
}

Bool_t HMdc12Fit::testRestOfWires(Int_t sec) {
  HMdcEvntListCells *pEvListCells = HMdcEvntListCells::getExObject();
  locClus[0]    = sec;
  locTrkCand[0] = sec;
  Int_t nMdcsSeg2 = fitpar.getMdcSizesCells()->nModInSeg(sec,1);
  pSecListCells = &((*pEvListCells)[sec]);
  Int_t nNFCellsM1,nNFCellsM2;
  Int_t nLay1 = (*pSecListCells)[0].genNumNotFittedLayers(nNFCellsM1);
  Int_t nLay2 = (*pSecListCells)[1].genNumNotFittedLayers(nNFCellsM2);
  if(nLay1 + nLay2 < nLayersCutOVT) return kFALSE;  // 7 ???
  //  if(nNFCellsM1 > nWiresCutOVT || nNFCellsM2 > nWiresCutOVT) return kFALSE;
  if(nNFCellsM1*nNFCellsM2 > nWiresCutOVT*nWiresCutOVT) return kFALSE;
  fitter = fittersArr[0].getFitter(0);
  if(fitter == NULL) fitter = fittersArr[0].getNewFitter();

  HMdcLineParam lineParam;
  HMdcList12GroupCells listCells;
  Int_t nlays = fitter->getWiresArr().testRestForTrack(sec,lineParam,listCells, 
                                                       nLay1+nLay2,nNFCellsM1+nNFCellsM2);
                         
  if(nlays < nLayersCutOVT) return kFALSE;
  locClus[0] = sec;
  locClus[1] = 0;    // Inner segment
  Int_t index;
  HMdcClus *pClusSeg1 = (HMdcClus*)fClusCat->getNewSlot(locClus,&index);
  if(!pClusSeg1) {
    Warning("execute","Sec.%i Segment %i No slot HMdcClus available",sec+1,1);
    return kFALSE;
  }
  if(isGeant) pClusSeg1 = (HMdcClus*)(new(pClusSeg1) HMdcClusSim(listCells));
  else        pClusSeg1 =             new(pClusSeg1) HMdcClus(listCells);
  pClusSeg1->setTarget(lineParam.x1(),0.,lineParam.y1(),0.,lineParam.z1(),0.);
  HMdcPlane *pl = lineParam.getSecondPlane();
  pClusSeg1->setPrPlane(pl->A(),pl->B(),pl->D());
  pClusSeg1->setXY(lineParam.x2(),0.,lineParam.y2(),0.);
  pClusSeg1->setSecSegInd(sec,0,index);  // ,0, - Inner segment
  pClusSeg1->setMod(-1);
  pClusSeg1->setSumWt(0.);
  pClusSeg1->setRealLevel(nlays);
  pClusSeg1->setNBins(0);
  pClusSeg1->setTypeClFinder(256 + 0);  // Ampl.cut + comb.cl.finder
  pClusSeg1->setMinCl(nLayersCutOVT-nLayersCutOVT/2,nLayersCutOVT/2);
                                                                                                                                   
  if(pTrackInfSim != NULL) pTrackInfSim->fillClusTrackInf((HMdcClusSim*)pClusSeg1);

  fittersArr[0].reset();
  Bool_t flag = fitSeg(pClusSeg1);

  if(!flag) return kFALSE;
  // HMdcTrkCand filling:
  if(fitter->getSegIndex()<0) return kFALSE;
  HMdcTrkCand* fTrkCand = fillTrkCandISeg();
  if(fTrkCand == NULL) return kFALSE;
  //------------------------------------- Cluster finder in segment 2:
  if( !isFitted ) return kFALSE;
  
  if(nMdcsSeg2 <= 0) return kTRUE;
  if(findSeg2Clusters(fitter) <= 0) return kTRUE;

  Int_t firstCh,lastCh;
  pClusSeg1->getIndexRegChilds(firstCh,lastCh);
  fittersArr[1].reset();
  for(Int_t ind=firstCh;ind<=lastCh;ind++) {
    HMdcClus* fClstSeg2 = (HMdcClus*)fClusCat->getObject(ind);
    if(fClstSeg2 == NULL) return kTRUE;
    flag = nMdcsSeg2==1 ? fitMod(fClstSeg2,1) : fitSeg(fClstSeg2,1);
    if(!fillHitSeg || !flag || fitter->getSegIndex()<0) return kTRUE;
    // HMdcTrkCand filling:
    fTrkCand = fillTrkCandOSeg(fTrkCand);
    if(fTrkCand == NULL) break;
  }
  return kTRUE;
}

void HMdc12Fit::sortGeantInf(void) {
  // Sorting geant track information in clusters and segments:
  iterClus->Reset();
  HMdcClusSim* pClusSim;
  while ((pClusSim=(HMdcClusSim*)iterClus->Next())!=0) pClusSim->sortTrListByContr();
  
  Int_t nsegs = fSegCat->getEntries();
  for(Int_t i=0; i<nsegs; i++) ((HMdcSegSim*)fSegCat->getObject(i))->sortTrListByContr();
  
  if(HMdcTrackDSet::fNTuple()) {
    if(fClusFitCat == NULL) fClusFitCat = HMdcGetContainers::getObject()->getCatMdcClusFit();
    if(fClusFitCat != NULL) {
      Int_t nent = fClusFitCat->getEntries();
      for(Int_t n=0;n<nent;n++) {
        HMdcClusFitSim *pClusFitSim = (HMdcClusFitSim*)(fClusFitCat->getObject(n));
        if(pClusFitSim == NULL) continue;
        Int_t clInd = pClusFitSim->getClustCatIndex();
        HMdcClusSim* pClusSim = (HMdcClusSim*)(fClusCat->getObject(clInd));
        if(pClusSim == NULL) continue;
        Int_t segInd = pClusSim->getSegIndex();
        if(segInd<0) continue;
        HMdcSegSim* pSegSim = (HMdcSegSim*)(fSegCat->getObject(segInd));
        if(pSegSim == NULL) continue;
        Int_t track = pClusFitSim->getGeantTrackNum();
        if(track <= 0) continue;
        Int_t ind = pSegSim->findTrack(track);
        if(pSegSim->isFakeContribution(ind) ) pClusFitSim->setFakeFlag();
      }
    } 
  }
}

void HMdc12Fit::fitAlgorithm1(void) {
  Int_t maxNumSectors = ((HMatrixCategory*)fClusCat)->getSize(0);
  locClus[1]          = 0;
  Int_t fitType       = HMdcTrackDSet::getFitType();
  for(Int_t sec=0; sec<maxNumSectors; sec++) {
     //      iterClus->Reset();
    locClus[0]    = sec;
    locTrkCand[0] = sec;
    iterClus->gotoLocation(locClus);
    Int_t nMdcsSeg1 = fitpar.getMdcSizesCells()->nModInSeg(sec,0);
    Int_t nMdcsSeg2 = fitpar.getMdcSizesCells()->nModInSeg(sec,1);
    HMdcClus * fClstSeg1;
    while((fClstSeg1=(HMdcClus*)iterClus->Next())) {
      // ------------------------------------ Segment 1:
      Bool_t flag = kFALSE;
      Int_t typeClFnSeg1=fClstSeg1->getTypeClFinder();
      fittersArr[0].reset();
      if(nMdcsSeg1==1)           flag = fitMod(fClstSeg1); // One mdc per seg.
      else if(typeClFnSeg1==0) {                           // Two mdc per seg.
        if(fitType==0)           flag = fitSeg(fClstSeg1);
        else if(fitType==1)      flag = fitCombClusIndFit(fClstSeg1);
      } else if(typeClFnSeg1==1) flag = fitChambClus(fClstSeg1);
      else if(typeClFnSeg1==2)   flag = fitMixedClus(fClstSeg1);
      if(!flag) continue;
      // HMdcTrkCand filling:
      fitter = fittersArr[0].getFitter(0); // ???
      if(fitter->getSegIndex()<0) continue;
      HMdcTrkCand* fTrkCand = fillTrkCandISeg();
      if(fTrkCand == NULL) continue;
      //------------------------------------- Cluster finder in segment 2:
      if(useFitted && !isFitted) continue;
      if(nMdcsSeg2 <= 0) continue;
      if(findSeg2Clusters(fitter) <= 0) continue;

      Int_t firstCh,lastCh;
      fClstSeg1->getIndexRegChilds(firstCh,lastCh);
      fittersArr[1].reset();
      for(Int_t ind=firstCh;ind<=lastCh;ind++) {
        HMdcClus* fClstSeg2 = (HMdcClus*)fClusCat->getObject(ind);
        if(fClstSeg2==0) {
          Error("fitAlgorithm1","Absent cluster with ind=%i!",ind);
          continue;
        }
        Int_t typeClFnSeg2 = fClstSeg2->getTypeClFinder();
        if(nMdcsSeg2==1)           flag = fitMod(fClstSeg2,1); // One mdc per seg.
        else if(typeClFnSeg2==0) {                             // Two mdc per seg.
          if(fitType==0)           flag = fitSeg(fClstSeg2,1);
          else if(fitType==1)      flag = fitCombClusIndFit(fClstSeg2,1);
        } else if(typeClFnSeg2==1) flag = fitChambClus(fClstSeg2,1);
        else if(typeClFnSeg2==2)   flag = fitMixedClus(fClstSeg2,1);
        if(!fillHitSeg) continue;
        if(!flag || fitter->getSegIndex()<0) continue;
        // HMdcTrkCand filling:
        fTrkCand = fillTrkCandOSeg(fTrkCand);
        if(!fTrkCand) break;
      }
    }
    
    if(isGeant) sortGeantInf(); // Must be before suppressFakes()
    
    suppressFakes(sec,0);
    if(findOffVertTrk) while (testRestOfWires(sec));
    suppressFakes(sec,1); 
    
    // Remove identical track candidates:
    indFirstTrCand = indFstTrCand[sec];
    indLastTrCand  = indLstTrCand[sec];
    if(indFirstTrCand < 0 || indFirstTrCand >= indLastTrCand) continue;
    for(Int_t itr1=indFirstTrCand; itr1<indLastTrCand; itr1++) {
      HMdcTrkCand* trkCand1 = (HMdcTrkCand*)fTrkCandCat->getObject(itr1);
      Int_t ind1 = trkCand1->getSeg1Ind();
      Int_t ind2 = trkCand1->getSeg2Ind();
      if(ind1 < 0) continue;
      for(Int_t itr2=itr1+1; itr2<=indLastTrCand; itr2++) {
        HMdcTrkCand* trkCand2 = (HMdcTrkCand*)fTrkCandCat->getObject(itr2);
        if(ind1 != trkCand2->getSeg1Ind() || ind2 != trkCand2->getSeg2Ind()) continue;
        if(ind2 >= 0) {
          trkCand1->setSeg2Ind(-1);
          trkCand1->setFakeFlagSeg2();
        } 
        trkCand1->setFakeFlagSeg1();
        break;
      }
    }
  }  
  if(isGeant && fClusFitCat != NULL) {  // Sinchronize GEANT info (HMdcSeg => HMdcClusFit) 
    Int_t nent = fClusFitCat->getEntries();
    for(Int_t n=0;n<nent;n++) {
      HMdcClusFitSim *pClusFitSim = (HMdcClusFitSim*)(fClusFitCat->getObject(n));
      HMdcSegSim     *pSegSim     = (HMdcSegSim*)fSegCat->getObject(n);
      if(pSegSim == NULL) continue;
      Int_t track = pClusFitSim->getGeantTrackNum();
      if(track <= 0) continue;
      Int_t ind = pSegSim->findTrack(track);
      if( pSegSim->isFakeContribution(ind) ) pClusFitSim->setFakeFlag();
    }
  }
}

Int_t HMdc12Fit::findSeg2Clusters(HMdcTrackFitter* fitter) {
  // Cluster finder in segment 2.
  // flag=kTRUE - use seg1 cluster; =kFALSE - use fitted cluster (if fit ok.)
  if(f34ClFinder == NULL) return 0;
  HMdcWiresArr& wiresArr =  fitter->getWiresArr();
  HMdc34ClFinderSec& f34CFSc=(*f34ClFinder)[wiresArr.getSector()];
  if(!&f34CFSc || f34CFSc.notEnoughWires()) return 0;

  if(isFitted && useFittedTrPar) {
    HMdcSeg* fSeg = (HMdcSeg*)fSegCat->getObject(fitter->getSegIndex());
    if(fSeg==0) return 0;
//    return      f34CFSc.findClustersSeg2(fSeg,wiresArr.getClust1());
    return      f34CFSc.findClustersSeg2(fitter->getFinalParam(),wiresArr.getClust1());
  } else return f34CFSc.findClustersSeg2(wiresArr.getClust1());
}

void HMdc12Fit::fitAlgorithm2(void) {
  // Magnet off + chamber clusters
  Int_t maxNumSectors  = ((HMatrixCategory*)fClusCat)->getSize(0);
  Int_t maxNumSegments = ((HMatrixCategory*)fClusCat)->getSize(1);
  for(locClus[0]=0; locClus[0]<maxNumSectors; locClus[0]++){
    for(locClus[1]=0; locClus[1]<maxNumSegments; locClus[1]++) {
       //      iterClus->Reset();
      iterClus->gotoLocation(locClus);
      Int_t nMdcs = fitpar.getMdcSizesCells()->nModInSeg(locClus[0],locClus[1]);
      HMdcClus * fClst;
      while((fClst=(HMdcClus*)iterClus->Next())) {
        fittersArr[0].reset();
        if(nMdcs==1) fitMod(fClst);             // One mdc per segment
        else         fitChambClus(fClst);       // Two mdc per segment
      }
    }
  }
  if(isGeant) sortGeantInf();
}

void HMdc12Fit::fitAlgorithm3(void) {
  // Segment fit
  // Magnet off + combined clusters in sector
  Int_t maxNumSectors = ((HMatrixCategory*)fClusCat)->getSize(0);
  locClus[1]          = 0;
  Int_t fitType       = HMdcTrackDSet::getFitType();
  for(Int_t sec=0; sec<maxNumSectors; sec++){
     //      iterClus->Reset();
    locClus[0]=sec;
    locTrkCand[0]=sec;
    iterClus->gotoLocation(locClus);
    Int_t nMdcsSeg1=fitpar.getMdcSizesCells()->nModInSeg(sec,0);
    Int_t nMdcsSeg2=fitpar.getMdcSizesCells()->nModInSeg(sec,1);
    HMdcClus * fClstSeg1;
    while((fClstSeg1=(HMdcClus*)iterClus->Next())) {
      // Segment 1:
      Bool_t flag = kFALSE;
      Int_t typeClFnSeg1=fClstSeg1->getTypeClFinder();
      fittersArr[0].reset();
      if(nMdcsSeg1==1)           flag = fitMod(fClstSeg1); // One mdc per segment
      else if(typeClFnSeg1==0) {                           // Two mdc per segment
        if(fitType==0)           flag = fitSeg(fClstSeg1);
        else if(fitType==1)      flag = fitCombClusIndFit(fClstSeg1);
      } else if(typeClFnSeg1==2) flag = fitMixedClus(fClstSeg1);
      
      // Segment 2:
      if(!flag) continue;
      
      // HMdcTrkCand filling:
      fitter = fittersArr[0].getFitter(0); // ???
      if(fitter->getSegIndex()<0) continue;
      HMdcTrkCand* fTrkCand = fillTrkCandISeg();
      if(fTrkCand==0) continue;
      
      Int_t firstCh,lastCh;
      fClstSeg1->getIndexRegChilds(firstCh,lastCh);
      fittersArr[1].reset();
      for(Int_t ind=firstCh;ind<=lastCh;ind++) {
        HMdcClus* fClstSeg2 = (HMdcClus*)fClusCat->getObject(ind);
        if(fClstSeg2==0) {
          Error("fitAlgorithm3","Absent cluster with ind=%i!",ind);
          continue;
        }
        flag=kFALSE;
        Int_t typeClFnSeg2 = fClstSeg2->getTypeClFinder();
        if(nMdcsSeg2==1)      flag = fitMod(fClstSeg2,1); // One mdc per segment
        else if(typeClFnSeg2==0) {                        // Two mdc per segment
          if(fitType==0)      flag = fitSeg(fClstSeg2,1);
          else if(fitType==1) flag = fitCombClusIndFit(fClstSeg2,1);
        }
        if(!fillHitSeg) continue;
        if(!flag || fitter->getSegIndex()<0) continue;
        // HMdcTrkCand filling:
        fTrkCand = fillTrkCandOSeg(fTrkCand);
        if(!fTrkCand) break;
      }
    }
  }
  if(isGeant) sortGeantInf();
}


void HMdc12Fit::fitAlgorithm3b(void) {
  // Sector fit
  // Magnet off + combined clusters in sector
  Int_t fitType = HMdcTrackDSet::getFitType();
  HMdcClus* fClst1;
  while((fClst1=(HMdcClus*)iterClus->Next())) {
    if(fClst1->getIndexParent() >= 0) continue;
    fittersArr[0].reset();
    Int_t first,last;
    fClst1->getIndexRegChilds(first,last);
    HMdcClus* fClst2 = (first<0) ? 0:(HMdcClus*)fClusCat->getObject(first);
    Int_t sec=fClst1->getSec();
    Int_t seg=fClst1->getIOSeg();
    Bool_t flag=kFALSE;
    if(fClst2==0) {
      Int_t typeClFn=fClst1->getTypeClFinder();
      Int_t nMdcsSeg=fitpar.getMdcSizesCells()->nModInSeg(sec,seg);
      if(nMdcsSeg==1)        flag = fitMod(fClst1);  // One mdc per segment
      else if(typeClFn==0) {                         // Two mdc per segment
        if(fitType==0)       flag = fitSeg(fClst1);
        else if(fitType==1)  flag = fitCombClusIndFit(fClst1);
      } else if(typeClFn==2) flag = fitMixedClus(fClst1);
      if(!flag) continue;
      if(!fillHitSeg) continue;
      fitter = fittersArr[0].getFitter(0); // ???
      if(fitter->getSegIndex()<0) continue;
      fillTrkCandISeg();
    } else {
      flag = fitSec(fClst1,fClst2);  //??????????????
    }
  }
  if(isGeant) sortGeantInf();
}

void HMdc12Fit::fitAlgorithm4(void) {
  // For cosmic data !!!
  HMdcClus* fClstSeg;
  Int_t  fitType = HMdcTrackDSet::getFitType();
  while((fClstSeg=(HMdcClus*)iterClus->Next())) {
    Int_t sec=fClstSeg->getSec();
    Int_t seg=fClstSeg->getIOSeg();
    Int_t typeClFnSeg=fClstSeg->getTypeClFinder();
    fittersArr[0].reset();
    Int_t nMdcsSeg=fitpar.getMdcSizesCells()->nModInSeg(sec,seg);
    if(nMdcsSeg==1)           fitMod(fClstSeg); // One mdc per segment
    else if(typeClFnSeg==0) {                          // Two mdc per segment
      if(fitType==0)          fitSeg(fClstSeg);
      else if(fitType==1)     fitCombClusIndFit(fClstSeg);
    } else if(typeClFnSeg==2) fitMixedClus(fClstSeg);
  }
  if(isGeant) sortGeantInf();
}

Bool_t HMdc12Fit::fitMod(HMdcClus* fClst, Int_t arrInd) {
  // fit of segment with one mdc
  Int_t modClus = fClst->getMod();
  Int_t iMod;
  if(modClus<0) iMod = (fClst->getNDrTimesMod(0)) ? 0:1; // !!! nado uprostit'
  else          iMod = modClus&1;
    
  fitter = fittersArr[arrInd].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst)) return kFALSE;
  fitter->setRegionOfWires();
  if(fClst->getNLayersMod(iMod)<5) isFitted = kFALSE;
  else                             isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
    if(fillHitSegByClus(iMod)) fClst->setSegIndex(fitter->getSegIndex());
  } else /*while(isFitted)*/ {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(fillHitSegByFit(iMod)) fClst->setSegIndex(fitter->getSegIndex());
    //???   nFitedTimes = fitter->getWiresArr().unsetHits();
    //???   isFitted    = fitter->fitCluster();
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fitSeg(HMdcClus* fClst, Int_t arrInd) {
  // fit of one mdc in segment
  fitter = fittersArr[arrInd].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(fClst==NULL || !fitter->setClustAndFill(fClst)) return kFALSE;
  fitter->setRegionOfWires();
  isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
    if(fillHitSegByClus()) fClst->setSegIndex(fitter->getSegIndex());
  } else /*while(isFitted)*/ {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(fillHitSegByFit()) fClst->setSegIndex(fitter->getSegIndex());
    
    
    // Tests for off vertex cluster finder:
    if(fClst->getIOSeg() == 0 && findOffVertTrk) {
      HMdcSeg* pSeg = (HMdcSeg*)fSegCat->getObject(fitter->getSegIndex());
      if(fClst->getNBins() == 0) {                       // Off vertex cluster
        Int_t nUnWires = pSecListCells->getNFittedUnWires2(0,pSeg);
        Int_t nWrTot   = pSeg->getSumWires();
        if(nWrTot-nUnWires >= nUnWires) {
          setFake(pSeg);
          return kFALSE;
        }
        // Add segment fitted wires to the nFittedCounter:
        pSeg->ResetBit(kRealKeep);
        pSecListCells->addToNFittedCounters(0,pSeg);
        pSeg->SetBit(kInFittedList);
      } else if(pSeg->getNLayers() < 7) setFake(pSeg);  // Normal cluster    <= nLayersCutOVT
    }


    //???   nFitedTimes=fitter->getWiresArr().unsetHits();
    //???   isFitted=fitter->fitCluster();
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fitSec(HMdcClus* fClst1, HMdcClus* fClst2) {
  // fit of all mdcs in segment
  fitter = fittersArr[0].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst1,fClst2)) return kFALSE;
  fitter->setRegionOfWires();
  HMdcTrkCand* fTrkCand = 0;
  isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    hitSegFiller.setClusParam(fClst1,HMdcTrackDSet::isCoilOff());
    if(fillHitSegByClus(-1)) {
      fClst1->setSegIndex(fitter->getSegIndex());
      if(fTrkCandCat) {
        fTrkCand = fillTrkCandISeg();
        if(fTrkCand == 0) return kFALSE;
      }
    }
    if(fillHitSegByClus(-2)) {
      fClst2->setSegIndex(fitter->getSegIndex());
      if(fTrkCand) fTrkCand = fillTrkCandOSeg(fTrkCand);
    }
  } else /*while(isFitted)*/ {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(fillHitSegByFit(-1)) {
      fClst1->setSegIndex(fitter->getSegIndex());
      if(fTrkCandCat) {
        fTrkCand=fillTrkCandISeg();
        if(fTrkCand==0) return kFALSE;
      }
    }
    if(fillHitSegByFit(-2)) {
      fClst2->setSegIndex(fitter->getSegIndex());
      if(fTrkCand) fTrkCand = fillTrkCandOSeg(fTrkCand);
    }
    //???   nFitedTimes=fitter->getWiresArr().unsetHits();
    //???   isFitted=fitter->fitCluster();
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fit2Sectors(HMdcClus* fClst1, HMdcClus* fClst2,
                              HMdcClus* fClst3, HMdcClus* fClst4) {
  // For cosmic data only.
  // Fit of all mdcs in 2 sectors.
  fitter = fittersArr[0].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst1,fClst2,fClst3,fClst4)) return kFALSE;
  fitter->setRegionOfWires();
  isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    //???????????!!!!!!!!!!!!!!!!!!+++
    hitSegFiller.setClusParam(fClst1,HMdcTrackDSet::isCoilOff());
    if(fillHitSegByClus(-1) && fClst1!=NULL) fClst1->setSegIndex(fitter->getSegIndex());
    if(fillHitSegByClus(-2) && fClst2!=NULL) fClst2->setSegIndex(fitter->getSegIndex());
    
    if(fClst3) hitSegFiller.setClusParam(fClst3,HMdcTrackDSet::isCoilOff());
    else       hitSegFiller.setClusParam(fClst4,HMdcTrackDSet::isCoilOff());
    if(fillHitSegByClus(-3) && fClst3!=NULL) fClst3->setSegIndex(fitter->getSegIndex());
    if(fillHitSegByClus(-4) && fClst4!=NULL) fClst4->setSegIndex(fitter->getSegIndex());
    
  } else /*while(isFitted)*/ {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(fillHitSegByFit(-1) && fClst1!=NULL) fClst1->setSegIndex(fitter->getSegIndex());
    if(fillHitSegByFit(-2) && fClst2!=NULL) fClst2->setSegIndex(fitter->getSegIndex());
    if(fitter->getWiresArr().getOutputListCells2().getNDrTimes() > 0) {
      HMdcTrackParam parInSec2(*(fitter->getFinalParam()));
      Int_t sec2 = fitter->getWiresArr().getSector2();
      fitpar.getMdcSizesCells()->transLineToAnotherSec(parInSec2,sec2);
      hitSegFiller.setFitParamForSecondSec(parInSec2);
      if(fillHitSegByFit(-3) && fClst3!=NULL) fClst3->setSegIndex(fitter->getSegIndex());
      if(fillHitSegByFit(-4) && fClst4!=NULL) fClst4->setSegIndex(fitter->getSegIndex());
    }
    //???   nFitedTimes=fitter->getWiresArr().unsetHits();
    //???   isFitted=fitter->fitCluster();
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fitNSectors(HMdcClus* cl1, HMdcClus* cl2,HMdcClus* cl3, HMdcClus* cl4,
                              HMdcClus* cl5, HMdcClus* cl6,HMdcClus* cl7, HMdcClus* cl8) {
  // For cosmic data only.
  // Fit of all mdcs in 2 sectors.
  fitter = fittersArr[0].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if( !fitter->setClustAndFill(cl1,cl2,cl3,cl4,cl5,cl6,cl7,cl8) ) return kFALSE;
  fitter->setRegionOfWires();
  isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    //???????????!!!!!!!!!!!!!!!!!!+++
    hitSegFiller.setClusParam(cl1,HMdcTrackDSet::isCoilOff());
    if(cl1!=NULL && fillHitSegByClus(-1)) cl1->setSegIndex(fitter->getSegIndex());
    if(cl2!=NULL && fillHitSegByClus(-2)) cl2->setSegIndex(fitter->getSegIndex());
    
    if(cl3!=NULL) hitSegFiller.setClusParam(cl3,HMdcTrackDSet::isCoilOff());
    else          hitSegFiller.setClusParam(cl4,HMdcTrackDSet::isCoilOff());
    if(cl3!=NULL && fillHitSegByClus(-3)) cl3->setSegIndex(fitter->getSegIndex());
    if(cl4!=NULL && fillHitSegByClus(-4)) cl4->setSegIndex(fitter->getSegIndex());
    if(cl5==NULL && cl6==NULL) return kTRUE;
    if(cl5!=NULL) hitSegFiller.setClusParam(cl5,HMdcTrackDSet::isCoilOff());
    else          hitSegFiller.setClusParam(cl6,HMdcTrackDSet::isCoilOff());
    if(cl5!=NULL && fillHitSegByClus(-5)) cl5->setSegIndex(fitter->getSegIndex());
    if(cl6!=NULL && fillHitSegByClus(-6)) cl6->setSegIndex(fitter->getSegIndex());
    if(cl7==NULL && cl8==NULL) return kTRUE;
    if(cl7!=NULL) hitSegFiller.setClusParam(cl7,HMdcTrackDSet::isCoilOff());
    else          hitSegFiller.setClusParam(cl8,HMdcTrackDSet::isCoilOff());
    if(cl7!=NULL && fillHitSegByClus(-7)) cl7->setSegIndex(fitter->getSegIndex());
    if(cl8!=NULL && fillHitSegByClus(-8)) cl8->setSegIndex(fitter->getSegIndex());
  } else {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(cl1 && fillHitSegByFit(-1)) cl1->setSegIndex(fitter->getSegIndex());
    if(cl2 && fillHitSegByFit(-2)) cl2->setSegIndex(fitter->getSegIndex());
    if(fitter->getWiresArr().getOutputListCells2().getNDrTimes() > 0) {
      HMdcTrackParam parInSec2(*(fitter->getFinalParam()));
      Int_t sec2 = fitter->getWiresArr().getSector2();
      fitpar.getMdcSizesCells()->transLineToAnotherSec(parInSec2,sec2);
      hitSegFiller.setFitParamForSecondSec(parInSec2);
      if(cl3!=NULL && fillHitSegByFit(-3)) cl3->setSegIndex(fitter->getSegIndex());
      if(cl4!=NULL && fillHitSegByFit(-4)) cl4->setSegIndex(fitter->getSegIndex());
    }
    if(cl5==NULL && cl6==NULL) return kTRUE;
    if(fitter->getWiresArr().getOutputListCells3().getNDrTimes() > 0) {
      HMdcTrackParam parInSec3(*(fitter->getFinalParam()));
      Int_t sec3 = fitter->getWiresArr().getSector3();
      fitpar.getMdcSizesCells()->transLineToAnotherSec(parInSec3,sec3);
      hitSegFiller.setFitParamForSecondSec(parInSec3);
      if(cl5!=NULL && fillHitSegByFit(-5)) cl5->setSegIndex(fitter->getSegIndex());
      if(cl6!=NULL && fillHitSegByFit(-6)) cl6->setSegIndex(fitter->getSegIndex());
    }
    if(cl7==NULL && cl8==NULL) return kTRUE;
    if(fitter->getWiresArr().getOutputListCells4().getNDrTimes() > 0) {
      HMdcTrackParam parInSec4(*(fitter->getFinalParam()));
      Int_t sec4 = fitter->getWiresArr().getSector4();
      fitpar.getMdcSizesCells()->transLineToAnotherSec(parInSec4,sec4);
      hitSegFiller.setFitParamForSecondSec(parInSec4);
      if(cl7!=NULL && fillHitSegByFit(-7)) cl7->setSegIndex(fitter->getSegIndex());
      if(cl8!=NULL && fillHitSegByFit(-8)) cl8->setSegIndex(fitter->getSegIndex());
    }
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fitCombClusIndFit(HMdcClus* fClst, Int_t arrInd) {
  // CombinedClusters + Independent fit
  fitter = fittersArr[arrInd].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst)) return kFALSE;
  Int_t hitIndex[2];
  Int_t seg = fClst->getIOSeg();
  Int_t nFittedHits = 0;
  for(Int_t iMod=0; iMod<2; iMod++) {
    Int_t mod=iMod+seg*2;
    fitter->setRegionOfWires(mod);
    if(fClst->getNLayersMod(iMod)<5) isFitted = kFALSE;
    else                             isFitted = fitter->fitCluster(mod);
    if(!fillHitSeg) continue;
    if(!isFitted) {
      hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
      hitIndex[iMod] = fillHitByClus(mod);
    } else {
      nFittedHits++;
      hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
      hitIndex[iMod] = fillHitByFit(mod);
    }
  }
  isFitted = nFittedHits==2;
  if(fillHitSeg) fillSegBy2Hits(hitIndex[0],hitIndex[1]);
  return kTRUE;
}

Bool_t HMdc12Fit::fitChambClus(HMdcClus* fClst, Int_t arrInd) {
  // fit of ChamberClusters:
  Int_t modClus=fClst->getMod();
  if(modClus<0) return kFALSE;
  fitter = fittersArr[arrInd].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst)) return kFALSE;
  Int_t iMod=modClus&1;
  fitter->setRegionOfWires();
  isFitted = fitter->fitCluster();
  if(!fillHitSeg) return kTRUE;
  if(!isFitted) {
    hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
    if(modClus==modForSeg[fitter->getWiresArr().getSegment()]) {
      if(fillHitSegByClus(iMod)) fClst->setSegIndex(fitter->getSegIndex());
    } else fillHitByClus(modClus);
  } else /*while(isFitted)*/ {
    hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
    if(modClus==modForSeg[fitter->getWiresArr().getSegment()]) {
      if(fillHitSegByFit(iMod)) fClst->setSegIndex(fitter->getSegIndex());
    } else fillHitByFit(modClus);
    //???   nFitedTimes=fitter->getWiresArr().unsetHits();
    // ???   isFitted=fitter->fitCluster();
  }
  return kTRUE;
}

Bool_t HMdc12Fit::fitMixedClus(HMdcClus* fClst, Int_t arrInd) {
  // fit of MixedClusters:
  Int_t modClus=fClst->getMod();
  if(modClus<0) return kFALSE;
  Int_t iMod=modClus&1;
  Int_t addMod=fClst->getIOSeg()*2 + (iMod^1);
  if(fClst->getNLayersMod(iMod^1)<HMdcTrackDSet::getMixFitCut()) return kFALSE;
  fitter = fittersArr[arrInd].getNewFitter();
  if(pTrackInfSim) pTrackInfSim->setWiresArr(&(fitter->getWiresArr()));
  if(!fitter->setClustAndFill(fClst)) return kFALSE;
  fitter->setRegionOfWires();
  isFitted = fitter->fitCluster();
  if(!isFitted) {
    if(fillHitSeg && fClst->getNLayersMod(iMod^1) >= HMdcTrackDSet::getMixClusCut()) {
      hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
      if(fillHitSegByClus(iMod)) fClst->setSegIndex(fitter->getSegIndex());
    }
  } else /*while(isFitted)*/ {
    if(fitter->getWiresArr().getOutputListCells().getNLayersMod(addMod) <
                                         HMdcTrackDSet::getMixFitCut()) isFitted = kFALSE;
    else if(fillHitSeg) {
//    if(fitter->listCells.getNLayersMod(addMod) >= HMdcTrackDSet::getMixFitCut()) {
      hitSegFiller.setFitParam(*(fitter->getFinalParam())); //!
      fillHitSegByFit(iMod); // ??? esli cut ne proshol mozhet zaolnit' clust?
    };
    //???   nFitedTimes=fitter->getWiresArr().unsetHits();
    //???   isFitted=fitter->fitCluster();
  }
  return kTRUE;
}

void HMdc12Fit::fillClusInf(HMdcHit* fHit, Int_t iMod, Char_t fitSt,Int_t indClusFit) {
  fHit->setTrackFinder(1);
  if(fClusInfCat==0) return; // Cosmic data
  Int_t index;
  HMdcClusInf* fClusInf=(HMdcClusInf*)fClusInfCat->getNewSlot(locClInf,&index);
  if(!fClusInf) {
    Warning("fillClusInf","No slot HMdcClusInf available");
    return;
  }
  fClusInf = (isGeant) ? (HMdcClusInf*)(new(fClusInf) HMdcClusInfSim) :
                                        new(fClusInf) HMdcClusInf;
  fHit->setClusInfIndex(index);
  fClusInf->setFitStat(fitSt);
  Int_t mod = fHit->getModule();
  HMdcWiresArr& wires = fitter->getWiresArr();
  HMdcClus* fClst = wires.getClust2() && mod>1 ? 
                    wires.getClust2() : wires.getClust1();
  
  Int_t nmods=fClst->getMod();
  fClusInf->setNModInCl((nmods<0) ? -nmods:1); //?????????peredelat!
//   nmods=0;
//   for(Int_t m=0;m<4;m++) if(fitter->nTimesInFit[m]>0) nmods++;
  fClusInf->setNModInFit(wires.getNModulesInFit());
  fClusInf->setClusIndex(fClst->getOwnIndex());
  fClusInf->setClusFitIndex(fitter->getIndClusFit());
  
  fClusInf->setXYHit(fHit->getX(),fHit->getY());
  
  HMdcSizesCellsMod* fSCMod = fitpar.getSCellsModArr(wires.getSector())[mod];
  Double_t xm,ym,zm;
  fSCMod->calcIntersection(
      fClst->getXTarg(),fClst->getYTarg(),fClst->getZTarg(),
      fClst->getX(),    fClst->getY(),    fClst->getZ(),    xm,ym,zm);
  fSCMod->transTo(xm,ym,zm);
  fClusInf->setXYClus(xm,ym);
  
  if(iMod==0) {
    fClusInf->setLevelClFinding(fClst->getClFnLevelM1());
    fClusInf->setClusSize(fClst->getClusSizeM1());
    fClusInf->setNMergClust(fClst->getNMergClustM1());
    fClusInf->setNDrTimes(fClst->getNDrTimesM1());
    fClusInf->setSigma1(fClst->getSigma1M1());
    fClusInf->setSigma2(fClst->getSigma2M1());
    fClusInf->setAlpha(fClst->getAlphaM1());
    fClusInf->setNLayers(fClst->getNLayersMod(0));
    if(!fitSt) {
      fClusInf->setNLayersFitted(fClst->getNLayersMod(0));
      fClusInf->setNDrTimesFitted(fClst->getNDrTimesM1());
    }
  } else {
    fClusInf->setLevelClFinding(fClst->getClFnLevelM2());
    fClusInf->setClusSize(fClst->getClusSizeM2());
    fClusInf->setNMergClust(fClst->getNMergClustM2());
    fClusInf->setNDrTimes(fClst->getNDrTimesM2());
    fClusInf->setSigma1(fClst->getSigma1M2());
    fClusInf->setSigma2(fClst->getSigma2M2());
    fClusInf->setAlpha(fClst->getAlphaM2());
    fClusInf->setNLayers(fClst->getNLayersMod(1));
    if(!fitSt) {
      fClusInf->setNLayersFitted(fClst->getNLayersMod(1));
      fClusInf->setNDrTimesFitted(fClst->getNDrTimesM2());
    }
  }
  if(fitSt) {
    fClusInf->setNLayersFitted(fitter->getWiresArr().getOutputListCells().getNLayersMod(mod));
    fClusInf->setNDrTimesFitted(fitter->getWiresArr().getOutputListCells().getNDrTimesMod(mod));
  }
  if(isGeant) {
    HMdcClusSim* fClSim=(HMdcClusSim*)fClst;
    ((HMdcClusInfSim*)fClusInf)->setTracksList(fClSim->getNTracksMod(iMod),
        fClSim->getListTrM(iMod),fClSim->getNTimesM(iMod));
  }
}

void HMdc12Fit::fillClusInf(HMdcSeg* fSeg,Bool_t secondSec) {
  HMdcWiresArr& wires = fitter->getWiresArr();
  HMdcClus* fClst1 = wires.getClust1();
  HMdcClus* fClst2 = wires.getClust2();
  if(secondSec) {
    fClst1 = wires.getClust3();
    fClst2 = wires.getClust4();
  }
  Int_t nMrCl = fClst1->getNMergClust();
  if(nMrCl>99) nMrCl=99;
  HMdcClus* fClst=(fClst2 && fSeg->getIOSeg()==1) ? fClst2 : fClst1;
  fSeg->setClusInfo(fClst->getNBins(),fClst->getNDrTimes(),fClst1->getNMergClust());
  
  fSeg->setClusIndex(fClst->getOwnIndex());
}

Bool_t HMdc12Fit::fillSegBy2Hits(Int_t ind1, Int_t ind2) {
  HMdcWiresArr& wires = fitter->getWiresArr();
  Int_t segment = wires.getSegment();
  Int_t mod1    = segment*2;
  Int_t mod2    = mod1+1;
  Int_t sector  = wires.getSector();
  HMdcSizesCellsMod* fSCMod1=fitpar.getSCellsModArr(sector)[mod1];
  HMdcSizesCellsMod* fSCMod2=fitpar.getSCellsModArr(sector)[mod2];
  if(!fSCMod1 || !fSCMod2) return kFALSE;
  HMdcHit* h1=(HMdcHit*)fHitCat->getObject(ind1);
  HMdcHit* h2=(HMdcHit*)fHitCat->getObject(ind2);
  if(h1==0 || h2==0) return kFALSE;
  Float_t x1,y1,z1,ex1,ey1;
  Float_t x2,y2,z2,ex2,ey2;
  h1->getXY(x1,ex1,y1,ey1);
  h2->getXY(x2,ex2,y2,ey2);
  fSCMod1->transFromZ0(x1,y1,z1);
  fSCMod2->transFromZ0(x2,y2,z2);
  ey1 /= sqrt(1.+fSCMod1->B()*fSCMod1->B()); // simple error recalculation
  ey2 /= sqrt(1.+fSCMod2->B()*fSCMod2->B()); // (let eX_sec=eX_mod,...)
  HMdcSeg* fSeg = getSegSlot(sector,segment);
  if(!fSeg) return kFALSE;
  for(Int_t l=0; l<6; l++) {
    copySignId(h1,0,l,fSeg);
    copySignId(h2,1,l,fSeg);
  }
  Double_t zm, r0, theta, phi;
  Double_t eZm, eR0, eTheta, ePhi;
  HMdcSizesCells::calcMdcSeg(x1,y1,z1,x2,y2,z2,ex1,ey1,0.,ex2,ey2,
      -fSCMod1->A(),-fSCMod1->B(),-fSCMod2->A(),-fSCMod2->B(),
      zm,eZm, r0,eR0,theta,eTheta, phi,ePhi);
  fSeg->setPar(zm, eZm, r0, eR0, theta, eTheta, phi, ePhi);
  
  HMdcSizesCellsSec& fSCSec=(*(fitpar.getMdcSizesCells()))[sector];
  Double_t zPrime=zm; 
  Double_t rPrime=r0;
  if(&fSCSec) fSCSec.calcRZToTargLine(x1,y1,z1,x2,y2,z2,zPrime,rPrime);
  fSeg->setZprime(zPrime);
  fSeg->setRprime(rPrime);
  
  fSeg->setHitInd(0,ind1);
  fSeg->setHitInd(1,ind2);
  fSeg->setChi2(-2.);
  if(isGeant) ((HMdcSegSim*)fSeg)->calcNTracks();
  
  if(h1->getChi2()>=0 || h2->getChi2()>=0) fitter->setFitStatus(kTRUE); // ??? podumat'!!!

  fillClusInf(fSeg);
  return kTRUE;
}

void HMdc12Fit::copySignId(HMdcHit* hit,Int_t mod,Int_t lay,HMdcSeg* seg) {
  // do Signals Id copy from Hit to Seg
  Int_t nHits=hit->getNCells(lay);
  if(nHits<=0||nHits>4) return;
  Int_t id[4]={0,0,0,0};
  Int_t cell=hit->getCell(lay,0);
  for(Int_t i=0; i<nHits; i++) {
    Int_t n=hit->getCell(lay,i) - cell;
    if(n>=0&&n<4) id[n] = hit->getSignId(lay,i);
  }
  seg->setSignId(lay+mod*6,cell,id[0],id[1],id[2],id[3]);
}

Int_t HMdc12Fit::fillHitByFit(Int_t mod) {
  HMdcWiresArr& wires = fitter->getWiresArr();
  HMdcList24GroupCells* lCells = &(fitter->getWiresArr().getOutputListCells());
  Int_t sector = wires.getSector();
  if(mod>=4) {  // Cosmic
    lCells = &(fitter->getWiresArr().getOutputListCells2());
    sector = wires.getSector2();
    if(sector<0) return -1;
    mod -= 4; 
  }
  if(lCells->getNDrTimesMod(mod) == 0) return -1;
  HMdcSizesCellsMod* fSCMod=fitpar.getSCellsModArr(sector)[mod];
  if(!fSCMod) return -1;
  Int_t index=-1;
  HMdcHit* fHit = getHitSlot(sector,mod,index);
  if(!fHit) return -1;
  hitSegFiller.fillMdcHit(fSCMod,fHit);
  fHit->setChi2(fitter->getChi2()); // getFunMin())/NDF
  setGroup(lCells, fHit, mod);
  fillClusInf(fHit,mod&1,1,fitter->getIndClusFit()); // Cluster inform.
  return index;
}

Bool_t HMdc12Fit::fillHitSegByFit(Int_t iMod) {
  // iMod==0   - first MDC in segment
  // iMod==1   - second MDC in segment
  // iMod==-99 - two MDC in segment
  // iMod==-1  - first segment of sector track
  // iMod==-2  - second segment of sector track
  // iMod==-3  - first segment of second sector in track (cosmic)
  // iMod==-4  - second segment of second sector in track (cosmic)
  HMdcWiresArr& wires = fitter->getWiresArr();
  Int_t segInd = wires.getSegment();
  if(iMod<=-1 && iMod>=-4) segInd = -iMod-1;  // sector fit !!!???
  Int_t segment = segInd&1;
  HMdcList24GroupCells* lCells = &(wires.getOutputListCells());
  Int_t sector = wires.getSector();
  if(segInd>1) {
    lCells = &(wires.getOutputListCells2());
    sector = wires.getSector2();
    if(sector<0) return kFALSE;
  }
  if(lCells->getNDrTimes(segment*12,segment*12+11) == 0) return kFALSE;
  
  HMdcSeg* fSeg = getSegSlot(sector,segment);
  if(!fSeg) return kFALSE;
  Int_t indx1=-1;
  if(iMod!=1) indx1=fillHitByFit(segInd*2);
  Int_t indx2=-1;
  if(iMod!=0) indx2=fillHitByFit(segInd*2+1);
  if(indx1>=0) fSeg->setHitInd(0,indx1);
  if(indx2>=0) fSeg->setHitInd(1,indx2);
  fSeg->setChi2(fitter->getChi2()); // getFunMin());
  setGroup(lCells, fSeg, segment);
  HMdcSizesCellsSec& fSCSec=(*(fitpar.getMdcSizesCells()))[sector];
  const HGeomVector* targ=0;
  if(&fSCSec) targ=&(fSCSec.getTargetMiddlePoint());
  if( findOffVertTrk && segment==0 && wires.getClust1()->getNBins()==0) fSeg->setOffVertexClus();
 
  hitSegFiller.fillMdcSeg(fSeg,targ);
  // Cluster param:
  fillClusInf(fSeg,segInd>1);
  return kTRUE;
}

Int_t HMdc12Fit::fillHitByClus(Int_t mod) {
  HMdcWiresArr& wires = fitter->getWiresArr();
  HMdcList24GroupCells* lCells = &(fitter->getWiresArr().getInputListCells());
  Int_t sector = wires.getSector();
  if(mod>=12) {  // Cosmic
    lCells = &(wires.getInputListCells4());
    sector = wires.getSector4();
  } else if(mod>=8) {  // Cosmic
    lCells = &(wires.getInputListCells3());
    sector = wires.getSector3();
  } else if(mod>=4) {  // Cosmic
    lCells = &(wires.getInputListCells2());
    sector = wires.getSector2();
  }
  mod &= 3;
  if(sector<0) return -1;
  
  if(lCells->getNDrTimesMod(mod) == 0) return -1;
  HMdcSizesCellsMod* fSCMod = fitpar.getSCellsModArr(sector)[mod];
  if(!fSCMod) return -1;
  Int_t index = -1;
  HMdcHit* fHit = getHitSlot(sector,mod,index);
  if(!fHit) return -1;
  hitSegFiller.fillMdcHitByClus(fSCMod,fHit);
  fHit->setChi2(-1.);
  setGroup(lCells, fHit,mod);
  fillClusInf(fHit,mod&1,0); // Cluster inform.
  return index;
}

Bool_t HMdc12Fit::fillHitSegByClus(Int_t iMod) {
  // iMod==0   - first MDC in segment
  // iMod==1   - second MDC in segment
  // iMod==-99 - two MDC in segment
  // iMod==-1  - first segment of sector track
  // iMod==-2  - second segment of sector track
  // iMod==-3  - first segment of second sector in track (cosmic)
  // iMod==-4  - second segment of second sector in track (cosmic)
  // iMod==-5 ...-8  - third & fourth sector in track (cosmic)
  HMdcWiresArr& wires = fitter->getWiresArr();
  Int_t segInd = wires.getSegment();
  if(iMod<=-1 && iMod>=-8) segInd = -iMod-1;  // sector fit !!!???
  Int_t secInd = segInd/4;
  Int_t segment = segInd&1;
  HMdcList24GroupCells* lCells = &(wires.getInputListCells());
  Int_t sector = wires.getSector();
  if(secInd==1) {
    lCells = &(wires.getInputListCells2());
    sector = wires.getSector2();
  } else if(secInd==2) {
    lCells = &(wires.getInputListCells3());
    sector = wires.getSector3();
  } else if(secInd==3) {
    lCells = &(wires.getInputListCells4());
    sector = wires.getSector4();
  }
  if(sector<0) return kFALSE;
  if(lCells->getNDrTimes(segment*12,segment*12+11) == 0) return kFALSE;
  
  HMdcSeg* fSeg = getSegSlot(sector,segment);
  if(fSeg == NULL) return kFALSE;
  Int_t indx1 = -1;
  if(iMod != 1) indx1 = fillHitByClus(segInd*2);
  Int_t indx2 = -1;
  if(iMod != 0) indx2 = fillHitByClus(segInd*2+1);
  if(indx1 >= 0) fSeg->setHitInd(0,indx1);
  if(indx2 >= 0) fSeg->setHitInd(1,indx2);
  fSeg->setChi2(-1.);
  setGroup(lCells, fSeg, segment);
  HMdcSizesCellsSec& fSCSec = (*(fitpar.getMdcSizesCells()))[sector];
  const HGeomVector* targ   = (&fSCSec) ? &(fSCSec.getTargetMiddlePoint()) : 0;
  hitSegFiller.fillMdcSegByClus(fSeg,targ,fitter->getInitParam());
  // Cluster param:
  fillClusInf(fSeg,segInd>1);
  return kTRUE;
}

HMdcHit* HMdc12Fit::getHitSlot(Int_t sec, Int_t mod, Int_t& index) {
  // Geting a slot and setting address
  locHit[0] = sec;
  locHit[1] = mod;
  HMdcHit* fHit = (HMdcHit*)fHitCat->getNewSlot(locHit,&index);
  if(!fHit) {
    Warning("getHitSlot"," No slot in catMdcHit available");
    index=-1;
    return 0;
  }
  if(isGeant) fHit=(HMdcHit*) new(fHit) HMdcHitSim;
  else fHit= new(fHit) HMdcHit;
  fHit->setSecMod(sec,mod);
  return fHit;
}

HMdcSeg* HMdc12Fit::getSegSlot(Int_t sec,Int_t segment) {
  // Geting a slot and setting address
  if(sec<0) return 0;
  locSeg[0] = sec;
  locSeg[1] = segment;
  Int_t index;
  HMdcSeg* fSeg = (HMdcSeg*)fSegCat->getNewSlot(locSeg,&index);
  if(!fSeg) {
    Warning("getSegSlot"," No slot in catMdcSeg available");
    fitter->setSegIndex(-1);
    return 0;
  }
  fitter->setSegIndex(index);      // For cosmic data it is not used
  fSeg = (isGeant) ? (HMdcSeg*)(new(fSeg) HMdcSegSim) : new(fSeg) HMdcSeg;
  fSeg->setSec(sec);
  fSeg->setIOSeg(segment);
  if( !isCosmicData ) {
    if(indFirstSeg[sec] < 0) indFirstSeg[sec] = index;
    indLastSeg[sec] = index;
  }
  return fSeg;
}

HMdcTrkCand* HMdc12Fit::fillTrkCandISeg(void) {
  if(fTrkCandCat == NULL) return NULL;
  Int_t index;
  HMdcTrkCand* fTrkCandNew = (HMdcTrkCand*)fTrkCandCat->getNewSlot(locTrkCand,&index);
  if( fTrkCandNew == NULL ) {
    Warning("fillTrkCandISeg"," No slot available in catMdcTrkCand");
    fitter->setSegIndex(-1);
    return NULL;
  }
  Int_t sec = fitter->getWiresArr().getSector();
  if(indFirstSeg[sec] < 0) indFstTrCand[sec] = index;
  indLstTrCand[sec] = index;
  return new(fTrkCandNew) HMdcTrkCand(sec,fitter->getSegIndex(),index);
}

HMdcTrkCand* HMdc12Fit::fillTrkCandOSeg(HMdcTrkCand* fTrkCand) {
  if(fTrkCandCat==0 || fTrkCand==0) return 0;
  Int_t index;
  HMdcTrkCand* fTrkCandNew = (HMdcTrkCand*)fTrkCandCat->getNewSlot(locTrkCand,&index);
  if(!fTrkCandNew) {
    Warning("fillTrkCandOSeg"," No slot available in catMdcTrkCand");
    fitter->setSegIndex(-1);
    return NULL;
  }
  Int_t sec = fTrkCand->getSec();
  if(indFstTrCand[sec] < 0) indFstTrCand[sec] = index;
  indLstTrCand[sec] = index;
  return new(fTrkCandNew) HMdcTrkCand(fTrkCand,fitter->getSegIndex(),index);
}

Double_t HMdc12Fit::calcVertexDist( Double_t x0, Double_t y0, Double_t z0,
			      Double_t x1, Double_t y1, Double_t z1,
			      Double_t x2, Double_t y2, Double_t z2) {
  // Calculeting a min distance betveen point x0, y0, z0 and line
  return sqrt( ((y2-y1)*(z1-z0) - (z2-z1)*(y1-y0))*((y2-y1)*(z1-z0) - (z2-z1)*(y1-y0)) +
	       ((z2-z1)*(x1-x0) - (x2-x1)*(z1-z0))*((z2-z1)*(x1-x0) - (x2-x1)*(z1-z0)) +
               ((x2-x1)*(y1-y0) - (y2-y1)*(x1-x0))*((x2-x1)*(y1-y0) - (y2-y1)*(x1-x0)) )/
    sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1));
}

void HMdc12Fit::setGroup(HMdcList24GroupCells* cells, HMdcSeg* fSeg, Int_t seg) {
  // Filling list of cells in HMdcSeg
  Int_t lc = seg*12;
  for(Int_t l=0; l<12; l++,lc++) fSeg->setLayerGroup(l,cells->getOneLayerGroup(lc));

  if(pTrackInfSim) {
    HMdcClus *pClus = fitter->getWiresArr().getClust1();
    Int_t indPar  = pClus->getIndexParent();
    HMdcSegSim *pSegPar = NULL;
    if(indPar>=0) {
      HMdcClus *pClus = (HMdcClus*)fClusCat->getObject(indPar);
      Int_t segIndex = pClus == NULL ? -1 : pClus->getSegIndex();
      if(segIndex >= 0) pSegPar = (HMdcSegSim*)fSegCat->getObject(segIndex);
    }
    pTrackInfSim->fillSegTrackInf((HMdcSegSim*)fSeg,cells,pSegPar);
  }
}

void HMdc12Fit::setGroup(HMdcList24GroupCells* cells, HMdcHit* fHit, Int_t mod) {
  // Filling list of cells in HMdcHit
  Int_t lc = mod*6;
  for(Int_t l=0; l<6; l++,lc++) fHit->setLayerGroup(l,cells->getOneLayerGroup(lc));
  if(pTrackInfSim) pTrackInfSim->fillHitTrackInf((HMdcHitSim*)fHit,cells);
}

void HMdc12Fit::printStatusM(void) {
  // prints the parameters to the screen
  const Char_t* hAuth  = "1 = Alexander, 2 = tuned ver. 1";
  const Char_t* hTmVer = "0 = polynomial,  1 = HMdcCal2ParSim::calcTime";
  const Char_t* hFType = "0 = segment fit,  1 = independent mdc fit";
  const Char_t* hDCat  = "1 = create and fill catMdcClusFit&catMdcWireFit 0 = don't cr.";
  const Char_t* hDPr   = "1 = print debug information, 0 = don't print";
  const Char_t* hUWOff = "1 = remove signal time on wire from drift time, 0 = don't remove";
  const Char_t* hCITrp = "1 = for all clusters, 2 = for not fitted+, 0 = don't calc. init tr.param.";
  printf("--------------------------------------------------------------------------------------------\n");
  printf("HMdc12FitSetup:\n");
  printf("CalcInitTrParam =  %i :  %s\n",HMdcTrackDSet::getCalcInitValueFlag(),hCITrp);
  if(HMdcTrackDSet::getCalcInitValueFlag() > 0) printf("  dDistCut Seg1 = %.2f  Seg2 = %.2f[mm]\n",
      HMdcTrackDSet::getCalcInitValueCut(0),HMdcTrackDSet::getCalcInitValueCut(1));
  printf("FitVersion      =  %i :  %s\n",HMdcTrackDSet::getFitAuthor(),hAuth);
  printf("DrTimeCalcVers  =  %i :  %s\n",HMdcTrackDSet::getFitVersion(),hTmVer);
  printf("FitType         =  %i :  %s\n",HMdcTrackDSet::getFitType(),hFType);
  printf("useWireOffset   =  %i :  %s\n",HMdcTrackDSet::getUseWireOffset(),hUWOff);
  printf("DebugCategorie  =  %i :  %s\n",HMdcTrackDSet::fNTuple(),hDCat);
  printf("DebugPrint      =  %i :  %s\n",HMdcTrackDSet::fPrint(),hDPr);
  printf("--------------------------------------------------------------------------------------------\n");
  prntSt = kTRUE;
}

Bool_t HMdc12Fit::finalize(void) {
  return kTRUE;
}

void HMdc12Fit::suppressFakes(Int_t sec,Int_t segIO) {
  if(indLastSeg[sec] <= indFirstSeg[sec]) return;
  currSeg = segIO;
  Int_t nShLayCut = nSharedLayersCut[currSeg];
  Int_t nLayOrCut = nLayerOrientCut[currSeg];
  Int_t nDCMinCut = nDCellsMinCut[currSeg];
  Int_t nDCCut    = nDCellsCut[currSeg];

  HMdcEvntListCells *pEvListCells = HMdcEvntListCells::getExObject();

  pSecListCells  = &((*pEvListCells)[sec]);
  indFirst       = indFirstSeg[sec];
  indLast        = indLastSeg[sec];
  indFirstTrCand = indFstTrCand[sec];
  indLastTrCand  = indLstTrCand[sec];

  for(Int_t is1=indFirst+1; is1<=indLast; is1++) {
    HMdcSeg* seg1 = (HMdcSeg*)fSegCat->getObject(is1);
    if(seg1->getIOSeg() != currSeg) continue;
    if(seg1->isFake()) continue;
    Short_t x1       = seg1->getX1Sh();
    Short_t y1       = seg1->getY1Sh();
    Short_t x2       = seg1->getX2Sh();
    Short_t y2       = seg1->getY2Sh();
    Int_t   nWires1  = seg1->getSumWires();
    Int_t   nLayers1 = seg1->getNLayers();
    Float_t chi2S1   = seg1->getChi2();

    for(Int_t is2 = indFirst; is2<is1; is2++) {
      HMdcSeg* seg2 = (HMdcSeg*)fSegCat->getObject(is2);
      if(seg2->getIOSeg() != currSeg) continue;
      if(seg2->isFake()) continue;
//        if(TMath::Abs(x1 - seg2->getX1Sh())>700 || TMath::Abs(x2 - seg2->getX2Sh())>700 ) continue;
//        if(TMath::Abs(y1 - seg2->getY1Sh())>200 || TMath::Abs(y2 - seg2->getY2Sh())>200 ) continue;
       if(TMath::Abs(x1 - seg2->getX1Sh())>400 || TMath::Abs(x2 - seg2->getX2Sh())>400 ) continue;
       if(TMath::Abs(y1 - seg2->getY1Sh())>150 || TMath::Abs(y2 - seg2->getY2Sh())>150 ) continue;

      Int_t nLayOr, nSharedLayers;
      Int_t nSharedCells = seg1->getNSharedCells(seg2,nSharedLayers,nLayOr);

      if(nSharedLayers<nShLayCut || nLayOr<nLayOrCut) continue;

      Int_t dCells1   = nWires1             - nSharedCells;
      Int_t dCells2   = seg2->getSumWires() - nSharedCells;
      Int_t dCellsMin = TMath::Min(dCells1,dCells2);

      if((dCellsMin<nSharedCells && dCellsMin<nDCMinCut) || dCells1+dCells2 < nDCCut) { // <nSharedCeels-2 (?)
        Float_t chi2S2   = seg2->getChi2();
        Int_t   nLayers2 = seg2->getNLayers();
        Int_t   prefer   = 0;
        if(chi2S2 < 0.) prefer  = 1;
        if(chi2S1 < 0.) prefer += 2;
        if(prefer == 3 || prefer == 0) { 
          if(nLayers1 != nLayers2) prefer = nLayers1 > nLayers2 ? 1:2;
          else if(prefer == 0)     prefer = chi2S1   < chi2S2   ? 1:2; // Both segs are fitted
          else                     prefer = dCells1  > dCells2  ? 1:2; // Both segs are not fitted
        }
        if(prefer == 1) {
          if(isGeant) testGeantInf((HMdcSegSim*)seg2,(HMdcSegSim*)seg1); // must be before call setFake
          if(currSeg == 1) setFakeFlageAndIndexis(seg2,is2,seg1,is1);
          setFake(seg2);
        } else {
          if(isGeant) testGeantInf((HMdcSegSim*)seg1,(HMdcSegSim*)seg2); // must be before call setFake
          if(currSeg == 1) setFakeFlageAndIndexis(seg1,is1,seg2,is2);
          setFake(seg1);
        }      
        if(prefer == 2) break;
      }
    }
  }
  //-----Suppression. Step 2----------------------------------------------
  addToNFittedCounter();

  Int_t n1,n2;
  do {
    n1 = markReals(1);  //??????????????
    n2 = markFakes(1);  //  1  ??????????????
  } while( n1+n2 > 0);

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

  //--Finalize indexis ------------------------------------------------
  for(Int_t is=indFirst; is<=indLast; is++) {
    HMdcSeg* seg = (HMdcSeg*)fSegCat->getObject(is);
    if(seg->getIOSeg() == currSeg && seg->isFake() ) setFakeInd(is);
  }
}

void HMdc12Fit::setFake(HMdcSeg* segFake) {
//-  if(segFake->isFake()) return;
  segFake->setFakeFlag();
  segFake->SetBit(kKeep);   // Don't change fakeFlag in next steps of fake supretion
}

void HMdc12Fit::setFakeInd(Int_t index) {
  // Set fake flag in HMdcTrkCand:
  if(indFirstTrCand >= 0) for(Int_t itr=indFirstTrCand; itr<=indLastTrCand; itr++) {
    HMdcTrkCand* trkCand = (HMdcTrkCand*)fTrkCandCat->getObject(itr);
    if(currSeg == 0) {
      if(index == trkCand->getSeg1Ind()) trkCand->setFakeFlagSeg1();
    } else {
      if(index == trkCand->getSeg2Ind()) trkCand->setFakeFlagSeg2();
    }
  }
  // Set fake flag in HMdcClusFit:
  if(fClusFitCat == NULL) fClusFitCat = HMdcGetContainers::getObject()->getCatMdcClusFit();
  if(fClusFitCat != NULL && clusFitAlg == 1) {
    // next code correct if indexis of HMdcSeg and HMdcClusFit is the same (true for clusFitAlg=1)!
    HMdcClusFit *clFit = (HMdcClusFit*)fClusFitCat->getObject(index);
    if(clFit == NULL) Error("setFake","Pointer to the HMdcClusFit object = NULL!");
    else  clFit->setFakeFlag();
  }
}

void HMdc12Fit::testGeantInf(HMdcSegSim* segFake,HMdcSegSim* segGood) {
  if(segGood->isFake()) return;
  if(segFake->isFakeContribution(0)) return;
  Int_t trf = segFake->getTrack(0);
  if(trf<=0 || trf != segGood->getTrack(0)) return;
  if(segGood->getChi2() < 0.) return;
  Int_t nTmG = segGood->getNTimes(0);
  if(nTmG<5) return;
  Int_t nTmF = segFake->getNTimes(0);
  if(nTmF <= nTmG || ((nTmF>=8 || nTmF == nTmG+1) && segGood->getSumWires()-nTmG < nTmG-2)) {
    if(segGood->resetFakeContributionFlag()) segFake->setFakeContributionFlag();
  }
}
  
HMdcSeg* HMdc12Fit::getInnerSegment(Int_t clIndPar) const {
  HMdcClus *clusPar = clIndPar >= 0 ? (HMdcClus*)fClusCat->getObject(clIndPar) : NULL;
  if(clusPar == NULL) return NULL;           // Should happens never.
  Int_t segIndPar = clusPar->getSegIndex();  // inner segment
  return segIndPar >= 0 ? (HMdcSeg*)fSegCat->getObject(segIndPar) : NULL;
}

Int_t HMdc12Fit::getInnerClusInd(HMdcSeg* outerSegment,HMdcClus* &outerClus) const {
  Int_t clInd = outerSegment->getClusIndex();
  outerClus = clInd >= 0 ? (HMdcClus*)fClusCat->getObject(clInd) : NULL;
  if(outerClus == NULL) return -1;           // Should happens never.
  return outerClus->getIndexParent();
}

void HMdc12Fit::setFakeFlageAndIndexis(HMdcSeg* segOFake,Int_t indFakeSeg,HMdcSeg* segOGood,Int_t indGoodSeg) {
  if( segOFake->isFake() ) return;
//---  segOFake->setFakeFlag();  // setFake(...) ???????????????? nado peredelat'

  HMdcClus *clusOFake = NULL;
  Int_t indClusIFake = getInnerClusInd(segOFake,clusOFake);
  HMdcClus *clusGood = NULL;
  Int_t indClusIGood = getInnerClusInd(segOGood,clusGood);
  if(indClusIFake == indClusIGood || indClusIFake<0 || indClusIGood<0) return;
  
  HMdcSeg  *segIFake  = getInnerSegment(indClusIFake);

  clusOFake->setSegIndex(indGoodSeg);  // In the clusOFake set index of the segGood

  if(indFirstTrCand >= 0) for(Int_t itr=indFirstTrCand; itr<=indLastTrCand; itr++) {
    HMdcTrkCand* trkCand = (HMdcTrkCand*)fTrkCandCat->getObject(itr);
    if(indFakeSeg == trkCand->getSeg2Ind()) trkCand->setSeg2Ind(indGoodSeg);
  }
 
  if(segIFake->isFake() || segIFake->getChi2() < 0.) return;

//????????       if(isGeant) testGeantInf((HMdcSegSim*)seg2,(HMdcSegSim*)seg1); // must be before call setFake
  
  HMdcSeg  *segIGood = getInnerSegment(indClusIGood);
  
  // If inner segment of segOGood is fake set in segOGood index of cluster from segOFake:
  if(segIGood->isFake() || segIGood->getChi2() < 0.) segOGood->setClusIndex(segOFake->getClusIndex());
  
// No IOSegMatch in segment!
//   if(isGeant) {
//     // Check IO matching:
//     HMdcSegSim* segOGoodS = (HMdcSegSim*)segOGood;
//     HMdcSegSim* segIFakeS = (HMdcSegSim*)segIFake;
//     if(segOGoodS->getNNotFakeTracks() <= 0) return;
//     if(segIFakeS->getNNotFakeTracks() <= 0) return;
//     if(segOGoodS->getTrack(0) == segIFakeS->getTrack(0)) {
//       segOGoodS->setIOSegMatchBit(0);
//       segIFakeS->setIOSegMatchBit(0);
//     } else segIFakeS->resetIOSegMatchBit(0);
//   }
}

void HMdc12Fit::addToNFittedCounter(void) { 
  for(Int_t ind=indFirst;ind<=indLast;ind++) {  // Loop of MdcSeg in ONE sector
    HMdcSeg* pSeg = (HMdcSeg*)fSegCat->getObject(ind);
    if( pSeg->getIOSeg() != currSeg ) continue;
    if( pSeg->isFake() ) pSeg->SetBit(kKeep);  // Don't change fake flag in the next fake suppresion proc.
    else if( pSeg->getChi2() >= 0. ) {
      if( pSeg->TestBit(kInFittedList) ) continue;
      pSeg->ResetBit(kRealKeep);
      pSecListCells->addToNFittedCounters(currSeg,pSeg);
      pSeg->SetBit(kInFittedList);
    }
  }
}

Float_t HMdc12Fit::calcWeight(HMdcSeg* pSeg, Float_t *cut) const {
  Int_t nWrTot   = 0;
  Int_t nWrForWt = 0;
  Int_t mod      = currSeg*2;
  Int_t cells[4];
  Int_t ns = pSeg->TestBit(kInFittedList) ? 1 : 0;
  for(Int_t layInd=0;layInd<12;layInd++) {
    if(layInd == 6) mod++;
    Int_t nCells = pSeg->getLayerListCells(layInd,cells);
    nWrTot += nCells;
    const HMdcLayListCells &layList = (*pSecListCells)[mod][layInd%6];
    for(Int_t i=0;i<nCells;i++) if(layList.getNFitted(cells[i]) > ns) {
      nWrForWt++;                                       // Shared wire
      if(layList.getNRFitted(cells[i]) > 0) nWrForWt++; // Wire in real segment (nSegs>1 !)
    }
  }
//  Int_t level = nWrTot <= 12 ? nWrTot-5 : 7; //  8 => 12 wires in segment
  Int_t level = nWrTot-5;
  if     (level<0) level = 0;
  else if(level>7) level = 7; //  7 => 12 wires in segment
  return Float_t(nWrForWt)/Float_t(nWrTot)/cut[level];
}

Int_t HMdc12Fit::markFakes(Int_t cutNMarked) {
  // Mark segments as "fake" by number of shared wires  and wires in real
  Float_t *cut = cutForFake[currSeg];
  for(Int_t n=0;n<cutNMarked;n++) {
    Float_t  maxWt   = 0.;
    Int_t    nFkCand = 0;                      // For time optimization
    HMdcSeg* pSegMax = NULL;
    for(Int_t ind=indFirst;ind<=indLast;ind++) {  // Loop of MdcSeg in ONE sector
      HMdcSeg* pSeg = (HMdcSeg*)fSegCat->getObject(ind);
      if( pSeg->getIOSeg() != currSeg ) continue;
      if( pSeg->TestBit(kAllTypes) )    continue;  // continue if kFake.or.kReal.or.kKeep
      Float_t wt = calcWeight(pSeg,cut);
      if( wt <= 1. ) continue;
//       if(wt == 0.) {
//         pSeg->SetBit(kKeep);
//         continue;
//       }
      if( pSeg->getChi2() < 0.) pSeg->SetBit(kFake);
      else {
        nFkCand++;
        if(wt <= maxWt) continue;
        maxWt   = wt;
        pSegMax = pSeg;
      }
    }
    if(pSegMax != NULL) {
      if( pSegMax->TestBit(kReal) ) {
        pSecListCells->subFittedAndRealCounters(currSeg,pSegMax);
        pSegMax->ResetBit(kReal);
      } else pSecListCells->subFittedCounters(currSeg,pSegMax);
      pSegMax->ResetBit(kInFittedList);
      pSegMax->SetBit(kFake);
      if(nFkCand == 1) return n+1;             // Time optimization
    } else             return n;
  }
  return cutNMarked;
}

Int_t HMdc12Fit::markReals(Int_t cutNMarked) {
  // Mark segments as "real" by number of shared wires and wires in real
  Float_t *cut = cutForReal[currSeg];
  for(Int_t n=0;n<cutNMarked;n++) {
    Float_t  minWt   = 10.;
    Int_t    nRlCand = 0;                      // For time optimization
    HMdcSeg* pSegMin = NULL;
    for(Int_t ind=indFirst;ind<=indLast;ind++) {  // Loop of MdcSeg in ONE sector
      HMdcSeg* pSeg = (HMdcSeg*)fSegCat->getObject(ind);
      if( pSeg->getIOSeg() != currSeg ) continue;
      if( pSeg->getChi2() < 0. )        continue;
      if( pSeg->TestBit(kRealKeep) )    continue;  // continue if kReal.or.kKeep
      Float_t wt = calcWeight(pSeg,cut);
      if(wt == 0.) {
        pSeg->SetBit(kKeep);
        continue;
      }
      if( wt >= 1. ) continue;
      nRlCand++;
      if(wt >= minWt) continue;
      minWt   = wt;
      pSegMin = pSeg;
    }
    if(pSegMin != NULL) {
      if( pSegMin->TestBit(kFake) ) {
        pSecListCells->addToFittedAndRealCounters(currSeg,pSegMin);
        pSegMin->SetBit(kInFittedList);
        pSegMin->ResetBit(kFake);
      } else pSecListCells->addToNRFittedCounters(currSeg,pSegMin);
      pSegMin->SetBit(kReal);
      if(nRlCand == 1) return n+1;             // Time optimization
    } else             return n;
  }
  return cutNMarked;
}
 hmdc12fit.cc:1
 hmdc12fit.cc:2
 hmdc12fit.cc:3
 hmdc12fit.cc:4
 hmdc12fit.cc:5
 hmdc12fit.cc:6
 hmdc12fit.cc:7
 hmdc12fit.cc:8
 hmdc12fit.cc:9
 hmdc12fit.cc:10
 hmdc12fit.cc:11
 hmdc12fit.cc:12
 hmdc12fit.cc:13
 hmdc12fit.cc:14
 hmdc12fit.cc:15
 hmdc12fit.cc:16
 hmdc12fit.cc:17
 hmdc12fit.cc:18
 hmdc12fit.cc:19
 hmdc12fit.cc:20
 hmdc12fit.cc:21
 hmdc12fit.cc:22
 hmdc12fit.cc:23
 hmdc12fit.cc:24
 hmdc12fit.cc:25
 hmdc12fit.cc:26
 hmdc12fit.cc:27
 hmdc12fit.cc:28
 hmdc12fit.cc:29
 hmdc12fit.cc:30
 hmdc12fit.cc:31
 hmdc12fit.cc:32
 hmdc12fit.cc:33
 hmdc12fit.cc:34
 hmdc12fit.cc:35
 hmdc12fit.cc:36
 hmdc12fit.cc:37
 hmdc12fit.cc:38
 hmdc12fit.cc:39
 hmdc12fit.cc:40
 hmdc12fit.cc:41
 hmdc12fit.cc:42
 hmdc12fit.cc:43
 hmdc12fit.cc:44
 hmdc12fit.cc:45
 hmdc12fit.cc:46
 hmdc12fit.cc:47
 hmdc12fit.cc:48
 hmdc12fit.cc:49
 hmdc12fit.cc:50
 hmdc12fit.cc:51
 hmdc12fit.cc:52
 hmdc12fit.cc:53
 hmdc12fit.cc:54
 hmdc12fit.cc:55
 hmdc12fit.cc:56
 hmdc12fit.cc:57
 hmdc12fit.cc:58
 hmdc12fit.cc:59
 hmdc12fit.cc:60
 hmdc12fit.cc:61
 hmdc12fit.cc:62
 hmdc12fit.cc:63
 hmdc12fit.cc:64
 hmdc12fit.cc:65
 hmdc12fit.cc:66
 hmdc12fit.cc:67
 hmdc12fit.cc:68
 hmdc12fit.cc:69
 hmdc12fit.cc:70
 hmdc12fit.cc:71
 hmdc12fit.cc:72
 hmdc12fit.cc:73
 hmdc12fit.cc:74
 hmdc12fit.cc:75
 hmdc12fit.cc:76
 hmdc12fit.cc:77
 hmdc12fit.cc:78
 hmdc12fit.cc:79
 hmdc12fit.cc:80
 hmdc12fit.cc:81
 hmdc12fit.cc:82
 hmdc12fit.cc:83
 hmdc12fit.cc:84
 hmdc12fit.cc:85
 hmdc12fit.cc:86
 hmdc12fit.cc:87
 hmdc12fit.cc:88
 hmdc12fit.cc:89
 hmdc12fit.cc:90
 hmdc12fit.cc:91
 hmdc12fit.cc:92
 hmdc12fit.cc:93
 hmdc12fit.cc:94
 hmdc12fit.cc:95
 hmdc12fit.cc:96
 hmdc12fit.cc:97
 hmdc12fit.cc:98
 hmdc12fit.cc:99
 hmdc12fit.cc:100
 hmdc12fit.cc:101
 hmdc12fit.cc:102
 hmdc12fit.cc:103
 hmdc12fit.cc:104
 hmdc12fit.cc:105
 hmdc12fit.cc:106
 hmdc12fit.cc:107
 hmdc12fit.cc:108
 hmdc12fit.cc:109
 hmdc12fit.cc:110
 hmdc12fit.cc:111
 hmdc12fit.cc:112
 hmdc12fit.cc:113
 hmdc12fit.cc:114
 hmdc12fit.cc:115
 hmdc12fit.cc:116
 hmdc12fit.cc:117
 hmdc12fit.cc:118
 hmdc12fit.cc:119
 hmdc12fit.cc:120
 hmdc12fit.cc:121
 hmdc12fit.cc:122
 hmdc12fit.cc:123
 hmdc12fit.cc:124
 hmdc12fit.cc:125
 hmdc12fit.cc:126
 hmdc12fit.cc:127
 hmdc12fit.cc:128
 hmdc12fit.cc:129
 hmdc12fit.cc:130
 hmdc12fit.cc:131
 hmdc12fit.cc:132
 hmdc12fit.cc:133
 hmdc12fit.cc:134
 hmdc12fit.cc:135
 hmdc12fit.cc:136
 hmdc12fit.cc:137
 hmdc12fit.cc:138
 hmdc12fit.cc:139
 hmdc12fit.cc:140
 hmdc12fit.cc:141
 hmdc12fit.cc:142
 hmdc12fit.cc:143
 hmdc12fit.cc:144
 hmdc12fit.cc:145
 hmdc12fit.cc:146
 hmdc12fit.cc:147
 hmdc12fit.cc:148
 hmdc12fit.cc:149
 hmdc12fit.cc:150
 hmdc12fit.cc:151
 hmdc12fit.cc:152
 hmdc12fit.cc:153
 hmdc12fit.cc:154
 hmdc12fit.cc:155
 hmdc12fit.cc:156
 hmdc12fit.cc:157
 hmdc12fit.cc:158
 hmdc12fit.cc:159
 hmdc12fit.cc:160
 hmdc12fit.cc:161
 hmdc12fit.cc:162
 hmdc12fit.cc:163
 hmdc12fit.cc:164
 hmdc12fit.cc:165
 hmdc12fit.cc:166
 hmdc12fit.cc:167
 hmdc12fit.cc:168
 hmdc12fit.cc:169
 hmdc12fit.cc:170
 hmdc12fit.cc:171
 hmdc12fit.cc:172
 hmdc12fit.cc:173
 hmdc12fit.cc:174
 hmdc12fit.cc:175
 hmdc12fit.cc:176
 hmdc12fit.cc:177
 hmdc12fit.cc:178
 hmdc12fit.cc:179
 hmdc12fit.cc:180
 hmdc12fit.cc:181
 hmdc12fit.cc:182
 hmdc12fit.cc:183
 hmdc12fit.cc:184
 hmdc12fit.cc:185
 hmdc12fit.cc:186
 hmdc12fit.cc:187
 hmdc12fit.cc:188
 hmdc12fit.cc:189
 hmdc12fit.cc:190
 hmdc12fit.cc:191
 hmdc12fit.cc:192
 hmdc12fit.cc:193
 hmdc12fit.cc:194
 hmdc12fit.cc:195
 hmdc12fit.cc:196
 hmdc12fit.cc:197
 hmdc12fit.cc:198
 hmdc12fit.cc:199
 hmdc12fit.cc:200
 hmdc12fit.cc:201
 hmdc12fit.cc:202
 hmdc12fit.cc:203
 hmdc12fit.cc:204
 hmdc12fit.cc:205
 hmdc12fit.cc:206
 hmdc12fit.cc:207
 hmdc12fit.cc:208
 hmdc12fit.cc:209
 hmdc12fit.cc:210
 hmdc12fit.cc:211
 hmdc12fit.cc:212
 hmdc12fit.cc:213
 hmdc12fit.cc:214
 hmdc12fit.cc:215
 hmdc12fit.cc:216
 hmdc12fit.cc:217
 hmdc12fit.cc:218
 hmdc12fit.cc:219
 hmdc12fit.cc:220
 hmdc12fit.cc:221
 hmdc12fit.cc:222
 hmdc12fit.cc:223
 hmdc12fit.cc:224
 hmdc12fit.cc:225
 hmdc12fit.cc:226
 hmdc12fit.cc:227
 hmdc12fit.cc:228
 hmdc12fit.cc:229
 hmdc12fit.cc:230
 hmdc12fit.cc:231
 hmdc12fit.cc:232
 hmdc12fit.cc:233
 hmdc12fit.cc:234
 hmdc12fit.cc:235
 hmdc12fit.cc:236
 hmdc12fit.cc:237
 hmdc12fit.cc:238
 hmdc12fit.cc:239
 hmdc12fit.cc:240
 hmdc12fit.cc:241
 hmdc12fit.cc:242
 hmdc12fit.cc:243
 hmdc12fit.cc:244
 hmdc12fit.cc:245
 hmdc12fit.cc:246
 hmdc12fit.cc:247
 hmdc12fit.cc:248
 hmdc12fit.cc:249
 hmdc12fit.cc:250
 hmdc12fit.cc:251
 hmdc12fit.cc:252
 hmdc12fit.cc:253
 hmdc12fit.cc:254
 hmdc12fit.cc:255
 hmdc12fit.cc:256
 hmdc12fit.cc:257
 hmdc12fit.cc:258
 hmdc12fit.cc:259
 hmdc12fit.cc:260
 hmdc12fit.cc:261
 hmdc12fit.cc:262
 hmdc12fit.cc:263
 hmdc12fit.cc:264
 hmdc12fit.cc:265
 hmdc12fit.cc:266
 hmdc12fit.cc:267
 hmdc12fit.cc:268
 hmdc12fit.cc:269
 hmdc12fit.cc:270
 hmdc12fit.cc:271
 hmdc12fit.cc:272
 hmdc12fit.cc:273
 hmdc12fit.cc:274
 hmdc12fit.cc:275
 hmdc12fit.cc:276
 hmdc12fit.cc:277
 hmdc12fit.cc:278
 hmdc12fit.cc:279
 hmdc12fit.cc:280
 hmdc12fit.cc:281
 hmdc12fit.cc:282
 hmdc12fit.cc:283
 hmdc12fit.cc:284
 hmdc12fit.cc:285
 hmdc12fit.cc:286
 hmdc12fit.cc:287
 hmdc12fit.cc:288
 hmdc12fit.cc:289
 hmdc12fit.cc:290
 hmdc12fit.cc:291
 hmdc12fit.cc:292
 hmdc12fit.cc:293
 hmdc12fit.cc:294
 hmdc12fit.cc:295
 hmdc12fit.cc:296
 hmdc12fit.cc:297
 hmdc12fit.cc:298
 hmdc12fit.cc:299
 hmdc12fit.cc:300
 hmdc12fit.cc:301
 hmdc12fit.cc:302
 hmdc12fit.cc:303
 hmdc12fit.cc:304
 hmdc12fit.cc:305
 hmdc12fit.cc:306
 hmdc12fit.cc:307
 hmdc12fit.cc:308
 hmdc12fit.cc:309
 hmdc12fit.cc:310
 hmdc12fit.cc:311
 hmdc12fit.cc:312
 hmdc12fit.cc:313
 hmdc12fit.cc:314
 hmdc12fit.cc:315
 hmdc12fit.cc:316
 hmdc12fit.cc:317
 hmdc12fit.cc:318
 hmdc12fit.cc:319
 hmdc12fit.cc:320
 hmdc12fit.cc:321
 hmdc12fit.cc:322
 hmdc12fit.cc:323
 hmdc12fit.cc:324
 hmdc12fit.cc:325
 hmdc12fit.cc:326
 hmdc12fit.cc:327
 hmdc12fit.cc:328
 hmdc12fit.cc:329
 hmdc12fit.cc:330
 hmdc12fit.cc:331
 hmdc12fit.cc:332
 hmdc12fit.cc:333
 hmdc12fit.cc:334
 hmdc12fit.cc:335
 hmdc12fit.cc:336
 hmdc12fit.cc:337
 hmdc12fit.cc:338
 hmdc12fit.cc:339
 hmdc12fit.cc:340
 hmdc12fit.cc:341
 hmdc12fit.cc:342
 hmdc12fit.cc:343
 hmdc12fit.cc:344
 hmdc12fit.cc:345
 hmdc12fit.cc:346
 hmdc12fit.cc:347
 hmdc12fit.cc:348
 hmdc12fit.cc:349
 hmdc12fit.cc:350
 hmdc12fit.cc:351
 hmdc12fit.cc:352
 hmdc12fit.cc:353
 hmdc12fit.cc:354
 hmdc12fit.cc:355
 hmdc12fit.cc:356
 hmdc12fit.cc:357
 hmdc12fit.cc:358
 hmdc12fit.cc:359
 hmdc12fit.cc:360
 hmdc12fit.cc:361
 hmdc12fit.cc:362
 hmdc12fit.cc:363
 hmdc12fit.cc:364
 hmdc12fit.cc:365
 hmdc12fit.cc:366
 hmdc12fit.cc:367
 hmdc12fit.cc:368
 hmdc12fit.cc:369
 hmdc12fit.cc:370
 hmdc12fit.cc:371
 hmdc12fit.cc:372
 hmdc12fit.cc:373
 hmdc12fit.cc:374
 hmdc12fit.cc:375
 hmdc12fit.cc:376
 hmdc12fit.cc:377
 hmdc12fit.cc:378
 hmdc12fit.cc:379
 hmdc12fit.cc:380
 hmdc12fit.cc:381
 hmdc12fit.cc:382
 hmdc12fit.cc:383
 hmdc12fit.cc:384
 hmdc12fit.cc:385
 hmdc12fit.cc:386
 hmdc12fit.cc:387
 hmdc12fit.cc:388
 hmdc12fit.cc:389
 hmdc12fit.cc:390
 hmdc12fit.cc:391
 hmdc12fit.cc:392
 hmdc12fit.cc:393
 hmdc12fit.cc:394
 hmdc12fit.cc:395
 hmdc12fit.cc:396
 hmdc12fit.cc:397
 hmdc12fit.cc:398
 hmdc12fit.cc:399
 hmdc12fit.cc:400
 hmdc12fit.cc:401
 hmdc12fit.cc:402
 hmdc12fit.cc:403
 hmdc12fit.cc:404
 hmdc12fit.cc:405
 hmdc12fit.cc:406
 hmdc12fit.cc:407
 hmdc12fit.cc:408
 hmdc12fit.cc:409
 hmdc12fit.cc:410
 hmdc12fit.cc:411
 hmdc12fit.cc:412
 hmdc12fit.cc:413
 hmdc12fit.cc:414
 hmdc12fit.cc:415
 hmdc12fit.cc:416
 hmdc12fit.cc:417
 hmdc12fit.cc:418
 hmdc12fit.cc:419
 hmdc12fit.cc:420
 hmdc12fit.cc:421
 hmdc12fit.cc:422
 hmdc12fit.cc:423
 hmdc12fit.cc:424
 hmdc12fit.cc:425
 hmdc12fit.cc:426
 hmdc12fit.cc:427
 hmdc12fit.cc:428
 hmdc12fit.cc:429
 hmdc12fit.cc:430
 hmdc12fit.cc:431
 hmdc12fit.cc:432
 hmdc12fit.cc:433
 hmdc12fit.cc:434
 hmdc12fit.cc:435
 hmdc12fit.cc:436
 hmdc12fit.cc:437
 hmdc12fit.cc:438
 hmdc12fit.cc:439
 hmdc12fit.cc:440
 hmdc12fit.cc:441
 hmdc12fit.cc:442
 hmdc12fit.cc:443
 hmdc12fit.cc:444
 hmdc12fit.cc:445
 hmdc12fit.cc:446
 hmdc12fit.cc:447
 hmdc12fit.cc:448
 hmdc12fit.cc:449
 hmdc12fit.cc:450
 hmdc12fit.cc:451
 hmdc12fit.cc:452
 hmdc12fit.cc:453
 hmdc12fit.cc:454
 hmdc12fit.cc:455
 hmdc12fit.cc:456
 hmdc12fit.cc:457
 hmdc12fit.cc:458
 hmdc12fit.cc:459
 hmdc12fit.cc:460
 hmdc12fit.cc:461
 hmdc12fit.cc:462
 hmdc12fit.cc:463
 hmdc12fit.cc:464
 hmdc12fit.cc:465
 hmdc12fit.cc:466
 hmdc12fit.cc:467
 hmdc12fit.cc:468
 hmdc12fit.cc:469
 hmdc12fit.cc:470
 hmdc12fit.cc:471
 hmdc12fit.cc:472
 hmdc12fit.cc:473
 hmdc12fit.cc:474
 hmdc12fit.cc:475
 hmdc12fit.cc:476
 hmdc12fit.cc:477
 hmdc12fit.cc:478
 hmdc12fit.cc:479
 hmdc12fit.cc:480
 hmdc12fit.cc:481
 hmdc12fit.cc:482
 hmdc12fit.cc:483
 hmdc12fit.cc:484
 hmdc12fit.cc:485
 hmdc12fit.cc:486
 hmdc12fit.cc:487
 hmdc12fit.cc:488
 hmdc12fit.cc:489
 hmdc12fit.cc:490
 hmdc12fit.cc:491
 hmdc12fit.cc:492
 hmdc12fit.cc:493
 hmdc12fit.cc:494
 hmdc12fit.cc:495
 hmdc12fit.cc:496
 hmdc12fit.cc:497
 hmdc12fit.cc:498
 hmdc12fit.cc:499
 hmdc12fit.cc:500
 hmdc12fit.cc:501
 hmdc12fit.cc:502
 hmdc12fit.cc:503
 hmdc12fit.cc:504
 hmdc12fit.cc:505
 hmdc12fit.cc:506
 hmdc12fit.cc:507
 hmdc12fit.cc:508
 hmdc12fit.cc:509
 hmdc12fit.cc:510
 hmdc12fit.cc:511
 hmdc12fit.cc:512
 hmdc12fit.cc:513
 hmdc12fit.cc:514
 hmdc12fit.cc:515
 hmdc12fit.cc:516
 hmdc12fit.cc:517
 hmdc12fit.cc:518
 hmdc12fit.cc:519
 hmdc12fit.cc:520
 hmdc12fit.cc:521
 hmdc12fit.cc:522
 hmdc12fit.cc:523
 hmdc12fit.cc:524
 hmdc12fit.cc:525
 hmdc12fit.cc:526
 hmdc12fit.cc:527
 hmdc12fit.cc:528
 hmdc12fit.cc:529
 hmdc12fit.cc:530
 hmdc12fit.cc:531
 hmdc12fit.cc:532
 hmdc12fit.cc:533
 hmdc12fit.cc:534
 hmdc12fit.cc:535
 hmdc12fit.cc:536
 hmdc12fit.cc:537
 hmdc12fit.cc:538
 hmdc12fit.cc:539
 hmdc12fit.cc:540
 hmdc12fit.cc:541
 hmdc12fit.cc:542
 hmdc12fit.cc:543
 hmdc12fit.cc:544
 hmdc12fit.cc:545
 hmdc12fit.cc:546
 hmdc12fit.cc:547
 hmdc12fit.cc:548
 hmdc12fit.cc:549
 hmdc12fit.cc:550
 hmdc12fit.cc:551
 hmdc12fit.cc:552
 hmdc12fit.cc:553
 hmdc12fit.cc:554
 hmdc12fit.cc:555
 hmdc12fit.cc:556
 hmdc12fit.cc:557
 hmdc12fit.cc:558
 hmdc12fit.cc:559
 hmdc12fit.cc:560
 hmdc12fit.cc:561
 hmdc12fit.cc:562
 hmdc12fit.cc:563
 hmdc12fit.cc:564
 hmdc12fit.cc:565
 hmdc12fit.cc:566
 hmdc12fit.cc:567
 hmdc12fit.cc:568
 hmdc12fit.cc:569
 hmdc12fit.cc:570
 hmdc12fit.cc:571
 hmdc12fit.cc:572
 hmdc12fit.cc:573
 hmdc12fit.cc:574
 hmdc12fit.cc:575
 hmdc12fit.cc:576
 hmdc12fit.cc:577
 hmdc12fit.cc:578
 hmdc12fit.cc:579
 hmdc12fit.cc:580
 hmdc12fit.cc:581
 hmdc12fit.cc:582
 hmdc12fit.cc:583
 hmdc12fit.cc:584
 hmdc12fit.cc:585
 hmdc12fit.cc:586
 hmdc12fit.cc:587
 hmdc12fit.cc:588
 hmdc12fit.cc:589
 hmdc12fit.cc:590
 hmdc12fit.cc:591
 hmdc12fit.cc:592
 hmdc12fit.cc:593
 hmdc12fit.cc:594
 hmdc12fit.cc:595
 hmdc12fit.cc:596
 hmdc12fit.cc:597
 hmdc12fit.cc:598
 hmdc12fit.cc:599
 hmdc12fit.cc:600
 hmdc12fit.cc:601
 hmdc12fit.cc:602
 hmdc12fit.cc:603
 hmdc12fit.cc:604
 hmdc12fit.cc:605
 hmdc12fit.cc:606
 hmdc12fit.cc:607
 hmdc12fit.cc:608
 hmdc12fit.cc:609
 hmdc12fit.cc:610
 hmdc12fit.cc:611
 hmdc12fit.cc:612
 hmdc12fit.cc:613
 hmdc12fit.cc:614
 hmdc12fit.cc:615
 hmdc12fit.cc:616
 hmdc12fit.cc:617
 hmdc12fit.cc:618
 hmdc12fit.cc:619
 hmdc12fit.cc:620
 hmdc12fit.cc:621
 hmdc12fit.cc:622
 hmdc12fit.cc:623
 hmdc12fit.cc:624
 hmdc12fit.cc:625
 hmdc12fit.cc:626
 hmdc12fit.cc:627
 hmdc12fit.cc:628
 hmdc12fit.cc:629
 hmdc12fit.cc:630
 hmdc12fit.cc:631
 hmdc12fit.cc:632
 hmdc12fit.cc:633
 hmdc12fit.cc:634
 hmdc12fit.cc:635
 hmdc12fit.cc:636
 hmdc12fit.cc:637
 hmdc12fit.cc:638
 hmdc12fit.cc:639
 hmdc12fit.cc:640
 hmdc12fit.cc:641
 hmdc12fit.cc:642
 hmdc12fit.cc:643
 hmdc12fit.cc:644
 hmdc12fit.cc:645
 hmdc12fit.cc:646
 hmdc12fit.cc:647
 hmdc12fit.cc:648
 hmdc12fit.cc:649
 hmdc12fit.cc:650
 hmdc12fit.cc:651
 hmdc12fit.cc:652
 hmdc12fit.cc:653
 hmdc12fit.cc:654
 hmdc12fit.cc:655
 hmdc12fit.cc:656
 hmdc12fit.cc:657
 hmdc12fit.cc:658
 hmdc12fit.cc:659
 hmdc12fit.cc:660
 hmdc12fit.cc:661
 hmdc12fit.cc:662
 hmdc12fit.cc:663
 hmdc12fit.cc:664
 hmdc12fit.cc:665
 hmdc12fit.cc:666
 hmdc12fit.cc:667
 hmdc12fit.cc:668
 hmdc12fit.cc:669
 hmdc12fit.cc:670
 hmdc12fit.cc:671
 hmdc12fit.cc:672
 hmdc12fit.cc:673
 hmdc12fit.cc:674
 hmdc12fit.cc:675
 hmdc12fit.cc:676
 hmdc12fit.cc:677
 hmdc12fit.cc:678
 hmdc12fit.cc:679
 hmdc12fit.cc:680
 hmdc12fit.cc:681
 hmdc12fit.cc:682
 hmdc12fit.cc:683
 hmdc12fit.cc:684
 hmdc12fit.cc:685
 hmdc12fit.cc:686
 hmdc12fit.cc:687
 hmdc12fit.cc:688
 hmdc12fit.cc:689
 hmdc12fit.cc:690
 hmdc12fit.cc:691
 hmdc12fit.cc:692
 hmdc12fit.cc:693
 hmdc12fit.cc:694
 hmdc12fit.cc:695
 hmdc12fit.cc:696
 hmdc12fit.cc:697
 hmdc12fit.cc:698
 hmdc12fit.cc:699
 hmdc12fit.cc:700
 hmdc12fit.cc:701
 hmdc12fit.cc:702
 hmdc12fit.cc:703
 hmdc12fit.cc:704
 hmdc12fit.cc:705
 hmdc12fit.cc:706
 hmdc12fit.cc:707
 hmdc12fit.cc:708
 hmdc12fit.cc:709
 hmdc12fit.cc:710
 hmdc12fit.cc:711
 hmdc12fit.cc:712
 hmdc12fit.cc:713
 hmdc12fit.cc:714
 hmdc12fit.cc:715
 hmdc12fit.cc:716
 hmdc12fit.cc:717
 hmdc12fit.cc:718
 hmdc12fit.cc:719
 hmdc12fit.cc:720
 hmdc12fit.cc:721
 hmdc12fit.cc:722
 hmdc12fit.cc:723
 hmdc12fit.cc:724
 hmdc12fit.cc:725
 hmdc12fit.cc:726
 hmdc12fit.cc:727
 hmdc12fit.cc:728
 hmdc12fit.cc:729
 hmdc12fit.cc:730
 hmdc12fit.cc:731
 hmdc12fit.cc:732
 hmdc12fit.cc:733
 hmdc12fit.cc:734
 hmdc12fit.cc:735
 hmdc12fit.cc:736
 hmdc12fit.cc:737
 hmdc12fit.cc:738
 hmdc12fit.cc:739
 hmdc12fit.cc:740
 hmdc12fit.cc:741
 hmdc12fit.cc:742
 hmdc12fit.cc:743
 hmdc12fit.cc:744
 hmdc12fit.cc:745
 hmdc12fit.cc:746
 hmdc12fit.cc:747
 hmdc12fit.cc:748
 hmdc12fit.cc:749
 hmdc12fit.cc:750
 hmdc12fit.cc:751
 hmdc12fit.cc:752
 hmdc12fit.cc:753
 hmdc12fit.cc:754
 hmdc12fit.cc:755
 hmdc12fit.cc:756
 hmdc12fit.cc:757
 hmdc12fit.cc:758
 hmdc12fit.cc:759
 hmdc12fit.cc:760
 hmdc12fit.cc:761
 hmdc12fit.cc:762
 hmdc12fit.cc:763
 hmdc12fit.cc:764
 hmdc12fit.cc:765
 hmdc12fit.cc:766
 hmdc12fit.cc:767
 hmdc12fit.cc:768
 hmdc12fit.cc:769
 hmdc12fit.cc:770
 hmdc12fit.cc:771
 hmdc12fit.cc:772
 hmdc12fit.cc:773
 hmdc12fit.cc:774
 hmdc12fit.cc:775
 hmdc12fit.cc:776
 hmdc12fit.cc:777
 hmdc12fit.cc:778
 hmdc12fit.cc:779
 hmdc12fit.cc:780
 hmdc12fit.cc:781
 hmdc12fit.cc:782
 hmdc12fit.cc:783
 hmdc12fit.cc:784
 hmdc12fit.cc:785
 hmdc12fit.cc:786
 hmdc12fit.cc:787
 hmdc12fit.cc:788
 hmdc12fit.cc:789
 hmdc12fit.cc:790
 hmdc12fit.cc:791
 hmdc12fit.cc:792
 hmdc12fit.cc:793
 hmdc12fit.cc:794
 hmdc12fit.cc:795
 hmdc12fit.cc:796
 hmdc12fit.cc:797
 hmdc12fit.cc:798
 hmdc12fit.cc:799
 hmdc12fit.cc:800
 hmdc12fit.cc:801
 hmdc12fit.cc:802
 hmdc12fit.cc:803
 hmdc12fit.cc:804
 hmdc12fit.cc:805
 hmdc12fit.cc:806
 hmdc12fit.cc:807
 hmdc12fit.cc:808
 hmdc12fit.cc:809
 hmdc12fit.cc:810
 hmdc12fit.cc:811
 hmdc12fit.cc:812
 hmdc12fit.cc:813
 hmdc12fit.cc:814
 hmdc12fit.cc:815
 hmdc12fit.cc:816
 hmdc12fit.cc:817
 hmdc12fit.cc:818
 hmdc12fit.cc:819
 hmdc12fit.cc:820
 hmdc12fit.cc:821
 hmdc12fit.cc:822
 hmdc12fit.cc:823
 hmdc12fit.cc:824
 hmdc12fit.cc:825
 hmdc12fit.cc:826
 hmdc12fit.cc:827
 hmdc12fit.cc:828
 hmdc12fit.cc:829
 hmdc12fit.cc:830
 hmdc12fit.cc:831
 hmdc12fit.cc:832
 hmdc12fit.cc:833
 hmdc12fit.cc:834
 hmdc12fit.cc:835
 hmdc12fit.cc:836
 hmdc12fit.cc:837
 hmdc12fit.cc:838
 hmdc12fit.cc:839
 hmdc12fit.cc:840
 hmdc12fit.cc:841
 hmdc12fit.cc:842
 hmdc12fit.cc:843
 hmdc12fit.cc:844
 hmdc12fit.cc:845
 hmdc12fit.cc:846
 hmdc12fit.cc:847
 hmdc12fit.cc:848
 hmdc12fit.cc:849
 hmdc12fit.cc:850
 hmdc12fit.cc:851
 hmdc12fit.cc:852
 hmdc12fit.cc:853
 hmdc12fit.cc:854
 hmdc12fit.cc:855
 hmdc12fit.cc:856
 hmdc12fit.cc:857
 hmdc12fit.cc:858
 hmdc12fit.cc:859
 hmdc12fit.cc:860
 hmdc12fit.cc:861
 hmdc12fit.cc:862
 hmdc12fit.cc:863
 hmdc12fit.cc:864
 hmdc12fit.cc:865
 hmdc12fit.cc:866
 hmdc12fit.cc:867
 hmdc12fit.cc:868
 hmdc12fit.cc:869
 hmdc12fit.cc:870
 hmdc12fit.cc:871
 hmdc12fit.cc:872
 hmdc12fit.cc:873
 hmdc12fit.cc:874
 hmdc12fit.cc:875
 hmdc12fit.cc:876
 hmdc12fit.cc:877
 hmdc12fit.cc:878
 hmdc12fit.cc:879
 hmdc12fit.cc:880
 hmdc12fit.cc:881
 hmdc12fit.cc:882
 hmdc12fit.cc:883
 hmdc12fit.cc:884
 hmdc12fit.cc:885
 hmdc12fit.cc:886
 hmdc12fit.cc:887
 hmdc12fit.cc:888
 hmdc12fit.cc:889
 hmdc12fit.cc:890
 hmdc12fit.cc:891
 hmdc12fit.cc:892
 hmdc12fit.cc:893
 hmdc12fit.cc:894
 hmdc12fit.cc:895
 hmdc12fit.cc:896
 hmdc12fit.cc:897
 hmdc12fit.cc:898
 hmdc12fit.cc:899
 hmdc12fit.cc:900
 hmdc12fit.cc:901
 hmdc12fit.cc:902
 hmdc12fit.cc:903
 hmdc12fit.cc:904
 hmdc12fit.cc:905
 hmdc12fit.cc:906
 hmdc12fit.cc:907
 hmdc12fit.cc:908
 hmdc12fit.cc:909
 hmdc12fit.cc:910
 hmdc12fit.cc:911
 hmdc12fit.cc:912
 hmdc12fit.cc:913
 hmdc12fit.cc:914
 hmdc12fit.cc:915
 hmdc12fit.cc:916
 hmdc12fit.cc:917
 hmdc12fit.cc:918
 hmdc12fit.cc:919
 hmdc12fit.cc:920
 hmdc12fit.cc:921
 hmdc12fit.cc:922
 hmdc12fit.cc:923
 hmdc12fit.cc:924
 hmdc12fit.cc:925
 hmdc12fit.cc:926
 hmdc12fit.cc:927
 hmdc12fit.cc:928
 hmdc12fit.cc:929
 hmdc12fit.cc:930
 hmdc12fit.cc:931
 hmdc12fit.cc:932
 hmdc12fit.cc:933
 hmdc12fit.cc:934
 hmdc12fit.cc:935
 hmdc12fit.cc:936
 hmdc12fit.cc:937
 hmdc12fit.cc:938
 hmdc12fit.cc:939
 hmdc12fit.cc:940
 hmdc12fit.cc:941
 hmdc12fit.cc:942
 hmdc12fit.cc:943
 hmdc12fit.cc:944
 hmdc12fit.cc:945
 hmdc12fit.cc:946
 hmdc12fit.cc:947
 hmdc12fit.cc:948
 hmdc12fit.cc:949
 hmdc12fit.cc:950
 hmdc12fit.cc:951
 hmdc12fit.cc:952
 hmdc12fit.cc:953
 hmdc12fit.cc:954
 hmdc12fit.cc:955
 hmdc12fit.cc:956
 hmdc12fit.cc:957
 hmdc12fit.cc:958
 hmdc12fit.cc:959
 hmdc12fit.cc:960
 hmdc12fit.cc:961
 hmdc12fit.cc:962
 hmdc12fit.cc:963
 hmdc12fit.cc:964
 hmdc12fit.cc:965
 hmdc12fit.cc:966
 hmdc12fit.cc:967
 hmdc12fit.cc:968
 hmdc12fit.cc:969
 hmdc12fit.cc:970
 hmdc12fit.cc:971
 hmdc12fit.cc:972
 hmdc12fit.cc:973
 hmdc12fit.cc:974
 hmdc12fit.cc:975
 hmdc12fit.cc:976
 hmdc12fit.cc:977
 hmdc12fit.cc:978
 hmdc12fit.cc:979
 hmdc12fit.cc:980
 hmdc12fit.cc:981
 hmdc12fit.cc:982
 hmdc12fit.cc:983
 hmdc12fit.cc:984
 hmdc12fit.cc:985
 hmdc12fit.cc:986
 hmdc12fit.cc:987
 hmdc12fit.cc:988
 hmdc12fit.cc:989
 hmdc12fit.cc:990
 hmdc12fit.cc:991
 hmdc12fit.cc:992
 hmdc12fit.cc:993
 hmdc12fit.cc:994
 hmdc12fit.cc:995
 hmdc12fit.cc:996
 hmdc12fit.cc:997
 hmdc12fit.cc:998
 hmdc12fit.cc:999
 hmdc12fit.cc:1000
 hmdc12fit.cc:1001
 hmdc12fit.cc:1002
 hmdc12fit.cc:1003
 hmdc12fit.cc:1004
 hmdc12fit.cc:1005
 hmdc12fit.cc:1006
 hmdc12fit.cc:1007
 hmdc12fit.cc:1008
 hmdc12fit.cc:1009
 hmdc12fit.cc:1010
 hmdc12fit.cc:1011
 hmdc12fit.cc:1012
 hmdc12fit.cc:1013
 hmdc12fit.cc:1014
 hmdc12fit.cc:1015
 hmdc12fit.cc:1016
 hmdc12fit.cc:1017
 hmdc12fit.cc:1018
 hmdc12fit.cc:1019
 hmdc12fit.cc:1020
 hmdc12fit.cc:1021
 hmdc12fit.cc:1022
 hmdc12fit.cc:1023
 hmdc12fit.cc:1024
 hmdc12fit.cc:1025
 hmdc12fit.cc:1026
 hmdc12fit.cc:1027
 hmdc12fit.cc:1028
 hmdc12fit.cc:1029
 hmdc12fit.cc:1030
 hmdc12fit.cc:1031
 hmdc12fit.cc:1032
 hmdc12fit.cc:1033
 hmdc12fit.cc:1034
 hmdc12fit.cc:1035
 hmdc12fit.cc:1036
 hmdc12fit.cc:1037
 hmdc12fit.cc:1038
 hmdc12fit.cc:1039
 hmdc12fit.cc:1040
 hmdc12fit.cc:1041
 hmdc12fit.cc:1042
 hmdc12fit.cc:1043
 hmdc12fit.cc:1044
 hmdc12fit.cc:1045
 hmdc12fit.cc:1046
 hmdc12fit.cc:1047
 hmdc12fit.cc:1048
 hmdc12fit.cc:1049
 hmdc12fit.cc:1050
 hmdc12fit.cc:1051
 hmdc12fit.cc:1052
 hmdc12fit.cc:1053
 hmdc12fit.cc:1054
 hmdc12fit.cc:1055
 hmdc12fit.cc:1056
 hmdc12fit.cc:1057
 hmdc12fit.cc:1058
 hmdc12fit.cc:1059
 hmdc12fit.cc:1060
 hmdc12fit.cc:1061
 hmdc12fit.cc:1062
 hmdc12fit.cc:1063
 hmdc12fit.cc:1064
 hmdc12fit.cc:1065
 hmdc12fit.cc:1066
 hmdc12fit.cc:1067
 hmdc12fit.cc:1068
 hmdc12fit.cc:1069
 hmdc12fit.cc:1070
 hmdc12fit.cc:1071
 hmdc12fit.cc:1072
 hmdc12fit.cc:1073
 hmdc12fit.cc:1074
 hmdc12fit.cc:1075
 hmdc12fit.cc:1076
 hmdc12fit.cc:1077
 hmdc12fit.cc:1078
 hmdc12fit.cc:1079
 hmdc12fit.cc:1080
 hmdc12fit.cc:1081
 hmdc12fit.cc:1082
 hmdc12fit.cc:1083
 hmdc12fit.cc:1084
 hmdc12fit.cc:1085
 hmdc12fit.cc:1086
 hmdc12fit.cc:1087
 hmdc12fit.cc:1088
 hmdc12fit.cc:1089
 hmdc12fit.cc:1090
 hmdc12fit.cc:1091
 hmdc12fit.cc:1092
 hmdc12fit.cc:1093
 hmdc12fit.cc:1094
 hmdc12fit.cc:1095
 hmdc12fit.cc:1096
 hmdc12fit.cc:1097
 hmdc12fit.cc:1098
 hmdc12fit.cc:1099
 hmdc12fit.cc:1100
 hmdc12fit.cc:1101
 hmdc12fit.cc:1102
 hmdc12fit.cc:1103
 hmdc12fit.cc:1104
 hmdc12fit.cc:1105
 hmdc12fit.cc:1106
 hmdc12fit.cc:1107
 hmdc12fit.cc:1108
 hmdc12fit.cc:1109
 hmdc12fit.cc:1110
 hmdc12fit.cc:1111
 hmdc12fit.cc:1112
 hmdc12fit.cc:1113
 hmdc12fit.cc:1114
 hmdc12fit.cc:1115
 hmdc12fit.cc:1116
 hmdc12fit.cc:1117
 hmdc12fit.cc:1118
 hmdc12fit.cc:1119
 hmdc12fit.cc:1120
 hmdc12fit.cc:1121
 hmdc12fit.cc:1122
 hmdc12fit.cc:1123
 hmdc12fit.cc:1124
 hmdc12fit.cc:1125
 hmdc12fit.cc:1126
 hmdc12fit.cc:1127
 hmdc12fit.cc:1128
 hmdc12fit.cc:1129
 hmdc12fit.cc:1130
 hmdc12fit.cc:1131
 hmdc12fit.cc:1132
 hmdc12fit.cc:1133
 hmdc12fit.cc:1134
 hmdc12fit.cc:1135
 hmdc12fit.cc:1136
 hmdc12fit.cc:1137
 hmdc12fit.cc:1138
 hmdc12fit.cc:1139
 hmdc12fit.cc:1140
 hmdc12fit.cc:1141
 hmdc12fit.cc:1142
 hmdc12fit.cc:1143
 hmdc12fit.cc:1144
 hmdc12fit.cc:1145
 hmdc12fit.cc:1146
 hmdc12fit.cc:1147
 hmdc12fit.cc:1148
 hmdc12fit.cc:1149
 hmdc12fit.cc:1150
 hmdc12fit.cc:1151
 hmdc12fit.cc:1152
 hmdc12fit.cc:1153
 hmdc12fit.cc:1154
 hmdc12fit.cc:1155
 hmdc12fit.cc:1156
 hmdc12fit.cc:1157
 hmdc12fit.cc:1158
 hmdc12fit.cc:1159
 hmdc12fit.cc:1160
 hmdc12fit.cc:1161
 hmdc12fit.cc:1162
 hmdc12fit.cc:1163
 hmdc12fit.cc:1164
 hmdc12fit.cc:1165
 hmdc12fit.cc:1166
 hmdc12fit.cc:1167
 hmdc12fit.cc:1168
 hmdc12fit.cc:1169
 hmdc12fit.cc:1170
 hmdc12fit.cc:1171
 hmdc12fit.cc:1172
 hmdc12fit.cc:1173
 hmdc12fit.cc:1174
 hmdc12fit.cc:1175
 hmdc12fit.cc:1176
 hmdc12fit.cc:1177
 hmdc12fit.cc:1178
 hmdc12fit.cc:1179
 hmdc12fit.cc:1180
 hmdc12fit.cc:1181
 hmdc12fit.cc:1182
 hmdc12fit.cc:1183
 hmdc12fit.cc:1184
 hmdc12fit.cc:1185
 hmdc12fit.cc:1186
 hmdc12fit.cc:1187
 hmdc12fit.cc:1188
 hmdc12fit.cc:1189
 hmdc12fit.cc:1190
 hmdc12fit.cc:1191
 hmdc12fit.cc:1192
 hmdc12fit.cc:1193
 hmdc12fit.cc:1194
 hmdc12fit.cc:1195
 hmdc12fit.cc:1196
 hmdc12fit.cc:1197
 hmdc12fit.cc:1198
 hmdc12fit.cc:1199
 hmdc12fit.cc:1200
 hmdc12fit.cc:1201
 hmdc12fit.cc:1202
 hmdc12fit.cc:1203
 hmdc12fit.cc:1204
 hmdc12fit.cc:1205
 hmdc12fit.cc:1206
 hmdc12fit.cc:1207
 hmdc12fit.cc:1208
 hmdc12fit.cc:1209
 hmdc12fit.cc:1210
 hmdc12fit.cc:1211
 hmdc12fit.cc:1212
 hmdc12fit.cc:1213
 hmdc12fit.cc:1214
 hmdc12fit.cc:1215
 hmdc12fit.cc:1216
 hmdc12fit.cc:1217
 hmdc12fit.cc:1218
 hmdc12fit.cc:1219
 hmdc12fit.cc:1220
 hmdc12fit.cc:1221
 hmdc12fit.cc:1222
 hmdc12fit.cc:1223
 hmdc12fit.cc:1224
 hmdc12fit.cc:1225
 hmdc12fit.cc:1226
 hmdc12fit.cc:1227
 hmdc12fit.cc:1228
 hmdc12fit.cc:1229
 hmdc12fit.cc:1230
 hmdc12fit.cc:1231
 hmdc12fit.cc:1232
 hmdc12fit.cc:1233
 hmdc12fit.cc:1234
 hmdc12fit.cc:1235
 hmdc12fit.cc:1236
 hmdc12fit.cc:1237
 hmdc12fit.cc:1238
 hmdc12fit.cc:1239
 hmdc12fit.cc:1240
 hmdc12fit.cc:1241
 hmdc12fit.cc:1242
 hmdc12fit.cc:1243
 hmdc12fit.cc:1244
 hmdc12fit.cc:1245
 hmdc12fit.cc:1246
 hmdc12fit.cc:1247
 hmdc12fit.cc:1248
 hmdc12fit.cc:1249
 hmdc12fit.cc:1250
 hmdc12fit.cc:1251
 hmdc12fit.cc:1252
 hmdc12fit.cc:1253
 hmdc12fit.cc:1254
 hmdc12fit.cc:1255
 hmdc12fit.cc:1256
 hmdc12fit.cc:1257
 hmdc12fit.cc:1258
 hmdc12fit.cc:1259
 hmdc12fit.cc:1260
 hmdc12fit.cc:1261
 hmdc12fit.cc:1262
 hmdc12fit.cc:1263
 hmdc12fit.cc:1264
 hmdc12fit.cc:1265
 hmdc12fit.cc:1266
 hmdc12fit.cc:1267
 hmdc12fit.cc:1268
 hmdc12fit.cc:1269
 hmdc12fit.cc:1270
 hmdc12fit.cc:1271
 hmdc12fit.cc:1272
 hmdc12fit.cc:1273
 hmdc12fit.cc:1274
 hmdc12fit.cc:1275
 hmdc12fit.cc:1276
 hmdc12fit.cc:1277
 hmdc12fit.cc:1278
 hmdc12fit.cc:1279
 hmdc12fit.cc:1280
 hmdc12fit.cc:1281
 hmdc12fit.cc:1282
 hmdc12fit.cc:1283
 hmdc12fit.cc:1284
 hmdc12fit.cc:1285
 hmdc12fit.cc:1286
 hmdc12fit.cc:1287
 hmdc12fit.cc:1288
 hmdc12fit.cc:1289
 hmdc12fit.cc:1290
 hmdc12fit.cc:1291
 hmdc12fit.cc:1292
 hmdc12fit.cc:1293
 hmdc12fit.cc:1294
 hmdc12fit.cc:1295
 hmdc12fit.cc:1296
 hmdc12fit.cc:1297
 hmdc12fit.cc:1298
 hmdc12fit.cc:1299
 hmdc12fit.cc:1300
 hmdc12fit.cc:1301
 hmdc12fit.cc:1302
 hmdc12fit.cc:1303
 hmdc12fit.cc:1304
 hmdc12fit.cc:1305
 hmdc12fit.cc:1306
 hmdc12fit.cc:1307
 hmdc12fit.cc:1308
 hmdc12fit.cc:1309
 hmdc12fit.cc:1310
 hmdc12fit.cc:1311
 hmdc12fit.cc:1312
 hmdc12fit.cc:1313
 hmdc12fit.cc:1314
 hmdc12fit.cc:1315
 hmdc12fit.cc:1316
 hmdc12fit.cc:1317
 hmdc12fit.cc:1318
 hmdc12fit.cc:1319
 hmdc12fit.cc:1320
 hmdc12fit.cc:1321
 hmdc12fit.cc:1322
 hmdc12fit.cc:1323
 hmdc12fit.cc:1324
 hmdc12fit.cc:1325
 hmdc12fit.cc:1326
 hmdc12fit.cc:1327
 hmdc12fit.cc:1328
 hmdc12fit.cc:1329
 hmdc12fit.cc:1330
 hmdc12fit.cc:1331
 hmdc12fit.cc:1332
 hmdc12fit.cc:1333
 hmdc12fit.cc:1334
 hmdc12fit.cc:1335
 hmdc12fit.cc:1336
 hmdc12fit.cc:1337
 hmdc12fit.cc:1338
 hmdc12fit.cc:1339
 hmdc12fit.cc:1340
 hmdc12fit.cc:1341
 hmdc12fit.cc:1342
 hmdc12fit.cc:1343
 hmdc12fit.cc:1344
 hmdc12fit.cc:1345
 hmdc12fit.cc:1346
 hmdc12fit.cc:1347
 hmdc12fit.cc:1348
 hmdc12fit.cc:1349
 hmdc12fit.cc:1350
 hmdc12fit.cc:1351
 hmdc12fit.cc:1352
 hmdc12fit.cc:1353
 hmdc12fit.cc:1354
 hmdc12fit.cc:1355
 hmdc12fit.cc:1356
 hmdc12fit.cc:1357
 hmdc12fit.cc:1358
 hmdc12fit.cc:1359
 hmdc12fit.cc:1360
 hmdc12fit.cc:1361
 hmdc12fit.cc:1362
 hmdc12fit.cc:1363
 hmdc12fit.cc:1364
 hmdc12fit.cc:1365
 hmdc12fit.cc:1366
 hmdc12fit.cc:1367
 hmdc12fit.cc:1368
 hmdc12fit.cc:1369
 hmdc12fit.cc:1370
 hmdc12fit.cc:1371
 hmdc12fit.cc:1372
 hmdc12fit.cc:1373
 hmdc12fit.cc:1374
 hmdc12fit.cc:1375
 hmdc12fit.cc:1376
 hmdc12fit.cc:1377
 hmdc12fit.cc:1378
 hmdc12fit.cc:1379
 hmdc12fit.cc:1380
 hmdc12fit.cc:1381
 hmdc12fit.cc:1382
 hmdc12fit.cc:1383
 hmdc12fit.cc:1384
 hmdc12fit.cc:1385
 hmdc12fit.cc:1386
 hmdc12fit.cc:1387
 hmdc12fit.cc:1388
 hmdc12fit.cc:1389
 hmdc12fit.cc:1390
 hmdc12fit.cc:1391
 hmdc12fit.cc:1392
 hmdc12fit.cc:1393
 hmdc12fit.cc:1394
 hmdc12fit.cc:1395
 hmdc12fit.cc:1396
 hmdc12fit.cc:1397
 hmdc12fit.cc:1398
 hmdc12fit.cc:1399
 hmdc12fit.cc:1400
 hmdc12fit.cc:1401
 hmdc12fit.cc:1402
 hmdc12fit.cc:1403
 hmdc12fit.cc:1404
 hmdc12fit.cc:1405
 hmdc12fit.cc:1406
 hmdc12fit.cc:1407
 hmdc12fit.cc:1408
 hmdc12fit.cc:1409
 hmdc12fit.cc:1410
 hmdc12fit.cc:1411
 hmdc12fit.cc:1412
 hmdc12fit.cc:1413
 hmdc12fit.cc:1414
 hmdc12fit.cc:1415
 hmdc12fit.cc:1416
 hmdc12fit.cc:1417
 hmdc12fit.cc:1418
 hmdc12fit.cc:1419
 hmdc12fit.cc:1420
 hmdc12fit.cc:1421
 hmdc12fit.cc:1422
 hmdc12fit.cc:1423
 hmdc12fit.cc:1424
 hmdc12fit.cc:1425
 hmdc12fit.cc:1426
 hmdc12fit.cc:1427
 hmdc12fit.cc:1428
 hmdc12fit.cc:1429
 hmdc12fit.cc:1430
 hmdc12fit.cc:1431
 hmdc12fit.cc:1432
 hmdc12fit.cc:1433
 hmdc12fit.cc:1434
 hmdc12fit.cc:1435
 hmdc12fit.cc:1436
 hmdc12fit.cc:1437
 hmdc12fit.cc:1438
 hmdc12fit.cc:1439
 hmdc12fit.cc:1440
 hmdc12fit.cc:1441
 hmdc12fit.cc:1442
 hmdc12fit.cc:1443
 hmdc12fit.cc:1444
 hmdc12fit.cc:1445
 hmdc12fit.cc:1446
 hmdc12fit.cc:1447
 hmdc12fit.cc:1448
 hmdc12fit.cc:1449
 hmdc12fit.cc:1450
 hmdc12fit.cc:1451
 hmdc12fit.cc:1452
 hmdc12fit.cc:1453
 hmdc12fit.cc:1454
 hmdc12fit.cc:1455
 hmdc12fit.cc:1456
 hmdc12fit.cc:1457
 hmdc12fit.cc:1458
 hmdc12fit.cc:1459
 hmdc12fit.cc:1460
 hmdc12fit.cc:1461
 hmdc12fit.cc:1462
 hmdc12fit.cc:1463
 hmdc12fit.cc:1464
 hmdc12fit.cc:1465
 hmdc12fit.cc:1466
 hmdc12fit.cc:1467
 hmdc12fit.cc:1468
 hmdc12fit.cc:1469
 hmdc12fit.cc:1470
 hmdc12fit.cc:1471
 hmdc12fit.cc:1472
 hmdc12fit.cc:1473
 hmdc12fit.cc:1474
 hmdc12fit.cc:1475
 hmdc12fit.cc:1476
 hmdc12fit.cc:1477
 hmdc12fit.cc:1478
 hmdc12fit.cc:1479
 hmdc12fit.cc:1480
 hmdc12fit.cc:1481
 hmdc12fit.cc:1482
 hmdc12fit.cc:1483
 hmdc12fit.cc:1484
 hmdc12fit.cc:1485
 hmdc12fit.cc:1486
 hmdc12fit.cc:1487
 hmdc12fit.cc:1488
 hmdc12fit.cc:1489
 hmdc12fit.cc:1490
 hmdc12fit.cc:1491
 hmdc12fit.cc:1492
 hmdc12fit.cc:1493
 hmdc12fit.cc:1494
 hmdc12fit.cc:1495
 hmdc12fit.cc:1496
 hmdc12fit.cc:1497
 hmdc12fit.cc:1498
 hmdc12fit.cc:1499
 hmdc12fit.cc:1500
 hmdc12fit.cc:1501
 hmdc12fit.cc:1502
 hmdc12fit.cc:1503
 hmdc12fit.cc:1504
 hmdc12fit.cc:1505
 hmdc12fit.cc:1506
 hmdc12fit.cc:1507
 hmdc12fit.cc:1508
 hmdc12fit.cc:1509
 hmdc12fit.cc:1510
 hmdc12fit.cc:1511
 hmdc12fit.cc:1512
 hmdc12fit.cc:1513
 hmdc12fit.cc:1514
 hmdc12fit.cc:1515
 hmdc12fit.cc:1516
 hmdc12fit.cc:1517
 hmdc12fit.cc:1518
 hmdc12fit.cc:1519
 hmdc12fit.cc:1520
 hmdc12fit.cc:1521
 hmdc12fit.cc:1522
 hmdc12fit.cc:1523
 hmdc12fit.cc:1524
 hmdc12fit.cc:1525
 hmdc12fit.cc:1526
 hmdc12fit.cc:1527
 hmdc12fit.cc:1528
 hmdc12fit.cc:1529
 hmdc12fit.cc:1530
 hmdc12fit.cc:1531
 hmdc12fit.cc:1532
 hmdc12fit.cc:1533
 hmdc12fit.cc:1534
 hmdc12fit.cc:1535
 hmdc12fit.cc:1536
 hmdc12fit.cc:1537
 hmdc12fit.cc:1538
 hmdc12fit.cc:1539
 hmdc12fit.cc:1540
 hmdc12fit.cc:1541
 hmdc12fit.cc:1542
 hmdc12fit.cc:1543
 hmdc12fit.cc:1544
 hmdc12fit.cc:1545
 hmdc12fit.cc:1546
 hmdc12fit.cc:1547
 hmdc12fit.cc:1548
 hmdc12fit.cc:1549
 hmdc12fit.cc:1550
 hmdc12fit.cc:1551
 hmdc12fit.cc:1552
 hmdc12fit.cc:1553
 hmdc12fit.cc:1554
 hmdc12fit.cc:1555
 hmdc12fit.cc:1556
 hmdc12fit.cc:1557
 hmdc12fit.cc:1558
 hmdc12fit.cc:1559
 hmdc12fit.cc:1560
 hmdc12fit.cc:1561
 hmdc12fit.cc:1562
 hmdc12fit.cc:1563
 hmdc12fit.cc:1564
 hmdc12fit.cc:1565
 hmdc12fit.cc:1566
 hmdc12fit.cc:1567
 hmdc12fit.cc:1568
 hmdc12fit.cc:1569
 hmdc12fit.cc:1570
 hmdc12fit.cc:1571
 hmdc12fit.cc:1572
 hmdc12fit.cc:1573
 hmdc12fit.cc:1574
 hmdc12fit.cc:1575
 hmdc12fit.cc:1576
 hmdc12fit.cc:1577
 hmdc12fit.cc:1578
 hmdc12fit.cc:1579
 hmdc12fit.cc:1580
 hmdc12fit.cc:1581
 hmdc12fit.cc:1582
 hmdc12fit.cc:1583
 hmdc12fit.cc:1584
 hmdc12fit.cc:1585
 hmdc12fit.cc:1586
 hmdc12fit.cc:1587
 hmdc12fit.cc:1588
 hmdc12fit.cc:1589
 hmdc12fit.cc:1590
 hmdc12fit.cc:1591
 hmdc12fit.cc:1592
 hmdc12fit.cc:1593
 hmdc12fit.cc:1594
 hmdc12fit.cc:1595
 hmdc12fit.cc:1596
 hmdc12fit.cc:1597
 hmdc12fit.cc:1598
 hmdc12fit.cc:1599
 hmdc12fit.cc:1600
 hmdc12fit.cc:1601
 hmdc12fit.cc:1602
 hmdc12fit.cc:1603
 hmdc12fit.cc:1604
 hmdc12fit.cc:1605
 hmdc12fit.cc:1606
 hmdc12fit.cc:1607
 hmdc12fit.cc:1608
 hmdc12fit.cc:1609
 hmdc12fit.cc:1610
 hmdc12fit.cc:1611
 hmdc12fit.cc:1612
 hmdc12fit.cc:1613
 hmdc12fit.cc:1614
 hmdc12fit.cc:1615
 hmdc12fit.cc:1616
 hmdc12fit.cc:1617
 hmdc12fit.cc:1618
 hmdc12fit.cc:1619
 hmdc12fit.cc:1620
 hmdc12fit.cc:1621
 hmdc12fit.cc:1622
 hmdc12fit.cc:1623
 hmdc12fit.cc:1624
 hmdc12fit.cc:1625
 hmdc12fit.cc:1626
 hmdc12fit.cc:1627
 hmdc12fit.cc:1628
 hmdc12fit.cc:1629
 hmdc12fit.cc:1630
 hmdc12fit.cc:1631
 hmdc12fit.cc:1632
 hmdc12fit.cc:1633
 hmdc12fit.cc:1634
 hmdc12fit.cc:1635
 hmdc12fit.cc:1636
 hmdc12fit.cc:1637
 hmdc12fit.cc:1638
 hmdc12fit.cc:1639
 hmdc12fit.cc:1640
 hmdc12fit.cc:1641
 hmdc12fit.cc:1642
 hmdc12fit.cc:1643
 hmdc12fit.cc:1644
 hmdc12fit.cc:1645
 hmdc12fit.cc:1646
 hmdc12fit.cc:1647
 hmdc12fit.cc:1648
 hmdc12fit.cc:1649
 hmdc12fit.cc:1650
 hmdc12fit.cc:1651
 hmdc12fit.cc:1652
 hmdc12fit.cc:1653
 hmdc12fit.cc:1654
 hmdc12fit.cc:1655
 hmdc12fit.cc:1656
 hmdc12fit.cc:1657
 hmdc12fit.cc:1658
 hmdc12fit.cc:1659
 hmdc12fit.cc:1660
 hmdc12fit.cc:1661
 hmdc12fit.cc:1662
 hmdc12fit.cc:1663
 hmdc12fit.cc:1664
 hmdc12fit.cc:1665
 hmdc12fit.cc:1666
 hmdc12fit.cc:1667
 hmdc12fit.cc:1668