ROOT logo
//*-- Author : V.Pechenov
//*--Modified : 29.10.2003 by V.Pechenov
//*--Modified : 12.05.2002 by V.Pechenov
//*--Modified : 17.01.2002 by V.Pechenov
//*--Modified : 31.05.2001
//*--Modified : 09.03.2001
//*--Modified : 10.08.2000

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////////
//
//  HMdcClusterToHit("","", Int_t flagSeg1, Int_t flagSeg2)
//
//  fills the data objects of HMdcHit and HMdcSeg
//  after track candidate search task (HMdcTrackFinder).
//
// flagSeg1=-1;0;1
//   -1 - don't fill HMdcSeg
//   0 (or 1) - at the typeClustFinder=1 (see hmdctrackfinder.cc)
//     HMdcSeg will filled by hits from MDC1 (or MDC2)
// If in segment 1 is only one MDC (1 or 2) and
// flagSeg1=0 or 1  HMdcSeg will filled by Hit in this MDC.
// flagSeg2= -1;2;3
//    -/- -/-
//
//  HMdcHit and HMdcSeg:
//  Chi2 - size of cluster (in proj. plot bins)
//  user flag - "number of wires in cluster"*100 + "number of merged clusters"
//
//  Using:
//  Insert this task in task list after HMdcTrackFinder.
//
///////////////////////////////////////////////////////////////////////////////

#include "hmdcclustertohit.h"
#include "hmdcdef.h"
#include "hades.h"
#include "hevent.h"
#include "hmdchitsim.h"
#include "hmdcsegsim.h"
#include "hmdctrkcand.h"
#include "hmdcdetector.h"
#include "hspectrometer.h"
#include "hmdcgetcontainers.h"
#include "hiterator.h"
#include "hcategory.h"
#include "hmdcclussim.h"
#include "hmdcclusinfsim.h"
#include "hmdctrackdset.h"
#include "hmdcsizescells.h"
#include <stdlib.h>

HMdcClusterToHit::HMdcClusterToHit() {
  setParContainers();
}

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

HMdcClusterToHit::HMdcClusterToHit(Int_t fSeg1, Int_t fSeg2) {
  HMdcTrackDSet::setMdcClusterToHit(fSeg1,fSeg2);
  setParContainers();
}

HMdcClusterToHit::HMdcClusterToHit(const Text_t *name, const Text_t *title,
    Int_t fSeg1, Int_t fSeg2) : HReconstructor(name,title) {
  HMdcTrackDSet::setMdcClusterToHit(fSeg1,fSeg2);
  setParContainers();
}

HMdcClusterToHit::~HMdcClusterToHit(void) {
  HMdcTrackDSet::clearPClusterToHit();
}

void HMdcClusterToHit::setParContainers(void) {
  prntSt=kFALSE;
  HMdcTrackDSet::setClusterToHit(this);
  tFillSeg[0] = HMdcTrackDSet::getModForSeg1();
  tFillSeg[1] = HMdcTrackDSet::getModForSeg2();
}

Bool_t HMdcClusterToHit::init(void) {
  fGetCont  = HMdcGetContainers::getObject();
  if( !fGetCont ) return kFALSE;
  fMdcDet   = fGetCont->getMdcDetector();
  fClustCat = fGetCont->getCatMdcClus();
  if( !fMdcDet || !fClustCat) return kFALSE;
  isGeant = HMdcGetContainers::isGeant();

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

  if(tFillSeg[0]>=0 || tFillSeg[1]>=2) {
    fSegCat = gHades->getCurrentEvent()->getCategory(catMdcSeg);
    if (!fSegCat) {
      if(isGeant) fSegCat = fMdcDet->buildMatrixCategory("HMdcSegSim",0.5F);
      else fSegCat = fMdcDet->buildCategory(catMdcSeg);
      if (!fSegCat) return kFALSE;
      else gHades->getCurrentEvent()->addCategory(catMdcSeg,fSegCat,"Mdc");
    }
  } else fSegCat=0;
  iter=(HIterator *)fClustCat->MakeIterator("native");
  
  if(tFillSeg[0]>=0) {
    fTrkCandCat = fGetCont->getCatMdcTrkCand(kTRUE);
    if(!fTrkCandCat) return kFALSE;
  } else fTrkCandCat=0;
  
  fSizesCells=HMdcSizesCells::getObject();

  locHit.set(2,0,0);
  locSeg.set(2,0,0);
  loc.set(1,0);
  locTrkCand.set(1,0);
  if(!prntSt) printStatus();
  return kTRUE;
}

Bool_t HMdcClusterToHit::reinit(void) {
  if(!fSizesCells->initContainer()) return kFALSE;
  if(!fClusInfCat) return kFALSE;
  return kTRUE;
}

Int_t HMdcClusterToHit::execute(void) {
  slotNotAv = kFALSE;
  iter->Reset();
  while ((fClst=(HMdcClus*)iter->Next())!=0) {
    clusIndex     = fClst->getOwnIndex();
    Short_t seg   = fClst->getIOSeg();
    locTrkCand[0] = fClst->getSec();
    fTrkCand      = 0;
    if(seg==0) {
      fillContainers();
      if( slotNotAv ) return kSkipEvent;
      Int_t first,last;
      fClst->getIndexRegChilds(first,last);
      for(Int_t ind=first;ind<=last;ind++) {
        fClst=(HMdcClus*)fClustCat->getObject(ind);
        if(fClst==0) {
          Error("execute"," Mismatching in clusters category!");
          continue;
        }
        fillContainers();
        if( slotNotAv ) return kSkipEvent;
      }
    } else if(fClst->getIndexParent()<0) fillContainers();
  }
  return 0;
}

void HMdcClusterToHit::fillContainers(void) {
  Short_t sec   = fClst->getSec();
  Short_t modCl = fClst->getMod();
  Short_t seg   = fClst->getIOSeg();
  Short_t nMods = 0;
  if(fGetCont->isModActive(sec,seg*2))   nMods++;
  if(fGetCont->isModActive(sec,seg*2+1)) nMods++;
  clusIndex = fClst->getOwnIndex();
  locHit[0] = sec;
  Int_t typeClFn=fClst->getTypeClFinder();
  // (modCl&1)^1 = mod 0,2 => 1; mod 1,3 => 0    For modCl<0 nlays=6
  Int_t nlays=(typeClFn==2 && modCl>=0) ? fClst->getNLayersMod((modCl&1)^1):6;
  fSeg = 0;
  hitSegFiller.setClusParam(fClst,HMdcTrackDSet::isCoilOff());
  if(fSegCat && tFillSeg[seg]!=-1 && (typeClFn==0 || nMods==1 || 
      (typeClFn==1 && modCl==tFillSeg[seg]) || (typeClFn==2 && nlays>2))) {
    locSeg[0] = sec;
    locSeg[1] = seg;  
    Int_t indexSeg;
    fSeg = (HMdcSeg*)fSegCat->getNewSlot(locSeg,&indexSeg);
    if(!fSeg) {
      Warning("fillContainers","S.%i No HMdcSeg slot available",sec+1);
      slotNotAv = kTRUE;
      return;
    }
    fSeg = (isGeant) ? (HMdcSeg*)(new(fSeg) HMdcSegSim) : new(fSeg) HMdcSeg;
    fSeg->setSec(sec);
    fSeg->setIOSeg(seg);
    fSeg->setChi2(-1.);
    fSeg->setClusIndex(clusIndex);
    fillSeg();
    if(fTrkCandCat) {
      if(fTrkCand==0) {
        if(seg==0) fillTrkCandISeg(sec,indexSeg);
        else fillTrkCandOSeg(sec,indexSeg);
      } else fillTrkCandOSeg(indexSeg);
    }
    if( slotNotAv ) return;
  }
  for(Int_t imod=0; imod<2; imod++) {
    Int_t mod=imod+seg*2;
    if(modCl>=0 && modCl!=mod) continue;
    if(!fGetCont->isModActive(sec,mod)) continue;

    locHit[1]=mod;
    Int_t indexHit;
    fHit = (HMdcHit*)fHitCat->getNewSlot(locHit,&indexHit);
    if(!fHit) {
      Warning("fillContainers","S.%i No HMdcHit slot available",sec+1);
      slotNotAv = kTRUE;
      return; //continue;
    }
    if(isGeant) fHit=(HMdcHit*) new(fHit) HMdcHitSim;
    else fHit= new(fHit) HMdcHit;
    fHit->setSecMod(sec,mod);
    if(!fillHit(mod)) return;

    Int_t lc = imod*6;
    for(Int_t l=0; l<6; l++,lc++) {
      UShort_t list = fClst->getOneLayerGroup(lc);
      fHit->setLayerGroup(l,list);
      if(fSeg) fSeg->setLayerGroup(lc,list);
    }

    if(fSeg) fSeg->setHitInd(imod,indexHit);
    if(isGeant) ((HMdcHitSim*)fHit)->calcNTracks();
  }
  if(fSeg) {
    Int_t nMrCls=fClst->getNMergClust();
    if(nMrCls>99) nMrCls=99;
    Int_t flag=(fClst->getNBins()&32767) <<16;
    flag += (fClst->getNDrTimes()*100 + nMrCls) & 65535;
    fSeg->setFlag(flag);
    fHit->setChi2(-1.);
    if(isGeant) ((HMdcSegSim*)fSeg)->calcNTracks();
  }
}

void HMdcClusterToHit::fillTrkCandISeg(Short_t sec,Int_t indexSeg) {
  Int_t index;
  fTrkCand = (HMdcTrkCand*)fTrkCandCat->getNewSlot(locTrkCand,&index);
  if(fTrkCand) fTrkCand = new(fTrkCand) HMdcTrkCand(sec,indexSeg,index);
  else {
    Warning("fillTrkCandISeg"," No slot available in catMdcTrkCand");
    slotNotAv = kTRUE;
  }
}

void HMdcClusterToHit::fillTrkCandOSeg(Short_t sec,Int_t indexSeg) {
  Int_t index;
  fTrkCand = (HMdcTrkCand*)fTrkCandCat->getNewSlot(locTrkCand,&index);
  if(fTrkCand) {
    fTrkCand = new(fTrkCand) HMdcTrkCand(sec,indexSeg,index);
    fTrkCand->setSeg2Ind(index);
    fTrkCand->setSeg1Ind(-1);
  } else {
    Warning("fillTrkCandOSeg"," No slot available in catMdcTrkCand");
    slotNotAv = kTRUE;
  }
}

void HMdcClusterToHit::fillTrkCandOSeg(Int_t indexSeg) {
//   if(fTrkCand->getSeg2Ind() <0) {
//     fTrkCand->addSeg2Ind(indexSeg);
//   } else {
    Int_t index;
    HMdcTrkCand* newTr=(HMdcTrkCand*)fTrkCandCat->getNewSlot(locTrkCand,&index);
    if(newTr) fTrkCand=new(newTr) HMdcTrkCand(fTrkCand,indexSeg,index);
    else {
      Warning("fillTrkCandOSeg"," No slot available in catMdcTrkCand");
      slotNotAv = kTRUE;
    }
//   }
}

void HMdcClusterToHit::fillSeg(void) {
  HMdcSizesCellsSec& fSCSec=(*fSizesCells)[fSeg->getSec()];
  const HGeomVector* targ=(&fSCSec) ? &(fSCSec.getTargetMiddlePoint()) : 0;
  hitSegFiller.fillMdcSegByClus(fSeg,targ);
}

Bool_t HMdcClusterToHit::fillHit(Short_t mod) {
  HMdcSizesCellsMod& fSCMod=(*fSizesCells)[fClst->getSec()][mod];
  if(!&fSCMod) return kFALSE;
  HMdcClusInf* fClusInf = fillClusInf(mod&1);
  hitSegFiller.fillMdcHitByClus(&fSCMod,fHit);
  if(fClusInf) {
    fClusInf->setXYHit(fHit->getX(),fHit->getY());
    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);
  }
  return kTRUE;
}

HMdcClusInf* HMdcClusterToHit::fillClusInf(Int_t iMod) {
  Int_t index;
  HMdcClusInf* fClusInf=(HMdcClusInf*)fClusInfCat->getNewSlot(loc,&index);
  if(!fClusInf) {
    Warning("fillFitCat","No slot HMdcClusInf available");
    slotNotAv = kTRUE;
    return 0;
  }
  fClusInf = (isGeant) ? (HMdcClusInf*)(new(fClusInf) HMdcClusInfSim) : 
                                        new(fClusInf) HMdcClusInf;
  fHit->setTrackFinder(1);
  fHit->setClusInfIndex(index);
  fHit->setChi2(-1.);
  fClusInf->setIsNotFitted();
  Int_t nmods=fClst->getMod();
  fClusInf->setNModInCl( (nmods<0) ? -nmods:1 );
  fClusInf->setClusIndex(clusIndex);
  fClusInf->setNModInFit(0);
  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());
  } 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());
    
  }
  if(isGeant) {
    HMdcClusSim* fClSim=(HMdcClusSim*)fClst;
    ((HMdcClusInfSim*)fClusInf)->setTracksList(fClSim->getNTracksMod(iMod),
        fClSim->getListTrM(iMod),fClSim->getNTimesM(iMod));
  }
  return fClusInf;
}

void HMdcClusterToHit::printStatus(void) {
  // prints the parameters to the screen
  const Char_t* hFSeg1a ="-1 = don't fill HMdcSeg for segment 1,";
  const Char_t* hFSeg1b =" 0 = fill HMdcSeg by cluster in MDC1 if typeClFinder=1";
  const Char_t* hFSeg1c ="     and sector has mdc1&2, else by cluster in existing MDC,";
  const Char_t* hFSeg1d =" 1 =  -/- in mdc2";
  const Char_t* hFSeg2a ="-1 = don't fill HMdcSeg for segment 2,";
  const Char_t* hFSeg2b =" 2 = fill HMdcSeg by cluster in MDC3 if typeClFinder=1";
  const Char_t* hFSeg2c ="     and sector has mdc3&4 and MagnetOff,";
  const Char_t* hFSeg2d ="     else by cluster in existing MDC,";
  const Char_t* hFSeg2e =" 3 =  -/- in MDC4";
  printf("--------------------------------------------------------------------------------------------\n");
  printf("HMdcClusterToHitSetup:\n");
  printf("ModForSeg1      = %2i :  %s\n",tFillSeg[0],hFSeg1a);
  printf("                        %s\n",hFSeg1b);
  printf("                        %s\n",hFSeg1c);
  printf("                        %s\n",hFSeg1d);
  printf("ModForSeg2      = %2i :  %s\n",tFillSeg[1],hFSeg2a);
  printf("                        %s\n",hFSeg2b);
  printf("                        %s\n",hFSeg2c);
  printf("                        %s\n",hFSeg2d);
  printf("                        %s\n",hFSeg2e);
  printf ("--------------------------------------------------------------------------------------------\n");
  prntSt=kTRUE;
}

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