using namespace std;
#include "hmdccosmicscandidate.h"
#include "TH1.h"
#include "TH2.h"
#include "TROOT.h"
#include "TMath.h"
#include "hades.h"
#include "hevent.h"
#include "hruntimedb.h"
#include "haddef.h"
#include "hiterator.h"
#include "hmdcdef.h"
#include "hmdctrackddef.h"
#include "hmdcdetector.h"
#include "tofdef.h"
#include "rpcdef.h"
#include "hspectrometer.h"
#include "htofgeompar.h"
#include "hmdccal1sim.h"
#include "htofhit.h"
#include "htofcluster.h"
#include "hrpchit.h"
#include "hrpccluster.h"
#include "hmdcclussim.h"
#include "hmdcsizescells.h"
#include "hcategory.h"
#include "hgeomtransform.h"
#include "hmdcgetcontainers.h"
#include "hgeomvolume.h"
#include <iostream>
#include <fstream>
ClassImp(HMdcCosmicsCandidate)
ClassImp(HCosmicCalibEvSkip)
HMdcCosmicsCandidate::HMdcCosmicsCandidate(const Text_t *name,const Text_t *title) 
    : HReconstructor(name,title) {
  initVariables();
}
HMdcCosmicsCandidate::HMdcCosmicsCandidate(void)
    : HReconstructor("HMdcCosmicsCandidate","HMdcCosmicsCandidate") {
  initVariables();
}
HMdcCosmicsCandidate::~HMdcCosmicsCandidate(void) {
  HMdcSizesCells::deleteCont();
  HMdcGetContainers::deleteCont();
  if(histFile != NULL) delete histFile;
  histFile = NULL;
}
void HMdcCosmicsCandidate::initVariables(void) {
  returnFlag     = kSkipEvent;
  pCatTof        = NULL;
  pCatRpc        = NULL;
  pCatMdcCal1    = NULL;
  useTofCat      = 0;
  useRpcCat      = 0;
  hsBeta         = NULL;
  plStat         = NULL;
  plQualVsWrLo   = NULL;
  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) {
    hsDCell[s][m] = NULL;
    for(Int_t l=0;l<6;l++) hsDCellL[s][m][l] = NULL;
  }
  makeHists      = kFALSE;
  histFile       = NULL;
  histFileName   = "./cosmCandHists.root";
  histFileOption = "NEW";
  setParContStat = kFALSE;
  zTofShift      = 0.;
  zRpcShift      = 0.;
  isGeant        = kFALSE;
  
  
  betaMin        = 0.5;
  betaMax        = 1.5;
  maxNWiresOutTr = 4;
  selQualCut     = 0.85;
  for(Int_t m=0; m<4; m++) dCellWind[m]    = 15.;
  nLayInModCut   = 3;
  nEventsTot     = 0;
  nEventsSel     = 0;
  nEventsSelSc   = 0;
  for(Int_t i=0;i<9;i++) {
    nSelTr[i]       = 0;
    trackScaling[i] = i<4 ? 0. : 1.1;
    nSelTrSc[i]     = 0;
  }
}
void HMdcCosmicsCandidate::setBetaCut(Double_t min,Double_t max) {
  if(max>0. && min>=0. && max>min) {
    betaMin = min;
    betaMax = max;
  } else {
    Error("setBetaCut","Error in beta cut setting: min=%f max=%f",min,max);
    exit(1);
  }
}
void HMdcCosmicsCandidate::setDCellWindow(Float_t wM1,Float_t wM2,Float_t wM3,Float_t wM4) {
  if(wM1>=0.) dCellWind[0] = wM1;
  if(wM2>=0.) dCellWind[1] = wM2;
  if(wM3>=0.) dCellWind[2] = wM3;
  if(wM4>=0.) dCellWind[3] = wM4;
}
  
Bool_t HMdcCosmicsCandidate::init(void) {
  cout << " HMdcCosmicsCandidate " << endl;
  if(!gHades) return kFALSE;
  sizes = HMdcSizesCells::getObject();
  pGetCont = HMdcGetContainers::getObject();
  if     (useTofCat==1) pCatTof = gHades->getCurrentEvent()->getCategory(catTofHit);
  else if(useTofCat==2) pCatTof = gHades->getCurrentEvent()->getCategory(catTofCluster);
  if(useTofCat>0 && pCatTof==NULL) {
    Error("HMdcCosmicsCandidate::init()","NO TOF hits! Stop!");
    return kFALSE;
  }
  if     (useRpcCat==1) pCatRpc = gHades->getCurrentEvent()->getCategory(catRpcHit);
  else if(useRpcCat==2) pCatRpc = gHades->getCurrentEvent()->getCategory(catRpcCluster);
  if(useRpcCat>0 && pCatRpc==NULL) {
    Error("HMdcCosmicsCandidate::init()","NO RPC hits! Stop!");
    return kFALSE;
  }
  
  if(pCatTof==NULL && pCatRpc==NULL) {
    Error("HMdcCosmicsCandidate::init()","NO META hits! Stop!");
    return kFALSE;
  }
      
  pCatMdcCal1 = gHades->getCurrentEvent()->getCategory(catMdcCal1);
  if (pCatMdcCal1 == NULL) {
    Error("HMdcCosmics::init()","NO catMdcCal1!");
    return kFALSE;
  }
  pCatMdcClus = pGetCont->getCatMdcClus(kTRUE);
  if(pCatMdcClus == NULL) {
    Error("HMdcCosmics::init()","NO catMdcClus!");
    return kFALSE;
  }
  
  HMdcDetector*  fMdcDet = pGetCont->getMdcDetector();
  for(Int_t s=0; s<6; s++) for(Int_t m=0; m<4; m++) {
    if(fMdcDet->getModule(s,m) == 0) mdcsetup[s][m] = 0;
    else                             mdcsetup[s][m] = 1;
  }
  printParam();
  if(makeHists && !createHists()) return kFALSE;
  return kTRUE;
}
Bool_t HMdcCosmicsCandidate::reinit(void) { 
  if(!sizes->initContainer()) return kFALSE;
  isGeant = HMdcGetContainers::isGeant(); 
  for(Int_t m=0;m<4;m++) {
    for(Int_t s=0;s<6;s++) if(pGetCont->isModActive(s,m)) {
      HMdcSizesCellsMod &scMod = (*sizes)[s][m];
      HMdcSizesCellsLayer &scLay = scMod[3]; 
      HGeomVolume *layVol = scLay.getGeomVolume();
      HGeomVector* pnt1   = layVol->getPoint(0);
      HGeomVector* pnt2   = layVol->getPoint(1);
      laySize[m].y1       = pnt1->getY();
      laySize[m].x2       = pnt2->getX();
      laySize[m].y2       = pnt2->getY();
      laySize[m].inc      = (pnt1->getX()-pnt2->getX())/(pnt1->getY()-pnt2->getY());
      break;
    }
  }
  return kTRUE;
}
void HMdcCosmicsCandidate::printParam(void) {
  printf("------------------------------------------------------------\n");
  printf("  HMdcCosmicsCandidate:\n  ");
  if     (useTofCat == 1) printf("TofHits");
  else if(useTofCat == 2) printf("TofClusters");
  if(useTofCat>0 && useRpcCat>0) printf(" & ");
  if     ( useRpcCat==1 ) printf("RpcHits");
  else if( useRpcCat==2 ) printf("RpcClusters");
  printf(" are used for cosmic track finder.\n");
  printf("  Beta cut                   : betaMin=%g, betaMax=%g\n",betaMin,betaMax);
  if(zTofShift != 0.f) printf("  Shift of TofHits Z position: %.1f mm\n",zTofShift);
  printf("  Cells cut (MDC I,II,III,IV): %.1f, %.1f, %.1f, %.1f\n",
         dCellWind[0],dCellWind[1],dCellWind[2],dCellWind[3]);
  if(makeHists) printf("  (See histograms in the file)\n");
  printf("  Min.number of layres per module = %i\n",nLayInModCut);
  printf("------------------------------------------------------------\n");
}
Int_t HMdcCosmicsCandidate::execute(void) {
  
  if(nEventsTot==0 && setParContStat) {
    gHades->getRuntimeDb()->setContainersStatic();
    gHades->setEnableCloseInput(kFALSE);
  }
  
  nEventsTot++;
  nMetaHits = 0;
  nSectors  = 0;
  for(Int_t s=0;s<6;s++) {
    nMetaHitSec[s] = 0;
    for(Int_t m=0;m<4;m++) nWiresStat[s][m] = 0;
  }
  
  collectTofHits();
  collectRpcHits();
  if(nMetaHits>120) return returnFlag;
  
  numWiresAllMod = pCatMdcCal1->getEntries();
  if(numWiresAllMod<5) return returnFlag;
  for(Int_t n=0;n<numWiresAllMod;n++) {
    HMdcCal1 *pCal1 = (HMdcCal1*)pCatMdcCal1->getObject(n);
    Int_t sector = pCal1->getSector();
    Int_t module = pCal1->getModule();
    nWiresStat[sector][module]++;
  }
  if(nMetaHits < 2 || nSectors!=2) return returnFlag;
  Int_t s1 = 0;
  for(;s1<6;s1++) if(nMetaHitSec[s1]>0) break;
  Int_t s2 = s1+1;
  for(;s2<6;s2++) if(nMetaHitSec[s2]>0) break;
  bestTrCand.init(-1,-1);
  for(Int_t i1=0;i1<nMetaHits;i1++) if(metaHits[i1].sec == s1) { 
    for(Int_t i2=0;i2<nMetaHits;i2++) if(metaHits[i2].sec == s2) {
      currTrCand.init(i1,i2);
      if( !calcSectors(currTrCand) ) continue;
      if(currTrCand.nSecs < 2) continue;
      if(!testTrack()) continue;
      if(currTrCand.nLayers < bestTrCand.nLayers) continue;
      if(currTrCand.nLayers == bestTrCand.nLayers) {
        if(currTrCand.nModules < bestTrCand.nModules) continue;
        if(currTrCand.nModules == bestTrCand.nModules && currTrCand.dCellMean>bestTrCand.dCellMean) continue;
      }
      bestTrCand.copy(currTrCand);
    }
  }
  if(  bestTrCand.metaInd1< 0 )   return returnFlag;
  if( !bestTrCand.trackStatus() ) return returnFlag;
  
  plQualVsWrLo->Fill(bestTrCand.numWiresOutTrack() + 0.5,bestTrCand.selectQual());
  
  if(bestTrCand.numWiresOutTrack() > maxNWiresOutTr) return returnFlag;
  if(bestTrCand.selectQual() < selQualCut)           return returnFlag;
  if(bestTrCand.numLayersPerMod() < nLayInModCut)    return returnFlag;
  if(bestTrCand.nModules < 4)                        return returnFlag;
  
  if( !fillTrack(bestTrCand) )                       return returnFlag;
  
  Int_t &nModules = bestTrCand.nModules;
  nSelTr[nModules]++;
  nEventsSel++;
  if(trackScaling[nModules] <= 0.)                                       return returnFlag;
  if(trackScaling[nModules] < 1.&& rndm.Rndm() > trackScaling[nModules]) return returnFlag;
  nSelTrSc[nModules]++;
  nEventsSelSc++;
  
  return 0;
 }
void HMdcCosmicsCandidate::collectTofHits(void) {
  if(pCatTof == NULL) return;
  Int_t nHits = pCatTof->getEntries();
  if(nHits>120) return;
  for(Int_t n=0;n<nHits;n++) {
    HTofHit *tofHit = (HTofHit*) pCatTof->getObject(n);
    MetaHit &mHit   = metaHits[nMetaHits];
    Int_t sec = tofHit->getSector();
    if( !pGetCont->isSecActive(sec) ) continue;
    Float_t xlab,ylab,zlab;
    tofHit->getXYZLab(xlab,ylab,zlab);
    if( TMath::IsNaN(xlab) ) continue;
    mHit.hit.setXYZ(xlab,ylab,zlab + zTofShift);
    mHit.sec  = sec;
    mHit.tof  = tofHit->getTof();
    mHit.isTOF = kTRUE;
    nMetaHits++;
    if(nMetaHitSec[sec] == 0) nSectors++;
    nMetaHitSec[sec]++;
  }
}
void HMdcCosmicsCandidate::collectRpcHits(void) {
  if(pCatRpc == NULL) return;
  Int_t nHits = pCatRpc->getEntries();
  if(nHits>120) return;
  for(Int_t n=0;n<nHits;n++) {
    MetaHit &mHit   = metaHits[nMetaHits];
    Float_t xlab,ylab,zlab;
    if(useRpcCat==1) {
      HRpcHit *rpcHit = (HRpcHit*)pCatRpc->getObject(n);
      mHit.sec = rpcHit->getSector();
      mHit.tof = rpcHit->getTof();
      rpcHit->getXYZLab(xlab,ylab,zlab);      
    } else {
      HRpcCluster *rpcHit = (HRpcCluster*)pCatRpc->getObject(n);
      mHit.sec = rpcHit->getSector();
      mHit.tof = rpcHit->getTof();
      rpcHit->getXYZLab(xlab,ylab,zlab);
    }
    if( !pGetCont->isSecActive(mHit.sec) ) continue;
    mHit.hit.setXYZ(xlab,ylab,zlab + zRpcShift);
    mHit.isTOF = kFALSE;
    nMetaHits++;
    if(nMetaHitSec[mHit.sec] == 0) nSectors++;
    nMetaHitSec[mHit.sec]++;
  }
}
Bool_t HMdcCosmicsCandidate::testBeta(const MetaHit &h1,const MetaHit &h2,Bool_t mHists) {
  Double_t dt   = h1.tof  - h2.tof;
  if(dt == 0.) return kFALSE;
  Double_t path = (h1.hit-h2.hit).length();
  Double_t beta = path/TMath::Abs(dt)*1.e+6/TMath::C();
  if(mHists) hsBeta->Fill(beta);
  if(beta < betaMin || beta > betaMax) return kFALSE;
  if(mHists) {
    if(dt < 0.) plStat->Fill(h1.sec+0.5,h2.sec+0.5);
    else        plStat->Fill(h2.sec+0.5,h1.sec+0.5);
  }
  return kTRUE;
} 
Bool_t HMdcCosmicsCandidate::fillTrack(TrackCand &bestCand) {
  MetaHit &mHit1 = metaHits[bestCand.metaInd1];
  MetaHit &mHit2 = metaHits[bestCand.metaInd2];
  if( !testBeta(mHit1,mHit2,makeHists) ) return kFALSE;
  HMdcClus* prevClus = NULL;
 
  HMdcList12GroupCells listCells;
  for(Int_t sec=0;sec<6;sec++) if(bestCand.secStatus(sec)) {
    HMdcSizesCellsSec&  scSec = (*sizes)[sec];
    hit1 = scSec.getLabTrans()->transTo(mHit1.hit);  
    hit2 = scSec.getLabTrans()->transTo(mHit2.hit);  
    for(Int_t seg=0; seg<2;seg++) if(bestCand.segStatus(sec,seg) != 0) {
      Short_t listCrLayers = 0;  
      listCells.clear();
      for(Int_t mod=seg*2; mod<seg*2+2;mod++) if(bestCand.modStatus(sec,mod) != 0) {
	HMdcSizesCellsMod& szMod = scSec[mod];
        Int_t ilay = (mod&1)*6;
	for(Int_t lay=0;lay<6;lay++,ilay++) {
	  HMdcSizesCellsLayer& szLayer = szMod[lay];
          Float_t cell1, cell2;
	  if( !szLayer.calcCrossedCells(hit1.getX(),hit1.getY(),hit1.getZ(),
                                        hit2.getX(),hit2.getY(),hit2.getZ(),
                                        cell1, cell2) ) continue;  
          Float_t cell12  = (cell1+cell2)/2;
          listCrLayers |= 1<<ilay;
          Short_t nCells   = szLayer.getNCells();
          Int_t nFCell     = TMath::Max(Int_t(cell1 - 30.),0);
          Int_t nLCell     = TMath::Min(Int_t(cell2 + 30.),nCells-1);
	  Int_t nFirstCell = TMath::Max(Int_t(cell1 - dCellWind[mod]),nFCell);
 	  Int_t nLastCell  = TMath::Min(Int_t(cell2 + dCellWind[mod]),nLCell);
          Int_t lCells[nLCell-nFCell+1];
          Int_t   nCs   = 0;
          Int_t   cM    = -1;
          Float_t dCell = 1.e+30;
	  for(Int_t cell=nFCell; cell<=nLCell;cell++) {
	    locCal1.set(4,sec,mod,lay,cell);
	    HMdcCal1* cal1 = (HMdcCal1*)pCatMdcCal1->getObject(locCal1);
	    if(cal1 == NULL) continue;
            Float_t dC = Float_t(cell) - cell12;
            
            if(makeHists) {
              hsDCell[sec][mod]->Fill(dC);
              hsDCellL[sec][mod][lay]->Fill(dC);
            }
            if(cell>=nFirstCell && cell<=nLastCell) {
              lCells[nCs] = cell;
              if(TMath::Abs(dC) < dCell) {
                dCell = TMath::Abs(dC);
                cM    = nCs;
              }
              nCs++;
            }
	  }
          if(nCs>0) {
            Int_t layInd = lay+(mod%2)*6;
            listCells.setTime(layInd, lCells[cM], 1);
            
            for(Int_t i=cM-1;i>=0 &&lCells[i+1]-lCells[i]==1;i--) listCells.setTime(layInd,lCells[i],1);
            for(Int_t i=cM+1;i<nCs&&lCells[i]-lCells[i-1]==1;i++) listCells.setTime(layInd,lCells[i],1);
          }
	}
      }
      
      prevClus = fillCluster(sec,seg,listCells,prevClus);
      if(prevClus != NULL) prevClus->setStatus(listCrLayers);  
    }
  }
  return bestCand.trackStatus(); 
}
Bool_t HMdcCosmicsCandidate::calcSectors(TrackCand &trackCand) {
  MetaHit &mHit1 = metaHits[trackCand.metaInd1];
  MetaHit &mHit2 = metaHits[trackCand.metaInd2];
  if(mHit1.sec == mHit2.sec) return kFALSE;
  testSectors(trackCand,mHit1.sec,0);
  testSectors(trackCand,mHit2.sec,1);
  Int_t dSec = TMath::Abs(mHit1.sec-mHit2.sec);
  if(dSec == 3) {
    testSectors(trackCand,mHit1.sec-1,0);
    testSectors(trackCand,mHit2.sec-1,1);
    testSectors(trackCand,mHit1.sec+1,0);
    testSectors(trackCand,mHit2.sec+1,1); 
  } else if(dSec == 2 || dSec==4) {
    Int_t sec = TMath::Abs(mHit1.sec+mHit2.sec)/2;
    if(dSec == 4) sec += 3;
    testSectors(trackCand,sec,0);
  }
  return kTRUE;
}
void HMdcCosmicsCandidate::testSectors(TrackCand &trackCand,Int_t sec,Int_t part) {
  if     (sec < 0) sec = 5;
  else if(sec > 5) sec = 0;
  part &= 1;
  if( !pGetCont->isSecActive(sec) ) return;
  HMdcSizesCellsSec&  scSec = (*sizes)[sec];
  MetaHit &metaHit1 = metaHits[trackCand.metaInd1];
  MetaHit &metaHit2 = metaHits[trackCand.metaInd2];
  hit1 = scSec.getLabTrans()->transTo(metaHit1.hit);  
  hit2 = scSec.getLabTrans()->transTo(metaHit2.hit);  
  for(Int_t mod=0;mod<4;mod++) if(nWiresStat[sec][mod] > 0 && isCrossMod(sec,mod)) {
    trackCand.addMod(sec,mod,nWiresStat[sec][mod]);
  }  
}
Bool_t HMdcCosmicsCandidate::isCrossMod(Int_t sec,Int_t mod) {
  if(mdcsetup[sec][mod]==0) return kFALSE;  
  HMdcSizesCellsMod &scMod = (*sizes)[sec][mod];
  Double_t x1 = hit1.getX();
  Double_t y1 = hit1.getY();
  Double_t z1 = hit1.getZ();
  Double_t x2 = hit2.getX();
  Double_t y2 = hit2.getY();
  Double_t z2 = hit2.getZ();
  HMdcSizesCellsLayer &pScLay = scMod[3];
  pScLay.transTo(x1,y1,z1);
  pScLay.transTo(x2,y2,z2);
  LayerSize &laySz = laySize[mod];
  Double_t yc = -z2/(z1-z2)*(y1-y2)+y2;
  if(yc < laySz.y1 || yc > laySz.y2) return kFALSE;
  Double_t xc = TMath::Abs(x2-z2/(z1-z2)*(x1-x2));
  Double_t xu = (yc-laySz.y2)*laySz.inc+laySz.x2;
  if(xc > xu) return kFALSE;
  return kTRUE;
}
Bool_t HMdcCosmicsCandidate::testTrack(void) {
  MetaHit &mHit1 = metaHits[currTrCand.metaInd1];
  MetaHit &mHit2 = metaHits[currTrCand.metaInd2];
  
  Double_t dCMean = 0.;
  for(Int_t sec=0;sec<6;sec++) if(currTrCand.secStatus(sec)) {
    HMdcSizesCellsSec&  scSec = (*sizes)[sec];
    hit1 = scSec.getLabTrans()->transTo(mHit1.hit);  
    hit2 = scSec.getLabTrans()->transTo(mHit2.hit);  
    for(Int_t mod=0; mod<4;mod++) if(currTrCand.modStatus(sec,mod) != 0) {
      HMdcSizesCellsMod& scMod = scSec[mod];
      Int_t modLaySt = 0;
      for(Int_t lay=0;lay<6;lay++) {
        HMdcSizesCellsLayer& szLayer = scMod[lay];
        Float_t cell1, cell2;
        if( !szLayer.calcCrossedCells(hit1.getX(),hit1.getY(),hit1.getZ(),
             hit2.getX(),hit2.getY(),hit2.getZ(),cell1, cell2) ) continue;  
        Float_t cell12   = (cell1+cell2)/2;
        Short_t nCells   = szLayer.getNCells();
        Int_t nFirstCell = TMath::Max(Int_t(cell1 - dCellWind[mod]),0);
        Int_t nLastCell  = TMath::Min(Int_t(cell2 + dCellWind[mod]),nCells-1);
        Int_t lCells[nLastCell-nFirstCell+1];
        Int_t   nCs   = 0;
        Int_t   cM    = -1;
        Float_t dCell = 1.e+30;
        for(Int_t cell=nFirstCell; cell<=nLastCell;cell++) {
          locCal1.set(4,sec,mod,lay,cell);
          HMdcCal1* cal1 = (HMdcCal1*)pCatMdcCal1->getObject(locCal1);
          if(cal1 == NULL) continue;
          Float_t dC = TMath::Abs(Float_t(cell) - cell12);
          lCells[nCs] = cell;
          if(dC < dCell) {
            dCell = dC;
            cM    = nCs;
          }
          nCs++;
        }
        if(nCs>0) {
          currTrCand.nWires++;
          for(Int_t i=cM-1;i>=0 &&lCells[i+1]-lCells[i]==1;i--) currTrCand.nWires++;
          for(Int_t i=cM+1;i<nCs&&lCells[i]-lCells[i-1]==1;i++) currTrCand.nWires++;
          dCMean += dCell;
          modLaySt++;
        }
      }
      if(modLaySt==0) currTrCand.unsetMod(sec,mod);
      else {
        currTrCand.nLaySec[sec] += modLaySt;
        currTrCand.nLayers      += modLaySt;
        currTrCand.nModSec[sec]++;
        currTrCand.nModules++;
      }
    }
  }
  if(!currTrCand.trackStatus()) return kFALSE;
  currTrCand.dCellMean = dCMean/currTrCand.nLayers;
  return kTRUE;
}
HMdcClus* HMdcCosmicsCandidate::fillCluster(Int_t sec,Int_t seg,HMdcList12GroupCells &listCells,
    HMdcClus* prevClus) {
  locClus.set(2,sec,seg);
  HMdcClus* fClus=(HMdcClus*)pCatMdcClus->getNewSlot(locClus, &index);
  if(fClus == NULL) return fClus;
  if(isGeant) fClus = (HMdcClus*)(new(fClus) HMdcClusSim(listCells));
  else        fClus =             new(fClus) HMdcClus   (listCells);      
  fClus->setOwnIndex(index);
  if(prevClus != NULL)  {
    prevClus->setIndexChilds(index,index);
    fClus->setIndexParent(prevClus->getOwnIndex());
  }
  
  fClus->setSec(sec);
  fClus->setIOSeg(seg);
  fClus->setMod(-1);
  fClus->setTarget(hit1.getX(),20.,hit1.getY(),30.,hit1.getZ(),30.); 
  fClus->setXY    (hit2.getX(),20.,hit2.getY(),30.);
  fClus->setPrPlane(0., 0., hit2.getZ());       
  if(isGeant) ((HMdcClusSim*)fClus)->calcTrList();
  
  fClus->setMinCl(0,0);
  fClus->setRealLevel(0);
  fClus->setOwnIndex(index);
  fClus->setNBins(0);
  return fClus;
}
  
void HMdcCosmicsCandidate::setHistFile(const Char_t* dir,const Char_t* fileNm,const Char_t* opt) {
  
  if(dir != NULL)                       histFileName   = dir;
  else                                  histFileName   = "./";
  if( !histFileName.EndsWith("/") )     histFileName  += '/';
  if(fileNm != NULL)                    histFileName  += fileNm;
  else                                  histFileName  += "cosmCandHists";
  if(histFileName.EndsWith(".hld"))     histFileName.Remove(histFileName.Length()-4);
  if( !histFileName.EndsWith(".root") ) histFileName  += ".root";
  if(opt != NULL)                       histFileOption = opt;
}
Bool_t HMdcCosmicsCandidate::createHists(void) {
  histFile = new TFile(histFileName.Data(),histFileOption.Data());
  if(histFile==NULL || !histFile->IsOpen()) {
    Error("createHists","Can't open file %s (opt=%s)!",histFileName.Data(),histFileOption.Data());
    return kFALSE;
  }
  char title[100];
  char name[100];
  if(hsBeta==0) {
    sprintf(title,"Cut: %.2f < #beta < %.2f;#beta",betaMin,betaMax);
    hsBeta= new TH1F("hsBeta",title,300,0.,1.5);
  }
  if(plStat==0) plStat= new TH2F("plStat",
    "Statistic;Sector of first tof;Sector of second tof",6,0.,6., 6,0.,6.);
  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) if(mdcsetup[s][m]!=0 && hsDCell[s][m]==0) {
    sprintf(name,"hsDCellS%iM%i",s+1,m+1);
    sprintf(title,"S.%i M.%i Cut: #Delta Cell <= %.1f;#Delta Cell",s+1,m+1,dCellWind[m]);
    hsDCell[s][m] = new TH1F(name,title,300,-30.,30.);
    for(Int_t l=0;l<6;l++) {
      sprintf(name,"hsDCellS%iM%iL%i",s+1,m+1,l+1);
      sprintf(title,"S.%i M.%i L.%i Cut: #Delta Cell <= %.1f;#Delta Cell",s+1,m+1,l+1,dCellWind[m]);
      hsDCellL[s][m][l] = new TH1F(name,title,300,-30.,30.);
    }
  }
  if(plQualVsWrLo==0) plQualVsWrLo = new TH2F("plQualVsWrLo","",50,0.,50.,50,0.,1.0001);
  return kTRUE;
}
Bool_t HMdcCosmicsCandidate::finalize(void) {
  printf("\n-------------------------------------------------\n");
  if(nEventsSel == nEventsSelSc) {
    for(Int_t i=0;i<9;i++) if(nSelTr[i] > 0) {
      printf("%i modules: %10i tracks (%7.2f%c)\n",
      i,nSelTr[i],Float_t(nSelTr[i])/Float_t(nEventsSel)*100.,'%');
    }
    printf("  %i events filtered from %i.\n",nEventsSel,nEventsTot);
  } else {
    for(Int_t i=0;i<9;i++) if(nSelTr[i] > 0) {
      Double_t sc = trackScaling[i] < 1. ? trackScaling[i]*100 : 100;
      printf("%i modules: %10i tracks (%7.2f%c) ==> scaling %6.2f%c => %10i tracks (%7.2f%c)\n",
      i,nSelTr[i],Float_t(nSelTr[i])/Float_t(nEventsSel)*100.,'%',sc,'%',
        nSelTrSc[i],Float_t(nSelTrSc[i])/Float_t(nEventsSelSc)*100.,'%');
    }
    printf("  %i events filtered from %i.\n",nEventsSelSc,nEventsTot);
  }
  printf("-------------------------------------------------\n");
  if(makeHists) {
    printf("  Histograms are stored to the file %s\n",histFileName.Data());
    
    histFile->cd();
    if(hsBeta       != NULL) hsBeta->Write();
    if(plStat       != NULL) plStat->Write();
    if(plQualVsWrLo != NULL) plQualVsWrLo->Write();
    for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) if(hsDCell[s][m]!=NULL) {
      hsDCell[s][m]->Write();
      for(Int_t l=0;l<6;l++) hsDCellL[s][m][l]->Write();
    }
    histFile->Close();
  }
  return kTRUE;
}
void HMdcCosmicsCandidate::scaleDownTrack(UInt_t nMdcTr,Double_t sc) {
  if(nMdcTr<8) trackScaling[nMdcTr] = sc;
}
void HMdcCosmicsCandidate::scaleDownTrack(Double_t *sca) {
  for(Int_t nMdcs=0;nMdcs<9;nMdcs++) trackScaling[nMdcs] = sca[nMdcs];
}
HCosmicCalibEvSkip::HCosmicCalibEvSkip(void) 
    : HReconstructor("CosmicCalibEvSkip","CosmicCalibEvSkip") {
}
HCosmicCalibEvSkip::HCosmicCalibEvSkip(const Text_t *name,const Text_t *title) 
    : HReconstructor(name,title) {
}
Int_t HCosmicCalibEvSkip::execute(void) {
  return kSkipEvent;
}
 hmdccosmicscandidate.cc:1  hmdccosmicscandidate.cc:2  hmdccosmicscandidate.cc:3  hmdccosmicscandidate.cc:4  hmdccosmicscandidate.cc:5  hmdccosmicscandidate.cc:6  hmdccosmicscandidate.cc:7  hmdccosmicscandidate.cc:8  hmdccosmicscandidate.cc:9  hmdccosmicscandidate.cc:10  hmdccosmicscandidate.cc:11  hmdccosmicscandidate.cc:12  hmdccosmicscandidate.cc:13  hmdccosmicscandidate.cc:14  hmdccosmicscandidate.cc:15  hmdccosmicscandidate.cc:16  hmdccosmicscandidate.cc:17  hmdccosmicscandidate.cc:18  hmdccosmicscandidate.cc:19  hmdccosmicscandidate.cc:20  hmdccosmicscandidate.cc:21  hmdccosmicscandidate.cc:22  hmdccosmicscandidate.cc:23  hmdccosmicscandidate.cc:24  hmdccosmicscandidate.cc:25  hmdccosmicscandidate.cc:26  hmdccosmicscandidate.cc:27  hmdccosmicscandidate.cc:28  hmdccosmicscandidate.cc:29  hmdccosmicscandidate.cc:30  hmdccosmicscandidate.cc:31  hmdccosmicscandidate.cc:32  hmdccosmicscandidate.cc:33  hmdccosmicscandidate.cc:34  hmdccosmicscandidate.cc:35  hmdccosmicscandidate.cc:36  hmdccosmicscandidate.cc:37  hmdccosmicscandidate.cc:38  hmdccosmicscandidate.cc:39  hmdccosmicscandidate.cc:40  hmdccosmicscandidate.cc:41  hmdccosmicscandidate.cc:42  hmdccosmicscandidate.cc:43  hmdccosmicscandidate.cc:44  hmdccosmicscandidate.cc:45  hmdccosmicscandidate.cc:46  hmdccosmicscandidate.cc:47  hmdccosmicscandidate.cc:48  hmdccosmicscandidate.cc:49  hmdccosmicscandidate.cc:50  hmdccosmicscandidate.cc:51  hmdccosmicscandidate.cc:52  hmdccosmicscandidate.cc:53  hmdccosmicscandidate.cc:54  hmdccosmicscandidate.cc:55  hmdccosmicscandidate.cc:56  hmdccosmicscandidate.cc:57  hmdccosmicscandidate.cc:58  hmdccosmicscandidate.cc:59  hmdccosmicscandidate.cc:60  hmdccosmicscandidate.cc:61  hmdccosmicscandidate.cc:62  hmdccosmicscandidate.cc:63  hmdccosmicscandidate.cc:64  hmdccosmicscandidate.cc:65  hmdccosmicscandidate.cc:66  hmdccosmicscandidate.cc:67  hmdccosmicscandidate.cc:68  hmdccosmicscandidate.cc:69  hmdccosmicscandidate.cc:70  hmdccosmicscandidate.cc:71  hmdccosmicscandidate.cc:72  hmdccosmicscandidate.cc:73  hmdccosmicscandidate.cc:74  hmdccosmicscandidate.cc:75  hmdccosmicscandidate.cc:76  hmdccosmicscandidate.cc:77  hmdccosmicscandidate.cc:78  hmdccosmicscandidate.cc:79  hmdccosmicscandidate.cc:80  hmdccosmicscandidate.cc:81  hmdccosmicscandidate.cc:82  hmdccosmicscandidate.cc:83  hmdccosmicscandidate.cc:84  hmdccosmicscandidate.cc:85  hmdccosmicscandidate.cc:86  hmdccosmicscandidate.cc:87  hmdccosmicscandidate.cc:88  hmdccosmicscandidate.cc:89  hmdccosmicscandidate.cc:90  hmdccosmicscandidate.cc:91  hmdccosmicscandidate.cc:92  hmdccosmicscandidate.cc:93  hmdccosmicscandidate.cc:94  hmdccosmicscandidate.cc:95  hmdccosmicscandidate.cc:96  hmdccosmicscandidate.cc:97  hmdccosmicscandidate.cc:98  hmdccosmicscandidate.cc:99  hmdccosmicscandidate.cc:100  hmdccosmicscandidate.cc:101  hmdccosmicscandidate.cc:102  hmdccosmicscandidate.cc:103  hmdccosmicscandidate.cc:104  hmdccosmicscandidate.cc:105  hmdccosmicscandidate.cc:106  hmdccosmicscandidate.cc:107  hmdccosmicscandidate.cc:108  hmdccosmicscandidate.cc:109  hmdccosmicscandidate.cc:110  hmdccosmicscandidate.cc:111  hmdccosmicscandidate.cc:112  hmdccosmicscandidate.cc:113  hmdccosmicscandidate.cc:114  hmdccosmicscandidate.cc:115  hmdccosmicscandidate.cc:116  hmdccosmicscandidate.cc:117  hmdccosmicscandidate.cc:118  hmdccosmicscandidate.cc:119  hmdccosmicscandidate.cc:120  hmdccosmicscandidate.cc:121  hmdccosmicscandidate.cc:122  hmdccosmicscandidate.cc:123  hmdccosmicscandidate.cc:124  hmdccosmicscandidate.cc:125  hmdccosmicscandidate.cc:126  hmdccosmicscandidate.cc:127  hmdccosmicscandidate.cc:128  hmdccosmicscandidate.cc:129  hmdccosmicscandidate.cc:130  hmdccosmicscandidate.cc:131  hmdccosmicscandidate.cc:132  hmdccosmicscandidate.cc:133  hmdccosmicscandidate.cc:134  hmdccosmicscandidate.cc:135  hmdccosmicscandidate.cc:136  hmdccosmicscandidate.cc:137  hmdccosmicscandidate.cc:138  hmdccosmicscandidate.cc:139  hmdccosmicscandidate.cc:140  hmdccosmicscandidate.cc:141  hmdccosmicscandidate.cc:142  hmdccosmicscandidate.cc:143  hmdccosmicscandidate.cc:144  hmdccosmicscandidate.cc:145  hmdccosmicscandidate.cc:146  hmdccosmicscandidate.cc:147  hmdccosmicscandidate.cc:148  hmdccosmicscandidate.cc:149  hmdccosmicscandidate.cc:150  hmdccosmicscandidate.cc:151  hmdccosmicscandidate.cc:152  hmdccosmicscandidate.cc:153  hmdccosmicscandidate.cc:154  hmdccosmicscandidate.cc:155  hmdccosmicscandidate.cc:156  hmdccosmicscandidate.cc:157  hmdccosmicscandidate.cc:158  hmdccosmicscandidate.cc:159  hmdccosmicscandidate.cc:160  hmdccosmicscandidate.cc:161  hmdccosmicscandidate.cc:162  hmdccosmicscandidate.cc:163  hmdccosmicscandidate.cc:164  hmdccosmicscandidate.cc:165  hmdccosmicscandidate.cc:166  hmdccosmicscandidate.cc:167  hmdccosmicscandidate.cc:168  hmdccosmicscandidate.cc:169  hmdccosmicscandidate.cc:170  hmdccosmicscandidate.cc:171  hmdccosmicscandidate.cc:172  hmdccosmicscandidate.cc:173  hmdccosmicscandidate.cc:174  hmdccosmicscandidate.cc:175  hmdccosmicscandidate.cc:176  hmdccosmicscandidate.cc:177  hmdccosmicscandidate.cc:178  hmdccosmicscandidate.cc:179  hmdccosmicscandidate.cc:180  hmdccosmicscandidate.cc:181  hmdccosmicscandidate.cc:182  hmdccosmicscandidate.cc:183  hmdccosmicscandidate.cc:184  hmdccosmicscandidate.cc:185  hmdccosmicscandidate.cc:186  hmdccosmicscandidate.cc:187  hmdccosmicscandidate.cc:188  hmdccosmicscandidate.cc:189  hmdccosmicscandidate.cc:190  hmdccosmicscandidate.cc:191  hmdccosmicscandidate.cc:192  hmdccosmicscandidate.cc:193  hmdccosmicscandidate.cc:194  hmdccosmicscandidate.cc:195  hmdccosmicscandidate.cc:196  hmdccosmicscandidate.cc:197  hmdccosmicscandidate.cc:198  hmdccosmicscandidate.cc:199  hmdccosmicscandidate.cc:200  hmdccosmicscandidate.cc:201  hmdccosmicscandidate.cc:202  hmdccosmicscandidate.cc:203  hmdccosmicscandidate.cc:204  hmdccosmicscandidate.cc:205  hmdccosmicscandidate.cc:206  hmdccosmicscandidate.cc:207  hmdccosmicscandidate.cc:208  hmdccosmicscandidate.cc:209  hmdccosmicscandidate.cc:210  hmdccosmicscandidate.cc:211  hmdccosmicscandidate.cc:212  hmdccosmicscandidate.cc:213  hmdccosmicscandidate.cc:214  hmdccosmicscandidate.cc:215  hmdccosmicscandidate.cc:216  hmdccosmicscandidate.cc:217  hmdccosmicscandidate.cc:218  hmdccosmicscandidate.cc:219  hmdccosmicscandidate.cc:220  hmdccosmicscandidate.cc:221  hmdccosmicscandidate.cc:222  hmdccosmicscandidate.cc:223  hmdccosmicscandidate.cc:224  hmdccosmicscandidate.cc:225  hmdccosmicscandidate.cc:226  hmdccosmicscandidate.cc:227  hmdccosmicscandidate.cc:228  hmdccosmicscandidate.cc:229  hmdccosmicscandidate.cc:230  hmdccosmicscandidate.cc:231  hmdccosmicscandidate.cc:232  hmdccosmicscandidate.cc:233  hmdccosmicscandidate.cc:234  hmdccosmicscandidate.cc:235  hmdccosmicscandidate.cc:236  hmdccosmicscandidate.cc:237  hmdccosmicscandidate.cc:238  hmdccosmicscandidate.cc:239  hmdccosmicscandidate.cc:240  hmdccosmicscandidate.cc:241  hmdccosmicscandidate.cc:242  hmdccosmicscandidate.cc:243  hmdccosmicscandidate.cc:244  hmdccosmicscandidate.cc:245  hmdccosmicscandidate.cc:246  hmdccosmicscandidate.cc:247  hmdccosmicscandidate.cc:248  hmdccosmicscandidate.cc:249  hmdccosmicscandidate.cc:250  hmdccosmicscandidate.cc:251  hmdccosmicscandidate.cc:252  hmdccosmicscandidate.cc:253  hmdccosmicscandidate.cc:254  hmdccosmicscandidate.cc:255  hmdccosmicscandidate.cc:256  hmdccosmicscandidate.cc:257  hmdccosmicscandidate.cc:258  hmdccosmicscandidate.cc:259  hmdccosmicscandidate.cc:260  hmdccosmicscandidate.cc:261  hmdccosmicscandidate.cc:262  hmdccosmicscandidate.cc:263  hmdccosmicscandidate.cc:264  hmdccosmicscandidate.cc:265  hmdccosmicscandidate.cc:266  hmdccosmicscandidate.cc:267  hmdccosmicscandidate.cc:268  hmdccosmicscandidate.cc:269  hmdccosmicscandidate.cc:270  hmdccosmicscandidate.cc:271  hmdccosmicscandidate.cc:272  hmdccosmicscandidate.cc:273  hmdccosmicscandidate.cc:274  hmdccosmicscandidate.cc:275  hmdccosmicscandidate.cc:276  hmdccosmicscandidate.cc:277  hmdccosmicscandidate.cc:278  hmdccosmicscandidate.cc:279  hmdccosmicscandidate.cc:280  hmdccosmicscandidate.cc:281  hmdccosmicscandidate.cc:282  hmdccosmicscandidate.cc:283  hmdccosmicscandidate.cc:284  hmdccosmicscandidate.cc:285  hmdccosmicscandidate.cc:286  hmdccosmicscandidate.cc:287  hmdccosmicscandidate.cc:288  hmdccosmicscandidate.cc:289  hmdccosmicscandidate.cc:290  hmdccosmicscandidate.cc:291  hmdccosmicscandidate.cc:292  hmdccosmicscandidate.cc:293  hmdccosmicscandidate.cc:294  hmdccosmicscandidate.cc:295  hmdccosmicscandidate.cc:296  hmdccosmicscandidate.cc:297  hmdccosmicscandidate.cc:298  hmdccosmicscandidate.cc:299  hmdccosmicscandidate.cc:300  hmdccosmicscandidate.cc:301  hmdccosmicscandidate.cc:302  hmdccosmicscandidate.cc:303  hmdccosmicscandidate.cc:304  hmdccosmicscandidate.cc:305  hmdccosmicscandidate.cc:306  hmdccosmicscandidate.cc:307  hmdccosmicscandidate.cc:308  hmdccosmicscandidate.cc:309  hmdccosmicscandidate.cc:310  hmdccosmicscandidate.cc:311  hmdccosmicscandidate.cc:312  hmdccosmicscandidate.cc:313  hmdccosmicscandidate.cc:314  hmdccosmicscandidate.cc:315  hmdccosmicscandidate.cc:316  hmdccosmicscandidate.cc:317  hmdccosmicscandidate.cc:318  hmdccosmicscandidate.cc:319  hmdccosmicscandidate.cc:320  hmdccosmicscandidate.cc:321  hmdccosmicscandidate.cc:322  hmdccosmicscandidate.cc:323  hmdccosmicscandidate.cc:324  hmdccosmicscandidate.cc:325  hmdccosmicscandidate.cc:326  hmdccosmicscandidate.cc:327  hmdccosmicscandidate.cc:328  hmdccosmicscandidate.cc:329  hmdccosmicscandidate.cc:330  hmdccosmicscandidate.cc:331  hmdccosmicscandidate.cc:332  hmdccosmicscandidate.cc:333  hmdccosmicscandidate.cc:334  hmdccosmicscandidate.cc:335  hmdccosmicscandidate.cc:336  hmdccosmicscandidate.cc:337  hmdccosmicscandidate.cc:338  hmdccosmicscandidate.cc:339  hmdccosmicscandidate.cc:340  hmdccosmicscandidate.cc:341  hmdccosmicscandidate.cc:342  hmdccosmicscandidate.cc:343  hmdccosmicscandidate.cc:344  hmdccosmicscandidate.cc:345  hmdccosmicscandidate.cc:346  hmdccosmicscandidate.cc:347  hmdccosmicscandidate.cc:348  hmdccosmicscandidate.cc:349  hmdccosmicscandidate.cc:350  hmdccosmicscandidate.cc:351  hmdccosmicscandidate.cc:352  hmdccosmicscandidate.cc:353  hmdccosmicscandidate.cc:354  hmdccosmicscandidate.cc:355  hmdccosmicscandidate.cc:356  hmdccosmicscandidate.cc:357  hmdccosmicscandidate.cc:358  hmdccosmicscandidate.cc:359  hmdccosmicscandidate.cc:360  hmdccosmicscandidate.cc:361  hmdccosmicscandidate.cc:362  hmdccosmicscandidate.cc:363  hmdccosmicscandidate.cc:364  hmdccosmicscandidate.cc:365  hmdccosmicscandidate.cc:366  hmdccosmicscandidate.cc:367  hmdccosmicscandidate.cc:368  hmdccosmicscandidate.cc:369  hmdccosmicscandidate.cc:370  hmdccosmicscandidate.cc:371  hmdccosmicscandidate.cc:372  hmdccosmicscandidate.cc:373  hmdccosmicscandidate.cc:374  hmdccosmicscandidate.cc:375  hmdccosmicscandidate.cc:376  hmdccosmicscandidate.cc:377  hmdccosmicscandidate.cc:378  hmdccosmicscandidate.cc:379  hmdccosmicscandidate.cc:380  hmdccosmicscandidate.cc:381  hmdccosmicscandidate.cc:382  hmdccosmicscandidate.cc:383  hmdccosmicscandidate.cc:384  hmdccosmicscandidate.cc:385  hmdccosmicscandidate.cc:386  hmdccosmicscandidate.cc:387  hmdccosmicscandidate.cc:388  hmdccosmicscandidate.cc:389  hmdccosmicscandidate.cc:390  hmdccosmicscandidate.cc:391  hmdccosmicscandidate.cc:392  hmdccosmicscandidate.cc:393  hmdccosmicscandidate.cc:394  hmdccosmicscandidate.cc:395  hmdccosmicscandidate.cc:396  hmdccosmicscandidate.cc:397  hmdccosmicscandidate.cc:398  hmdccosmicscandidate.cc:399  hmdccosmicscandidate.cc:400  hmdccosmicscandidate.cc:401  hmdccosmicscandidate.cc:402  hmdccosmicscandidate.cc:403  hmdccosmicscandidate.cc:404  hmdccosmicscandidate.cc:405  hmdccosmicscandidate.cc:406  hmdccosmicscandidate.cc:407  hmdccosmicscandidate.cc:408  hmdccosmicscandidate.cc:409  hmdccosmicscandidate.cc:410  hmdccosmicscandidate.cc:411  hmdccosmicscandidate.cc:412  hmdccosmicscandidate.cc:413  hmdccosmicscandidate.cc:414  hmdccosmicscandidate.cc:415  hmdccosmicscandidate.cc:416  hmdccosmicscandidate.cc:417  hmdccosmicscandidate.cc:418  hmdccosmicscandidate.cc:419  hmdccosmicscandidate.cc:420  hmdccosmicscandidate.cc:421  hmdccosmicscandidate.cc:422  hmdccosmicscandidate.cc:423  hmdccosmicscandidate.cc:424  hmdccosmicscandidate.cc:425  hmdccosmicscandidate.cc:426  hmdccosmicscandidate.cc:427  hmdccosmicscandidate.cc:428  hmdccosmicscandidate.cc:429  hmdccosmicscandidate.cc:430  hmdccosmicscandidate.cc:431  hmdccosmicscandidate.cc:432  hmdccosmicscandidate.cc:433  hmdccosmicscandidate.cc:434  hmdccosmicscandidate.cc:435  hmdccosmicscandidate.cc:436  hmdccosmicscandidate.cc:437  hmdccosmicscandidate.cc:438  hmdccosmicscandidate.cc:439  hmdccosmicscandidate.cc:440  hmdccosmicscandidate.cc:441  hmdccosmicscandidate.cc:442  hmdccosmicscandidate.cc:443  hmdccosmicscandidate.cc:444  hmdccosmicscandidate.cc:445  hmdccosmicscandidate.cc:446  hmdccosmicscandidate.cc:447  hmdccosmicscandidate.cc:448  hmdccosmicscandidate.cc:449  hmdccosmicscandidate.cc:450  hmdccosmicscandidate.cc:451  hmdccosmicscandidate.cc:452  hmdccosmicscandidate.cc:453  hmdccosmicscandidate.cc:454  hmdccosmicscandidate.cc:455  hmdccosmicscandidate.cc:456  hmdccosmicscandidate.cc:457  hmdccosmicscandidate.cc:458  hmdccosmicscandidate.cc:459  hmdccosmicscandidate.cc:460  hmdccosmicscandidate.cc:461  hmdccosmicscandidate.cc:462  hmdccosmicscandidate.cc:463  hmdccosmicscandidate.cc:464  hmdccosmicscandidate.cc:465  hmdccosmicscandidate.cc:466  hmdccosmicscandidate.cc:467  hmdccosmicscandidate.cc:468  hmdccosmicscandidate.cc:469  hmdccosmicscandidate.cc:470  hmdccosmicscandidate.cc:471  hmdccosmicscandidate.cc:472  hmdccosmicscandidate.cc:473  hmdccosmicscandidate.cc:474  hmdccosmicscandidate.cc:475  hmdccosmicscandidate.cc:476  hmdccosmicscandidate.cc:477  hmdccosmicscandidate.cc:478  hmdccosmicscandidate.cc:479  hmdccosmicscandidate.cc:480  hmdccosmicscandidate.cc:481  hmdccosmicscandidate.cc:482  hmdccosmicscandidate.cc:483  hmdccosmicscandidate.cc:484  hmdccosmicscandidate.cc:485  hmdccosmicscandidate.cc:486  hmdccosmicscandidate.cc:487  hmdccosmicscandidate.cc:488  hmdccosmicscandidate.cc:489  hmdccosmicscandidate.cc:490  hmdccosmicscandidate.cc:491  hmdccosmicscandidate.cc:492  hmdccosmicscandidate.cc:493  hmdccosmicscandidate.cc:494  hmdccosmicscandidate.cc:495  hmdccosmicscandidate.cc:496  hmdccosmicscandidate.cc:497  hmdccosmicscandidate.cc:498  hmdccosmicscandidate.cc:499  hmdccosmicscandidate.cc:500  hmdccosmicscandidate.cc:501  hmdccosmicscandidate.cc:502  hmdccosmicscandidate.cc:503  hmdccosmicscandidate.cc:504  hmdccosmicscandidate.cc:505  hmdccosmicscandidate.cc:506  hmdccosmicscandidate.cc:507  hmdccosmicscandidate.cc:508  hmdccosmicscandidate.cc:509  hmdccosmicscandidate.cc:510  hmdccosmicscandidate.cc:511  hmdccosmicscandidate.cc:512  hmdccosmicscandidate.cc:513  hmdccosmicscandidate.cc:514  hmdccosmicscandidate.cc:515  hmdccosmicscandidate.cc:516  hmdccosmicscandidate.cc:517  hmdccosmicscandidate.cc:518  hmdccosmicscandidate.cc:519  hmdccosmicscandidate.cc:520  hmdccosmicscandidate.cc:521  hmdccosmicscandidate.cc:522  hmdccosmicscandidate.cc:523  hmdccosmicscandidate.cc:524  hmdccosmicscandidate.cc:525  hmdccosmicscandidate.cc:526  hmdccosmicscandidate.cc:527  hmdccosmicscandidate.cc:528  hmdccosmicscandidate.cc:529  hmdccosmicscandidate.cc:530  hmdccosmicscandidate.cc:531  hmdccosmicscandidate.cc:532  hmdccosmicscandidate.cc:533  hmdccosmicscandidate.cc:534  hmdccosmicscandidate.cc:535  hmdccosmicscandidate.cc:536  hmdccosmicscandidate.cc:537  hmdccosmicscandidate.cc:538  hmdccosmicscandidate.cc:539  hmdccosmicscandidate.cc:540  hmdccosmicscandidate.cc:541  hmdccosmicscandidate.cc:542  hmdccosmicscandidate.cc:543  hmdccosmicscandidate.cc:544  hmdccosmicscandidate.cc:545  hmdccosmicscandidate.cc:546  hmdccosmicscandidate.cc:547  hmdccosmicscandidate.cc:548  hmdccosmicscandidate.cc:549  hmdccosmicscandidate.cc:550  hmdccosmicscandidate.cc:551  hmdccosmicscandidate.cc:552  hmdccosmicscandidate.cc:553  hmdccosmicscandidate.cc:554  hmdccosmicscandidate.cc:555  hmdccosmicscandidate.cc:556  hmdccosmicscandidate.cc:557  hmdccosmicscandidate.cc:558  hmdccosmicscandidate.cc:559  hmdccosmicscandidate.cc:560  hmdccosmicscandidate.cc:561  hmdccosmicscandidate.cc:562  hmdccosmicscandidate.cc:563  hmdccosmicscandidate.cc:564  hmdccosmicscandidate.cc:565  hmdccosmicscandidate.cc:566  hmdccosmicscandidate.cc:567  hmdccosmicscandidate.cc:568  hmdccosmicscandidate.cc:569  hmdccosmicscandidate.cc:570  hmdccosmicscandidate.cc:571  hmdccosmicscandidate.cc:572  hmdccosmicscandidate.cc:573  hmdccosmicscandidate.cc:574  hmdccosmicscandidate.cc:575  hmdccosmicscandidate.cc:576  hmdccosmicscandidate.cc:577  hmdccosmicscandidate.cc:578  hmdccosmicscandidate.cc:579  hmdccosmicscandidate.cc:580  hmdccosmicscandidate.cc:581  hmdccosmicscandidate.cc:582  hmdccosmicscandidate.cc:583  hmdccosmicscandidate.cc:584  hmdccosmicscandidate.cc:585  hmdccosmicscandidate.cc:586  hmdccosmicscandidate.cc:587  hmdccosmicscandidate.cc:588  hmdccosmicscandidate.cc:589  hmdccosmicscandidate.cc:590  hmdccosmicscandidate.cc:591  hmdccosmicscandidate.cc:592  hmdccosmicscandidate.cc:593  hmdccosmicscandidate.cc:594  hmdccosmicscandidate.cc:595  hmdccosmicscandidate.cc:596  hmdccosmicscandidate.cc:597  hmdccosmicscandidate.cc:598  hmdccosmicscandidate.cc:599  hmdccosmicscandidate.cc:600  hmdccosmicscandidate.cc:601  hmdccosmicscandidate.cc:602  hmdccosmicscandidate.cc:603  hmdccosmicscandidate.cc:604  hmdccosmicscandidate.cc:605  hmdccosmicscandidate.cc:606  hmdccosmicscandidate.cc:607  hmdccosmicscandidate.cc:608  hmdccosmicscandidate.cc:609  hmdccosmicscandidate.cc:610  hmdccosmicscandidate.cc:611  hmdccosmicscandidate.cc:612  hmdccosmicscandidate.cc:613  hmdccosmicscandidate.cc:614  hmdccosmicscandidate.cc:615  hmdccosmicscandidate.cc:616  hmdccosmicscandidate.cc:617  hmdccosmicscandidate.cc:618  hmdccosmicscandidate.cc:619  hmdccosmicscandidate.cc:620  hmdccosmicscandidate.cc:621  hmdccosmicscandidate.cc:622  hmdccosmicscandidate.cc:623  hmdccosmicscandidate.cc:624  hmdccosmicscandidate.cc:625  hmdccosmicscandidate.cc:626  hmdccosmicscandidate.cc:627  hmdccosmicscandidate.cc:628  hmdccosmicscandidate.cc:629  hmdccosmicscandidate.cc:630  hmdccosmicscandidate.cc:631  hmdccosmicscandidate.cc:632  hmdccosmicscandidate.cc:633  hmdccosmicscandidate.cc:634  hmdccosmicscandidate.cc:635  hmdccosmicscandidate.cc:636  hmdccosmicscandidate.cc:637  hmdccosmicscandidate.cc:638  hmdccosmicscandidate.cc:639  hmdccosmicscandidate.cc:640  hmdccosmicscandidate.cc:641  hmdccosmicscandidate.cc:642  hmdccosmicscandidate.cc:643  hmdccosmicscandidate.cc:644  hmdccosmicscandidate.cc:645  hmdccosmicscandidate.cc:646  hmdccosmicscandidate.cc:647  hmdccosmicscandidate.cc:648  hmdccosmicscandidate.cc:649  hmdccosmicscandidate.cc:650  hmdccosmicscandidate.cc:651  hmdccosmicscandidate.cc:652  hmdccosmicscandidate.cc:653  hmdccosmicscandidate.cc:654  hmdccosmicscandidate.cc:655  hmdccosmicscandidate.cc:656  hmdccosmicscandidate.cc:657  hmdccosmicscandidate.cc:658  hmdccosmicscandidate.cc:659  hmdccosmicscandidate.cc:660  hmdccosmicscandidate.cc:661  hmdccosmicscandidate.cc:662  hmdccosmicscandidate.cc:663  hmdccosmicscandidate.cc:664  hmdccosmicscandidate.cc:665  hmdccosmicscandidate.cc:666  hmdccosmicscandidate.cc:667  hmdccosmicscandidate.cc:668  hmdccosmicscandidate.cc:669  hmdccosmicscandidate.cc:670  hmdccosmicscandidate.cc:671  hmdccosmicscandidate.cc:672  hmdccosmicscandidate.cc:673  hmdccosmicscandidate.cc:674  hmdccosmicscandidate.cc:675  hmdccosmicscandidate.cc:676  hmdccosmicscandidate.cc:677  hmdccosmicscandidate.cc:678  hmdccosmicscandidate.cc:679  hmdccosmicscandidate.cc:680  hmdccosmicscandidate.cc:681  hmdccosmicscandidate.cc:682  hmdccosmicscandidate.cc:683  hmdccosmicscandidate.cc:684  hmdccosmicscandidate.cc:685  hmdccosmicscandidate.cc:686  hmdccosmicscandidate.cc:687  hmdccosmicscandidate.cc:688  hmdccosmicscandidate.cc:689  hmdccosmicscandidate.cc:690  hmdccosmicscandidate.cc:691