ROOT logo
using namespace std;
#include "hmdcefficiency.h"
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include "TMath.h"
#include "TLine.h"
#include "TText.h"
#include "TStyle.h"
#include "TSystem.h"
#include "TMarker.h"
#include "TPaveLabel.h"
#include "TColor.h"
#include "TH2.h"
#include "TCanvas.h"
#include "TSlider.h"
#include "TSystem.h"
#include "hmdcgeomstruct.h"
#include "hmdcdef.h"
#include "hdebug.h"
#include "hades.h"
#include "hevent.h"
#include "heventheader.h"
#include "hiterator.h"
#include "hmdcgetcontainers.h"
#include "hmdccal1sim.h"
#include "hmdclookupgeom.h"
#include "hmdctimecut.h"
#include "hcategory.h"
#include "hmdclookuptb.h"
#include "hmdcrawstruct.h"
#include "hmdcsizescells.h"
#include "hmdcclussim.h"
#include "htofhit.h"
#include "htofcluster.h"
#include "hshowerhittof.h"
#include "showerdef.h"
#include "tofdef.h"

//*-- Author : V.Pechenov
//*-- Modified : 15.06.2002 by V. Pechenov
//*-- Modified : 10.05.2001 by V. Pechenov
//*-- Modified : 10.05.2000 by V. Pechenov

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////
//  HMdcEfficiency
//
// Estimation of MDC efficiency.
// Use macros mdcEfficiency.C
//
///////////////////////////////////////////////////////////////


ClassImp(HMdcEff)
ClassImp(HMdcEffMod)
ClassImp(HMdcEfficiency)
ClassImp(HMdcEfficiencySec)
ClassImp(HMdcEfficiencyMod)
ClassImp(HMdcEfficiencyLayer)

TFile* HMdcEfficiency::fRootOut=0;

    // !!! mishen', dlya magn.polya budet ...
//

void HMdcEff::calcEff(Double_t iN0,  Double_t eN0,
                      Double_t iN1,  Double_t eN1,
                      Double_t iN2m, Double_t eN2m,
		      Double_t iN2b, Double_t eN2b) {
  n0       = iN0;
  n1       = iN1;
  n2m      = iN2m;
  n2b      = iN2b;
  errN0    = eN0;
  errN1    = eN1;
  errN2m   = eN2m;
  errN2b   = eN2b;
  totNumTr = n0+n1+n2m+n2b;

  calculation();
}

Double_t HMdcEff::efficiency(Double_t n0T, Double_t n1T,
                             Double_t n2mT, Double_t n2bT) {
  Double_t eC = n2mT+0.5*n2bT;
  Double_t eB = n1T+2.*eC;
  Double_t eA = n0T+n1T+eC;
  if( eA == 0. ) return 0.;
  Double_t sq = eB*eB-4*eA*eC;
  if( sq < 0. ) sq = 0.;
  return (eB+sqrt(sq))/(2.*eA);
}

Double_t HMdcEff::fractSingle(Double_t effT, Double_t n0T, Double_t n1T,
                             Double_t n2mT, Double_t n2bT) {
  Double_t b = n1T+2.*n2mT+n2bT;
  if( b == 0.0 ) return 0.;
  Double_t tmp = effT*b-n2mT;
  if( tmp < n2mT+n2bT ) return 0.;
  return 1.-(n2mT+n2bT)/tmp;
}

void HMdcEff::calculation(void) {

  // Determination of M coefficient
  eM   = 1.;
  errM = 0.;
  if(n2m+n2b>0) {
    eM = 1.-0.5*n2b/(n2m+n2b);
    Double_t dMdN2m = +0.5*n2b/((n2m+n2b)*(n2m+n2b));
    Double_t dMdN2b = -0.5*n2m/((n2m+n2b)*(n2m+n2b));
    errM = sqrt(dMdN2b*errN2b*dMdN2b*errN2b+dMdN2m*errN2m*dMdN2m*errN2m);
  }

  feff      = efficiency(n0,n1,n2m,n2b);
  single    = fractSingle(feff,n0,n1,n2m,n2b);
  p0        = single*(1.-feff)+(1.-single)*(1.-feff)*(1.-feff)*eM;
  p1        = single*feff+(1.-single)*feff*(1.-feff)*2.*eM;
  p2        = (1.-single)*feff*feff;
  errEff    = 0.;
  errSingle = 0.;
  errP0     = 0.;
  errP1     = 0.;
  errP2     = 0.;
  Double_t dEn[4],dSn[4],dP0[4],dP1[4],dP2[4];
  for(Int_t i=0; i<4; i++) dEn[i]=dSn[i]=dP0[i]=dP1[i]=dP2[i]=0.;
  if(n0+n1+n2m+n2b > 0) {
    for(Int_t i0=-1; i0<=1; i0++) {
      for(Int_t i1=-1; i1<=1; i1++) {
        for(Int_t i2m=-1; i2m<=1; i2m++) {
          for(Int_t i2b=-1; i2b<=1; i2b++) {
            Double_t shN0 = n0+errN0*i0;
            if(shN0<0.) continue;
            Double_t shN1 = n1+errN1*i1;
            if(shN1<0.) continue;
            Double_t shN2m = n2m+errN2m*i2m;
            if(shN2m<0.) continue;
            Double_t shN2b = n2b+errN2b*i2b;
            if(shN2b<0.) continue;
            //Maximal error:
            Double_t shEff = efficiency(shN0,shN1,shN2m,shN2b);
            errEff = TMath::Max(TMath::Abs(shEff-feff),errEff);
            Double_t shSingle = fractSingle(shEff,shN0,shN1,shN2m,shN2b);
            if(shN1+shN2m+shN2b > 0.) errSingle = TMath::Max(TMath::Abs(shSingle-single),errSingle);
            Double_t shM  = (shN2m+shN2b>0) ? 1.-0.5*shN2b/(shN2m+shN2b) : 1.;
            Double_t shP0 = shSingle*(1.-shEff)+(1.-shSingle)*(1.-shEff)*(1.-shEff)*shM;
            Double_t shP1 = shSingle*shEff+(1.-shSingle)*shEff*(1.-shEff)*2.*shM;
            Double_t shP2 = (1.-shSingle)*shEff*shEff;
            errP0 = TMath::Max(TMath::Abs(shP0-p0),errP0);
            errP1 = TMath::Max(TMath::Abs(shP1-p1),errP1);
            errP2 = TMath::Max(TMath::Abs(shP2-p2),errP2);

            Int_t n=abs(i0)+abs(i1)+abs(i2m)+abs(i2b);
            if(n==1) {
              Int_t i = abs(i0)*0+abs(i1)*1+abs(i2m)*2+abs(i2b)*3;
              dEn[i]  = TMath::Max((shEff-feff)*(shEff-feff),dEn[i]);
              dSn[i]  = TMath::Max((shSingle-single)*(shSingle-single),dSn[i]);
              dP0[i]  = TMath::Max((shP0-p0)*(shP0-p0),dP0[i]);
              dP1[i]  = TMath::Max((shP1-p1)*(shP1-p1),dP1[i]);
              dP2[i]  = TMath::Max((shP2-p2)*(shP2-p2),dP2[i]);
            }
          }
        }
      }
    }
  }

  Double_t errEffN    = sqrt(dEn[0]+dEn[1]+dEn[2]+dEn[3]);
  Double_t errSingleN = sqrt(dSn[0]+dSn[1]+dSn[2]+dSn[3]);
  Double_t errP0N     = sqrt(dP0[0]+dP0[1]+dP0[2]+dP0[3]);
  Double_t errP1N     = sqrt(dP1[0]+dP1[1]+dP1[2]+dP1[3]);
  Double_t errP2N     = sqrt(dP2[0]+dP2[1]+dP2[2]+dP2[3]);
  if(errEffN<errEff)       errEff    = (errEff+errEffN)*0.5;
  if(errSingleN<errSingle) errSingle = (errSingle+errSingleN)*0.5;
  if(errP0N<errP0) errP0 = (errP0+errP0N)*0.5;
  if(errP1N<errP1) errP1 = (errP1+errP1N)*0.5;
  if(errP2N<errP2) errP2 = (errP2+errP2N)*0.5;

/*  errEff=TMath::Min(errEff, sqrt(dEn[0]+dEn[1]+dEn[2]+dEn[3]));
  errSingle=TMath::Min(errSingle,sqrt(dSn[0]+dSn[1]+dSn[2]+dSn[3]));
  errP0=TMath::Min(errP0,sqrt(dP0[0]+dP0[1]+dP0[2]+dP0[3]));
  errP1=TMath::Min(errP1,sqrt(dP1[0]+dP1[1]+dP1[2]+dP1[3]));
  errP2=TMath::Min(errP2,sqrt(dP2[0]+dP2[1]+dP2[2]+dP2[3])); */
  if(n2b > 0.) totNumTr = totNumTr/(p0+p1+p2);
}

Double_t HMdcEffMod::efficiency(Double_t n0T, Double_t n1T,
                                Double_t n2T, Double_t n2bT) {
  Double_t eA = (n1T+n2T)*(n1T+n2T-4.*n0T);
  if( eA == 0. ) return 0.;
  Double_t eB = (2.*n2T+n1T)*(n1T+n2T-5.*n0T);
  Double_t eC = n2T*(n1T+n2T-5.*n0T);
  Double_t sq = eB*eB-4*eA*eC;
  if( sq < 0. ) sq=0.;
  return (eB+sqrt(sq))/(2.*eA);
}

void HMdcEffMod::calcEff(Double_t iN0,  Double_t eN0,
			 Double_t iN1,  Double_t eN1,
 			 Double_t iN2m, Double_t eN2m,
 			 Double_t iN2b, Double_t eN2b) {
  n0     = iN0;
  n1     = iN1;
  n2m    = iN2m;
  n2b    = iN2b;
  errN0  = eN0;
  errN1  = eN1;
  errN2m = eN2m;
  errN2b = eN2b;

  totNumTr = (n0+n1+n2m)/6.;

  calculation();

  Double_t p12 = p1+p2;
  p6l = p12 *p12 *p12 *p12 *p12 *p12;
  p5l = p12 *p12 *p12 *p12 *p12 *p0   *6.;
  p4l = p12 *p12 *p12 *p12 *p0  *p0  *15.;
  p3l = p12 *p12 *p12 *p0  *p0  *p0  *20.;
  p2l = p0  *p0  *p0  *p0  *p12 *p12 *15.;
  p1l = p0  *p0  *p0  *p0  *p0  *p12  *6.;
  p0l = p0  *p0  *p0  *p0  *p0  *p0;
}

void HMdcEfficiencyLayer::init(Short_t sec, Short_t mod, Short_t lay) {
  // init HMdcEfficiencyLayer object
  sector = sec;
  module = mod;
  layer  = lay;
  is     = 0;
  // Geting of pointers to par. cont.
  HMdcGetContainers* fGetCont=HMdcGetContainers::getObject();
  if( !fGetCont ) return;
  HMdcGeomStruct* fGeomStr=fGetCont->getMdcGeomStruct();
  if ( fGeomStr ) {
    HMdcGetContainers::getFileName(fileName);
    nCells=((*fGeomStr)[sector][module])[layer];
    if( nCells > 0 ) {
      is         = 1;
      n0         = new Int_t [nCells];
      n1         = new Int_t [nCells];
      n2         = new Int_t [nCells];
      nCellTot   = new Int_t [nCells];
      nCellCutS  = new Int_t [nCells];
      nCellStat  = new Int_t [nCells];
      nCellsClus = new Int_t [nCells];
      nClustCell = new UChar_t [nCells];
      clear();
      createHists();
      for(Int_t nP=0; nP<6; nP++) listPads[nP]=1;
      nPads=6;
      Char_t buf[200];
      sprintf(buf,"%s_S%iM%iL%iEff",fileName.Data(),sector+1,module+1,layer+1);
      nameCanv=buf;
      sprintf(buf,"%s S%i M%i L%i Efficiency",fileName.Data(),sector+1,module+1,layer+1);
      titleCanv=buf;
      for(Int_t nPlXY=0; nPlXY<3; nPlXY++) {
        titlePadXY[nPlXY].SetX1(0.05);
        titlePadXY[nPlXY].SetX2(0.6);
        titlePadXY[nPlXY].SetY1(0.955);
        titlePadXY[nPlXY].SetY2(0.995);
        titlePadXY[nPlXY].SetTextAlign(22);
        titlePadXY[nPlXY].SetTextSize(0);
        titlePadXY[nPlXY].SetBorderSize(1);
        titlePadXY[nPlXY].SetFillColor(7);
      }
    }
  }
}

HMdcEfficiencyLayer::~HMdcEfficiencyLayer() {
  delete [] n0;
  delete [] n1;
  delete [] n2;
  delete [] nCellTot;
  delete [] nCellCutS;
  delete [] nCellStat;
  delete [] nClustCell;
  delete [] nCellsClus;
  TSeqCollection* fSegColl = gROOT->GetListOfCanvases();
  canvEff = (TCanvas*)fSegColl->FindObject(nameCanv);
  if( canvEff ) {
    delete canvEff;
    canvEff = NULL;
  }
  for(Int_t i=0; i<3; i++) {
    canvXY[i]=(TCanvas*)fSegColl->FindObject(nameCanvXY[i]);
    if( canvXY[i] ) {
      delete canvXY[i];
      canvXY[i] = NULL;
    }
  }
}

void HMdcEfficiencyLayer::clear(void) {
  for (Short_t i=0; i<nCells; i++) {
    n0[i]=n1[i]=n2[i]=0;
    nCellStat[i]=nCellCutS[i]=nCellTot[i]=nCellsClus[i]=0;
  }
  for (Short_t xy=0; xy<256; xy++) n0xy[xy]=n1xy[xy]=n2xy[xy]=0;
}

void HMdcEfficiencyLayer::createHists(void) {
    const Char_t* titH[14] = {
	"Pattern",
	"Total num. of hits (no cut)",
	"Num. of selected tracks crossing cell(s) vs. cell",
	"Num. of \"zero\" hits",
	"Num. of \"single\" hits",
	"Num. of \"double\" hits",
	"Cells efficiency",
	"Fraction of single hits",
	"Probability to have \"zero\" hit",
	"Probability to have \"single\" hit",
	"Probability to have \"double\" hit",
	"Total num. of hits (cut time1&time2)",
	"Hits from clusters",
        "Ratio" };

    const Char_t* nmH[14]={
	"Pattern",
	"TNhitsNoCut",
	"TNtracks",
	"N0hits",
	"N1hits",
	"N2hits",
	"Eff",
	"Sing",
	"P0",
	"P1",
	"P2",
	"TNhitsCutT1T2",
	"TNhitsClust",
        "Ratio" };

  Float_t minimum[14]   = {  0.,  0., 0., 0., 0., 0., .0,  .0, .0, .0, .0,  0.,  0., 0.};
  Float_t maximim[14]   = { -1., -1.,-1.,-1.,-1.,-1.,1.1, 1.1,1.1,1.1,1.1, -1., -1.,1.1};
  Int_t   markStyle[14] = {  -1,  -1, -1, -1, -1, -1, 21,  21, 21, 21, 21,  -1,  -1, 21};
  Float_t markSize[14]  = { 0.4, 0.4,0.4,0.4,0.4,0.4,0.4, 0.4,0.4,0.4,0.4, 0.4, 0.4,0.4};
  Int_t   markColor[14] = {  -1,  -1, -1, -1, -1, -1,  4,   4,  2,  4,  3,  -1,  -1,  3};
  Int_t   fillStyle[14] = {1001,1001,  0,  0,  0,  0,  0,   0,  0,  0,  0,1001,   0,  0};
  Char_t  name[20];
  Char_t  title[100];

  gROOT->cd();
  for(Int_t nHist=0; nHist<14; nHist++) {
    sprintf(name,"S%iM%iL%i%s",sector+1,module+1,layer+1,nmH[nHist]);
    sprintf(title,"S%i M%i L%i %s",sector+1,module+1,layer+1,titH[nHist]);
    hists[nHist]=new TH1F(name,title,nCells,0.,(Double_t)nCells);
    hists[nHist]->SetMinimum(minimum[nHist]);
    if(maximim[nHist]>0.) hists[nHist]->SetMaximum(maximim[nHist]);
    if(markStyle[nHist]>0) {
      hists[nHist]->SetMarkerStyle(markStyle[nHist]);
      hists[nHist]->SetMarkerSize(markSize[nHist]);
      hists[nHist]->SetMarkerColor(markColor[nHist]);
    }
    if(nHist>4&&nHist<11) hists[nHist]->SetOption("e1p");
    hists[nHist]->SetFillStyle(fillStyle[nHist]);
  }
  Char_t buf[200];
  sprintf(buf,"%s_S%iM%iL%inHitsXY",fileName.Data(),sector+1,module+1,layer+1);
  nameCanvXY[0]=buf;
  sprintf(buf,"%s_S%iM%iL%iEffXY",fileName.Data(),sector+1,module+1,layer+1);
  nameCanvXY[1]=buf;
  sprintf(buf,"%s_S%iM%iL%iSinXY",fileName.Data(),sector+1,module+1,layer+1);
  nameCanvXY[2]=buf;
  sprintf(buf,"%s S%i M%i L%i Num. of hits",fileName.Data(),sector+1,module+1,layer+1);
  titleCanvXY[0]=buf;
  sprintf(buf,"%s S%i M%i L%i Efficiency",fileName.Data(),sector+1,module+1,layer+1);
  titleCanvXY[1]=buf;
  sprintf(buf,"%s S%i M%i L%i Fraction of single hits vs XY",
                               fileName.Data(),sector+1,module+1,layer+1);
  titleCanvXY[2]=buf;
  setBiningXY(1);
}

void HMdcEfficiencyLayer::addCellInClust(Short_t cell) {
  if(cell>=0 && cell<nCells) nClustCell[cell]++;
}

void HMdcEfficiencyLayer::addCellTot(Short_t cell) {
  if(cell>=0 && cell<nCells) nCellTot[cell]++;
}

void HMdcEfficiencyLayer::addCellCutS(Short_t cell) {
  if(cell>=0 && cell<nCells) nCellCutS[cell]++;
}

void HMdcEfficiencyLayer::addCellClus(Short_t cell) {
  if(cell>=0 && cell<nCells) nCellsClus[cell]++;
}

void HMdcEfficiencyLayer::addCell(Short_t cell) {
  if(cell>=0 && cell<nCells) {
    nClustCell[cell]++;
    nCellStat[cell]++;
  }
}

Int_t HMdcEfficiencyLayer::getCellStat(Short_t cell) {
  if(cell>=0 && cell<nCells) return nCellStat[cell];
  return 0;
}

void HMdcEfficiencyLayer::add0Hit(Short_t cell, Int_t nB) {
  if(cell>=0 && cell<nCells) n0[cell]++;
  if(nB>=0) n0xy[nB]++;
}

void HMdcEfficiencyLayer::add1Hit(Short_t cell, Int_t nB) {
  if(cell>=0 && cell<nCells) n1[cell]++;
  if(nB>=0) n1xy[nB]++;
}

void HMdcEfficiencyLayer::add2Hit(Short_t cell1, Short_t cell2, Int_t nB) {
  if(cell1>=0 && cell1<nCells && cell2>=0 && cell2<nCells) {
   n2[(cell1>cell2) ? cell1 : cell2]++;
  }
  if(nB>=0) n2xy[nB]++;
}

void HMdcEfficiencyLayer::getEffCells(HMdcEff* efficiency,Short_t fCell, Short_t lCell) {
  // Calculating of avarage value of efficiency (eff +/- errEff)
  // and fraction of singles hits (singles +/- errSingles)
  // for cells  fCell, fCell+1, ... lCell (for lCell-fCell+1 cells).
  //
  // getEfficiency(fCell) -
  // - for cell number fCell
  //
  // getEfficiency() -
  // - for all cells in layers.


  // Finding of working wires region
  Short_t fCellN=0;
  Short_t lCellN=nCells-1;
  for(Short_t cell=0; cell<nCells; cell++) {
    if(nCellStat[cell]>0) {
      if(nCellStat[cell]>10) fCellN=cell;
      break;
    }
  }
  for(Short_t cell=lCellN; cell>=0; cell--) {
    if(nCellStat[cell]>0) {
      if(nCellStat[cell]>10) lCellN=cell;
      break;
    }
  }

  Short_t fC=(fCell<fCellN) ? fCellN : fCell;
  Short_t lC=(lCell>lCellN) ? lCellN : lCell;
  if(fCell!=-1000 && lCell == 1000) lC=fC=fCell;
  Int_t nHits,nHitsNoCut,nHitsCutS,nHitsClus,nC0,nC1,nC2b,nC2m;
  nHits=nHitsNoCut=nHitsCutS=nHitsClus=nC0=nC1=nC2b=nC2m=0;
  Double_t eN0,eN1,eN2m,eN2b;
  eN0=eN1=eN2m=eN2b=0.;
  if(fC>=fCellN && lC<=lCellN) {
    for (Int_t cell=fC; cell<=lC; cell++) {
      nHits      += nCellStat[cell];
      nHitsNoCut += nCellTot[cell];
      nHitsCutS  += nCellCutS[cell];
      nHitsClus  += nCellsClus[cell];
      nC0+=n0[cell];
      nC1+=n1[cell];
      if(cell>fC) nC2m+=n2[cell];
    }
    if(fC>fCellN) nC2b+=n2[fC];
    if(lC<lCellN) nC2b+=n2[lC+1];
    eN0=(nC0>0) ? sqrt((Double_t)nC0) : 1.;
    eN1=(nC1>0) ? sqrt((Double_t)nC1) : 1.;
    if(fC != lC) eN2m=(nC2m>0) ? sqrt((Double_t)nC2m) : 1.;
    if(fC>fCellN || lC<lCellN) eN2b=(nC2b>0) ? sqrt((Double_t)nC2b) : 1.;
  }

  efficiency->setTotNhits((Float_t)nHits);
  efficiency->setTotNhitsCutS((Float_t)nHitsCutS);
  efficiency->setTotNhitsNoCut((Float_t)nHitsNoCut);
  efficiency->setTotNhitsClus((Float_t)nHitsClus);
  efficiency->calcEff((Double_t)nC0, eN0,  (Double_t)nC1,  eN1,
 		      (Double_t)nC2m,eN2m, (Double_t)nC2b,eN2b);
}

void HMdcEfficiencyLayer::getEffXY(HMdcEff* efficiency) {
  // Calculation of efficiency of MDC layer.
  getEffXY(efficiency,0,15,0,15);
}

void HMdcEfficiencyLayer::getEffXY(HMdcEff* efficiency,
                              Short_t xBin, Short_t yBin){
  // Calculation of efficiency of MDC for bin (xBin:yBin).
  getEffXY(efficiency,xBin,xBin,yBin,yBin);
}

void HMdcEfficiencyLayer::getEffXY(HMdcEff* efficiency,
                                   Short_t fXbin, Short_t lXbin,
                                   Short_t fYbin, Short_t lYbin){
  // Calculation of efficiency of MDC ragion
  // (MDC is divided on 16x16 bins).
  // Region: fXbin <= x <= lXbin, fYbin <= y <= lYbin
  Int_t    nC0 = 0;
  Int_t    nC1 = 0;
  Int_t    nC2 = 0;
  Double_t eN0 = 0.;
  Double_t eN1 = 0.;
  Double_t eN2 = 0.;

  Int_t fXb = (fXbin < 0 ) ?  0 : fXbin;
  Int_t lXb = (lXbin > 15) ? 15 : lXbin;
  Int_t fYb = (fYbin < 0 ) ?  0 : fYbin;
  Int_t lYb = (lYbin > 15) ? 15 : lYbin;
  for(Int_t y=fYb; y<=lYb; y++) {
    Int_t nBin=y*16;
    for(Int_t x=fXb; x<=lXb; x++){
      nC0 += n0xy[nBin+x];
      nC1 += n1xy[nBin+x];
      nC2 += n2xy[nBin+x];
    }
  }
  if(nC0+nC1+nC2 > 0) {
    eN0 = nC0>0 ? sqrt((Double_t)nC0) : 1.;
    eN1 = nC1>0 ? sqrt((Double_t)nC1) : 1.;
    eN2 = nC2>0 ? sqrt((Double_t)nC2) : 1.;
  }
  efficiency->calcEff((Double_t)nC0,eN0, (Double_t)nC1,eN1, (Double_t)nC2,eN2);
}

void HMdcEfficiencyLayer::fillHists(void) {
  Float_t max0     = 1.;
  Float_t max1     = 0.;
  Float_t maxClust = 0.;
  Float_t maxClDr  = 0.;
  for (Int_t bin=0; bin<nCells; bin++) {
    getEffCells(&eff, bin, bin);
    hists[ 0]->SetBinContent(bin+1,eff.getTotNhits());
    hists[ 1]->SetBinContent(bin+1,eff.getTotNhitsNoCut());
    hists[11]->SetBinContent(bin+1,eff.getTotNhitsCutS());
    hists[12]->SetBinContent(bin+1,eff.getTotNhitsClus());
    hists[ 2]->SetBinContent(bin+1,eff.getTotNumTracks());
    hists[ 3]->SetBinContent(bin+1,eff.getN0());
    hists[ 4]->SetBinContent(bin+1,eff.getN1());
    hists[ 5]->SetBinContent(bin+1,eff.getN2());
    hists[ 6]->SetBinContent(bin+1,eff.getEfficiency());
    hists[ 6]->SetBinError(bin+1,eff.getErrEfficiency());
    hists[ 7]->SetBinContent(bin+1,eff.getFracSingle());
    hists[ 7]->SetBinError(bin+1,eff.getErrFracSingle());
    hists[ 8]->SetBinContent(bin+1,eff.getP0());
    hists[ 8]->SetBinError(bin+1,eff.getErrP0());
    hists[ 9]->SetBinContent(bin+1,eff.getP1());
    hists[ 9]->SetBinError(bin+1,eff.getErrP1());
    hists[10]->SetBinContent(bin+1,eff.getP2());
    hists[10]->SetBinError(bin+1,eff.getErrP2());
    if(eff.getTotNhits()>0. && eff.getTotNhitsClus()>0.) {
      Float_t tot      = eff.getTotNhits();
      Float_t clst     = eff.getTotNhitsClus();
      Float_t ratio    = clst/tot;
      Float_t errRatio = TMath::Sqrt(1./tot + 1./clst)*ratio;
      hists[13]->SetBinContent(bin+1,ratio);
      hists[13]->SetBinError(bin+1,errRatio);
    }
    if(eff.getTotNhitsClus()>maxClust) {
      maxClust = eff.getTotNhitsClus();
      maxClDr  = eff.getTotNhits();
      if(maxClDr>maxClust*3.) maxClDr = maxClust*3.;
    }
    if(eff.getTotNhits()>max0) {
      Float_t dn=(eff.getTotNhitsNoCut()-eff.getTotNhits())/eff.getTotNhits();
      if(dn<0.2)                   max0 = eff.getTotNhitsCutS(); // max after cut "common stop"
    }
    if(eff.getTotNumTracks()>max1) max1 = eff.getTotNumTracks();
  }
  if(maxClust>50.) max0 = maxClDr;
  if(max0>5.) {
    hists[1]->GetYaxis()->SetRangeUser(0.,max0+0.1*max0);
    hists[0]->GetYaxis()->SetRangeUser(0.,max0+0.1*max0);
    for(Int_t n=2; n<6; n++) hists[n]->GetYaxis()->SetRangeUser(0.,max1+0.1*max1);
    hists[11]->GetYaxis()->SetRangeUser(0.,max0+0.1*max0);
    hists[12]->GetYaxis()->SetRangeUser(0.,max0+0.1*max0);
  }
  getEffCells(&eff);
}

void HMdcEfficiencyLayer::setTitle(TH1F *hist,const Char_t* nm){
  Char_t title[50];
  sprintf(title,"%s",nm);
  hist->SetYTitle(title);
  hist->GetYaxis()->CenterTitle(1);
  hist->SetTitleOffset(0.6,"Y");
  hist->GetXaxis()->SetLabelSize(0.07);
  hist->GetYaxis()->SetLabelSize(0.07);
  hist->GetYaxis()->SetTitleSize(0.06);
}


void HMdcEfficiencyLayer::drawTotNhits(void) {
  hists[0]->SetFillColor(3);
  if(TMath::Abs(hists[0]->GetSumOfWeights()-hists[1]->GetSumOfWeights())>0.5) {
    Char_t title[90];
    Float_t h0      = hists[ 0]->GetSumOfWeights();
    Float_t h1      = hists[ 1]->GetSumOfWeights();
    Float_t h11     = hists[11]->GetSumOfWeights();
    Float_t prCut   = (h1-h0)/h1*100.;
    Float_t prCutS  = (h1-h11)/h1*100.;
    Float_t prCutTD = (h11-h0)/h1*100.;
    sprintf(title,"S%i M%i L%i: Nhits (Com.stop cut(%6.2f%c)+times diff. cut(%6.2f%c)=%6.2f%c)",
        sector+1,module+1,layer+1,prCutS,'%',prCutTD,'%',prCut,'%');
    setTitle(hists[1],"Nhits");
    setLayerPadParam(1);
    hists[ 1]->SetTitle(title);
    hists[ 1]->SetFillColor(4);
    hists[ 1]->Draw();
    hists[11]->SetFillColor(5);
    hists[11]->Draw("same");
    hists[ 0]->Draw("same");
    hists[12]->SetLineColor(6);
    hists[12]->Draw("same");
 } else {
    setTitle(hists[0],"Nhits");
    setLayerPadParam(0);
    hists[ 0]->Draw();
    hists[12]->SetLineColor(6);
    hists[12]->Draw("same");  
  }
}

void HMdcEfficiencyLayer::drawRatio(void) {
  Char_t title[90];
  sprintf(title,"S%i M%i L%i: Ratio Nclust.wires/Nwires",sector+1,module+1,layer+1);
  setTitle(hists[13],"Ratio");
  setLayerPadParam(13);
  hists[13]->SetTitle(title);
  hists[13]->Draw();
}

void HMdcEfficiencyLayer::drawNHits(void) {
  setTitle(hists[2],"N0,N1,N2,Ntr");
  Char_t title[80];
  sprintf(title,"S%i M%i L%i:  N0[r]=%.0f  N1[b]=%.0f N2[g]=%.0f Ntr[black]=%.0f",
      sector+1,module+1,layer+1,eff.getN0(),eff.getN1(),eff.getN2(),eff.getTotNumTracks());
  setLayerPadParam(2);
  hists[2]->SetTitle(title);
  hists[2]->Draw();
  hists[3]->SetLineColor(2);
  hists[3]->Draw("same");
  hists[4]->SetLineColor(4);
  hists[4]->Draw("same");
  hists[5]->SetLineColor(3);
  hists[5]->Draw("same");
}

void HMdcEfficiencyLayer::drawHistEff(void) {
  // Drawing of the efficiency.
  setTitle(hists[6],"E");
  Char_t title[60];
  sprintf(title,"S%i M%i L%i:  E=%.3f+/-%.4f",sector+1,module+1,layer+1,
                       eff.getEfficiency(), eff.getErrEfficiency());
  setLayerPadParam(6);
  hists[6]->SetTitle(title);
  hists[6]->Draw();
  drawLineTot(hists[6],2, eff.getEfficiency(), eff.getErrEfficiency());
}

void HMdcEfficiencyLayer::drawHistSing(void) {
  // Drawing of the fraction of single hits.
  setTitle(hists[7],"S");
  Char_t title[60];
  sprintf(title,"S%i M%i L%i:  S=%.3f+/-%.4f",sector+1,module+1,layer+1,
                       eff.getFracSingle(), eff.getErrFracSingle());
  setLayerPadParam(7);
  hists[7]->SetTitle(title);
  hists[7]->Draw();
  drawLineTot(hists[7], 2, (Float_t)eff.getFracSingle(),(Float_t)eff.getErrFracSingle());
}

void HMdcEfficiencyLayer::drawProbabilitis(void) {
  // Drawing of the probabilities.
  setTitle(hists[8],"P0,P1,P2");
  Char_t title[80];
  sprintf(title,
      "S%i M%i L%i:  P0=%.3f+/-%.4f(r) P1=%.3f+/-%.4f(b) P2=%.3f+/-%.4f(g)",
      sector+1,module+1,layer+1,eff.getP0(),eff.getErrP0(),
      eff.getP1(),eff.getErrP1(),eff.getP2(),eff.getErrP2());
  setLayerPadParam(8);
  hists[8]->SetTitle(title);
  hists[8]->Draw();
  drawLineTot(hists[8], 2, (Float_t)eff.getP0(), (Float_t)eff.getErrP0());
  hists[9]->Draw("same");
  drawLineTot(hists[9], 4, (Float_t)eff.getP1(), (Float_t)eff.getErrP1());
  hists[10]->Draw("same");
  drawLineTot(hists[10], 3, (Float_t)eff.getP2(), (Float_t)eff.getErrP2());
}

void HMdcEfficiencyLayer::setLayerPadParam(Int_t hs) {
  if((hs>=6 && hs<=10) || hs==13) {
    gPad->SetGridx();
    gPad->SetGridy();
    hists[hs]->GetYaxis()->SetTitleOffset(0.27);
    gPad->SetLeftMargin(0.054);
  } else {
    gPad->SetLeftMargin(0.08);
    hists[hs]->GetYaxis()->SetTitleOffset(0.45);
  }
  gPad->SetRightMargin(0.029);
  hists[hs]->GetXaxis()->SetLabelSize(0.09);
  hists[hs]->GetYaxis()->CenterTitle(true);
  hists[hs]->GetYaxis()->SetLabelSize(0.09);
  hists[hs]->GetYaxis()->SetTitleSize(0.09);
}

void HMdcEfficiencyLayer::drawLineTot(TH1F* hst, Int_t color, Float_t effL,
                                                              Float_t errEff){
  Float_t xf = hst->GetXaxis()->GetBinLowEdge(hst->GetXaxis()->GetFirst());
  Float_t xl = hst->GetXaxis()->GetBinUpEdge(hst->GetXaxis()->GetLast());
  TLine lnEffLay;
  lnEffLay.SetLineStyle(1);
  lnEffLay.SetLineColor(color);
  lnEffLay.DrawLine(xf,effL,xl,effL);
  lnEffLay.SetLineStyle(2);
  lnEffLay.DrawLine(xf, effL+errEff, xl, effL+errEff);
  lnEffLay.DrawLine(xf, effL-errEff, xl, effL-errEff);
}

void HMdcEfficiencyLayer::setListPads(Int_t* listPad) {
  nPads = 0;
  for(Int_t pad=0; pad<6; pad++) {
    if(listPad[pad]) {
      nPads++;
      listPads[pad] = 1;
    }
    else listPads[pad] = 0;
  }

  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  TCanvas* canv=(TCanvas*)fSegColl->FindObject(nameCanv);
  if(canv) {
    if(nPads>0) {
      Int_t nPd=0;
      if(nPads != (nPd=canv->GetListOfPrimitives()->GetSize())) {
       canv->Clear();
       if(nPd<3||nPads<3) canv->SetWindowSize(700,(nPads>3) ? 900 : nPads*300);
       setPads();
      }
      drawCanvas();
    }
    else canv->Clear();
  }
  for(Int_t nPl=0; nPl<3; nPl++) {
    if( listPad[nPl+1] == 1 ) continue;
    TCanvas* canv=(TCanvas*)fSegColl->FindObject(nameCanvXY[nPl]);
    if( canv ) delete canv;
    for(Int_t i=0; i<256; i++) indDrawPv[nPl][i]=1;
    indDrawTitXY[nPl]=1;
  }
}

void HMdcEfficiencyLayer::creatCanvas(void) {
  if(gROOT->GetListOfCanvases()->FindObject(nameCanv)) return;
  if(nPads==0) return;
  canvEff=new TCanvas(nameCanv,titleCanv,1,1,700,(nPads>3) ? 900 : nPads*300);
  setPads();
}

void HMdcEfficiencyLayer::setPads(void) {
  canvEff->Divide(1,nPads,0.0001,0.0001);
  for(Int_t nPad=0; nPad<nPads; nPad++) {
    canvEff->cd(nPad+1);
    TPad* pad = (TPad*)gPad;
    pad->SetRightMargin(0.03);
    pad->SetLeftMargin(0.08);
    pad->SetTopMargin(0.1);
    pad->SetBottomMargin(0.1);
  }
}

void HMdcEfficiencyLayer::updateCanv(void) {
  canvEff=(TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanv);
  if(!canvEff) return;
  drawCanvas();
}

void HMdcEfficiencyLayer::drawCanvas(void) {
  creatCanvas();
  Int_t nPad=1;
  for(Short_t pad=0; pad<6; pad++) {
    if(!listPads[pad]) continue;
    canvEff->cd(nPad++);
    if(pad==0)      drawTotNhits();
    else if(pad==1) drawNHits();
    else if(pad==2) drawHistEff();
    else if(pad==3) drawHistSing();
    else if(pad==4) drawProbabilitis();
    else if(pad==5) drawRatio();
  }
  canvEff->cd();
  canvEff->Modified();
  canvEff->Update();
}

void HMdcEfficiencyLayer::delCanvas(void){
  canvEff=(TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanv);
  if(canvEff) {
    delete canvEff;
    canvEff=0;
  }
}

void HMdcEfficiencyLayer::setPavesXY(void) {
  Int_t   nPavesSh = 16/nBinsSumXY;
  Float_t bordX    = 0.05;
  Float_t bordY    = 0.05;
  Float_t dX       = (1.-bordX*2)/nPavesSh;
  Float_t dY       = (1.-bordY*2)/nPavesSh;
  for(Int_t yp=0; yp<16; yp++) {
    Float_t y1 = bordY+yp*dY;
    Float_t y2 = bordY+(yp+1)*dY;
    for(Int_t xp=0; xp<16; xp++) {
      for(Int_t i=0; i<3; i++) {
        pvTxEffXY[i][xp+yp*16].SetX1(bordX+xp*dX);
        pvTxEffXY[i][xp+yp*16].SetX2(bordX+(xp+1)*dX);
        pvTxEffXY[i][xp+yp*16].SetY1(y1);
        pvTxEffXY[i][xp+yp*16].SetY2(y2);
        pvTxEffXY[i][xp+yp*16].SetX1NDC(bordX+xp*dX);
        pvTxEffXY[i][xp+yp*16].SetX2NDC(bordX+(xp+1)*dX);
        pvTxEffXY[i][xp+yp*16].SetY1NDC(y1);
        pvTxEffXY[i][xp+yp*16].SetY2NDC(y2);
        pvTxEffXY[i][xp+yp*16].SetTextAlign(22);
        pvTxEffXY[i][xp+yp*16].SetTextSize(0);
        pvTxEffXY[i][xp+yp*16].SetBorderSize(1);
      }
    }
  }
}

void HMdcEfficiencyLayer::setBiningXY(Int_t nBinsSum) {
  Int_t nbnSm=8;
  if( nBinsSum <= 1 ) nbnSm=1;
  else if( nBinsSum < 4 ) nbnSm=2;
  else if( nBinsSum < 8 ) nbnSm=4;
  if(nbnSm == nBinsSumXY) return;
  nBinsSumXY=nbnSm;
  for(Int_t nPl=0; nPl<3; nPl++) {
    canvXY[nPl]=(TCanvas*)gROOT->GetListOfCanvases()->
        FindObject(nameCanvXY[nPl]);
    if( canvXY[nPl] ) {
      canvXY[nPl]->Clear();
      for(Int_t i=0; i<256; i++) {
        pvTxEffXY[nPl][i].Clear();
        indDrawPv[nPl][i]=1;
      }
      indDrawTitXY[nPl]=1;
    }
  }
  setPavesXY();
  drawCanvXY(1);
}

void HMdcEfficiencyLayer::drawCanvXYlist(void) {
  drawCanvXY(0);
}

void HMdcEfficiencyLayer::updateCanvXYlist(void) {
  drawCanvXY(1);
}

void HMdcEfficiencyLayer::delCanvXYlist(void) {
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  for(Int_t i=0; i<3; i++) {
    if( !listPads[i+1] ) continue;
    canvXY[i]=(TCanvas*)fSegColl->FindObject(nameCanvXY[i]);
    if(canvXY[i]) {
      delete canvXY[i];
      canvXY[i]=0;
    }
  }
}

void HMdcEfficiencyLayer::fillPaveXYnHits(Int_t nPv) {
  Float_t edgeCol[10]={.2,.4,.5,.7,.79,.85,.89,.92,.94,.951};
  Char_t buf[20];
  Int_t color=0;
  sprintf(buf,"N0:%.0f",effXY.getN0());
  pvTxEffXY[0][nPv].InsertText(buf);
  sprintf(buf,"N1:%.0f",effXY.getN1());
  pvTxEffXY[0][nPv].InsertText(buf);
  sprintf(buf,"N2:%.0f",effXY.getN2());
  pvTxEffXY[0][nPv].InsertText(buf);
  Float_t effL=effXY.getEfficiency();
  if(effL >= 0.95) {
    color=Int_t((effL-0.95)/0.005)+10;
    if(color > 19) color=19;
  }
  else {
    color=0;
    while(effL > edgeCol[color]) color++;
  }
  pvTxEffXY[0][nPv].SetFillColor(color+31);
}

void HMdcEfficiencyLayer::fillPaveXYeff(Int_t nPv) {
  Float_t edgeCol[10]={.2,.4,.5,.7,.79,.85,.89,.92,.94,.951};
  Char_t buf[20];
  Int_t color=0;
  Float_t effL=effXY.getEfficiency();
  sprintf(buf,"%5.3f",effL);
  pvTxEffXY[1][nPv].InsertText(buf);
  sprintf(buf,"+-%5.3f",effXY.getErrEfficiency());
  pvTxEffXY[1][nPv].InsertText(buf);
  if(effL >= 0.95) {
    color=Int_t((effL-0.95)/0.005)+10;
    if(color > 19) color=19;
  }
  else {
    color=0;
    while(effL > edgeCol[color]) color++;
  }
  pvTxEffXY[1][nPv].SetFillColor(color+31);
}

void HMdcEfficiencyLayer::fillPaveXYsing(Int_t nPv) {
  Char_t buf[20];
  Float_t frS=effXY.getFracSingle();
  sprintf(buf,"%5.3f",frS);
  pvTxEffXY[2][nPv].InsertText(buf);
  sprintf(buf,"+-%5.3f",effXY.getErrFracSingle());
  pvTxEffXY[2][nPv].InsertText(buf);
  Int_t color=Int_t(frS*20.)+1;
  if(color > 20) color=20;
  pvTxEffXY[2][nPv].SetFillColor(color+30);
}


void HMdcEfficiencyLayer::drawCanvXY(Int_t indUpDr) {
  // indUpDr=0 - draw canv
  // indUpDr=1 - update
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  for(Int_t nPl=0; nPl<3; nPl++) {
    canvXY[nPl]=(TCanvas*)fSegColl->FindObject(nameCanvXY[nPl]);
    if( indUpDr == 0 && canvXY[nPl] == 0 && listPads[nPl+1] ) {
      canvXY[nPl]=new TCanvas(nameCanvXY[nPl],titleCanvXY[nPl],1,1,600,600);
      for(Int_t i=0; i<256; i++) indDrawPv[nPl][i]=1;
      indDrawTitXY[nPl]=1;
    }
  }
  setPavesXY();
  for(Short_t xp=0; xp<16; xp+=nBinsSumXY) {
    for(Short_t yp=0; yp<16; yp+=nBinsSumXY) {
      getEffXY(&effXY,xp,xp+nBinsSumXY-1,yp,yp+nBinsSumXY-1);
      if(effXY.getTotNumTracks() > 0.) {
        Int_t nPv=xp/nBinsSumXY+(yp/nBinsSumXY)*16;
        for(Int_t nPl=0; nPl<3; nPl++) {
          if( canvXY[nPl] == 0 ) continue;
          canvXY[nPl]->cd();
          pvTxEffXY[nPl][nPv].Clear();
          if( nPl == 0) fillPaveXYnHits(nPv);
          else if( nPl == 1) fillPaveXYeff(nPv);
          else fillPaveXYsing(nPv);
          if( indDrawPv[nPl][nPv] ) {
            pvTxEffXY[nPl][nPv].Draw();
            indDrawPv[nPl][nPv]=0;
          }
        }
      }
    }
  }
  getEffXY(&effXY);
  for(Int_t nPl=0; nPl<3; nPl++) {
    if( canvXY[nPl] == 0 ) continue;
    canvXY[nPl]->cd();
    Char_t buf[80];
    if( nPl == 0 ) sprintf(buf,"S%i M%i L%i:  N0=%.0f  N1=%.0f N2=%.0f",
      sector+1,module+1,layer+1,
      effXY.getN0(),effXY.getN1(),effXY.getN2());
    else if( nPl == 1 ) sprintf(buf,"S%i M%i L%i:  E=%.3f+/-%.4f",sector+1,
      module+1,layer+1,effXY.getEfficiency(), effXY.getErrEfficiency());
    else sprintf(buf,"S%i M%i L%i:  S=%.3f+/-%.4f",sector+1,module+1,layer+1,
                       effXY.getFracSingle(), effXY.getErrFracSingle());
    titlePadXY[nPl].Clear();
    titlePadXY[nPl].InsertText(buf);
    if( indDrawTitXY[nPl] ) {
      titlePadXY[nPl].Draw();
      indDrawTitXY[nPl]=0;
    }
    canvXY[nPl]->Modified();
    canvXY[nPl]->Update();
  }
}

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

HMdcEfficiencyMod::HMdcEfficiencyMod(Short_t sec, Short_t mod) {
  sector=sec;
  module=mod;

  // Geting of pointers to par. cont.
  HMdcGetContainers* fGetCont=HMdcGetContainers::getObject();
  if( !fGetCont ) return;
  HMdcLookUpTb*   fLookUpTb   = HMdcLookUpTb::getExObject();
  HMdcLookupGeom* flookupGeom = fGetCont->getMdcLookupGeom();
  HMdcRawStruct*  frawStruct  = fGetCont->getMdcRawStruct();
//!!!  if( !fLookUpTb ) return;

  // Geting of proj. plane sizes
  if( fLookUpTb && &((*fLookUpTb)[sector]) ) {
    HMdcLookUpTbSec& flookutsec = (*fLookUpTb)[sec];
    xLow = flookutsec.getXlow();
    xUp  = flookutsec.getXup();
    yLow = flookutsec.getYlow();
    yUp  = flookutsec.getYup();
    dX   = (xUp-xLow)/16;
    dY   = (yUp-yLow)/16;
    // creating of arrays
    clear();
  } else {
    xLow=xUp=yLow=yUp=0.;
    dX=dY=-1.;
  }

  // geting of pointers to HMdcLookupGeom[sec][mod] and HMdcLookupRaw[sec][mod]
  flookupGMod = (flookupGeom) ? &(*flookupGeom)[sector][module] :0;
  frawModStru = (frawStruct) ? &(*frawStruct)[sector][module] : 0;

  hsEffMb       = NULL;
  hsPattMbNoCut = NULL;
  hsPattMbCutS  = NULL;
  hsPattMbAfCut = NULL;
  hsPattMbClust = NULL;
  nChannels     = 0;
  for(Int_t i=0; i<9; i++) {
    hsTimes[i]   = NULL;
    drHsTimes[i] = NULL;
  }
  plToTvsT1      = NULL;
  drPlToTvsT1    = NULL;
  tCutBox        = NULL;
  tCutBox2       = NULL;
  minTimeBin[0] = minTimeBin[1] = minTimeBin[2] =  1000000.;
  maxTimeBin[0] = maxTimeBin[1] = maxTimeBin[2] = -100000.0;
  HMdcGetContainers::getFileName(fileName);
  Char_t name[50];
  Char_t title[100];
  if(flookupGMod && frawStruct) {
    Int_t nMoth=frawModStru->getNMotherboards();
    for(Int_t nMb=0; nMb<nMoth; nMb++) {
      Int_t nChMoth = (*frawModStru)[nMb].getNTdcs();
      if( nChMoth > 0 ) nChannels += nChMoth;
    }
    gROOT->cd();
    sprintf(name,"S%iM%iEffMb",sector+1,module+1);
    hsEffMb = new TH1F(name,"",nChannels,0.,nChannels/8);
    hsEffMb->SetOption("e1p");
    hsEffMb->SetMarkerStyle(21);
    hsEffMb->SetMarkerSize(0.3);
    hsEffMb->SetMarkerColor(4);
    hsEffMb->SetMaximum(1.1);
    hsEffMb->SetMinimum(0.0);
    hsEffMb->SetYTitle("Efficiency");
    hsEffMb->SetXTitle("MBo,TDC");
    hsEffMb->SetNdivisions(0);
    sprintf(name,"S%iM%iEffMbS4",sector+1,module+1);
    hsEffMb4=new TH1F(name,"",nChannels/4,0.,nChannels/8);
    hsEffMb4->SetOption("e1p");
    hsEffMb4->SetMarkerStyle(21);
    hsEffMb4->SetMarkerSize(0.3);
    hsEffMb4->SetMarkerColor(4);
    hsEffMb4->SetMaximum(1.1);
    hsEffMb4->SetMinimum(0.0);
    hsEffMb4->SetYTitle("Efficiency");
    hsEffMb4->SetXTitle("MBo,TDC");
    hsEffMb4->SetNdivisions(0);
    
    sprintf(name,"S%iM%iPattMbNoCut",sector+1,module+1);
    sprintf(title,"S%i M%i Nhits;MBo,TDC",sector+1,module+1);
    hsPattMbNoCut = new TH1F(name,title,nChannels,0.,nChannels/8);
    hsPattMbNoCut->SetNdivisions(0);
    sprintf(name,"S%iM%iPattMbCutS",sector+1,module+1);
    hsPattMbCutS  = new TH1F(name,";MBo,TDC",nChannels,0.,nChannels/8);
    sprintf(name,"S%iM%iPattMbAfCut",sector+1,module+1);
    sprintf(title,"S%i M%i Nhits;MBo,TDC",sector+1,module+1);
    hsPattMbAfCut = new TH1F(name,title,nChannels,0.,nChannels/8);
    hsPattMbAfCut->SetNdivisions(0);
    sprintf(name,"S%iM%iPattMbClust",sector+1,module+1);
    hsPattMbClust = new TH1F(name,";MBo,TDC",nChannels,0.,nChannels/8);
  }
  const Char_t* titT[9]={
      "t1",
      "t2",
      "t2-t1",
      "t1 (after t.cuts)",
      "t2 (after t.cuts)",
      "t2-t1 (after t.cuts)",
      "t1 (clust.)",
      "t2 (clust.)",
      "t2-t1 (clust.)" };
  const Char_t* nmT[9] ={
      "Time1a",
      "Time2a",
      "Time2m1a",
      "Time1c",
      "Time2c",
      "Time2m1c",
      "Time1sc",
      "Time2sc",
      "Time2m1sc" };

  biningTimes=1;
  Int_t colors[3]={4,3,6};
  for(Int_t i=0; i<9; i++) {
    Axis_t x1   = -1000.;
    Axis_t x2   = 3200.;
    Int_t  nBHs = 840;
    if( (i+1)%3 == 0 ) {
      x1   = -100.;
      x2   = 900.;
      nBHs = 500;
    }
    sprintf(name,"S%iM%i%s",sector+1,module+1,nmT[i]);
    sprintf(title,"S%i M%i:  %s;%s",sector+1,module+1,titT[i],titT[i]);
    hsTimes[i] = new TH1F(name,title,nBHs,x1,x2);
    hsTimes[i]->SetFillColor(colors[i/3]);
    hsTimes[i]->SetLineColor(colors[i/3]);
  }
  sprintf(name,"S%iM%iToTvsT1",sector+1,module+1);
  sprintf(title,"S%i M%i:  ToT vs t1;t1;t2-t1",sector+1,module+1);
  plToTvsT1 = new TH2F(name,title,840/2,-1000.,3200.,500/2,-100.,900.);

  // init of HMdcEfficiencyLayer array
  for(Short_t layer = 0; layer < 6; layer++) mdcEffLay[layer].init(sector,module,layer);

  setNameCanv();
}

void HMdcEfficiencyMod::setNameCanv(void){
  for(Int_t nCanv=0; nCanv<6; nCanv++) canvases[nCanv]=0;
  Char_t buf[200];
  sprintf(buf,"%s_S%iM%i_Pattern",fileName.Data(),sector+1,module+1);
  nameCanv[0]=buf;
  sprintf(buf,"%s_S%iM%i_NtrNhits",fileName.Data(),sector+1,module+1);
  nameCanv[1]=buf;
  sprintf(buf,"%s_S%iM%i_Eff",fileName.Data(),sector+1,module+1);
  nameCanv[2]=buf;
  sprintf(buf,"%s_S%iM%i_SingC",fileName.Data(),sector+1,module+1);
  nameCanv[3]=buf;
  sprintf(buf,"%s_S%iM%i_Prob",fileName.Data(),sector+1,module+1);
  nameCanv[4]=buf;
  sprintf(buf,"%s_S%iM%i_Ratio",fileName.Data(),sector+1,module+1);
  nameCanv[5]=buf;
  sprintf(buf,"%s S%i M%i Pattern",fileName.Data(),sector+1,module+1);
  titleCanv[0]=buf;
  sprintf(buf,"%s S%i M%i Num. of tracks and zero, single and double hits",
      fileName.Data(),sector+1,module+1);
  titleCanv[1]=buf;
  sprintf(buf,"%s S%i M%i Efficiency",fileName.Data(),sector+1,module+1);
  titleCanv[2]=buf;
  sprintf(buf,"%s S%i M%i Single hits fraction",fileName.Data(),sector+1,module+1);
  titleCanv[3]=buf;
  sprintf(buf,"%s S%i M%i Probability to have zero, single and double hit",
      fileName.Data(),sector+1,module+1);
  titleCanv[4]=buf;
  sprintf(buf,"%s S%i M%i Ratio Nclst.wires/Nwires",fileName.Data(),sector+1,module+1);
  titleCanv[5]=buf;
  nPads=0;
  for(Int_t nLay=0; nLay<6; nLay++) listLayers[nLay]=0;
  canvasMb = 0;
  sprintf(buf,"%s_S%iM%i_EffMb",fileName.Data(),sector+1,module+1);
  nameCanvMb=buf;
  sprintf(buf,"%s S%i M%i Cells efficiency",fileName.Data(),sector+1,module+1);
  titleCanvMb=buf;
  sprintf(nameSliderMb,"Sl_S%iM%iEffMb",sector+1,module+1);
  sprintf(buf,"%s_S%iM%i_Times",fileName.Data(),sector+1,module+1);
  nameCanvTimes=buf;
  sprintf(buf,"%s S%i M%i time1, time2, time2-time1 ",fileName.Data(),sector+1,module+1);
  titleCanvTimes=buf;
}

HMdcEfficiencyMod::~HMdcEfficiencyMod() {
  // destructor
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  canvasMb = (TCanvas*)fSegColl->FindObject(nameCanvMb);
  if( canvasMb ) delete canvasMb;
  TCanvas* canv = (TCanvas*)fSegColl->FindObject(nameCanvTimes);
  if( canv ) delete canv;
  for(Int_t i=0; i<6; i++) {
    canvases[i] = (TCanvas*)fSegColl->FindObject(nameCanv[i]);
    if( canvases[i] ) delete canvases[i];
  }
  if(tCutBox  != NULL) delete tCutBox;
  if(tCutBox2 != NULL) delete tCutBox2;
  tCutBox  = NULL;
  tCutBox2 = NULL;
}

void HMdcEfficiencyMod::clear(void) {
  for (Short_t xy=0; xy<256; xy++) n0xy[xy]=n1xy[xy]=n2xy[xy]=0;
}

Int_t HMdcEfficiencyMod::getBinNum(Float_t x, Float_t y) {
  if(dX<=0. || dY<=0.) return -1000000;
  Int_t nX=(Int_t)((x-xLow+dX)/dX)-1;
  Int_t nY=(Int_t)((y-yLow+dY)/dY)-1;
  if(nX<0 || nX>=16 || nY<0 || nY>=16) return -1;
  return nY*16+nX;
}

void HMdcEfficiencyMod::getEffXY(HMdcEffMod* efficiency) {
  // Calculation of efficiency of MDC layer.
  getEffXY(efficiency,0,15,0,15);
}

void HMdcEfficiencyMod::getEffXY(HMdcEffMod* efficiency,
                              Short_t xBin, Short_t yBin){
  // Calculation of efficiency of MDC for bin (xBin:yBin).
  getEffXY(efficiency,xBin,xBin,yBin,yBin);
}
void HMdcEfficiencyMod::getEffXY(HMdcEffMod* efficiency,
                                   Short_t fXbin, Short_t lXbin,
                                   Short_t fYbin, Short_t lYbin){
  // Calculation of efficiency of MDC ragion
  // (MDC is divided on 16x16 bins).
  // Region: fXbin <= x <= lXbin, fYbin <= y <= lYbin
  Int_t nC0,nC1,nC2;
  nC0=nC1=nC2=0;
  Double_t eN0,eN1,eN2;
  eN0=eN1=eN2=0.;

  Int_t fXb=(fXbin < 0 ) ?  0 : fXbin;
  Int_t lXb=(lXbin > 15) ? 15 : lXbin;
  Int_t fYb=(fYbin < 0 ) ?  0 : fYbin;
  Int_t lYb=(lYbin > 15) ? 15 : lYbin;
  for(Int_t y=fYb; y<=lYb; y++) {
    Int_t nBin=y*16;
    for(Int_t x=fXb; x<=lXb; x++){
      nC0+=n0xy[nBin+x];
      nC1+=n1xy[nBin+x];
      nC2+=n2xy[nBin+x];
    }
  }
  if(nC0+nC1+nC2 > 0) {
    eN0=(nC0>0) ? sqrt((Double_t)nC0) : 1.;
    eN1=(nC1>0) ? sqrt((Double_t)nC1) : 1.;
    eN2=(nC2>0) ? sqrt((Double_t)nC2) : 1.;
  }
  efficiency->calcEff((Double_t)nC0,eN0, (Double_t)nC1,eN1, (Double_t)nC2,eN2);
}

void HMdcEfficiencyMod::setListLayers(Int_t* listLay) {
  nPads=0;
  for(Int_t lay=0; lay<6; lay++) {
    listLayers[lay]=(listLay[lay]) ? 1:0;
    if(listLayers[lay]) nPads++;
  }
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  for(Int_t nCanv=0; nCanv<6; nCanv++) {
    TCanvas* canv=(TCanvas*)fSegColl->FindObject(nameCanv[nCanv]);
    if(!canv) continue;
    if(nPads>0) {
      Int_t nPd=0;
      if(nPads != (nPd=canv->GetListOfPrimitives()->GetSize())) {
        canv->Clear();
        if(nPd<3 || nPads<3) canv->SetWindowSize(700,(nPads>3) ? 900:nPads*300);
        setPads(canv);
      }
      if(nCanv==0) drawCanvTotNhits();
      else if(nCanv==1) drawCanvNHits();
      else if(nCanv==2) drawCanvHistEff();
      else if(nCanv==3) drawCanvHistSing();
      else if(nCanv==4) drawCanvProbabilitis();
      else if(nCanv==5) drawCanvRatio();
    } else delete canv;
  }
}

void HMdcEfficiencyMod::creatCanvas(Int_t nCanv) {
  if(gROOT->GetListOfCanvases()->FindObject(nameCanv[nCanv])) return;
  if(nPads==0) return;
  canvases[nCanv]=new TCanvas(nameCanv[nCanv],titleCanv[nCanv],
 			    1,1,700,(nPads>3) ? 900 : nPads*300);
  setPads(canvases[nCanv]);
}

void HMdcEfficiencyMod::setPads(TCanvas* canv) {
  canv->Divide(1,nPads,0.0001,0.0001);
  for(Int_t nPad=0; nPad<nPads; nPad++) {
    canv->cd(nPad+1);
    canv->SetLeftMargin(0.05);
    canv->SetRightMargin(0.02);
    canv->SetBottomMargin(0.1);
    canv->SetTopMargin(0.15);
  }
}

void HMdcEfficiencyMod::updateCanv(void) {
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  for(Int_t nCanv=0; nCanv<6; nCanv++){
    TCanvas* canv=(TCanvas*)fSegColl->FindObject(nameCanv[nCanv]);
    if(!canv) continue;
    drawHists(nCanv);
  }
  if(fSegColl->FindObject(nameCanvMb)) drawCanvEffMb();
  if(fSegColl->FindObject(nameCanvTimes)) drawCanvTimes();
}

void HMdcEfficiencyMod::drawHists(Int_t nCanv) {
  Int_t nPad=1;
  for(Short_t lay=0; lay<6; lay++) {
    if(!listLayers[lay]) continue;
    canvases[nCanv]->cd(nPad++);
    if(nCanv==0)      (*this)[lay].drawTotNhits();
    else if(nCanv==1) (*this)[lay].drawNHits();
    else if(nCanv==2) (*this)[lay].drawHistEff();
    else if(nCanv==3) (*this)[lay].drawHistSing();
    else if(nCanv==4) (*this)[lay].drawProbabilitis();
    else if(nCanv==5) (*this)[lay].drawRatio();
  }
  canvases[nCanv]->Modified();
  canvases[nCanv]->Update();
}

void HMdcEfficiencyMod::drawCanvTotNhits(void) {
  creatCanvas(0);
  drawHists(0);
}

void HMdcEfficiencyMod::saveCanvases(UInt_t saveAs) {
  Int_t nPadsTmp=nPads;
  nPads=6;
  TString nmCanv;
  for(Int_t nCanv=0; nCanv<6; nCanv++) {
    nmCanv = nameCanv[nCanv];
    nmCanv.Remove(0,fileName.Length()+1);
    TCanvas* canv = new TCanvas(nmCanv,titleCanv[nCanv],1,1,700,900);
    setPads(canv);
    for(Int_t lay=0; lay<6; lay++) {
      canv->cd(lay+1);
      if(nCanv==0)      (*this)[lay].drawTotNhits();
      else if(nCanv==1) (*this)[lay].drawNHits();
      else if(nCanv==2) (*this)[lay].drawHistEff();
      else if(nCanv==3) (*this)[lay].drawHistSing();
      else if(nCanv==4) (*this)[lay].drawProbabilitis();
      else if(nCanv==5) (*this)[lay].drawRatio();
    }
    if(saveAs&&HMdcEfficiency::getFilePointer()) {
      HMdcEfficiency::getFilePointer()->cd();
      canv->Write();
    }
    delete canv;
  }
  nPads=nPadsTmp;
}

void HMdcEfficiencyMod::drawCanvNHits(void) {
  creatCanvas(1);
  drawHists(1);
}

void HMdcEfficiencyMod::drawCanvHistEff(void) {
  creatCanvas(2);
  drawHists(2);
}

void HMdcEfficiencyMod::drawCanvHistSing(void) {
  creatCanvas(3);
  drawHists(3);
}

void HMdcEfficiencyMod::drawCanvProbabilitis(void) {
  creatCanvas(4);
  drawHists(4);
}

void HMdcEfficiencyMod::drawCanvRatio(void) {
  creatCanvas(5);
  drawHists(5);
}

void HMdcEfficiencyMod::delCanv(Int_t nCanv){
  if(gROOT->GetListOfCanvases()->FindObject(nameCanv[nCanv])) delete canvases[nCanv];
  canvases[nCanv]=0;
}

void HMdcEfficiencyMod::fillHistMb(void) {
  if( !flookupGMod || !frawModStru) return;
  Int_t bin=0;
  Int_t bin4=0;
  Int_t nMoth=frawModStru->getNMotherboards();
  for(Int_t nMb=0; nMb<nMoth; nMb++) {
    Int_t nChan = (*frawModStru)[nMb].getNTdcs();
    if( nChan <= 0 ) continue;
    HMdcLookupMoth* fMb=&(*flookupGMod)[nMb];
    for(Int_t nCh4=0; nCh4<nChan/4; nCh4++) {
      Int_t nLay4,nCell1,nCell2;
      nLay4=nCell1=nCell2=-1;
      bin4++;
      for(Int_t i4=0; i4<4; i4++) {
        Int_t nCh=nCh4*4+i4;
        bin++;
        if( !fMb ) continue;
        HMdcLookupChan* fchan=&(*fMb)[nCh];
        if( !fchan ) continue;
        Int_t layer = fchan->getNLayer();
        Int_t cell  = fchan->getNCell();
        if(cell<0 || layer<0) continue;
        HMdcEfficiencyLayer& flay=(*this)[layer];
        flay.getEffCells(&eff, cell);
        hsEffMb->SetBinContent(bin,eff.getEfficiency());
        hsEffMb->SetBinError(bin,eff.getErrEfficiency());
        if(nLay4==-1) {
          nCell1 = nCell2 = cell;
          nLay4 = layer;
        } else {
          if(nLay4 != layer) Error("fillHistMb","nLay4 != layer");
          nCell2 = cell;
        }

        hsPattMbNoCut->SetBinContent(bin,eff.getTotNhitsNoCut());
        hsPattMbCutS->SetBinContent(bin,eff.getTotNhitsCutS());
        hsPattMbAfCut->SetBinContent(bin,eff.getTotNhits());
        hsPattMbClust->SetBinContent(bin,eff.getTotNhitsClus());
      }
      if(nCell1>nCell2) {
        Int_t tmp = nCell1;
        nCell1    = nCell2;
        nCell2    = tmp;
      }
      if(nLay4>=0 && nCell1>=0 && nCell2-nCell1<4) {
        HMdcEfficiencyLayer& flay=(*this)[nLay4];
        flay.getEffCells(&eff, nCell1, nCell2);
        hsEffMb4->SetBinContent(bin4,eff.getEfficiency());
        hsEffMb4->SetBinError(bin4,eff.getErrEfficiency());
      }
    }
  }
  getEffXY(&effMod);
  Char_t title[70];
  sprintf(title,"Sec.%i Mod.%i :     E=%.4f +/- %.5f",sector+1,module+1,
             effMod.getEfficiency(),effMod.getErrEfficiency());
  hsEffMb->SetTitle(title);
}

void HMdcEfficiencyMod::drawCanvEffMb(void) {
  if( !flookupGMod || !frawModStru) return;
  canvasMb = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanvMb);
  if( !canvasMb ) {
    canvasMb = new TCanvas(nameCanvMb,titleCanvMb,1,1,1000,900);
    creatCanvEffMb(canvasMb);
  }
  fillCanvEffMb(canvasMb);
  if(!(TSlider*)gROOT->FindObject(nameSliderMb)) {
    canvasMb->cd();
    Float_t x1 = 0.05f;
    Float_t x2 = 0.98f;
    mbSlider=new TSlider(nameSliderMb,"", x1,0.49*0.66,x2, 0.53*0.66);
    mbSlider->SetObject(this);

    Int_t nChan=0;
    Int_t nMoth=frawModStru->getNMotherboards();
    for(Int_t nMb=0; nMb<nMoth; nMb++) {
      Int_t nChMoth = (*frawModStru)[nMb].getNTdcs();
      if( nChMoth <= 0 ) continue;
      Float_t x1p = Float_t(nChan)/Float_t(nChannels)*(x2-x1)+x1;
      nChan += nChMoth;
      Float_t x2p = Float_t(nChan)/Float_t(nChannels)*(x2-x1)+x1;
      Char_t nameMb[100];
      sprintf(nameMb,"%i : %s",nMb+1,(*frawModStru)[nMb].GetName());
      TPaveLabel* pave = new TPaveLabel(x1p,0.45*0.66,x2p,0.48*0.66,nameMb);
      pave->SetBorderSize(1);
      pave->Draw();
    }
  }
  mbSlider->SetRange( Double_t(hsEffMb->GetXaxis()->GetFirst())/Double_t(nChannels),
                      Double_t(hsEffMb->GetXaxis()->GetLast())/Double_t(nChannels));
  canvasMb->cd(0);
  canvasMb->Modified();
  canvasMb->Update();
}

void HMdcEfficiencyMod::saveCanvEffMb(UInt_t saveAs) {
  if( !flookupGMod || !frawModStru) return;
  TString nmCanv=nameCanvMb;
  nmCanv.Remove(0,fileName.Length()+1);
  TCanvas* canv = new TCanvas(nmCanv,titleCanvMb,1,1,1000,600); 
  canv->cd();
  Float_t x1=0.05;
  Float_t x2=0.98;
  Int_t nChan=0;
  Int_t nMoth=frawModStru->getNMotherboards();
  for(Int_t nMb=0; nMb<nMoth; nMb++) {
    Int_t nChMoth = (*frawModStru)[nMb].getNTdcs();
    if( nChMoth <= 0 ) continue;
    Float_t x1p = Float_t(nChan)/Float_t(nChannels)*(x2-x1)+x1;
    nChan += nChMoth;
    Float_t x2p = Float_t(nChan)/Float_t(nChannels)*(x2-x1)+x1;
    Char_t nameMb[100];
    sprintf(nameMb,"%i : %s",nMb+1,(*frawModStru)[nMb].GetName());
    TPaveLabel* pave = new TPaveLabel(x1p,0.45,x2p,0.48,nameMb);
    pave->SetBorderSize(1);
    pave->Draw();
  }
  canv->cd();
  creatCanvEffMb(canv);
  fillCanvEffMb(canv);
  canv->Modified();
  canv->Update();
  if(saveAs==1&&HMdcEfficiency::getFilePointer()) {
      HMdcEfficiency::getFilePointer()->cd();
      canv->Write();
  }
  delete canv;
}

void HMdcEfficiencyMod::creatCanvEffMb(TCanvas* canv) {
  canv->Divide(1,3);
  canv->cd(1);
  canv->SetBorderMode(0);
  canv->SetFillColor(10);
  TPad *pad1 = (TPad*)gPad;
  pad1->SetPad(0.0,0.66,1.,1.);
  pad1->SetRightMargin(0.02);
  pad1->SetLeftMargin(0.05);
  pad1->SetTopMargin(0.1);
  pad1->SetFillColor(10);
  
  canv->cd(2);
  canv->SetBorderMode(0);
  canv->SetFillColor(10);
  TPad *upPad = (TPad*)gPad;
  upPad->SetPad(0.0,0.53*0.66,1.,1.*0.66);
  upPad->SetRightMargin(0.02);
  upPad->SetLeftMargin(0.05);
  upPad->SetTopMargin(0.1);
  upPad->SetFillColor(10);
  canv->cd(3);
  TPad *lowPad = (TPad*)gPad;
  lowPad->SetPad(0.0,0.0,1.,0.44*0.66);
  lowPad->SetRightMargin(0.02);
  lowPad->SetLeftMargin(0.05);
  lowPad->SetTopMargin(0.02);
  lowPad->SetFillColor(10);
}

void HMdcEfficiencyMod::fillCanvEffMb(TCanvas* canv) {
  canv->cd();
  canv->cd(1);
  fillCanvPattMb(canv,1);
  canv->cd(2);
  gPad->SetFrameFillColor(10);
  hsEffMb->GetXaxis()->SetTitleSize(0.06);
  hsEffMb->SetTitleOffset(0.45,"Y");;
  hsEffMb->SetTitleOffset(0.8,"X");
  hsEffMb->GetYaxis()->SetTitleSize(0.05);
  hsEffMb->GetXaxis()->SetTitleSize(0.05);
  hsEffMb->GetYaxis()->CenterTitle(1);
  hsEffMb->GetXaxis()->SetLabelSize(0.05);
  hsEffMb->GetYaxis()->SetLabelSize(0.05);
  hsEffMb->Draw();
  drawLineEffMb(hsEffMb);
  drawLineGrMb(hsEffMb);
  canv->cd(3);
  gPad->SetFrameFillColor(10);
  hsEffMb4->SetTitleOffset(0.45,"Y");
  hsEffMb4->SetTitleOffset(0.8,"X");
  hsEffMb4->GetYaxis()->SetTitleSize(0.05);
  hsEffMb4->GetXaxis()->SetTitleSize(0.05);
  hsEffMb4->GetYaxis()->CenterTitle(1);
  hsEffMb4->GetXaxis()->SetLabelSize(0.05);
  hsEffMb4->GetYaxis()->SetLabelSize(0.05);
  hsEffMb4->Draw();
  drawLineEffMb(hsEffMb4);
  drawLineGrMb(hsEffMb4);
}

void HMdcEfficiencyMod::fillCanvPattMb(TCanvas* canv,Int_t pad) {
  canv->cd();
  canv->cd(pad);
  gPad->SetFrameFillColor(10);
  hsPattMbAfCut->SetFillColor(3);
  hsPattMbClust->SetLineColor(6);
  if(TMath::Abs(hsPattMbAfCut->GetSumOfWeights()-hsPattMbNoCut->GetSumOfWeights())>0.5) {
    Char_t title[90];
    Float_t h0      = hsPattMbAfCut->GetSumOfWeights();
    Float_t h1      = hsPattMbNoCut->GetSumOfWeights();
    Float_t h11     = hsPattMbCutS->GetSumOfWeights();
    Float_t prCut   = (h1-h0)/h1*100.;
    Float_t prCutS  = (h1-h11)/h1*100.;
    Float_t prCutTD = (h11-h0)/h1*100.;
    sprintf(title,"S%i M%i: Nhits (Com.stop cut(%6.2f%c)+times diff. cut(%6.2f%c)=%6.2f%c)",
        sector+1,module+1,prCutS,'%',prCutTD,'%',prCut,'%');
    HMdcEfficiencyLayer::setTitle(hsPattMbNoCut,"Nhits");
    hsPattMbNoCut->SetTitle(title);
    hsPattMbNoCut->SetFillColor(4);
    hsPattMbNoCut->Draw();
    hsPattMbCutS->SetFillColor(5);
    hsPattMbCutS->Draw("same");
    hsPattMbAfCut->Draw("same");
    hsPattMbClust->Draw("same");
    //???
    drawLineGrMb(hsPattMbNoCut);
 } else {
    HMdcEfficiencyLayer::setTitle(hsPattMbAfCut,"Nhits");
    hsPattMbAfCut->SetMaximum(hsPattMbNoCut->GetMaximum());
    hsPattMbAfCut->Draw();
    hsPattMbClust->Draw("same");
    //???
    drawLineGrMb(hsPattMbNoCut);
  }
//   hsPattMbNoCut->GetXaxis()->SetTitleSize(0.06);
//   hsPattMbNoCut->SetTitleOffset(0.45,"Y");;
//   hsPattMbNoCut->SetTitleOffset(0.8,"X");
//   hsPattMbNoCut->GetYaxis()->SetTitleSize(0.05);
//   hsPattMbNoCut->GetXaxis()->SetTitleSize(0.05);
//   hsPattMbNoCut->GetYaxis()->CenterTitle(1);
//   hsPattMbNoCut->GetXaxis()->SetLabelSize(0.05);
//   hsPattMbNoCut->GetYaxis()->SetLabelSize(0.05);
//   hsPattMbNoCut->Draw();
//   drawLineGrMb(hsPattMbNoCut);
}

void HMdcEfficiencyMod::drawLineGrMb(TH1F* hst) {
  Float_t ymin=hst->GetMinimum();
  Float_t ymax=hst->GetMaximum();
  Float_t xf=hst->GetXaxis()->GetBinLowEdge(hst->GetXaxis()->GetFirst());
  Float_t xl=hst->GetXaxis()->GetBinUpEdge(hst->GetXaxis()->GetLast());
  TLine lineMb;
  lineMb.SetLineColor(3);
  Int_t nChan=0;
  Int_t nMoth=frawModStru->getNMotherboards();
  TText lbMb;
  for(Int_t nMb=0; nMb<nMoth; nMb++) {
    Int_t nChMoth = (*frawModStru)[nMb].getNTdcs();
    if( nChMoth <= 0 ) continue;
    lineMb.SetLineStyle(2);
    lineMb.SetLineColor(3);
    for(Int_t nTDC=0; nTDC<nChMoth/8; nTDC++) {
      lbMb.SetTextColor(3);
      Float_t x=Float_t(nChan/8+nTDC);
      if(x>xf && x<xl && nTDC>0) lineMb.DrawLine(x, ymin, x, ymax);
      if(x>=xf && x<xl) {
        Char_t labl[3];
        if( xl-xf <= 56.) {
          sprintf(labl,"%i",nTDC+1);
          lbMb.SetTextAlign(23);
          lbMb.DrawText(x+0.5,ymin-(ymax-ymin)*0.005,labl);
        }
        else if( nTDC==0 || nTDC==nChMoth/8-1 ) {
          sprintf(labl,"%i",nTDC+1);
          Int_t indFL=(nTDC+1)/(nChMoth/8);
          lbMb.SetTextAlign((indFL*2+1)*10+3);
          lbMb.DrawText(x+indFL+(1-indFL*2)*0.3,ymin-(ymax-ymin)*0.005,labl);
        }

      }
    }
    Float_t x=Float_t(nChan/8);
    if(x>=xf && x<=xl) {
      Char_t labl[3];
      sprintf(labl,"%i",nMb+1);
      lbMb.SetTextColor(1);
      lbMb.SetTextAlign(23);
      lbMb.DrawText(x,ymin-(ymax-ymin)*0.05,labl);
    }
    nChan+=nChMoth;
    lineMb.SetLineColor(6);
    lineMb.SetLineStyle(1);
    x=Float_t(nChan/8);
    if(x>xf && x<xl) lineMb.DrawLine(x, ymin-(ymax-ymin)*0.05, x, ymax);
  }
}

void HMdcEfficiencyMod::drawLineEffMb(TH1F* hst) {
  Float_t xf=hst->GetXaxis()->GetBinLowEdge(hst->GetXaxis()->GetFirst());
  Float_t xl=hst->GetXaxis()->GetBinUpEdge(hst->GetXaxis()->GetLast());
  TLine lnEffMod;
  lnEffMod.SetLineStyle(1);
  lnEffMod.SetLineColor(2);
  lnEffMod.DrawLine(xf,effMod.getEfficiency(),xl,effMod.getEfficiency());
  lnEffMod.SetLineStyle(2);
  lnEffMod.DrawLine(xf,effMod.getEfficiency()+effMod.getErrEfficiency(),
                    xl,effMod.getEfficiency()+effMod.getErrEfficiency());
  lnEffMod.DrawLine(xf,effMod.getEfficiency()-effMod.getErrEfficiency(),
                    xl,effMod.getEfficiency()-effMod.getErrEfficiency());
}

void HMdcEfficiencyMod::delCanvMb(void){
  canvasMb=(TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanvMb);
  if( canvasMb ) {
    delete canvasMb;
    canvasMb=0;
  }
}

void HMdcEfficiencyMod::fillTimes(HMdcCal1* cal, Bool_t isGnt, Int_t nHist) {
  if( hsTimes[nHist] == NULL ) return;
  if(cal == NULL) return;
  // nHits==0 tested befor call to this function.
  Int_t nHits = TMath::Abs(cal->getNHits());
  if(nHits == 0 || nHits>2 ) return;
  Bool_t tm1 = kTRUE;
  Bool_t tm2 = nHits==2;
  if(isGnt) {
    HMdcCal1Sim* calS=(HMdcCal1Sim*)cal;
    if(calS->getStatus1()<0)             tm1=kFALSE;
    if(nHits==2 && calS->getStatus2()<0) tm2=kFALSE;
  }
  if( tm1 ) {
    Float_t time = cal->getTime1();
    if(hsTimes[nHist]) hsTimes[nHist]->Fill(time);
    if( nHist == 0 /* && time > -998.*/ ) {
      if( time < minTimeBin[0] ) minTimeBin[0] = time;
      if( time > maxTimeBin[0] ) maxTimeBin[0] = time;
    }
  }
  if( tm2 ) {
    Float_t time = cal->getTime2();
    if(hsTimes[nHist+1]) hsTimes[nHist+1]->Fill(time);
    if( nHist == 0 /* && time > -998.*/ ) {
      if( time < minTimeBin[1] ) minTimeBin[1] = time;
      if( time > maxTimeBin[1] ) maxTimeBin[1] = time;
    }
  }
  if(tm1 && tm2) {
    Float_t tot = cal->getTime2()-cal->getTime1();
    if(hsTimes[nHist+2]) hsTimes[nHist+2]->Fill(tot);
    if(plToTvsT1)        plToTvsT1->Fill(cal->getTime1(),tot);
    if( nHist == 0 /* && tot > -998.*/ ) {
      if( tot < minTimeBin[2] ) minTimeBin[2] = tot;
      if( tot > maxTimeBin[2] ) maxTimeBin[2] = tot;
    }
  }
}

void HMdcEfficiencyMod::delCanvTimes(void) {
  TCanvas* canv=(TCanvas*)gROOT->GetListOfCanvases()->
      FindObject(nameCanvTimes);
  if(canv) delete canv;
}

void HMdcEfficiencyMod::drawCanvTimes(Int_t bining, UInt_t saveAs) {
  if(bining>0 && bining <=100) biningTimes=bining;
  TCanvas* canv=0;
  if(saveAs==0) {
    canv = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanvTimes);
    if( canv == NULL ) {
      canv = new TCanvas(nameCanvTimes,titleCanvTimes,50, 200,900, 700);
      canv->Divide(2,2,0.0001,0.0001);
      canv->SetBorderMode(0);
      canv->SetFillColor(10);
    }
  } else {
    TString nmCanv;
    nmCanv = nameCanvTimes;
    nmCanv.Remove(0,fileName.Length()+1);
    canv = new TCanvas(nmCanv,titleCanvTimes,50, 200,900, 700);
    canv->Divide(2,2,0.0001,0.0001);
    canv->SetBorderMode(0);
    canv->SetFillColor(10);
  }
  gROOT->cd();
  Char_t buf[80];
  for(Int_t i=0; i<9; i++) {
    if(drHsTimes[i]) delete (drHsTimes[i]);
    drHsTimes[i] = new TH1F(*hsTimes[i]);
    sprintf(buf,"%sR",hsTimes[i]->GetName());
    drHsTimes[i]->SetName(buf);
    if( biningTimes > 1 ) drHsTimes[i]->Rebin(biningTimes);
  }
  for(Int_t i=0; i<9; i++)  {
    drHsTimes[i]->GetXaxis()->SetRangeUser(minTimeBin[i%3]-10.0,maxTimeBin[i%3]+10.0);
  }
  if(drPlToTvsT1) delete (drPlToTvsT1);
  drPlToTvsT1 = new TH2F(*plToTvsT1);
  sprintf(buf,"%sR",plToTvsT1->GetName());
  drPlToTvsT1->SetName(buf);
  if( biningTimes > 1 ) drPlToTvsT1->Rebin2D(biningTimes,biningTimes);
  drPlToTvsT1->GetXaxis()->SetRangeUser(minTimeBin[0]-10.0,maxTimeBin[0]+10.0);
  drPlToTvsT1->GetYaxis()->SetRangeUser(minTimeBin[2]-10.0,maxTimeBin[2]+10.0);
  for(Int_t i=0; i<3; i++) {
    canv->cd(i<2 ? i+1 : i+2);
    gPad->SetGrid();
    drHsTimes[i]->Draw();
    drHsTimes[i+3]->Draw("same");
    drHsTimes[i+6]->Draw("same");
  }
  canv->cd(3);
  gPad->SetLogz();
  gPad->SetGrid();
  drPlToTvsT1->Draw("colz");
  
  if(tCutBox == NULL) {
    tCutBox = new TBox();
    tCutBox->SetFillStyle(0);
    if(tCutBox2 == NULL) {
      tCutBox2 = new TBox();
      tCutBox2->SetFillStyle(0);
    }
  }
  HMdcTimeCut* fcut = HMdcTimeCut::getExObject();
  if(fcut != NULL) {
    tCutBox->SetX1(fcut->getCutT1L(sector,module));
    tCutBox->SetX2(fcut->getCutT1R(sector,module));
    tCutBox->SetY1(fcut->getCutDTime21L(sector,module));
    tCutBox->SetY2(fcut->getCutDTime21R(sector,module));
    tCutBox->Draw();
    if(fcut->getCutBumpT1L(sector,module)<fcut->getCutBumpT1R(sector,module)) {
      tCutBox2->SetX1(fcut->getCutBumpT1L(sector,module));
      tCutBox2->SetX2(fcut->getCutBumpT1R(sector,module));
      tCutBox2->SetY1(fcut->getCutBumpTotL(sector,module)); 
      tCutBox2->SetY2(fcut->getCutBumpTotR(sector,module));
      tCutBox2->Draw();
    }
  }
  canv->Modified();
  canv->Update();
  
  if(saveAs&&HMdcEfficiency::getFilePointer()) {
      HMdcEfficiency::getFilePointer()->cd();
      canv->Write();
      delete canv;
  }
}

void HMdcEfficiencyMod::ExecuteEvent(Int_t event, Int_t px, Int_t py){
  if(event != 11) return;
  mbSlider=(TSlider*)gROOT->FindObject(nameSliderMb);
  if(!mbSlider) return;
  Int_t nTDC=hsEffMb->GetNbinsX()/32;
  Float_t min=mbSlider->GetMinimum();
  if(min<0.) min=0.;
  Float_t max=mbSlider->GetMaximum();
  Int_t nBmin=Int_t(nTDC*min+0.1);
  if(nBmin==nTDC) nBmin--;
  Int_t nBmax=Int_t(nTDC*max+0.1);
  if(nBmax==nBmin) nBmax++;
  canvasMb->cd(2);
  hsEffMb->SetAxisRange(nBmin*4,nBmax*4-0.0001);
  hsEffMb->Draw();
  drawLineEffMb(hsEffMb);
  drawLineGrMb(hsEffMb);
  mbSlider->SetRange(Float_t(nBmin)/nTDC,Float_t(nBmax)/nTDC);
  canvasMb->Update();
}

//--Sector--------------------------

HMdcEfficiencySec::HMdcEfficiencySec(Short_t sec) {
  // constructor creates an array of pointers of type
  // HMdcEfficiencyMod
  sector=sec;
  array = new TObjArray(4);
  HMdcGetContainers* fGetCont=HMdcGetContainers::getObject();
  HMdcGetContainers::getFileName(fileName);
  for (Short_t mod = 0; mod < 4; mod++) if( fGetCont->isModActive(sector,mod) ) {
    (*array)[mod] = new HMdcEfficiencyMod(sector,mod);
  }
  Char_t buf[200];
  sprintf(buf,"%s_S%i_ProjPl",fileName.Data(),sector+1);
  nameCanvProj=buf;
  sprintf(buf,"%s S%i Cells projections",fileName.Data(),sector+1);
  titleCanvProj=buf;
  sprintf(buf,"%s_S%i_HitsPl",fileName.Data(),sector+1);
  nameCanvHits=buf;
  sprintf(buf,"%s S%i MDC hits",fileName.Data(),sector+1);
  titleCanvHits=buf;
  plotHits[0]=plotHits[1]=0;
}

HMdcEfficiencySec::~HMdcEfficiencySec() {
  // destructor
  TSeqCollection* fSegColl=gROOT->GetListOfCanvases();
  canvPlotProj=(TCanvas*)fSegColl->FindObject(nameCanvProj);
  if( canvPlotProj ) {
    delete canvPlotProj;
    canvPlotProj=0;
  }
  canvPlotsHits=(TCanvas*)fSegColl->FindObject(nameCanvHits);
  if( canvPlotsHits ) {
    delete canvPlotsHits;
    canvPlotsHits=0;
  }
  if( array ) {
    array->Delete();
    delete array;
  }
}

void HMdcEfficiencySec::creatPlots(HMdcLookUpTbSec* flookupTbSec) {
  if(flookupTbSec==0) return;
  Int_t nBinX=flookupTbSec->getNBinX();
  Int_t nBinY=flookupTbSec->getNBinY();
  Float_t xLow=flookupTbSec->getXlow();
  Float_t xUp=flookupTbSec->getXup();
  Float_t yLow=flookupTbSec->getYlow();
  Float_t yUp=flookupTbSec->getYup();
  Char_t buf[100];
  sprintf(buf,"S%iAllClust.",sector+1);
  plotHits[0]=new TH2F(buf,"",nBinX,xLow,xUp,nBinY,yLow,yUp);
  sprintf(buf,"S%iSelClust.",sector+1);
  plotHits[1]=new TH2F(buf,"",nBinX,xLow,xUp,nBinY,yLow,yUp);
  sprintf(buf,"S%i All clusters",sector+1);
  plotHits[0]->SetTitle(buf);
  sprintf(buf,"S%i Selected clusters",sector+1);
  plotHits[1]->SetTitle(buf);
  plotHits[0]->SetXTitle("x [mm]");
  plotHits[0]->SetYTitle("y [mm]      ");
  plotHits[1]->SetXTitle("x [mm]");
  plotHits[1]->SetYTitle("y [mm]      ");

}

void HMdcEfficiencySec::drawCanvProj(void) {
  if(gROOT->GetListOfCanvases()->FindObject(nameCanvProj)) return;
  canvPlotProj=new TCanvas(nameCanvProj,titleCanvProj,300,1,500,600);
  canvPlotProj->SetFillColor(10);
}

void HMdcEfficiencySec::delCanvProj(void){
  canvPlotProj=(TCanvas*)gROOT->GetListOfCanvases()->
      FindObject(nameCanvProj);
  if(canvPlotProj) {
    delete canvPlotProj;
    canvPlotProj=0;
  }
}

void HMdcEfficiencySec::drawCanvHits(void) {
  if(gROOT->GetListOfCanvases()->FindObject(nameCanvHits)) return;
  canvPlotsHits=new TCanvas(nameCanvHits,titleCanvHits,100,300,800,400);
  canvPlotsHits->Divide(2,1,0.0001,0.0001);
  canvPlotsHits->SetFillColor(10);
}

void HMdcEfficiencySec::saveCanvHits(UInt_t saveAs) {
  if(plotHits[0]==0 || plotHits[1]==0) return;
  TString nmCanv=nameCanvHits;
  nmCanv.Remove(0,fileName.Length()+1);
  TCanvas* canv=new TCanvas(nmCanv,titleCanvHits,100,300,800,400);
  canv->Divide(2,1,0.0001,0.0001);
  canv->SetFillColor(10);
  canv->cd(1);
  plotHits[0]->Draw();
  canv->cd(2);
  plotHits[1]->Draw();
  canv->Modified();
  canv->Update();
  if(saveAs==1&&HMdcEfficiency::getFilePointer()) {
      HMdcEfficiency::getFilePointer()->cd();
      canv->Write();
  }
  delete canv;
}
void HMdcEfficiencySec::delCanvHits(void){
  canvPlotsHits=(TCanvas*)gROOT->GetListOfCanvases()->
      FindObject(nameCanvHits);
  if(canvPlotsHits) {
    delete canvPlotsHits;
    canvPlotsHits=0;
  }
}

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

HMdcEfficiency::HMdcEfficiency() {
  initSecArray();
}

HMdcEfficiency::HMdcEfficiency(const Text_t *name,const Text_t *title)
                            : HReconstructor(name,title) {
  initSecArray();
}

void HMdcEfficiency::initSecArray(void) {
  fCalCat       = 0;
  fLookUpTb     = 0;
  iter          = 0;
  eventId       = 0;
  isCreated     = kFALSE;
  array         = new TObjArray(6);
  firstEvent    = kTRUE;
  canvasSummary = 0;
  histSummary   = 0;
  fRootOut      = 0;
  drawGoodClus  = kTRUE;
  selectEvByTBits = -1;
  gStyle->SetOptStat(0);
}

HMdcEfficiency::~HMdcEfficiency() {
  // destructor
  if( array ) {
    array->Delete();
    delete array;
  }
  canvEventProj=(TCanvas*)gROOT->GetListOfCanvases()->
      FindObject(nameCanvEventCurr);
  if( canvEventProj ) {
    delete canvEventProj;
    canvEventProj=0;
  }
  if(iter) {
    delete iter;
    iter = 0;
  }
  if(iterClus) {
    delete iterClus;
    iterClus = 0;
  }
}

Bool_t HMdcEfficiency::init(void) {
  fGetCont     = HMdcGetContainers::getObject();
  if( !fGetCont ) return kFALSE;
  fLookUpTb    = HMdcLookUpTb::getExObject();
  fSizesCells  = HMdcSizesCells::getObject();
  fcut         = HMdcTimeCut::getExObject();
  if(fcut && fcut->getIsUsed()) fcut=0;
  if(!fSizesCells) return kFALSE;

  fClusCat     = fGetCont->getCatMdcClus();
  if( !fClusCat ) return kFALSE;

  fCalCat      = fGetCont->getCatMdcCal1();
  isGeant      = HMdcGetContainers::isGeant();
  iter         = 0;
  if(fCalCat) iter=(HIterator *)fCalCat->MakeIterator("native");

  gROOT->cd();
  TCanvas c; // stupid workarround to fix the colors
  for(Int_t i=31; i<51; i++) {
    TColor* cl = gROOT->GetColor(i);
    if(cl){
	Float_t gr = (i-30)/20.;
	cl->SetRGB(1.-gr,gr,0.);
    } else {
	Error("init(void)","NULL pointer for color %i received!",i);
    }
  }
//   Int_t pal[12] = {17,16,15,14,13,12, 30,7,5,4,6,3};
//   gStyle->SetPalette(12,pal);
//   gStyle->SetPalette(1,NULL);

  loc.set(4,0,0,0,0);
  iterClus=(HIterator *)fClusCat->MakeIterator();
  
  nameCanvEvent     = "ProjPlEvent";
  nameCanvEventCurr = nameCanvEvent;
  titleCanvEvent    = "Cells projections";

  return kTRUE;
}

Bool_t HMdcEfficiency::reinit(void) {
  if( isCreated ) return kTRUE;
  if( fLookUpTb && !HMdcGetContainers::isInited(fLookUpTb) ) return kFALSE;
  if(!fSizesCells->initContainer()) return kFALSE;
  for (Short_t sec = 0; sec < 6; sec++) if( fGetCont->isSecActive(sec) ) {
    HMdcEfficiencySec* fsec = (HMdcEfficiencySec*)(*array)[sec];
    if( !fsec ) {
      fsec = new HMdcEfficiencySec(sec);
      (*array)[sec] = fsec;
      if(fLookUpTb) fsec->creatPlots(&(*fLookUpTb)[sec]);
    }
    if(fLookUpTb) {
      HMdcLookUpTbSec& fLUTbSec = (*fLookUpTb)[sec];
      if(!&fLUTbSec) return kFALSE;
    }
  }
  evHeader=gHades->getCurrentEvent()->getHeader();
  if(!evHeader) {
    Error("reinit","Can't get pointer to event header.");
    return kFALSE;
  }
  isCreated=kTRUE;
  return kTRUE;
}

Int_t HMdcEfficiency::execute(void) {
  if(firstEvent) extractFileInfo();
  Int_t tBit= evHeader->getTBit();
  if(selectEvByTBits>0 && (selectEvByTBits&tBit)==0) return 1;
  
  eventId=evHeader->getEventSeqNumber();
  
  //--------Num. clusters have cell ...------------------------
  for(Short_t sec=0; sec<6; sec++) {
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!&fsec) continue;
    for(Short_t mod=0; mod<4; mod++) {
      HMdcEfficiencyMod& fmod=fsec[mod];
      if(!&fmod) continue;
      for(Short_t lay=0; lay<6; lay++) {
        HMdcEfficiencyLayer& flay=fmod[lay];
        memset(flay.getNClCell(),0,flay.getNumCells());
      }
    }
  }
  Int_t cellF[6];
  Int_t cellL[6];
  if(fCalCat) {
    iter->Reset();
    // Geant data ===========
    if(isGeant) {
      HMdcCal1Sim* cal=0;
      while ((cal=(HMdcCal1Sim *)iter->Next())!=0) {
        Int_t nHits=abs(cal->getNHits());
        if(nHits==0 || cal->getNHits()>2) continue;
        if(nHits==1 && cal->getStatus1()<0) continue;
        if(nHits==2 && cal->getStatus1()<0 && cal->getStatus2()<0) continue;
        Int_t s,m,l,c;
        cal->getAddress(s,m,l,c);
        if(&(*this)[s][m][l]) {
          (*this)[s][m][l].addCell(c);
          (*this)[s][m][l].addCellTot(c);
        }
        if( &(*this)[s][m] ) (*this)[s][m].fillTimesAll(cal,isGeant);
      }
    } else { // Real data ===========
      HMdcCal1* cal=0;
//-------------------------------------------UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
// Double_t mt1[2][3]  = {{0.,0.,0.},{0.,0.,0.}};
// //Double_t mt1S[3] = {0.,0.,0.};
// Int_t    nc[3]   = {0,0,0};
// while ((cal=(HMdcCal1 *)iter->Next())!=0) {
//   if(cal->getNHits()==0 || cal->getNHits()>2) continue;
//   Int_t s,m,l,c;
//   cal->getAddress(s,m,l,c);
//   if(m != 0) continue;
//   Double_t t1  = cal->getTime1();
//   Int_t reg = 0;
// //  if     (t1 > 160.) reg = 2;
// //  else if(t1 > -30.) reg = 1;
//   if(t1 > 200.) continue;
//   if     (t1 > 110.) reg = 2;
//   else if(t1 > -15.) reg = 1;
//   mt1[reg]  += t1;
// //  mt1S[reg] += t1*t1;
//   nc[reg]++;
// }
// for(Int_t r=0;r<3;r++) {
//   if(nc[r] >= 1) {
//     mt1[r] /= nc[r]; 
// //    mt1S[r] = nc[r]>1 ? TMath::Sqrt(mt1S[r]/nc[r] - mt1[r]*mt1[r]) : 0.;
//   }
// // printf(" %04i: %6.1f(%5.1f)  ",nc[r],mt1[r],mt1S[r]);
// // printf(" %4i: %6.1f(%5.1f)  ",nc[r],mt1[r],mt1S[r]);
// }
// //printf("\n");
// //if(nc[0] > 4 || nc[2] > 20) return 0;
// //if(nc[0] >= 30 /*|| nc[2] < 60*/) return 0;
// //if(nc[0] > 1) return 0;
// if(nc[0] < 30) return 0;
// iter->Reset();
//-------------------------------------------UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
      while ((cal=(HMdcCal1 *)iter->Next())!=0) {
        Int_t s,m,l,c;
        if(cal->getNHits()==0 || cal->getNHits()>2) continue;
        cal->getAddress(s,m,l,c);
// Float_t t1=cal->getTime1();
// if(m==0) {
//   if(t1<100. || t1>110.) continue;
//   if(cal->getTime2()-t1<0 || cal->getTime2()-t1>25) continue;
// }
        HMdcEfficiencySec &fsec=(*this)[s];
        if( !&fsec ) continue;
        HMdcEfficiencyMod &fmod=fsec[m];
        if( !&fmod ) continue;
        HMdcEfficiencyLayer &flay=fmod[l];
        if(c<0 || c >flay.getNumCells()) continue;
        flay.addCellTot(c);
        fmod.fillTimesAll(cal,isGeant);
        if(fcut != NULL) {
          if(!fcut->cutComStop(cal)) continue;
          flay.addCellCutS(c);
          if(!fcut->cut(cal)) continue;	 // Cut drift time
        }
        fmod.fillTimesAfCut(cal,isGeant);
        flay.addCell(c);
      }
    }
  }
  //-----------------------------------------------------------
  iterClus->Reset();
  HMdcClus* fClus;
  while((fClus=(HMdcClus*)iterClus->Next())) {
    Int_t sec=fClus->getSec();
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!(&fsec)) continue;
    //===Selecting of clusters (tracks)===========================
    Int_t seg=fClus->getIOSeg();
    loc[0]=sec;
    for(Int_t m=0; m<2; m++) {
      Int_t nLayers=fClus->getNLayersMod(m);
      if(nLayers<=0) continue;
      loc[1]=m+seg*2;
      HMdcEfficiencyMod& fmod=fsec[loc[1]];
      if(!(&fmod)) continue;
      for(Int_t lay=0; lay<6; lay++) {
        Int_t clLay=lay+m*6;
        loc[2]=lay;
        loc[3]=-1;
        while((loc[3]=fClus->next(clLay,loc[3])) > -1) {
 	  Short_t cell=loc[3];
          if(fCalCat==0) {
            fmod[lay].addCell(cell);
            fmod[lay].addCellTot(cell);
          }
 	  fmod[lay].addCellInClust(cell);       // fired wires num.
          if(fmod[lay].getNumClCell(cell) == 2) { //==1 after Cal1 loop filling!
            fmod[lay].addCellClus(cell);
            HMdcCal1* cal=0;
            if(fCalCat) cal=(HMdcCal1*)fCalCat->getObject(loc);
            fmod.fillTimesCls(cal,isGeant);     //tim1,time2,time2-time1 hist.
          }
 	}
      }
    }
  }
  iterClus->Reset();
  while((fClus=(HMdcClus*)iterClus->Next())) {
    if(fClus->getStatus()==0) continue;   // For clusters filtering
    Int_t sec=fClus->getSec();
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!(&fsec)) continue;
    Int_t seg=fClus->getIOSeg();
    loc[0]=sec;
    Bool_t hitPloted=kFALSE;
    Float_t xCl=fClus->getX();
    Float_t yCl=fClus->getY();
    if(fLookUpTb) fsec.getPlotAllHits()->Fill(xCl,yCl);
    for(Int_t m=0; m<2; m++) {
      Bool_t qual=kFALSE;
      if(fClus->getMinCl(m) != 5) continue;
      Int_t nLayers=fClus->getNLayersMod(m);
      if(nLayers<5) continue;
      Int_t mod=m+seg*2;
      loc[1]=mod;
      HMdcEfficiencyMod& fmod=fsec[mod];
      if(!(&fmod)) continue;
      for(Int_t lay=0; lay<6; lay++) {
        qual=kFALSE;
 	HMdcEfficiencyLayer& flay=fmod[lay];
        Int_t clLay=lay+m*6;
        Int_t nCells=fClus->getNCells(clLay);
 	//----- Num. fired cells in plane >2
 	if(nCells>2) break;
 	//----- Num. fired cells in plane >0 & <=2
 	if(nCells>0){
          cellF[lay] = fClus->getFirstCell(clLay);
          cellL[lay] = fClus->getLastCell(clLay);
 	  // For dubl.hits |n.cell1-n.cell2| must be = 1
          if(cellL[lay]-cellF[lay]>1) break;
          //selecting of fired wires in one cluster only
          if(flay.getNumClCell(cellF[lay])>2 ||
             flay.getNumClCell(cellL[lay])>2)   break;
 	  // Nearests cells can not be fired
 	  if(cellF[lay]>0 && flay.getNumClCell(cellF[lay]-1)>0) break;
 	  if(cellL[lay]+1<flay.getNumCells() && flay.getNumClCell(cellL[lay]+1) >0) break;
          qual = kTRUE;
 	} else {
 	//----- N. fired cells in plane = 0
          HMdcSizesCellsLayer& fSCLayer = (*fSizesCells)[sec][mod][lay];
          Double_t xcoor,ycoor,zcoor;
          fSCLayer.calcIntersection(
              fClus->getXTarg(),fClus->getYTarg(),fClus->getZTarg(),
              xCl,yCl,fClus->getZ(), xcoor,ycoor,zcoor);
          fSCLayer.transTo(xcoor,ycoor,zcoor);
          cellF[lay]=fSCLayer.calcCellNum(xcoor,ycoor);
 	  if( cellF[lay] < 0 ) break;
 	  if(cellF[lay]>0 && flay.getNumClCell(cellF[lay]-1) >0) break;
 	  if(flay.getNumClCell(cellF[lay]) >0) break;
 	  if(cellF[lay]+1<flay.getNumCells() && flay.getNumClCell(cellF[lay]+1) >0) break;
          cellL[lay] = -1;
          qual       = kTRUE;
 	}
      }
      // Filling ========================================
      if(!qual) {
        fClus->setStatus(2); // Don't draw this cluster(???)
        continue;
      }
      Int_t bNum = fmod.getBinNum(xCl,yCl);
      if( bNum<0 && bNum!=-1000000) continue;
      //==================================================
      for(Int_t lay=0; lay<6; lay++) {
 	HMdcEfficiencyLayer& flay = fmod[lay];
        if(cellL[lay]<0) {
 	  fmod.add0Hit(bNum);
          flay.add0Hit(cellF[lay],bNum);
 	} else if(cellL[lay]-cellF[lay] == 0) {
 	  fmod.add1Hit(bNum);
 	  if(nLayers==6) flay.add1Hit(cellF[lay],bNum);
 	} else {
 	  fmod.add2Hit(bNum);
 	  if(nLayers==6) flay.add2Hit(cellF[lay],cellL[lay],bNum);
 	}
      }
      //==================================================
      if(!hitPloted && fLookUpTb) {
        hitPloted=kTRUE;
        fsec.getPlotSelHits()->Fill(xCl,yCl);
      }
    }
  }
  
   
  gSystem->ProcessEvents();
  
 
  return 0;
}

void HMdcEfficiency::drawProjPlotsSec(Int_t sec, Int_t type) {
  if(fLookUpTb==0 || ! &((*fLookUpTb)[sec]) ) return;
  if( ! &((*this)[sec]) ) return;
  TCanvas* canv=(*this)[sec].getCanvasProj();
  if( !canv ) return;
  canv->cd();
  canv->cd(1);
  drawProjPlots(sec, type);
  canv->Modified();
  canv->Update();
}

void HMdcEfficiency::drawPrPlEvent(Int_t type) {
  if(fLookUpTb==0) return;
  canvEventProj=(TCanvas*)gROOT->GetListOfCanvases()->FindObject(nameCanvEventCurr);
  if(!canvEventProj) return;
  canvEventProj->cd();
  Char_t buf[200];
  sprintf(buf,"%s%i",nameCanvEvent.Data(),eventId);
  nameCanvEventCurr = buf;
  Int_t tBit          = evHeader->getTBit() & 255;
  UInt_t downScalFlag = evHeader->getDownscalingFlag() & 1;
  sprintf(buf,"%s TBit=%i%i%i%i%i%i%i%i DownscalingFlag=%i",titleCanvEvent.Data(),
      (tBit>>7)&1,(tBit>>6)&1,(tBit>>5)&1,(tBit>>4)&1,
      (tBit>>3)&1,(tBit>>2)&1,(tBit>>1)&1,tBit&1,downScalFlag);
  canvEventProj->SetName(nameCanvEventCurr.Data());
  canvEventProj->SetTitle(buf);

  for(Int_t sec=0; sec<6; sec++) {
    if(type<0) type=typePrPlot[sec];
    else typePrPlot[sec]=type;
    if( ! &((*fLookUpTb)[sec]) ) continue;
    canvEventProj->cd(sec+1);
    drawProjPlots(sec, type);
  }
  canvEventProj->Update();
}

void HMdcEfficiency::drawCanvEvent(void) {
//  if(gROOT->GetListOfCanvases()->FindObject(nameCanvEventCurr)) return;
  canvEventProj=(TCanvas*)(gROOT->GetListOfCanvases()->
                           FindObject(nameCanvEventCurr.Data()));
  Char_t buf[200];
  sprintf(buf,"%s%i",nameCanvEvent.Data(),eventId);
  nameCanvEventCurr=buf;
  
  if(canvEventProj) {
    canvEventProj->SetName(nameCanvEventCurr.Data());
  } else {
    canvEventProj=new TCanvas(nameCanvEventCurr.Data(),titleCanvEvent.Data(),20,1,800,600);
    canvEventProj->SetFillColor(10);
    canvEventProj->Divide(3,2,0.0001,0.0001);
  }
}

void HMdcEfficiency::delCanvEvent(void){
  canvEventProj=(TCanvas*)gROOT->GetListOfCanvases()->
      FindObject(nameCanvEventCurr);
  if(canvEventProj) {
    delete canvEventProj;
    canvEventProj=0;
  }

}

void HMdcEfficiency::drawProjPlots(Int_t sec, Int_t type) {
  if(fLookUpTb==0) return;
  HMdcLookUpTbSec& lookutsec = (*fLookUpTb)[sec];
  Char_t name[15],title[20];
  sprintf(name,"S%iPlProj",sec+1);
  sprintf(title,"Event %i Sector %i",eventId,sec+1);
  typePrPlot[sec]=type;
  Int_t bining = 0; //???
  TH2C* plt = lookutsec.fillTH2C(name,title,typePrPlot[sec],bining);
  plt->SetXTitle("x [mm]");
  plt->SetYTitle("y [mm]      ");
  plt->SetMinimum(0.0);
  Int_t modMax=3;
  for(; modMax>=0; modMax--) if(lookutsec.getMaxClus(modMax)) break;
  Float_t mxBn=0;
  if(typePrPlot[sec]==1) for(Int_t mod=0; mod<=modMax; mod++) mxBn+=6*(mod+1);
  else if(typePrPlot[sec]==2) mxBn=4.01;
  else for(Int_t mod=0; mod<4; mod++) if(lookutsec.getMaxClus(mod)) mxBn+=6.0;
  plt->SetMaximum(mxBn);
  plt->SetLabelSize(0.03,"X");
  plt->SetLabelOffset(0.001,"X");
  plt->GetXaxis()->SetTitleSize(0.04);
  plt->SetLabelSize(0.03,"Y");
  plt->SetLabelOffset(0.01,"Y");
  plt->SetTitleOffset(1.2,"Y");
  plt->GetYaxis()->SetTitleSize(0.04);
  plt->Draw("COLZ");
  TMarker marker;
  marker.SetMarkerSize(1.4);
  marker.SetMarkerColor(4);
  Int_t mark[4]={24,28,26,25};
  iterClus->Reset();
  HMdcClus* fClus;
  while((fClus=(HMdcClus*)iterClus->Next())) {
    if(fClus->getSec() != sec) continue;
    if(drawGoodClus && fClus->getStatus() != 1)continue;
    Int_t mod=fClus->getMod();
    if(mod<0) {
      if(fClus->getIOSeg()==0) marker.SetMarkerStyle(24);
      else marker.SetMarkerStyle(30);
    } else marker.SetMarkerStyle(mark[mod]);
    marker.DrawMarker(fClus->getX(),fClus->getY());
  }
  drawTofShowerHits(sec);
}

void HMdcEfficiency::drawTofShowerHits(Int_t sec) {
  HEvent*    event      = gHades->getCurrentEvent();
  HCategory* fCatShower = event->getCategory(catShowerHitTof);
  if(fCatShower==0) {
    fCatShower = event->getCategory(catShowerHitTofTrack);
    if(fCatShower==0) return;
  }
  HCategory* fCatTofCluster = event->getCategory(catTofCluster);
  HCategory* fCatTofHit     = event->getCategory(catTofHit);
  if(fCatTofCluster==0 && fCatTofHit==0) return;
  
  HMdcSizesCellsSec& fSCSec = (*fSizesCells)[sec];
  const HGeomTransform* secLabTrans = fSCSec.getLabTrans();
  HMdcLookUpTbSec& lookutsec = (*fLookUpTb)[sec];
  const HMdcPlane& projPlane = lookutsec.getPrPlane();
  HGeomVector target = lookutsec.getTargetF()+lookutsec.getTargetL();
  target *= 0.5;
  
  TMarker marker;
  marker.SetMarkerSize(1.6);
  marker.SetMarkerColor(3);
  marker.SetMarkerStyle(29);
  
  HGeomVector dir;
  HGeomVector cross;
  
  HIterator* iterShower = (HIterator*)fCatShower->MakeIterator();
  iterShower->Reset();
  HShowerHitTof *pShowerHitTof;
  while((pShowerHitTof=(HShowerHitTof*)(iterShower->Next()))!=0) {
    if(sec != pShowerHitTof->getSector()) continue;
    
    Float_t xSh,ySh,zSh;
    pShowerHitTof->getLabXYZ(&xSh, &ySh, &zSh);
    dir.setXYZ(xSh,ySh,zSh);
    dir  = secLabTrans->transTo(dir);
    dir -= target;
    projPlane.calcIntersection(target,dir,cross);
    marker.DrawMarker(cross(0),cross(1));
  }
  delete iterShower;

  if(fCatTofHit) {
    HIterator*  iterTofHit= (HIterator*)fCatTofHit->MakeIterator();
    iterTofHit->Reset();
    HTofHit* pTofHit;
    while((pTofHit=(HTofHit*)(iterTofHit->Next()))!=0 ) {
      if(sec != pTofHit->getSector()) continue;
      Float_t xTf,yTf,zTf;
      pTofHit->getXYZLab(xTf,yTf,zTf);
      dir.setXYZ(xTf,yTf,zTf);
      dir  = secLabTrans->transTo(dir);
      dir -= target;
      projPlane.calcIntersection(target,dir,cross);
      marker.DrawMarker(cross(0),cross(1));
    }
    delete iterTofHit;
  } else {
    HIterator*  iterTofCluster= (HIterator*)fCatTofCluster->MakeIterator();
    iterTofCluster->Reset();
    HTofCluster* pTofCluster;
    while((pTofCluster=(HTofCluster*)(iterTofCluster->Next()))!=0 ) {
      if(pTofCluster->getClusterSize()>2) continue;
      if(sec != pTofCluster->getSector()) continue;
      Float_t xTf,yTf,zTf;
      pTofCluster->getXYZLab(xTf,yTf,zTf);
      dir.setXYZ(xTf,yTf,zTf);
      dir  = secLabTrans->transTo(dir);
      dir -= target;
      projPlane.calcIntersection(target,dir,cross);
      marker.DrawMarker(cross(0),cross(1));
    }
    delete iterTofCluster;
  }
/*
  marker.SetMarkerSize(2.3);
  marker.SetMarkerColor(38);
  marker.SetMarkerStyle(4);
  HCategory* fCatRichIPU=event->getCategory(catHardRichHit);
  if(fCatRichIPU==0) return;
  HIterator* iterRichIPU=(HIterator*)fCatRichIPU->MakeIterator();
  HRichHitIPU* pRichHitIPU;
  iterRichIPU->Reset();
  while((pRichHitIPU=(HRichHitIPU*)(iterRichIPU->Next()))!=0) {
    if(sec != pRichHitIPU->getSector()) continue;
    Double_t theta = pRichHitIPU->getTheta()*TMath::DegToRad();
    Double_t phi   = pRichHitIPU->getPhi();
    if(sec<5) phi -= sec*60.; 
    else phi += 60.;
    phi *= TMath::DegToRad();    
    dir.setZ(TMath::Cos(theta));
    Double_t dXY=TMath::Sqrt(1.-dir(2)*dir(2));
    dir.setX(TMath::Cos(phi)*dXY);
    dir.setY(TMath::Sin(phi)*dXY);
    projPlane.calcIntersection(target,dir,cross);
    marker.DrawMarker(cross(0),cross(1));
  }
  delete iterRichIPU;
*/
}


void HMdcEfficiency::drawHitsPlots(Int_t sec) {
  if(fLookUpTb==0) return;
  if( ! &((*fLookUpTb)[sec]) ) return;
  if( ! &((*this)[sec]) ) return;
  TCanvas* canv=(*this)[sec].getCanvasHits();
  if(canv) {
    canv->cd(1);
    (*this)[sec].getPlotAllHits()->Draw();
    canv->cd(2);
    (*this)[sec].getPlotSelHits()->Draw();
    canv->Modified();
    canv->Update();
  }
}


void HMdcEfficiency::printClusters(Int_t sec) {
  iterClus->Reset();
  HMdcClus* fClus;
  while((fClus=(HMdcClus*)iterClus->Next())) if(fClus->getSec()==sec) {
      if(!drawGoodClus || fClus->getStatus()==1) fClus->print();
  }
}

void HMdcEfficiency::calcEfficiency(Bool_t flag) {
  gStyle->SetTitleX(0.25);
  gStyle->SetTitleW(0.5);
  gStyle->SetTitleH(0.09);
  for(Int_t sec=0; sec<6; sec++){
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!&fsec) continue;
    if(flag) {
      for(Int_t mod=0; mod<4; mod++){
        HMdcEfficiencyMod& fmod=fsec[mod];
        if(!&fmod) continue;
        for(Int_t lay=0; lay<6; lay++) {
          fmod[lay].fillHists();
          fmod[lay].updateCanv();
          fmod[lay].updateCanvXYlist();
        }
        fmod.fillHistMb();
        fmod.updateCanv();
      }
    }
    drawProjPlotsSec(sec,typePrPlot[sec]);
    drawHitsPlots(sec);
  }
  drawPrPlEvent();
  canvasSummary = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("EffSumm");
  if(canvasSummary) drawSummary(kTRUE);
}

Bool_t HMdcEfficiency::finalize(void) {
  // writeHists();
  return kTRUE;
}

void HMdcEfficiency::extractFileInfo(void) {
  firstEvent=kFALSE;
  HMdcGetContainers::getFileName(fileName);
  TString runId;
  HMdcGetContainers::getRunId(runId);
  TString date;
  HMdcGetContainers::getEventDate(date);
  TString time;
  HMdcGetContainers::getEventTime(time);
  Char_t buf[200];
  sprintf(buf,"%s   runId:%s  %s  %s",
      fileName.Data(),runId.Data(),date.Data(),time.Data());
  fileId=buf;
}

void HMdcEfficiency::saveHist(const TString& outputDir) {
  fileName=outputDir;
  fileName.Remove(TString::kTrailing, '/');
  fileName+="/MDC";
  saveHist();
}

void HMdcEfficiency::saveHist(void) {
  calcEfficiency();
  Char_t buf[200];
  sprintf(buf,"%s_MdcEff.root",fileName.Data());
  fRootOut = new TFile(buf,"RECREATE");
  
  gROOT->SetBatch();
  for(Int_t sec=0; sec<6; sec++){
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!&fsec) continue;
    fsec.saveCanvHits(1);
    for(Int_t mod=0; mod<4; mod++){
      HMdcEfficiencyMod& fmod=fsec[mod];
      if(!&fmod) continue;
      fmod.saveCanvases(1);
      fmod.saveCanvEffMb(1);
      if(fCalCat) fmod.drawCanvTimes(-1,1);
      
//      fmod.fillHistMb();
//      fmod.updateCanv();
    }
  }
  saveAs((Char_t*)fileName.Data(),"Pattern");
  saveAs((Char_t*)fileName.Data(),"Ratio");
  
  saveAs((Char_t*)fileName.Data(),"Eff");
  if(fCalCat) saveAs((Char_t*)fileName.Data(),"Times");
  saveAs((Char_t*)fileName.Data(),"EffMb");
  
  drawSummary(kTRUE);
  fRootOut->cd();
  Char_t gifFile[500];
  
  sprintf(gifFile,"%s_%s.gif",fileName.Data(),"Summary");
//  canvasSummary->SaveAs(gifFile);
  canvasSummary->Print(gifFile);
  
//   sprintf(gifFile,"%s_Summary.eps",fileName.Data());
//   canvasSummary->SaveAs(gifFile);
//   Char_t command[500];
//   sprintf(command,"convert %s %s_Summary.gif",gifFile,fileName.Data());
//   gSystem->Exec(command);
//   sprintf(command,"rm %s",gifFile);
//   gSystem->Exec(command);

  canvasSummary->Write();
  
  gROOT->SetBatch(kFALSE);
  fRootOut->Close();
  delete fRootOut;
  fRootOut = 0;
}

void HMdcEfficiency::saveAs(const Char_t* fileName,const Char_t* type) {
  Char_t psFileOp[500];
  sprintf(psFileOp,"%s_%s.pdf(",fileName,type);
  Char_t psFile[500];
  sprintf(psFile,"%s_%s.pdf",fileName,type);
  Char_t psFileCl[500];
  sprintf(psFileCl,"%s_%s.pdf)",fileName,type);
  
  Char_t buf[100];
  TCanvas* cn=0;
  Int_t nCn=0;
  for(Int_t m=0;m<4;m++) {
    for(Int_t s=0;s<6;s++) {
      sprintf(buf,"S%iM%i_%s",s+1,m+1,type);
      TCanvas* cnNext=(TCanvas*)gROOT->FindObject(buf);
      if(cnNext) {
        if(nCn==1)     cn->Print(psFileOp);
        else if(nCn>1) cn->Print(psFile);
        nCn++;
        cn=cnNext;
        cn->Draw();
      }
    }
  }
  if(nCn==1)     cn->Print(psFile);
  else if(nCn>1) cn->Print(psFileCl);
//  if(nCn>0) makePDF(psFile);
  return;
}

void HMdcEfficiency::savePDF(const Char_t* fileName,const Char_t* type) {
  // type = "Pattern","Eff","EffMb","NtrNhits","SingC","Prob","Times"
  gROOT->SetBatch();
  TString rootFile(fileName);
  rootFile += ".root";
  TFile* file=TFile::Open(rootFile.Data(),"READ");
  if(file) {
    saveAs(fileName,type);
    file->Close();
    delete file;
  } else printf("\nFile %s.root don't exist!\n\n",fileName);
  gROOT->SetBatch(kFALSE);
  return;
}

void HMdcEfficiency::makePDF(const Char_t* psFile) {
  // Execute ps2pdf GhostScript command on closed PS file, delete PS file 
  Char_t command[500];
  sprintf(command,"ps2pdf %s",psFile);
  gSystem->Exec(command);
  sprintf(command,"rm %s",psFile);
  gSystem->Exec(command);
}

void HMdcEfficiency::drawSummary(Bool_t flag) {
  canvasSummary = (TCanvas*)gROOT->GetListOfCanvases()->FindObject("EffSumm");
  if(!flag) {
    if(canvasSummary) {
      delete canvasSummary;
      canvasSummary = 0;
    }
    return;
  }
  gROOT->cd();
  if(histSummary==0) {
    histSummary = new TH1F("EffSumm",
      "Mdc Efficiency Summary; Chamber;<Layer Efficiency>",144,0,24);
    const Char_t* xLab[6][4]={{"I1","II1","III1","IV1"},
                              {"I2","II2","III2","IV2"},
                              {"I3","II3","III3","IV3"},
                              {"I4","II4","III4","IV4"},
                              {"I5","II5","III5","IV5"},
                              {"I6","II6","III6","IV6"}};
    TAxis* ax = histSummary->GetXaxis();
    ax->SetNdivisions(524);
    for(Int_t m=0;m<4;m++) for(Int_t s=0;s<6;s++) ax->SetBinLabel(s*6+m*36+3,xLab[s][m]);
  }
  
  if(canvasSummary==0) {
    canvasSummary = new TCanvas("EffSumm","Mdc Efficiency Summary", 840,630);
    canvasSummary->cd();
    canvasSummary->SetBorderSize(2);
    canvasSummary->SetFillColor(0);
    canvasSummary->SetFrameFillColor(0);
    canvasSummary->SetFrameBorderMode(0);
    canvasSummary->SetGridx();
    canvasSummary->SetGridy();
  }
  Double_t effMod[6][4];
  Int_t    nWires[6][4];
  for(Int_t mod=0;mod<4;mod++) for(Int_t sec=0;sec<6;sec++) {
    effMod[sec][mod]=0.;
    nWires[sec][mod]=0;
  }
  for(Int_t mod=0;mod<4;mod++) for(Int_t sec=0;sec<6;sec++) {
    HMdcEfficiencySec& fsec=(*this)[sec];
    if(!&fsec) continue;
    HMdcEfficiencyMod& fmod=fsec[mod];
    if(!&fmod) continue;
    for(Int_t lay=0;lay<6;lay++) {
      HMdcEfficiencyLayer& flay=fmod[lay];
      if(!&flay) continue;
      TH1F* hsEff=flay.getHist(6);
      TH1F* hsTrk=flay.getHist(2);
      TH1F* hsPat=flay.getHist(0);
      if(hsEff==0 || hsTrk==0) continue;
      Double_t effSum  = 0.;
      Double_t effSum2 = 0.;
      Int_t    sen     = 0;
      Int_t nbins = flay.getNumCells();
      for(Int_t b=5;b<=nbins-10;b++) {
        if(hsTrk->GetBinContent(b) < 50.) continue;
        if(hsPat->GetBinContent(b) < 50.) continue;
        Double_t err = hsEff->GetBinError(b);
        if(err==0.) continue;
if(err>0.2) continue; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        Double_t vl = hsEff->GetBinContent(b);
//        if(vl<0.2) continue;
if(vl<0.8) continue; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        effSum  += vl;
        effSum2 += vl*vl;
        sen++;
        effMod[sec][mod] += vl;
        nWires[sec][mod]++;
      }
      if(sen>0) {
        Int_t bin = sec*6+mod*36+lay+1;
        Double_t effL = effSum/sen;
        histSummary->SetBinContent(bin,effL);
        Double_t err  = TMath::Sqrt( (effSum2/sen-effL*effL)/sen );
        histSummary->SetBinError(bin,err);
      }      
    }
  }
  canvasSummary->cd();
  histSummary->SetMinimum(0.5);
  histSummary->SetMaximum(1.02);
  histSummary->GetYaxis()->SetNdivisions(511);
  histSummary->Draw();
  Int_t color[4]={2,8,4,6};
  for(Int_t mod=0;mod<4;mod++) for(Int_t sec=0;sec<6;sec++) {
    if(nWires[sec][mod]==0) continue;
    effMod[sec][mod] /= nWires[sec][mod];
    TLine* ln= new TLine();
    ln->SetLineColor(color[mod]);
    ln->SetLineWidth(2);
    ln->DrawLine(sec+mod*6,effMod[sec][mod],sec+mod*6+1,effMod[sec][mod]);
  }
  canvasSummary->Modified();
  canvasSummary->Update();
  TPaveText* pTitle = (TPaveText*)(canvasSummary->FindObject("title"));
  if(pTitle != NULL) pTitle->SetFillColor(0);
  canvasSummary->Modified();
  canvasSummary->Update();
}
 hmdcefficiency.cc:1
 hmdcefficiency.cc:2
 hmdcefficiency.cc:3
 hmdcefficiency.cc:4
 hmdcefficiency.cc:5
 hmdcefficiency.cc:6
 hmdcefficiency.cc:7
 hmdcefficiency.cc:8
 hmdcefficiency.cc:9
 hmdcefficiency.cc:10
 hmdcefficiency.cc:11
 hmdcefficiency.cc:12
 hmdcefficiency.cc:13
 hmdcefficiency.cc:14
 hmdcefficiency.cc:15
 hmdcefficiency.cc:16
 hmdcefficiency.cc:17
 hmdcefficiency.cc:18
 hmdcefficiency.cc:19
 hmdcefficiency.cc:20
 hmdcefficiency.cc:21
 hmdcefficiency.cc:22
 hmdcefficiency.cc:23
 hmdcefficiency.cc:24
 hmdcefficiency.cc:25
 hmdcefficiency.cc:26
 hmdcefficiency.cc:27
 hmdcefficiency.cc:28
 hmdcefficiency.cc:29
 hmdcefficiency.cc:30
 hmdcefficiency.cc:31
 hmdcefficiency.cc:32
 hmdcefficiency.cc:33
 hmdcefficiency.cc:34
 hmdcefficiency.cc:35
 hmdcefficiency.cc:36
 hmdcefficiency.cc:37
 hmdcefficiency.cc:38
 hmdcefficiency.cc:39
 hmdcefficiency.cc:40
 hmdcefficiency.cc:41
 hmdcefficiency.cc:42
 hmdcefficiency.cc:43
 hmdcefficiency.cc:44
 hmdcefficiency.cc:45
 hmdcefficiency.cc:46
 hmdcefficiency.cc:47
 hmdcefficiency.cc:48
 hmdcefficiency.cc:49
 hmdcefficiency.cc:50
 hmdcefficiency.cc:51
 hmdcefficiency.cc:52
 hmdcefficiency.cc:53
 hmdcefficiency.cc:54
 hmdcefficiency.cc:55
 hmdcefficiency.cc:56
 hmdcefficiency.cc:57
 hmdcefficiency.cc:58
 hmdcefficiency.cc:59
 hmdcefficiency.cc:60
 hmdcefficiency.cc:61
 hmdcefficiency.cc:62
 hmdcefficiency.cc:63
 hmdcefficiency.cc:64
 hmdcefficiency.cc:65
 hmdcefficiency.cc:66
 hmdcefficiency.cc:67
 hmdcefficiency.cc:68
 hmdcefficiency.cc:69
 hmdcefficiency.cc:70
 hmdcefficiency.cc:71
 hmdcefficiency.cc:72
 hmdcefficiency.cc:73
 hmdcefficiency.cc:74
 hmdcefficiency.cc:75
 hmdcefficiency.cc:76
 hmdcefficiency.cc:77
 hmdcefficiency.cc:78
 hmdcefficiency.cc:79
 hmdcefficiency.cc:80
 hmdcefficiency.cc:81
 hmdcefficiency.cc:82
 hmdcefficiency.cc:83
 hmdcefficiency.cc:84
 hmdcefficiency.cc:85
 hmdcefficiency.cc:86
 hmdcefficiency.cc:87
 hmdcefficiency.cc:88
 hmdcefficiency.cc:89
 hmdcefficiency.cc:90
 hmdcefficiency.cc:91
 hmdcefficiency.cc:92
 hmdcefficiency.cc:93
 hmdcefficiency.cc:94
 hmdcefficiency.cc:95
 hmdcefficiency.cc:96
 hmdcefficiency.cc:97
 hmdcefficiency.cc:98
 hmdcefficiency.cc:99
 hmdcefficiency.cc:100
 hmdcefficiency.cc:101
 hmdcefficiency.cc:102
 hmdcefficiency.cc:103
 hmdcefficiency.cc:104
 hmdcefficiency.cc:105
 hmdcefficiency.cc:106
 hmdcefficiency.cc:107
 hmdcefficiency.cc:108
 hmdcefficiency.cc:109
 hmdcefficiency.cc:110
 hmdcefficiency.cc:111
 hmdcefficiency.cc:112
 hmdcefficiency.cc:113
 hmdcefficiency.cc:114
 hmdcefficiency.cc:115
 hmdcefficiency.cc:116
 hmdcefficiency.cc:117
 hmdcefficiency.cc:118
 hmdcefficiency.cc:119
 hmdcefficiency.cc:120
 hmdcefficiency.cc:121
 hmdcefficiency.cc:122
 hmdcefficiency.cc:123
 hmdcefficiency.cc:124
 hmdcefficiency.cc:125
 hmdcefficiency.cc:126
 hmdcefficiency.cc:127
 hmdcefficiency.cc:128
 hmdcefficiency.cc:129
 hmdcefficiency.cc:130
 hmdcefficiency.cc:131
 hmdcefficiency.cc:132
 hmdcefficiency.cc:133
 hmdcefficiency.cc:134
 hmdcefficiency.cc:135
 hmdcefficiency.cc:136
 hmdcefficiency.cc:137
 hmdcefficiency.cc:138
 hmdcefficiency.cc:139
 hmdcefficiency.cc:140
 hmdcefficiency.cc:141
 hmdcefficiency.cc:142
 hmdcefficiency.cc:143
 hmdcefficiency.cc:144
 hmdcefficiency.cc:145
 hmdcefficiency.cc:146
 hmdcefficiency.cc:147
 hmdcefficiency.cc:148
 hmdcefficiency.cc:149
 hmdcefficiency.cc:150
 hmdcefficiency.cc:151
 hmdcefficiency.cc:152
 hmdcefficiency.cc:153
 hmdcefficiency.cc:154
 hmdcefficiency.cc:155
 hmdcefficiency.cc:156
 hmdcefficiency.cc:157
 hmdcefficiency.cc:158
 hmdcefficiency.cc:159
 hmdcefficiency.cc:160
 hmdcefficiency.cc:161
 hmdcefficiency.cc:162
 hmdcefficiency.cc:163
 hmdcefficiency.cc:164
 hmdcefficiency.cc:165
 hmdcefficiency.cc:166
 hmdcefficiency.cc:167
 hmdcefficiency.cc:168
 hmdcefficiency.cc:169
 hmdcefficiency.cc:170
 hmdcefficiency.cc:171
 hmdcefficiency.cc:172
 hmdcefficiency.cc:173
 hmdcefficiency.cc:174
 hmdcefficiency.cc:175
 hmdcefficiency.cc:176
 hmdcefficiency.cc:177
 hmdcefficiency.cc:178
 hmdcefficiency.cc:179
 hmdcefficiency.cc:180
 hmdcefficiency.cc:181
 hmdcefficiency.cc:182
 hmdcefficiency.cc:183
 hmdcefficiency.cc:184
 hmdcefficiency.cc:185
 hmdcefficiency.cc:186
 hmdcefficiency.cc:187
 hmdcefficiency.cc:188
 hmdcefficiency.cc:189
 hmdcefficiency.cc:190
 hmdcefficiency.cc:191
 hmdcefficiency.cc:192
 hmdcefficiency.cc:193
 hmdcefficiency.cc:194
 hmdcefficiency.cc:195
 hmdcefficiency.cc:196
 hmdcefficiency.cc:197
 hmdcefficiency.cc:198
 hmdcefficiency.cc:199
 hmdcefficiency.cc:200
 hmdcefficiency.cc:201
 hmdcefficiency.cc:202
 hmdcefficiency.cc:203
 hmdcefficiency.cc:204
 hmdcefficiency.cc:205
 hmdcefficiency.cc:206
 hmdcefficiency.cc:207
 hmdcefficiency.cc:208
 hmdcefficiency.cc:209
 hmdcefficiency.cc:210
 hmdcefficiency.cc:211
 hmdcefficiency.cc:212
 hmdcefficiency.cc:213
 hmdcefficiency.cc:214
 hmdcefficiency.cc:215
 hmdcefficiency.cc:216
 hmdcefficiency.cc:217
 hmdcefficiency.cc:218
 hmdcefficiency.cc:219
 hmdcefficiency.cc:220
 hmdcefficiency.cc:221
 hmdcefficiency.cc:222
 hmdcefficiency.cc:223
 hmdcefficiency.cc:224
 hmdcefficiency.cc:225
 hmdcefficiency.cc:226
 hmdcefficiency.cc:227
 hmdcefficiency.cc:228
 hmdcefficiency.cc:229
 hmdcefficiency.cc:230
 hmdcefficiency.cc:231
 hmdcefficiency.cc:232
 hmdcefficiency.cc:233
 hmdcefficiency.cc:234
 hmdcefficiency.cc:235
 hmdcefficiency.cc:236
 hmdcefficiency.cc:237
 hmdcefficiency.cc:238
 hmdcefficiency.cc:239
 hmdcefficiency.cc:240
 hmdcefficiency.cc:241
 hmdcefficiency.cc:242
 hmdcefficiency.cc:243
 hmdcefficiency.cc:244
 hmdcefficiency.cc:245
 hmdcefficiency.cc:246
 hmdcefficiency.cc:247
 hmdcefficiency.cc:248
 hmdcefficiency.cc:249
 hmdcefficiency.cc:250
 hmdcefficiency.cc:251
 hmdcefficiency.cc:252
 hmdcefficiency.cc:253
 hmdcefficiency.cc:254
 hmdcefficiency.cc:255
 hmdcefficiency.cc:256
 hmdcefficiency.cc:257
 hmdcefficiency.cc:258
 hmdcefficiency.cc:259
 hmdcefficiency.cc:260
 hmdcefficiency.cc:261
 hmdcefficiency.cc:262
 hmdcefficiency.cc:263
 hmdcefficiency.cc:264
 hmdcefficiency.cc:265
 hmdcefficiency.cc:266
 hmdcefficiency.cc:267
 hmdcefficiency.cc:268
 hmdcefficiency.cc:269
 hmdcefficiency.cc:270
 hmdcefficiency.cc:271
 hmdcefficiency.cc:272
 hmdcefficiency.cc:273
 hmdcefficiency.cc:274
 hmdcefficiency.cc:275
 hmdcefficiency.cc:276
 hmdcefficiency.cc:277
 hmdcefficiency.cc:278
 hmdcefficiency.cc:279
 hmdcefficiency.cc:280
 hmdcefficiency.cc:281
 hmdcefficiency.cc:282
 hmdcefficiency.cc:283
 hmdcefficiency.cc:284
 hmdcefficiency.cc:285
 hmdcefficiency.cc:286
 hmdcefficiency.cc:287
 hmdcefficiency.cc:288
 hmdcefficiency.cc:289
 hmdcefficiency.cc:290
 hmdcefficiency.cc:291
 hmdcefficiency.cc:292
 hmdcefficiency.cc:293
 hmdcefficiency.cc:294
 hmdcefficiency.cc:295
 hmdcefficiency.cc:296
 hmdcefficiency.cc:297
 hmdcefficiency.cc:298
 hmdcefficiency.cc:299
 hmdcefficiency.cc:300
 hmdcefficiency.cc:301
 hmdcefficiency.cc:302
 hmdcefficiency.cc:303
 hmdcefficiency.cc:304
 hmdcefficiency.cc:305
 hmdcefficiency.cc:306
 hmdcefficiency.cc:307
 hmdcefficiency.cc:308
 hmdcefficiency.cc:309
 hmdcefficiency.cc:310
 hmdcefficiency.cc:311
 hmdcefficiency.cc:312
 hmdcefficiency.cc:313
 hmdcefficiency.cc:314
 hmdcefficiency.cc:315
 hmdcefficiency.cc:316
 hmdcefficiency.cc:317
 hmdcefficiency.cc:318
 hmdcefficiency.cc:319
 hmdcefficiency.cc:320
 hmdcefficiency.cc:321
 hmdcefficiency.cc:322
 hmdcefficiency.cc:323
 hmdcefficiency.cc:324
 hmdcefficiency.cc:325
 hmdcefficiency.cc:326
 hmdcefficiency.cc:327
 hmdcefficiency.cc:328
 hmdcefficiency.cc:329
 hmdcefficiency.cc:330
 hmdcefficiency.cc:331
 hmdcefficiency.cc:332
 hmdcefficiency.cc:333
 hmdcefficiency.cc:334
 hmdcefficiency.cc:335
 hmdcefficiency.cc:336
 hmdcefficiency.cc:337
 hmdcefficiency.cc:338
 hmdcefficiency.cc:339
 hmdcefficiency.cc:340
 hmdcefficiency.cc:341
 hmdcefficiency.cc:342
 hmdcefficiency.cc:343
 hmdcefficiency.cc:344
 hmdcefficiency.cc:345
 hmdcefficiency.cc:346
 hmdcefficiency.cc:347
 hmdcefficiency.cc:348
 hmdcefficiency.cc:349
 hmdcefficiency.cc:350
 hmdcefficiency.cc:351
 hmdcefficiency.cc:352
 hmdcefficiency.cc:353
 hmdcefficiency.cc:354
 hmdcefficiency.cc:355
 hmdcefficiency.cc:356
 hmdcefficiency.cc:357
 hmdcefficiency.cc:358
 hmdcefficiency.cc:359
 hmdcefficiency.cc:360
 hmdcefficiency.cc:361
 hmdcefficiency.cc:362
 hmdcefficiency.cc:363
 hmdcefficiency.cc:364
 hmdcefficiency.cc:365
 hmdcefficiency.cc:366
 hmdcefficiency.cc:367
 hmdcefficiency.cc:368
 hmdcefficiency.cc:369
 hmdcefficiency.cc:370
 hmdcefficiency.cc:371
 hmdcefficiency.cc:372
 hmdcefficiency.cc:373
 hmdcefficiency.cc:374
 hmdcefficiency.cc:375
 hmdcefficiency.cc:376
 hmdcefficiency.cc:377
 hmdcefficiency.cc:378
 hmdcefficiency.cc:379
 hmdcefficiency.cc:380
 hmdcefficiency.cc:381
 hmdcefficiency.cc:382
 hmdcefficiency.cc:383
 hmdcefficiency.cc:384
 hmdcefficiency.cc:385
 hmdcefficiency.cc:386
 hmdcefficiency.cc:387
 hmdcefficiency.cc:388
 hmdcefficiency.cc:389
 hmdcefficiency.cc:390
 hmdcefficiency.cc:391
 hmdcefficiency.cc:392
 hmdcefficiency.cc:393
 hmdcefficiency.cc:394
 hmdcefficiency.cc:395
 hmdcefficiency.cc:396
 hmdcefficiency.cc:397
 hmdcefficiency.cc:398
 hmdcefficiency.cc:399
 hmdcefficiency.cc:400
 hmdcefficiency.cc:401
 hmdcefficiency.cc:402
 hmdcefficiency.cc:403
 hmdcefficiency.cc:404
 hmdcefficiency.cc:405
 hmdcefficiency.cc:406
 hmdcefficiency.cc:407
 hmdcefficiency.cc:408
 hmdcefficiency.cc:409
 hmdcefficiency.cc:410
 hmdcefficiency.cc:411
 hmdcefficiency.cc:412
 hmdcefficiency.cc:413
 hmdcefficiency.cc:414
 hmdcefficiency.cc:415
 hmdcefficiency.cc:416
 hmdcefficiency.cc:417
 hmdcefficiency.cc:418
 hmdcefficiency.cc:419
 hmdcefficiency.cc:420
 hmdcefficiency.cc:421
 hmdcefficiency.cc:422
 hmdcefficiency.cc:423
 hmdcefficiency.cc:424
 hmdcefficiency.cc:425
 hmdcefficiency.cc:426
 hmdcefficiency.cc:427
 hmdcefficiency.cc:428
 hmdcefficiency.cc:429
 hmdcefficiency.cc:430
 hmdcefficiency.cc:431
 hmdcefficiency.cc:432
 hmdcefficiency.cc:433
 hmdcefficiency.cc:434
 hmdcefficiency.cc:435
 hmdcefficiency.cc:436
 hmdcefficiency.cc:437
 hmdcefficiency.cc:438
 hmdcefficiency.cc:439
 hmdcefficiency.cc:440
 hmdcefficiency.cc:441
 hmdcefficiency.cc:442
 hmdcefficiency.cc:443
 hmdcefficiency.cc:444
 hmdcefficiency.cc:445
 hmdcefficiency.cc:446
 hmdcefficiency.cc:447
 hmdcefficiency.cc:448
 hmdcefficiency.cc:449
 hmdcefficiency.cc:450
 hmdcefficiency.cc:451
 hmdcefficiency.cc:452
 hmdcefficiency.cc:453
 hmdcefficiency.cc:454
 hmdcefficiency.cc:455
 hmdcefficiency.cc:456
 hmdcefficiency.cc:457
 hmdcefficiency.cc:458
 hmdcefficiency.cc:459
 hmdcefficiency.cc:460
 hmdcefficiency.cc:461
 hmdcefficiency.cc:462
 hmdcefficiency.cc:463
 hmdcefficiency.cc:464
 hmdcefficiency.cc:465
 hmdcefficiency.cc:466
 hmdcefficiency.cc:467
 hmdcefficiency.cc:468
 hmdcefficiency.cc:469
 hmdcefficiency.cc:470
 hmdcefficiency.cc:471
 hmdcefficiency.cc:472
 hmdcefficiency.cc:473
 hmdcefficiency.cc:474
 hmdcefficiency.cc:475
 hmdcefficiency.cc:476
 hmdcefficiency.cc:477
 hmdcefficiency.cc:478
 hmdcefficiency.cc:479
 hmdcefficiency.cc:480
 hmdcefficiency.cc:481
 hmdcefficiency.cc:482
 hmdcefficiency.cc:483
 hmdcefficiency.cc:484
 hmdcefficiency.cc:485
 hmdcefficiency.cc:486
 hmdcefficiency.cc:487
 hmdcefficiency.cc:488
 hmdcefficiency.cc:489
 hmdcefficiency.cc:490
 hmdcefficiency.cc:491
 hmdcefficiency.cc:492
 hmdcefficiency.cc:493
 hmdcefficiency.cc:494
 hmdcefficiency.cc:495
 hmdcefficiency.cc:496
 hmdcefficiency.cc:497
 hmdcefficiency.cc:498
 hmdcefficiency.cc:499
 hmdcefficiency.cc:500
 hmdcefficiency.cc:501
 hmdcefficiency.cc:502
 hmdcefficiency.cc:503
 hmdcefficiency.cc:504
 hmdcefficiency.cc:505
 hmdcefficiency.cc:506
 hmdcefficiency.cc:507
 hmdcefficiency.cc:508
 hmdcefficiency.cc:509
 hmdcefficiency.cc:510
 hmdcefficiency.cc:511
 hmdcefficiency.cc:512
 hmdcefficiency.cc:513
 hmdcefficiency.cc:514
 hmdcefficiency.cc:515
 hmdcefficiency.cc:516
 hmdcefficiency.cc:517
 hmdcefficiency.cc:518
 hmdcefficiency.cc:519
 hmdcefficiency.cc:520
 hmdcefficiency.cc:521
 hmdcefficiency.cc:522
 hmdcefficiency.cc:523
 hmdcefficiency.cc:524
 hmdcefficiency.cc:525
 hmdcefficiency.cc:526
 hmdcefficiency.cc:527
 hmdcefficiency.cc:528
 hmdcefficiency.cc:529
 hmdcefficiency.cc:530
 hmdcefficiency.cc:531
 hmdcefficiency.cc:532
 hmdcefficiency.cc:533
 hmdcefficiency.cc:534
 hmdcefficiency.cc:535
 hmdcefficiency.cc:536
 hmdcefficiency.cc:537
 hmdcefficiency.cc:538
 hmdcefficiency.cc:539
 hmdcefficiency.cc:540
 hmdcefficiency.cc:541
 hmdcefficiency.cc:542
 hmdcefficiency.cc:543
 hmdcefficiency.cc:544
 hmdcefficiency.cc:545
 hmdcefficiency.cc:546
 hmdcefficiency.cc:547
 hmdcefficiency.cc:548
 hmdcefficiency.cc:549
 hmdcefficiency.cc:550
 hmdcefficiency.cc:551
 hmdcefficiency.cc:552
 hmdcefficiency.cc:553
 hmdcefficiency.cc:554
 hmdcefficiency.cc:555
 hmdcefficiency.cc:556
 hmdcefficiency.cc:557
 hmdcefficiency.cc:558
 hmdcefficiency.cc:559
 hmdcefficiency.cc:560
 hmdcefficiency.cc:561
 hmdcefficiency.cc:562
 hmdcefficiency.cc:563
 hmdcefficiency.cc:564
 hmdcefficiency.cc:565
 hmdcefficiency.cc:566
 hmdcefficiency.cc:567
 hmdcefficiency.cc:568
 hmdcefficiency.cc:569
 hmdcefficiency.cc:570
 hmdcefficiency.cc:571
 hmdcefficiency.cc:572
 hmdcefficiency.cc:573
 hmdcefficiency.cc:574
 hmdcefficiency.cc:575
 hmdcefficiency.cc:576
 hmdcefficiency.cc:577
 hmdcefficiency.cc:578
 hmdcefficiency.cc:579
 hmdcefficiency.cc:580
 hmdcefficiency.cc:581
 hmdcefficiency.cc:582
 hmdcefficiency.cc:583
 hmdcefficiency.cc:584
 hmdcefficiency.cc:585
 hmdcefficiency.cc:586
 hmdcefficiency.cc:587
 hmdcefficiency.cc:588
 hmdcefficiency.cc:589
 hmdcefficiency.cc:590
 hmdcefficiency.cc:591
 hmdcefficiency.cc:592
 hmdcefficiency.cc:593
 hmdcefficiency.cc:594
 hmdcefficiency.cc:595
 hmdcefficiency.cc:596
 hmdcefficiency.cc:597
 hmdcefficiency.cc:598
 hmdcefficiency.cc:599
 hmdcefficiency.cc:600
 hmdcefficiency.cc:601
 hmdcefficiency.cc:602
 hmdcefficiency.cc:603
 hmdcefficiency.cc:604
 hmdcefficiency.cc:605
 hmdcefficiency.cc:606
 hmdcefficiency.cc:607
 hmdcefficiency.cc:608
 hmdcefficiency.cc:609
 hmdcefficiency.cc:610
 hmdcefficiency.cc:611
 hmdcefficiency.cc:612
 hmdcefficiency.cc:613
 hmdcefficiency.cc:614
 hmdcefficiency.cc:615
 hmdcefficiency.cc:616
 hmdcefficiency.cc:617
 hmdcefficiency.cc:618
 hmdcefficiency.cc:619
 hmdcefficiency.cc:620
 hmdcefficiency.cc:621
 hmdcefficiency.cc:622
 hmdcefficiency.cc:623
 hmdcefficiency.cc:624
 hmdcefficiency.cc:625
 hmdcefficiency.cc:626
 hmdcefficiency.cc:627
 hmdcefficiency.cc:628
 hmdcefficiency.cc:629
 hmdcefficiency.cc:630
 hmdcefficiency.cc:631
 hmdcefficiency.cc:632
 hmdcefficiency.cc:633
 hmdcefficiency.cc:634
 hmdcefficiency.cc:635
 hmdcefficiency.cc:636
 hmdcefficiency.cc:637
 hmdcefficiency.cc:638
 hmdcefficiency.cc:639
 hmdcefficiency.cc:640
 hmdcefficiency.cc:641
 hmdcefficiency.cc:642
 hmdcefficiency.cc:643
 hmdcefficiency.cc:644
 hmdcefficiency.cc:645
 hmdcefficiency.cc:646
 hmdcefficiency.cc:647
 hmdcefficiency.cc:648
 hmdcefficiency.cc:649
 hmdcefficiency.cc:650
 hmdcefficiency.cc:651
 hmdcefficiency.cc:652
 hmdcefficiency.cc:653
 hmdcefficiency.cc:654
 hmdcefficiency.cc:655
 hmdcefficiency.cc:656
 hmdcefficiency.cc:657
 hmdcefficiency.cc:658
 hmdcefficiency.cc:659
 hmdcefficiency.cc:660
 hmdcefficiency.cc:661
 hmdcefficiency.cc:662
 hmdcefficiency.cc:663
 hmdcefficiency.cc:664
 hmdcefficiency.cc:665
 hmdcefficiency.cc:666
 hmdcefficiency.cc:667
 hmdcefficiency.cc:668
 hmdcefficiency.cc:669
 hmdcefficiency.cc:670
 hmdcefficiency.cc:671
 hmdcefficiency.cc:672
 hmdcefficiency.cc:673
 hmdcefficiency.cc:674
 hmdcefficiency.cc:675
 hmdcefficiency.cc:676
 hmdcefficiency.cc:677
 hmdcefficiency.cc:678
 hmdcefficiency.cc:679
 hmdcefficiency.cc:680
 hmdcefficiency.cc:681
 hmdcefficiency.cc:682
 hmdcefficiency.cc:683
 hmdcefficiency.cc:684
 hmdcefficiency.cc:685
 hmdcefficiency.cc:686
 hmdcefficiency.cc:687
 hmdcefficiency.cc:688
 hmdcefficiency.cc:689
 hmdcefficiency.cc:690
 hmdcefficiency.cc:691
 hmdcefficiency.cc:692
 hmdcefficiency.cc:693
 hmdcefficiency.cc:694
 hmdcefficiency.cc:695
 hmdcefficiency.cc:696
 hmdcefficiency.cc:697
 hmdcefficiency.cc:698
 hmdcefficiency.cc:699
 hmdcefficiency.cc:700
 hmdcefficiency.cc:701
 hmdcefficiency.cc:702
 hmdcefficiency.cc:703
 hmdcefficiency.cc:704
 hmdcefficiency.cc:705
 hmdcefficiency.cc:706
 hmdcefficiency.cc:707
 hmdcefficiency.cc:708
 hmdcefficiency.cc:709
 hmdcefficiency.cc:710
 hmdcefficiency.cc:711
 hmdcefficiency.cc:712
 hmdcefficiency.cc:713
 hmdcefficiency.cc:714
 hmdcefficiency.cc:715
 hmdcefficiency.cc:716
 hmdcefficiency.cc:717
 hmdcefficiency.cc:718
 hmdcefficiency.cc:719
 hmdcefficiency.cc:720
 hmdcefficiency.cc:721
 hmdcefficiency.cc:722
 hmdcefficiency.cc:723
 hmdcefficiency.cc:724
 hmdcefficiency.cc:725
 hmdcefficiency.cc:726
 hmdcefficiency.cc:727
 hmdcefficiency.cc:728
 hmdcefficiency.cc:729
 hmdcefficiency.cc:730
 hmdcefficiency.cc:731
 hmdcefficiency.cc:732
 hmdcefficiency.cc:733
 hmdcefficiency.cc:734
 hmdcefficiency.cc:735
 hmdcefficiency.cc:736
 hmdcefficiency.cc:737
 hmdcefficiency.cc:738
 hmdcefficiency.cc:739
 hmdcefficiency.cc:740
 hmdcefficiency.cc:741
 hmdcefficiency.cc:742
 hmdcefficiency.cc:743
 hmdcefficiency.cc:744
 hmdcefficiency.cc:745
 hmdcefficiency.cc:746
 hmdcefficiency.cc:747
 hmdcefficiency.cc:748
 hmdcefficiency.cc:749
 hmdcefficiency.cc:750
 hmdcefficiency.cc:751
 hmdcefficiency.cc:752
 hmdcefficiency.cc:753
 hmdcefficiency.cc:754
 hmdcefficiency.cc:755
 hmdcefficiency.cc:756
 hmdcefficiency.cc:757
 hmdcefficiency.cc:758
 hmdcefficiency.cc:759
 hmdcefficiency.cc:760
 hmdcefficiency.cc:761
 hmdcefficiency.cc:762
 hmdcefficiency.cc:763
 hmdcefficiency.cc:764
 hmdcefficiency.cc:765
 hmdcefficiency.cc:766
 hmdcefficiency.cc:767
 hmdcefficiency.cc:768
 hmdcefficiency.cc:769
 hmdcefficiency.cc:770
 hmdcefficiency.cc:771
 hmdcefficiency.cc:772
 hmdcefficiency.cc:773
 hmdcefficiency.cc:774
 hmdcefficiency.cc:775
 hmdcefficiency.cc:776
 hmdcefficiency.cc:777
 hmdcefficiency.cc:778
 hmdcefficiency.cc:779
 hmdcefficiency.cc:780
 hmdcefficiency.cc:781
 hmdcefficiency.cc:782
 hmdcefficiency.cc:783
 hmdcefficiency.cc:784
 hmdcefficiency.cc:785
 hmdcefficiency.cc:786
 hmdcefficiency.cc:787
 hmdcefficiency.cc:788
 hmdcefficiency.cc:789
 hmdcefficiency.cc:790
 hmdcefficiency.cc:791
 hmdcefficiency.cc:792
 hmdcefficiency.cc:793
 hmdcefficiency.cc:794
 hmdcefficiency.cc:795
 hmdcefficiency.cc:796
 hmdcefficiency.cc:797
 hmdcefficiency.cc:798
 hmdcefficiency.cc:799
 hmdcefficiency.cc:800
 hmdcefficiency.cc:801
 hmdcefficiency.cc:802
 hmdcefficiency.cc:803
 hmdcefficiency.cc:804
 hmdcefficiency.cc:805
 hmdcefficiency.cc:806
 hmdcefficiency.cc:807
 hmdcefficiency.cc:808
 hmdcefficiency.cc:809
 hmdcefficiency.cc:810
 hmdcefficiency.cc:811
 hmdcefficiency.cc:812
 hmdcefficiency.cc:813
 hmdcefficiency.cc:814
 hmdcefficiency.cc:815
 hmdcefficiency.cc:816
 hmdcefficiency.cc:817
 hmdcefficiency.cc:818
 hmdcefficiency.cc:819
 hmdcefficiency.cc:820
 hmdcefficiency.cc:821
 hmdcefficiency.cc:822
 hmdcefficiency.cc:823
 hmdcefficiency.cc:824
 hmdcefficiency.cc:825
 hmdcefficiency.cc:826
 hmdcefficiency.cc:827
 hmdcefficiency.cc:828
 hmdcefficiency.cc:829
 hmdcefficiency.cc:830
 hmdcefficiency.cc:831
 hmdcefficiency.cc:832
 hmdcefficiency.cc:833
 hmdcefficiency.cc:834
 hmdcefficiency.cc:835
 hmdcefficiency.cc:836
 hmdcefficiency.cc:837
 hmdcefficiency.cc:838
 hmdcefficiency.cc:839
 hmdcefficiency.cc:840
 hmdcefficiency.cc:841
 hmdcefficiency.cc:842
 hmdcefficiency.cc:843
 hmdcefficiency.cc:844
 hmdcefficiency.cc:845
 hmdcefficiency.cc:846
 hmdcefficiency.cc:847
 hmdcefficiency.cc:848
 hmdcefficiency.cc:849
 hmdcefficiency.cc:850
 hmdcefficiency.cc:851
 hmdcefficiency.cc:852
 hmdcefficiency.cc:853
 hmdcefficiency.cc:854
 hmdcefficiency.cc:855
 hmdcefficiency.cc:856
 hmdcefficiency.cc:857
 hmdcefficiency.cc:858
 hmdcefficiency.cc:859
 hmdcefficiency.cc:860
 hmdcefficiency.cc:861
 hmdcefficiency.cc:862
 hmdcefficiency.cc:863
 hmdcefficiency.cc:864
 hmdcefficiency.cc:865
 hmdcefficiency.cc:866
 hmdcefficiency.cc:867
 hmdcefficiency.cc:868
 hmdcefficiency.cc:869
 hmdcefficiency.cc:870
 hmdcefficiency.cc:871
 hmdcefficiency.cc:872
 hmdcefficiency.cc:873
 hmdcefficiency.cc:874
 hmdcefficiency.cc:875
 hmdcefficiency.cc:876
 hmdcefficiency.cc:877
 hmdcefficiency.cc:878
 hmdcefficiency.cc:879
 hmdcefficiency.cc:880
 hmdcefficiency.cc:881
 hmdcefficiency.cc:882
 hmdcefficiency.cc:883
 hmdcefficiency.cc:884
 hmdcefficiency.cc:885
 hmdcefficiency.cc:886
 hmdcefficiency.cc:887
 hmdcefficiency.cc:888
 hmdcefficiency.cc:889
 hmdcefficiency.cc:890
 hmdcefficiency.cc:891
 hmdcefficiency.cc:892
 hmdcefficiency.cc:893
 hmdcefficiency.cc:894
 hmdcefficiency.cc:895
 hmdcefficiency.cc:896
 hmdcefficiency.cc:897
 hmdcefficiency.cc:898
 hmdcefficiency.cc:899
 hmdcefficiency.cc:900
 hmdcefficiency.cc:901
 hmdcefficiency.cc:902
 hmdcefficiency.cc:903
 hmdcefficiency.cc:904
 hmdcefficiency.cc:905
 hmdcefficiency.cc:906
 hmdcefficiency.cc:907
 hmdcefficiency.cc:908
 hmdcefficiency.cc:909
 hmdcefficiency.cc:910
 hmdcefficiency.cc:911
 hmdcefficiency.cc:912
 hmdcefficiency.cc:913
 hmdcefficiency.cc:914
 hmdcefficiency.cc:915
 hmdcefficiency.cc:916
 hmdcefficiency.cc:917
 hmdcefficiency.cc:918
 hmdcefficiency.cc:919
 hmdcefficiency.cc:920
 hmdcefficiency.cc:921
 hmdcefficiency.cc:922
 hmdcefficiency.cc:923
 hmdcefficiency.cc:924
 hmdcefficiency.cc:925
 hmdcefficiency.cc:926
 hmdcefficiency.cc:927
 hmdcefficiency.cc:928
 hmdcefficiency.cc:929
 hmdcefficiency.cc:930
 hmdcefficiency.cc:931
 hmdcefficiency.cc:932
 hmdcefficiency.cc:933
 hmdcefficiency.cc:934
 hmdcefficiency.cc:935
 hmdcefficiency.cc:936
 hmdcefficiency.cc:937
 hmdcefficiency.cc:938
 hmdcefficiency.cc:939
 hmdcefficiency.cc:940
 hmdcefficiency.cc:941
 hmdcefficiency.cc:942
 hmdcefficiency.cc:943
 hmdcefficiency.cc:944
 hmdcefficiency.cc:945
 hmdcefficiency.cc:946
 hmdcefficiency.cc:947
 hmdcefficiency.cc:948
 hmdcefficiency.cc:949
 hmdcefficiency.cc:950
 hmdcefficiency.cc:951
 hmdcefficiency.cc:952
 hmdcefficiency.cc:953
 hmdcefficiency.cc:954
 hmdcefficiency.cc:955
 hmdcefficiency.cc:956
 hmdcefficiency.cc:957
 hmdcefficiency.cc:958
 hmdcefficiency.cc:959
 hmdcefficiency.cc:960
 hmdcefficiency.cc:961
 hmdcefficiency.cc:962
 hmdcefficiency.cc:963
 hmdcefficiency.cc:964
 hmdcefficiency.cc:965
 hmdcefficiency.cc:966
 hmdcefficiency.cc:967
 hmdcefficiency.cc:968
 hmdcefficiency.cc:969
 hmdcefficiency.cc:970
 hmdcefficiency.cc:971
 hmdcefficiency.cc:972
 hmdcefficiency.cc:973
 hmdcefficiency.cc:974
 hmdcefficiency.cc:975
 hmdcefficiency.cc:976
 hmdcefficiency.cc:977
 hmdcefficiency.cc:978
 hmdcefficiency.cc:979
 hmdcefficiency.cc:980
 hmdcefficiency.cc:981
 hmdcefficiency.cc:982
 hmdcefficiency.cc:983
 hmdcefficiency.cc:984
 hmdcefficiency.cc:985
 hmdcefficiency.cc:986
 hmdcefficiency.cc:987
 hmdcefficiency.cc:988
 hmdcefficiency.cc:989
 hmdcefficiency.cc:990
 hmdcefficiency.cc:991
 hmdcefficiency.cc:992
 hmdcefficiency.cc:993
 hmdcefficiency.cc:994
 hmdcefficiency.cc:995
 hmdcefficiency.cc:996
 hmdcefficiency.cc:997
 hmdcefficiency.cc:998
 hmdcefficiency.cc:999
 hmdcefficiency.cc:1000
 hmdcefficiency.cc:1001
 hmdcefficiency.cc:1002
 hmdcefficiency.cc:1003
 hmdcefficiency.cc:1004
 hmdcefficiency.cc:1005
 hmdcefficiency.cc:1006
 hmdcefficiency.cc:1007
 hmdcefficiency.cc:1008
 hmdcefficiency.cc:1009
 hmdcefficiency.cc:1010
 hmdcefficiency.cc:1011
 hmdcefficiency.cc:1012
 hmdcefficiency.cc:1013
 hmdcefficiency.cc:1014
 hmdcefficiency.cc:1015
 hmdcefficiency.cc:1016
 hmdcefficiency.cc:1017
 hmdcefficiency.cc:1018
 hmdcefficiency.cc:1019
 hmdcefficiency.cc:1020
 hmdcefficiency.cc:1021
 hmdcefficiency.cc:1022
 hmdcefficiency.cc:1023
 hmdcefficiency.cc:1024
 hmdcefficiency.cc:1025
 hmdcefficiency.cc:1026
 hmdcefficiency.cc:1027
 hmdcefficiency.cc:1028
 hmdcefficiency.cc:1029
 hmdcefficiency.cc:1030
 hmdcefficiency.cc:1031
 hmdcefficiency.cc:1032
 hmdcefficiency.cc:1033
 hmdcefficiency.cc:1034
 hmdcefficiency.cc:1035
 hmdcefficiency.cc:1036
 hmdcefficiency.cc:1037
 hmdcefficiency.cc:1038
 hmdcefficiency.cc:1039
 hmdcefficiency.cc:1040
 hmdcefficiency.cc:1041
 hmdcefficiency.cc:1042
 hmdcefficiency.cc:1043
 hmdcefficiency.cc:1044
 hmdcefficiency.cc:1045
 hmdcefficiency.cc:1046
 hmdcefficiency.cc:1047
 hmdcefficiency.cc:1048
 hmdcefficiency.cc:1049
 hmdcefficiency.cc:1050
 hmdcefficiency.cc:1051
 hmdcefficiency.cc:1052
 hmdcefficiency.cc:1053
 hmdcefficiency.cc:1054
 hmdcefficiency.cc:1055
 hmdcefficiency.cc:1056
 hmdcefficiency.cc:1057
 hmdcefficiency.cc:1058
 hmdcefficiency.cc:1059
 hmdcefficiency.cc:1060
 hmdcefficiency.cc:1061
 hmdcefficiency.cc:1062
 hmdcefficiency.cc:1063
 hmdcefficiency.cc:1064
 hmdcefficiency.cc:1065
 hmdcefficiency.cc:1066
 hmdcefficiency.cc:1067
 hmdcefficiency.cc:1068
 hmdcefficiency.cc:1069
 hmdcefficiency.cc:1070
 hmdcefficiency.cc:1071
 hmdcefficiency.cc:1072
 hmdcefficiency.cc:1073
 hmdcefficiency.cc:1074
 hmdcefficiency.cc:1075
 hmdcefficiency.cc:1076
 hmdcefficiency.cc:1077
 hmdcefficiency.cc:1078
 hmdcefficiency.cc:1079
 hmdcefficiency.cc:1080
 hmdcefficiency.cc:1081
 hmdcefficiency.cc:1082
 hmdcefficiency.cc:1083
 hmdcefficiency.cc:1084
 hmdcefficiency.cc:1085
 hmdcefficiency.cc:1086
 hmdcefficiency.cc:1087
 hmdcefficiency.cc:1088
 hmdcefficiency.cc:1089
 hmdcefficiency.cc:1090
 hmdcefficiency.cc:1091
 hmdcefficiency.cc:1092
 hmdcefficiency.cc:1093
 hmdcefficiency.cc:1094
 hmdcefficiency.cc:1095
 hmdcefficiency.cc:1096
 hmdcefficiency.cc:1097
 hmdcefficiency.cc:1098
 hmdcefficiency.cc:1099
 hmdcefficiency.cc:1100
 hmdcefficiency.cc:1101
 hmdcefficiency.cc:1102
 hmdcefficiency.cc:1103
 hmdcefficiency.cc:1104
 hmdcefficiency.cc:1105
 hmdcefficiency.cc:1106
 hmdcefficiency.cc:1107
 hmdcefficiency.cc:1108
 hmdcefficiency.cc:1109
 hmdcefficiency.cc:1110
 hmdcefficiency.cc:1111
 hmdcefficiency.cc:1112
 hmdcefficiency.cc:1113
 hmdcefficiency.cc:1114
 hmdcefficiency.cc:1115
 hmdcefficiency.cc:1116
 hmdcefficiency.cc:1117
 hmdcefficiency.cc:1118
 hmdcefficiency.cc:1119
 hmdcefficiency.cc:1120
 hmdcefficiency.cc:1121
 hmdcefficiency.cc:1122
 hmdcefficiency.cc:1123
 hmdcefficiency.cc:1124
 hmdcefficiency.cc:1125
 hmdcefficiency.cc:1126
 hmdcefficiency.cc:1127
 hmdcefficiency.cc:1128
 hmdcefficiency.cc:1129
 hmdcefficiency.cc:1130
 hmdcefficiency.cc:1131
 hmdcefficiency.cc:1132
 hmdcefficiency.cc:1133
 hmdcefficiency.cc:1134
 hmdcefficiency.cc:1135
 hmdcefficiency.cc:1136
 hmdcefficiency.cc:1137
 hmdcefficiency.cc:1138
 hmdcefficiency.cc:1139
 hmdcefficiency.cc:1140
 hmdcefficiency.cc:1141
 hmdcefficiency.cc:1142
 hmdcefficiency.cc:1143
 hmdcefficiency.cc:1144
 hmdcefficiency.cc:1145
 hmdcefficiency.cc:1146
 hmdcefficiency.cc:1147
 hmdcefficiency.cc:1148
 hmdcefficiency.cc:1149
 hmdcefficiency.cc:1150
 hmdcefficiency.cc:1151
 hmdcefficiency.cc:1152
 hmdcefficiency.cc:1153
 hmdcefficiency.cc:1154
 hmdcefficiency.cc:1155
 hmdcefficiency.cc:1156
 hmdcefficiency.cc:1157
 hmdcefficiency.cc:1158
 hmdcefficiency.cc:1159
 hmdcefficiency.cc:1160
 hmdcefficiency.cc:1161
 hmdcefficiency.cc:1162
 hmdcefficiency.cc:1163
 hmdcefficiency.cc:1164
 hmdcefficiency.cc:1165
 hmdcefficiency.cc:1166
 hmdcefficiency.cc:1167
 hmdcefficiency.cc:1168
 hmdcefficiency.cc:1169
 hmdcefficiency.cc:1170
 hmdcefficiency.cc:1171
 hmdcefficiency.cc:1172
 hmdcefficiency.cc:1173
 hmdcefficiency.cc:1174
 hmdcefficiency.cc:1175
 hmdcefficiency.cc:1176
 hmdcefficiency.cc:1177
 hmdcefficiency.cc:1178
 hmdcefficiency.cc:1179
 hmdcefficiency.cc:1180
 hmdcefficiency.cc:1181
 hmdcefficiency.cc:1182
 hmdcefficiency.cc:1183
 hmdcefficiency.cc:1184
 hmdcefficiency.cc:1185
 hmdcefficiency.cc:1186
 hmdcefficiency.cc:1187
 hmdcefficiency.cc:1188
 hmdcefficiency.cc:1189
 hmdcefficiency.cc:1190
 hmdcefficiency.cc:1191
 hmdcefficiency.cc:1192
 hmdcefficiency.cc:1193
 hmdcefficiency.cc:1194
 hmdcefficiency.cc:1195
 hmdcefficiency.cc:1196
 hmdcefficiency.cc:1197
 hmdcefficiency.cc:1198
 hmdcefficiency.cc:1199
 hmdcefficiency.cc:1200
 hmdcefficiency.cc:1201
 hmdcefficiency.cc:1202
 hmdcefficiency.cc:1203
 hmdcefficiency.cc:1204
 hmdcefficiency.cc:1205
 hmdcefficiency.cc:1206
 hmdcefficiency.cc:1207
 hmdcefficiency.cc:1208
 hmdcefficiency.cc:1209
 hmdcefficiency.cc:1210
 hmdcefficiency.cc:1211
 hmdcefficiency.cc:1212
 hmdcefficiency.cc:1213
 hmdcefficiency.cc:1214
 hmdcefficiency.cc:1215
 hmdcefficiency.cc:1216
 hmdcefficiency.cc:1217
 hmdcefficiency.cc:1218
 hmdcefficiency.cc:1219
 hmdcefficiency.cc:1220
 hmdcefficiency.cc:1221
 hmdcefficiency.cc:1222
 hmdcefficiency.cc:1223
 hmdcefficiency.cc:1224
 hmdcefficiency.cc:1225
 hmdcefficiency.cc:1226
 hmdcefficiency.cc:1227
 hmdcefficiency.cc:1228
 hmdcefficiency.cc:1229
 hmdcefficiency.cc:1230
 hmdcefficiency.cc:1231
 hmdcefficiency.cc:1232
 hmdcefficiency.cc:1233
 hmdcefficiency.cc:1234
 hmdcefficiency.cc:1235
 hmdcefficiency.cc:1236
 hmdcefficiency.cc:1237
 hmdcefficiency.cc:1238
 hmdcefficiency.cc:1239
 hmdcefficiency.cc:1240
 hmdcefficiency.cc:1241
 hmdcefficiency.cc:1242
 hmdcefficiency.cc:1243
 hmdcefficiency.cc:1244
 hmdcefficiency.cc:1245
 hmdcefficiency.cc:1246
 hmdcefficiency.cc:1247
 hmdcefficiency.cc:1248
 hmdcefficiency.cc:1249
 hmdcefficiency.cc:1250
 hmdcefficiency.cc:1251
 hmdcefficiency.cc:1252
 hmdcefficiency.cc:1253
 hmdcefficiency.cc:1254
 hmdcefficiency.cc:1255
 hmdcefficiency.cc:1256
 hmdcefficiency.cc:1257
 hmdcefficiency.cc:1258
 hmdcefficiency.cc:1259
 hmdcefficiency.cc:1260
 hmdcefficiency.cc:1261
 hmdcefficiency.cc:1262
 hmdcefficiency.cc:1263
 hmdcefficiency.cc:1264
 hmdcefficiency.cc:1265
 hmdcefficiency.cc:1266
 hmdcefficiency.cc:1267
 hmdcefficiency.cc:1268
 hmdcefficiency.cc:1269
 hmdcefficiency.cc:1270
 hmdcefficiency.cc:1271
 hmdcefficiency.cc:1272
 hmdcefficiency.cc:1273
 hmdcefficiency.cc:1274
 hmdcefficiency.cc:1275
 hmdcefficiency.cc:1276
 hmdcefficiency.cc:1277
 hmdcefficiency.cc:1278
 hmdcefficiency.cc:1279
 hmdcefficiency.cc:1280
 hmdcefficiency.cc:1281
 hmdcefficiency.cc:1282
 hmdcefficiency.cc:1283
 hmdcefficiency.cc:1284
 hmdcefficiency.cc:1285
 hmdcefficiency.cc:1286
 hmdcefficiency.cc:1287
 hmdcefficiency.cc:1288
 hmdcefficiency.cc:1289
 hmdcefficiency.cc:1290
 hmdcefficiency.cc:1291
 hmdcefficiency.cc:1292
 hmdcefficiency.cc:1293
 hmdcefficiency.cc:1294
 hmdcefficiency.cc:1295
 hmdcefficiency.cc:1296
 hmdcefficiency.cc:1297
 hmdcefficiency.cc:1298
 hmdcefficiency.cc:1299
 hmdcefficiency.cc:1300
 hmdcefficiency.cc:1301
 hmdcefficiency.cc:1302
 hmdcefficiency.cc:1303
 hmdcefficiency.cc:1304
 hmdcefficiency.cc:1305
 hmdcefficiency.cc:1306
 hmdcefficiency.cc:1307
 hmdcefficiency.cc:1308
 hmdcefficiency.cc:1309
 hmdcefficiency.cc:1310
 hmdcefficiency.cc:1311
 hmdcefficiency.cc:1312
 hmdcefficiency.cc:1313
 hmdcefficiency.cc:1314
 hmdcefficiency.cc:1315
 hmdcefficiency.cc:1316
 hmdcefficiency.cc:1317
 hmdcefficiency.cc:1318
 hmdcefficiency.cc:1319
 hmdcefficiency.cc:1320
 hmdcefficiency.cc:1321
 hmdcefficiency.cc:1322
 hmdcefficiency.cc:1323
 hmdcefficiency.cc:1324
 hmdcefficiency.cc:1325
 hmdcefficiency.cc:1326
 hmdcefficiency.cc:1327
 hmdcefficiency.cc:1328
 hmdcefficiency.cc:1329
 hmdcefficiency.cc:1330
 hmdcefficiency.cc:1331
 hmdcefficiency.cc:1332
 hmdcefficiency.cc:1333
 hmdcefficiency.cc:1334
 hmdcefficiency.cc:1335
 hmdcefficiency.cc:1336
 hmdcefficiency.cc:1337
 hmdcefficiency.cc:1338
 hmdcefficiency.cc:1339
 hmdcefficiency.cc:1340
 hmdcefficiency.cc:1341
 hmdcefficiency.cc:1342
 hmdcefficiency.cc:1343
 hmdcefficiency.cc:1344
 hmdcefficiency.cc:1345
 hmdcefficiency.cc:1346
 hmdcefficiency.cc:1347
 hmdcefficiency.cc:1348
 hmdcefficiency.cc:1349
 hmdcefficiency.cc:1350
 hmdcefficiency.cc:1351
 hmdcefficiency.cc:1352
 hmdcefficiency.cc:1353
 hmdcefficiency.cc:1354
 hmdcefficiency.cc:1355
 hmdcefficiency.cc:1356
 hmdcefficiency.cc:1357
 hmdcefficiency.cc:1358
 hmdcefficiency.cc:1359
 hmdcefficiency.cc:1360
 hmdcefficiency.cc:1361
 hmdcefficiency.cc:1362
 hmdcefficiency.cc:1363
 hmdcefficiency.cc:1364
 hmdcefficiency.cc:1365
 hmdcefficiency.cc:1366
 hmdcefficiency.cc:1367
 hmdcefficiency.cc:1368
 hmdcefficiency.cc:1369
 hmdcefficiency.cc:1370
 hmdcefficiency.cc:1371
 hmdcefficiency.cc:1372
 hmdcefficiency.cc:1373
 hmdcefficiency.cc:1374
 hmdcefficiency.cc:1375
 hmdcefficiency.cc:1376
 hmdcefficiency.cc:1377
 hmdcefficiency.cc:1378
 hmdcefficiency.cc:1379
 hmdcefficiency.cc:1380
 hmdcefficiency.cc:1381
 hmdcefficiency.cc:1382
 hmdcefficiency.cc:1383
 hmdcefficiency.cc:1384
 hmdcefficiency.cc:1385
 hmdcefficiency.cc:1386
 hmdcefficiency.cc:1387
 hmdcefficiency.cc:1388
 hmdcefficiency.cc:1389
 hmdcefficiency.cc:1390
 hmdcefficiency.cc:1391
 hmdcefficiency.cc:1392
 hmdcefficiency.cc:1393
 hmdcefficiency.cc:1394
 hmdcefficiency.cc:1395
 hmdcefficiency.cc:1396
 hmdcefficiency.cc:1397
 hmdcefficiency.cc:1398
 hmdcefficiency.cc:1399
 hmdcefficiency.cc:1400
 hmdcefficiency.cc:1401
 hmdcefficiency.cc:1402
 hmdcefficiency.cc:1403
 hmdcefficiency.cc:1404
 hmdcefficiency.cc:1405
 hmdcefficiency.cc:1406
 hmdcefficiency.cc:1407
 hmdcefficiency.cc:1408
 hmdcefficiency.cc:1409
 hmdcefficiency.cc:1410
 hmdcefficiency.cc:1411
 hmdcefficiency.cc:1412
 hmdcefficiency.cc:1413
 hmdcefficiency.cc:1414
 hmdcefficiency.cc:1415
 hmdcefficiency.cc:1416
 hmdcefficiency.cc:1417
 hmdcefficiency.cc:1418
 hmdcefficiency.cc:1419
 hmdcefficiency.cc:1420
 hmdcefficiency.cc:1421
 hmdcefficiency.cc:1422
 hmdcefficiency.cc:1423
 hmdcefficiency.cc:1424
 hmdcefficiency.cc:1425
 hmdcefficiency.cc:1426
 hmdcefficiency.cc:1427
 hmdcefficiency.cc:1428
 hmdcefficiency.cc:1429
 hmdcefficiency.cc:1430
 hmdcefficiency.cc:1431
 hmdcefficiency.cc:1432
 hmdcefficiency.cc:1433
 hmdcefficiency.cc:1434
 hmdcefficiency.cc:1435
 hmdcefficiency.cc:1436
 hmdcefficiency.cc:1437
 hmdcefficiency.cc:1438
 hmdcefficiency.cc:1439
 hmdcefficiency.cc:1440
 hmdcefficiency.cc:1441
 hmdcefficiency.cc:1442
 hmdcefficiency.cc:1443
 hmdcefficiency.cc:1444
 hmdcefficiency.cc:1445
 hmdcefficiency.cc:1446
 hmdcefficiency.cc:1447
 hmdcefficiency.cc:1448
 hmdcefficiency.cc:1449
 hmdcefficiency.cc:1450
 hmdcefficiency.cc:1451
 hmdcefficiency.cc:1452
 hmdcefficiency.cc:1453
 hmdcefficiency.cc:1454
 hmdcefficiency.cc:1455
 hmdcefficiency.cc:1456
 hmdcefficiency.cc:1457
 hmdcefficiency.cc:1458
 hmdcefficiency.cc:1459
 hmdcefficiency.cc:1460
 hmdcefficiency.cc:1461
 hmdcefficiency.cc:1462
 hmdcefficiency.cc:1463
 hmdcefficiency.cc:1464
 hmdcefficiency.cc:1465
 hmdcefficiency.cc:1466
 hmdcefficiency.cc:1467
 hmdcefficiency.cc:1468
 hmdcefficiency.cc:1469
 hmdcefficiency.cc:1470
 hmdcefficiency.cc:1471
 hmdcefficiency.cc:1472
 hmdcefficiency.cc:1473
 hmdcefficiency.cc:1474
 hmdcefficiency.cc:1475
 hmdcefficiency.cc:1476
 hmdcefficiency.cc:1477
 hmdcefficiency.cc:1478
 hmdcefficiency.cc:1479
 hmdcefficiency.cc:1480
 hmdcefficiency.cc:1481
 hmdcefficiency.cc:1482
 hmdcefficiency.cc:1483
 hmdcefficiency.cc:1484
 hmdcefficiency.cc:1485
 hmdcefficiency.cc:1486
 hmdcefficiency.cc:1487
 hmdcefficiency.cc:1488
 hmdcefficiency.cc:1489
 hmdcefficiency.cc:1490
 hmdcefficiency.cc:1491
 hmdcefficiency.cc:1492
 hmdcefficiency.cc:1493
 hmdcefficiency.cc:1494
 hmdcefficiency.cc:1495
 hmdcefficiency.cc:1496
 hmdcefficiency.cc:1497
 hmdcefficiency.cc:1498
 hmdcefficiency.cc:1499
 hmdcefficiency.cc:1500
 hmdcefficiency.cc:1501
 hmdcefficiency.cc:1502
 hmdcefficiency.cc:1503
 hmdcefficiency.cc:1504
 hmdcefficiency.cc:1505
 hmdcefficiency.cc:1506
 hmdcefficiency.cc:1507
 hmdcefficiency.cc:1508
 hmdcefficiency.cc:1509
 hmdcefficiency.cc:1510
 hmdcefficiency.cc:1511
 hmdcefficiency.cc:1512
 hmdcefficiency.cc:1513
 hmdcefficiency.cc:1514
 hmdcefficiency.cc:1515
 hmdcefficiency.cc:1516
 hmdcefficiency.cc:1517
 hmdcefficiency.cc:1518
 hmdcefficiency.cc:1519
 hmdcefficiency.cc:1520
 hmdcefficiency.cc:1521
 hmdcefficiency.cc:1522
 hmdcefficiency.cc:1523
 hmdcefficiency.cc:1524
 hmdcefficiency.cc:1525
 hmdcefficiency.cc:1526
 hmdcefficiency.cc:1527
 hmdcefficiency.cc:1528
 hmdcefficiency.cc:1529
 hmdcefficiency.cc:1530
 hmdcefficiency.cc:1531
 hmdcefficiency.cc:1532
 hmdcefficiency.cc:1533
 hmdcefficiency.cc:1534
 hmdcefficiency.cc:1535
 hmdcefficiency.cc:1536
 hmdcefficiency.cc:1537
 hmdcefficiency.cc:1538
 hmdcefficiency.cc:1539
 hmdcefficiency.cc:1540
 hmdcefficiency.cc:1541
 hmdcefficiency.cc:1542
 hmdcefficiency.cc:1543
 hmdcefficiency.cc:1544
 hmdcefficiency.cc:1545
 hmdcefficiency.cc:1546
 hmdcefficiency.cc:1547
 hmdcefficiency.cc:1548
 hmdcefficiency.cc:1549
 hmdcefficiency.cc:1550
 hmdcefficiency.cc:1551
 hmdcefficiency.cc:1552
 hmdcefficiency.cc:1553
 hmdcefficiency.cc:1554
 hmdcefficiency.cc:1555
 hmdcefficiency.cc:1556
 hmdcefficiency.cc:1557
 hmdcefficiency.cc:1558
 hmdcefficiency.cc:1559
 hmdcefficiency.cc:1560
 hmdcefficiency.cc:1561
 hmdcefficiency.cc:1562
 hmdcefficiency.cc:1563
 hmdcefficiency.cc:1564
 hmdcefficiency.cc:1565
 hmdcefficiency.cc:1566
 hmdcefficiency.cc:1567
 hmdcefficiency.cc:1568
 hmdcefficiency.cc:1569
 hmdcefficiency.cc:1570
 hmdcefficiency.cc:1571
 hmdcefficiency.cc:1572
 hmdcefficiency.cc:1573
 hmdcefficiency.cc:1574
 hmdcefficiency.cc:1575
 hmdcefficiency.cc:1576
 hmdcefficiency.cc:1577
 hmdcefficiency.cc:1578
 hmdcefficiency.cc:1579
 hmdcefficiency.cc:1580
 hmdcefficiency.cc:1581
 hmdcefficiency.cc:1582
 hmdcefficiency.cc:1583
 hmdcefficiency.cc:1584
 hmdcefficiency.cc:1585
 hmdcefficiency.cc:1586
 hmdcefficiency.cc:1587
 hmdcefficiency.cc:1588
 hmdcefficiency.cc:1589
 hmdcefficiency.cc:1590
 hmdcefficiency.cc:1591
 hmdcefficiency.cc:1592
 hmdcefficiency.cc:1593
 hmdcefficiency.cc:1594
 hmdcefficiency.cc:1595
 hmdcefficiency.cc:1596
 hmdcefficiency.cc:1597
 hmdcefficiency.cc:1598
 hmdcefficiency.cc:1599
 hmdcefficiency.cc:1600
 hmdcefficiency.cc:1601
 hmdcefficiency.cc:1602
 hmdcefficiency.cc:1603
 hmdcefficiency.cc:1604
 hmdcefficiency.cc:1605
 hmdcefficiency.cc:1606
 hmdcefficiency.cc:1607
 hmdcefficiency.cc:1608
 hmdcefficiency.cc:1609
 hmdcefficiency.cc:1610
 hmdcefficiency.cc:1611
 hmdcefficiency.cc:1612
 hmdcefficiency.cc:1613
 hmdcefficiency.cc:1614
 hmdcefficiency.cc:1615
 hmdcefficiency.cc:1616
 hmdcefficiency.cc:1617
 hmdcefficiency.cc:1618
 hmdcefficiency.cc:1619
 hmdcefficiency.cc:1620
 hmdcefficiency.cc:1621
 hmdcefficiency.cc:1622
 hmdcefficiency.cc:1623
 hmdcefficiency.cc:1624
 hmdcefficiency.cc:1625
 hmdcefficiency.cc:1626
 hmdcefficiency.cc:1627
 hmdcefficiency.cc:1628
 hmdcefficiency.cc:1629
 hmdcefficiency.cc:1630
 hmdcefficiency.cc:1631
 hmdcefficiency.cc:1632
 hmdcefficiency.cc:1633
 hmdcefficiency.cc:1634
 hmdcefficiency.cc:1635
 hmdcefficiency.cc:1636
 hmdcefficiency.cc:1637
 hmdcefficiency.cc:1638
 hmdcefficiency.cc:1639
 hmdcefficiency.cc:1640
 hmdcefficiency.cc:1641
 hmdcefficiency.cc:1642
 hmdcefficiency.cc:1643
 hmdcefficiency.cc:1644
 hmdcefficiency.cc:1645
 hmdcefficiency.cc:1646
 hmdcefficiency.cc:1647
 hmdcefficiency.cc:1648
 hmdcefficiency.cc:1649
 hmdcefficiency.cc:1650
 hmdcefficiency.cc:1651
 hmdcefficiency.cc:1652
 hmdcefficiency.cc:1653
 hmdcefficiency.cc:1654
 hmdcefficiency.cc:1655
 hmdcefficiency.cc:1656
 hmdcefficiency.cc:1657
 hmdcefficiency.cc:1658
 hmdcefficiency.cc:1659
 hmdcefficiency.cc:1660
 hmdcefficiency.cc:1661
 hmdcefficiency.cc:1662
 hmdcefficiency.cc:1663
 hmdcefficiency.cc:1664
 hmdcefficiency.cc:1665
 hmdcefficiency.cc:1666
 hmdcefficiency.cc:1667
 hmdcefficiency.cc:1668
 hmdcefficiency.cc:1669
 hmdcefficiency.cc:1670
 hmdcefficiency.cc:1671
 hmdcefficiency.cc:1672
 hmdcefficiency.cc:1673
 hmdcefficiency.cc:1674
 hmdcefficiency.cc:1675
 hmdcefficiency.cc:1676
 hmdcefficiency.cc:1677
 hmdcefficiency.cc:1678
 hmdcefficiency.cc:1679
 hmdcefficiency.cc:1680
 hmdcefficiency.cc:1681
 hmdcefficiency.cc:1682
 hmdcefficiency.cc:1683
 hmdcefficiency.cc:1684
 hmdcefficiency.cc:1685
 hmdcefficiency.cc:1686
 hmdcefficiency.cc:1687
 hmdcefficiency.cc:1688
 hmdcefficiency.cc:1689
 hmdcefficiency.cc:1690
 hmdcefficiency.cc:1691
 hmdcefficiency.cc:1692
 hmdcefficiency.cc:1693
 hmdcefficiency.cc:1694
 hmdcefficiency.cc:1695
 hmdcefficiency.cc:1696
 hmdcefficiency.cc:1697
 hmdcefficiency.cc:1698
 hmdcefficiency.cc:1699
 hmdcefficiency.cc:1700
 hmdcefficiency.cc:1701
 hmdcefficiency.cc:1702
 hmdcefficiency.cc:1703
 hmdcefficiency.cc:1704
 hmdcefficiency.cc:1705
 hmdcefficiency.cc:1706
 hmdcefficiency.cc:1707
 hmdcefficiency.cc:1708
 hmdcefficiency.cc:1709
 hmdcefficiency.cc:1710
 hmdcefficiency.cc:1711
 hmdcefficiency.cc:1712
 hmdcefficiency.cc:1713
 hmdcefficiency.cc:1714
 hmdcefficiency.cc:1715
 hmdcefficiency.cc:1716
 hmdcefficiency.cc:1717
 hmdcefficiency.cc:1718
 hmdcefficiency.cc:1719
 hmdcefficiency.cc:1720
 hmdcefficiency.cc:1721
 hmdcefficiency.cc:1722
 hmdcefficiency.cc:1723
 hmdcefficiency.cc:1724
 hmdcefficiency.cc:1725
 hmdcefficiency.cc:1726
 hmdcefficiency.cc:1727
 hmdcefficiency.cc:1728
 hmdcefficiency.cc:1729
 hmdcefficiency.cc:1730
 hmdcefficiency.cc:1731
 hmdcefficiency.cc:1732
 hmdcefficiency.cc:1733
 hmdcefficiency.cc:1734
 hmdcefficiency.cc:1735
 hmdcefficiency.cc:1736
 hmdcefficiency.cc:1737
 hmdcefficiency.cc:1738
 hmdcefficiency.cc:1739
 hmdcefficiency.cc:1740
 hmdcefficiency.cc:1741
 hmdcefficiency.cc:1742
 hmdcefficiency.cc:1743
 hmdcefficiency.cc:1744
 hmdcefficiency.cc:1745
 hmdcefficiency.cc:1746
 hmdcefficiency.cc:1747
 hmdcefficiency.cc:1748
 hmdcefficiency.cc:1749
 hmdcefficiency.cc:1750
 hmdcefficiency.cc:1751
 hmdcefficiency.cc:1752
 hmdcefficiency.cc:1753
 hmdcefficiency.cc:1754
 hmdcefficiency.cc:1755
 hmdcefficiency.cc:1756
 hmdcefficiency.cc:1757
 hmdcefficiency.cc:1758
 hmdcefficiency.cc:1759
 hmdcefficiency.cc:1760
 hmdcefficiency.cc:1761
 hmdcefficiency.cc:1762
 hmdcefficiency.cc:1763
 hmdcefficiency.cc:1764
 hmdcefficiency.cc:1765
 hmdcefficiency.cc:1766
 hmdcefficiency.cc:1767
 hmdcefficiency.cc:1768
 hmdcefficiency.cc:1769
 hmdcefficiency.cc:1770
 hmdcefficiency.cc:1771
 hmdcefficiency.cc:1772
 hmdcefficiency.cc:1773
 hmdcefficiency.cc:1774
 hmdcefficiency.cc:1775
 hmdcefficiency.cc:1776
 hmdcefficiency.cc:1777
 hmdcefficiency.cc:1778
 hmdcefficiency.cc:1779
 hmdcefficiency.cc:1780
 hmdcefficiency.cc:1781
 hmdcefficiency.cc:1782
 hmdcefficiency.cc:1783
 hmdcefficiency.cc:1784
 hmdcefficiency.cc:1785
 hmdcefficiency.cc:1786
 hmdcefficiency.cc:1787
 hmdcefficiency.cc:1788
 hmdcefficiency.cc:1789
 hmdcefficiency.cc:1790
 hmdcefficiency.cc:1791
 hmdcefficiency.cc:1792
 hmdcefficiency.cc:1793
 hmdcefficiency.cc:1794
 hmdcefficiency.cc:1795
 hmdcefficiency.cc:1796
 hmdcefficiency.cc:1797
 hmdcefficiency.cc:1798
 hmdcefficiency.cc:1799
 hmdcefficiency.cc:1800
 hmdcefficiency.cc:1801
 hmdcefficiency.cc:1802
 hmdcefficiency.cc:1803
 hmdcefficiency.cc:1804
 hmdcefficiency.cc:1805
 hmdcefficiency.cc:1806
 hmdcefficiency.cc:1807
 hmdcefficiency.cc:1808
 hmdcefficiency.cc:1809
 hmdcefficiency.cc:1810
 hmdcefficiency.cc:1811
 hmdcefficiency.cc:1812
 hmdcefficiency.cc:1813
 hmdcefficiency.cc:1814
 hmdcefficiency.cc:1815
 hmdcefficiency.cc:1816
 hmdcefficiency.cc:1817
 hmdcefficiency.cc:1818
 hmdcefficiency.cc:1819
 hmdcefficiency.cc:1820
 hmdcefficiency.cc:1821
 hmdcefficiency.cc:1822
 hmdcefficiency.cc:1823
 hmdcefficiency.cc:1824
 hmdcefficiency.cc:1825
 hmdcefficiency.cc:1826
 hmdcefficiency.cc:1827
 hmdcefficiency.cc:1828
 hmdcefficiency.cc:1829
 hmdcefficiency.cc:1830
 hmdcefficiency.cc:1831
 hmdcefficiency.cc:1832
 hmdcefficiency.cc:1833
 hmdcefficiency.cc:1834
 hmdcefficiency.cc:1835
 hmdcefficiency.cc:1836
 hmdcefficiency.cc:1837
 hmdcefficiency.cc:1838
 hmdcefficiency.cc:1839
 hmdcefficiency.cc:1840
 hmdcefficiency.cc:1841
 hmdcefficiency.cc:1842
 hmdcefficiency.cc:1843
 hmdcefficiency.cc:1844
 hmdcefficiency.cc:1845
 hmdcefficiency.cc:1846
 hmdcefficiency.cc:1847
 hmdcefficiency.cc:1848
 hmdcefficiency.cc:1849
 hmdcefficiency.cc:1850
 hmdcefficiency.cc:1851
 hmdcefficiency.cc:1852
 hmdcefficiency.cc:1853
 hmdcefficiency.cc:1854
 hmdcefficiency.cc:1855
 hmdcefficiency.cc:1856
 hmdcefficiency.cc:1857
 hmdcefficiency.cc:1858
 hmdcefficiency.cc:1859
 hmdcefficiency.cc:1860
 hmdcefficiency.cc:1861
 hmdcefficiency.cc:1862
 hmdcefficiency.cc:1863
 hmdcefficiency.cc:1864
 hmdcefficiency.cc:1865
 hmdcefficiency.cc:1866
 hmdcefficiency.cc:1867
 hmdcefficiency.cc:1868
 hmdcefficiency.cc:1869
 hmdcefficiency.cc:1870
 hmdcefficiency.cc:1871
 hmdcefficiency.cc:1872
 hmdcefficiency.cc:1873
 hmdcefficiency.cc:1874
 hmdcefficiency.cc:1875
 hmdcefficiency.cc:1876
 hmdcefficiency.cc:1877
 hmdcefficiency.cc:1878
 hmdcefficiency.cc:1879
 hmdcefficiency.cc:1880
 hmdcefficiency.cc:1881
 hmdcefficiency.cc:1882
 hmdcefficiency.cc:1883
 hmdcefficiency.cc:1884
 hmdcefficiency.cc:1885
 hmdcefficiency.cc:1886
 hmdcefficiency.cc:1887
 hmdcefficiency.cc:1888
 hmdcefficiency.cc:1889
 hmdcefficiency.cc:1890
 hmdcefficiency.cc:1891
 hmdcefficiency.cc:1892
 hmdcefficiency.cc:1893
 hmdcefficiency.cc:1894
 hmdcefficiency.cc:1895
 hmdcefficiency.cc:1896
 hmdcefficiency.cc:1897
 hmdcefficiency.cc:1898
 hmdcefficiency.cc:1899
 hmdcefficiency.cc:1900
 hmdcefficiency.cc:1901
 hmdcefficiency.cc:1902
 hmdcefficiency.cc:1903
 hmdcefficiency.cc:1904
 hmdcefficiency.cc:1905
 hmdcefficiency.cc:1906
 hmdcefficiency.cc:1907
 hmdcefficiency.cc:1908
 hmdcefficiency.cc:1909
 hmdcefficiency.cc:1910
 hmdcefficiency.cc:1911
 hmdcefficiency.cc:1912
 hmdcefficiency.cc:1913
 hmdcefficiency.cc:1914
 hmdcefficiency.cc:1915
 hmdcefficiency.cc:1916
 hmdcefficiency.cc:1917
 hmdcefficiency.cc:1918
 hmdcefficiency.cc:1919
 hmdcefficiency.cc:1920
 hmdcefficiency.cc:1921
 hmdcefficiency.cc:1922
 hmdcefficiency.cc:1923
 hmdcefficiency.cc:1924
 hmdcefficiency.cc:1925
 hmdcefficiency.cc:1926
 hmdcefficiency.cc:1927
 hmdcefficiency.cc:1928
 hmdcefficiency.cc:1929
 hmdcefficiency.cc:1930
 hmdcefficiency.cc:1931
 hmdcefficiency.cc:1932
 hmdcefficiency.cc:1933
 hmdcefficiency.cc:1934
 hmdcefficiency.cc:1935
 hmdcefficiency.cc:1936
 hmdcefficiency.cc:1937
 hmdcefficiency.cc:1938
 hmdcefficiency.cc:1939
 hmdcefficiency.cc:1940
 hmdcefficiency.cc:1941
 hmdcefficiency.cc:1942
 hmdcefficiency.cc:1943
 hmdcefficiency.cc:1944
 hmdcefficiency.cc:1945
 hmdcefficiency.cc:1946
 hmdcefficiency.cc:1947
 hmdcefficiency.cc:1948
 hmdcefficiency.cc:1949
 hmdcefficiency.cc:1950
 hmdcefficiency.cc:1951
 hmdcefficiency.cc:1952
 hmdcefficiency.cc:1953
 hmdcefficiency.cc:1954
 hmdcefficiency.cc:1955
 hmdcefficiency.cc:1956
 hmdcefficiency.cc:1957
 hmdcefficiency.cc:1958
 hmdcefficiency.cc:1959
 hmdcefficiency.cc:1960
 hmdcefficiency.cc:1961
 hmdcefficiency.cc:1962
 hmdcefficiency.cc:1963
 hmdcefficiency.cc:1964
 hmdcefficiency.cc:1965
 hmdcefficiency.cc:1966
 hmdcefficiency.cc:1967
 hmdcefficiency.cc:1968
 hmdcefficiency.cc:1969
 hmdcefficiency.cc:1970
 hmdcefficiency.cc:1971
 hmdcefficiency.cc:1972
 hmdcefficiency.cc:1973
 hmdcefficiency.cc:1974
 hmdcefficiency.cc:1975
 hmdcefficiency.cc:1976
 hmdcefficiency.cc:1977
 hmdcefficiency.cc:1978
 hmdcefficiency.cc:1979
 hmdcefficiency.cc:1980
 hmdcefficiency.cc:1981
 hmdcefficiency.cc:1982
 hmdcefficiency.cc:1983
 hmdcefficiency.cc:1984
 hmdcefficiency.cc:1985
 hmdcefficiency.cc:1986
 hmdcefficiency.cc:1987
 hmdcefficiency.cc:1988
 hmdcefficiency.cc:1989
 hmdcefficiency.cc:1990
 hmdcefficiency.cc:1991
 hmdcefficiency.cc:1992
 hmdcefficiency.cc:1993
 hmdcefficiency.cc:1994
 hmdcefficiency.cc:1995
 hmdcefficiency.cc:1996
 hmdcefficiency.cc:1997
 hmdcefficiency.cc:1998
 hmdcefficiency.cc:1999
 hmdcefficiency.cc:2000
 hmdcefficiency.cc:2001
 hmdcefficiency.cc:2002
 hmdcefficiency.cc:2003
 hmdcefficiency.cc:2004
 hmdcefficiency.cc:2005
 hmdcefficiency.cc:2006
 hmdcefficiency.cc:2007
 hmdcefficiency.cc:2008
 hmdcefficiency.cc:2009
 hmdcefficiency.cc:2010
 hmdcefficiency.cc:2011
 hmdcefficiency.cc:2012
 hmdcefficiency.cc:2013
 hmdcefficiency.cc:2014
 hmdcefficiency.cc:2015
 hmdcefficiency.cc:2016
 hmdcefficiency.cc:2017
 hmdcefficiency.cc:2018
 hmdcefficiency.cc:2019
 hmdcefficiency.cc:2020
 hmdcefficiency.cc:2021
 hmdcefficiency.cc:2022
 hmdcefficiency.cc:2023
 hmdcefficiency.cc:2024
 hmdcefficiency.cc:2025
 hmdcefficiency.cc:2026
 hmdcefficiency.cc:2027
 hmdcefficiency.cc:2028
 hmdcefficiency.cc:2029
 hmdcefficiency.cc:2030
 hmdcefficiency.cc:2031
 hmdcefficiency.cc:2032
 hmdcefficiency.cc:2033
 hmdcefficiency.cc:2034
 hmdcefficiency.cc:2035
 hmdcefficiency.cc:2036
 hmdcefficiency.cc:2037
 hmdcefficiency.cc:2038
 hmdcefficiency.cc:2039
 hmdcefficiency.cc:2040
 hmdcefficiency.cc:2041
 hmdcefficiency.cc:2042
 hmdcefficiency.cc:2043
 hmdcefficiency.cc:2044
 hmdcefficiency.cc:2045
 hmdcefficiency.cc:2046
 hmdcefficiency.cc:2047
 hmdcefficiency.cc:2048
 hmdcefficiency.cc:2049
 hmdcefficiency.cc:2050
 hmdcefficiency.cc:2051
 hmdcefficiency.cc:2052
 hmdcefficiency.cc:2053
 hmdcefficiency.cc:2054
 hmdcefficiency.cc:2055
 hmdcefficiency.cc:2056
 hmdcefficiency.cc:2057
 hmdcefficiency.cc:2058
 hmdcefficiency.cc:2059
 hmdcefficiency.cc:2060
 hmdcefficiency.cc:2061
 hmdcefficiency.cc:2062
 hmdcefficiency.cc:2063
 hmdcefficiency.cc:2064
 hmdcefficiency.cc:2065
 hmdcefficiency.cc:2066
 hmdcefficiency.cc:2067
 hmdcefficiency.cc:2068
 hmdcefficiency.cc:2069
 hmdcefficiency.cc:2070
 hmdcefficiency.cc:2071
 hmdcefficiency.cc:2072
 hmdcefficiency.cc:2073
 hmdcefficiency.cc:2074
 hmdcefficiency.cc:2075
 hmdcefficiency.cc:2076
 hmdcefficiency.cc:2077
 hmdcefficiency.cc:2078
 hmdcefficiency.cc:2079
 hmdcefficiency.cc:2080
 hmdcefficiency.cc:2081
 hmdcefficiency.cc:2082
 hmdcefficiency.cc:2083
 hmdcefficiency.cc:2084
 hmdcefficiency.cc:2085
 hmdcefficiency.cc:2086
 hmdcefficiency.cc:2087
 hmdcefficiency.cc:2088
 hmdcefficiency.cc:2089
 hmdcefficiency.cc:2090
 hmdcefficiency.cc:2091
 hmdcefficiency.cc:2092
 hmdcefficiency.cc:2093
 hmdcefficiency.cc:2094
 hmdcefficiency.cc:2095
 hmdcefficiency.cc:2096
 hmdcefficiency.cc:2097
 hmdcefficiency.cc:2098
 hmdcefficiency.cc:2099
 hmdcefficiency.cc:2100
 hmdcefficiency.cc:2101
 hmdcefficiency.cc:2102
 hmdcefficiency.cc:2103
 hmdcefficiency.cc:2104
 hmdcefficiency.cc:2105
 hmdcefficiency.cc:2106
 hmdcefficiency.cc:2107
 hmdcefficiency.cc:2108
 hmdcefficiency.cc:2109
 hmdcefficiency.cc:2110
 hmdcefficiency.cc:2111
 hmdcefficiency.cc:2112
 hmdcefficiency.cc:2113
 hmdcefficiency.cc:2114
 hmdcefficiency.cc:2115
 hmdcefficiency.cc:2116
 hmdcefficiency.cc:2117
 hmdcefficiency.cc:2118
 hmdcefficiency.cc:2119
 hmdcefficiency.cc:2120
 hmdcefficiency.cc:2121
 hmdcefficiency.cc:2122
 hmdcefficiency.cc:2123
 hmdcefficiency.cc:2124
 hmdcefficiency.cc:2125
 hmdcefficiency.cc:2126
 hmdcefficiency.cc:2127
 hmdcefficiency.cc:2128
 hmdcefficiency.cc:2129
 hmdcefficiency.cc:2130
 hmdcefficiency.cc:2131
 hmdcefficiency.cc:2132
 hmdcefficiency.cc:2133
 hmdcefficiency.cc:2134
 hmdcefficiency.cc:2135
 hmdcefficiency.cc:2136
 hmdcefficiency.cc:2137
 hmdcefficiency.cc:2138
 hmdcefficiency.cc:2139
 hmdcefficiency.cc:2140
 hmdcefficiency.cc:2141
 hmdcefficiency.cc:2142
 hmdcefficiency.cc:2143
 hmdcefficiency.cc:2144
 hmdcefficiency.cc:2145
 hmdcefficiency.cc:2146
 hmdcefficiency.cc:2147
 hmdcefficiency.cc:2148
 hmdcefficiency.cc:2149
 hmdcefficiency.cc:2150
 hmdcefficiency.cc:2151
 hmdcefficiency.cc:2152
 hmdcefficiency.cc:2153
 hmdcefficiency.cc:2154
 hmdcefficiency.cc:2155
 hmdcefficiency.cc:2156
 hmdcefficiency.cc:2157
 hmdcefficiency.cc:2158
 hmdcefficiency.cc:2159
 hmdcefficiency.cc:2160
 hmdcefficiency.cc:2161
 hmdcefficiency.cc:2162
 hmdcefficiency.cc:2163
 hmdcefficiency.cc:2164
 hmdcefficiency.cc:2165
 hmdcefficiency.cc:2166
 hmdcefficiency.cc:2167
 hmdcefficiency.cc:2168
 hmdcefficiency.cc:2169
 hmdcefficiency.cc:2170
 hmdcefficiency.cc:2171
 hmdcefficiency.cc:2172
 hmdcefficiency.cc:2173
 hmdcefficiency.cc:2174
 hmdcefficiency.cc:2175
 hmdcefficiency.cc:2176
 hmdcefficiency.cc:2177
 hmdcefficiency.cc:2178
 hmdcefficiency.cc:2179
 hmdcefficiency.cc:2180
 hmdcefficiency.cc:2181
 hmdcefficiency.cc:2182
 hmdcefficiency.cc:2183
 hmdcefficiency.cc:2184
 hmdcefficiency.cc:2185
 hmdcefficiency.cc:2186
 hmdcefficiency.cc:2187
 hmdcefficiency.cc:2188
 hmdcefficiency.cc:2189
 hmdcefficiency.cc:2190
 hmdcefficiency.cc:2191
 hmdcefficiency.cc:2192
 hmdcefficiency.cc:2193
 hmdcefficiency.cc:2194
 hmdcefficiency.cc:2195
 hmdcefficiency.cc:2196
 hmdcefficiency.cc:2197
 hmdcefficiency.cc:2198
 hmdcefficiency.cc:2199
 hmdcefficiency.cc:2200
 hmdcefficiency.cc:2201
 hmdcefficiency.cc:2202
 hmdcefficiency.cc:2203
 hmdcefficiency.cc:2204
 hmdcefficiency.cc:2205
 hmdcefficiency.cc:2206
 hmdcefficiency.cc:2207
 hmdcefficiency.cc:2208
 hmdcefficiency.cc:2209
 hmdcefficiency.cc:2210
 hmdcefficiency.cc:2211
 hmdcefficiency.cc:2212
 hmdcefficiency.cc:2213
 hmdcefficiency.cc:2214
 hmdcefficiency.cc:2215
 hmdcefficiency.cc:2216
 hmdcefficiency.cc:2217
 hmdcefficiency.cc:2218
 hmdcefficiency.cc:2219
 hmdcefficiency.cc:2220
 hmdcefficiency.cc:2221
 hmdcefficiency.cc:2222
 hmdcefficiency.cc:2223
 hmdcefficiency.cc:2224
 hmdcefficiency.cc:2225
 hmdcefficiency.cc:2226
 hmdcefficiency.cc:2227
 hmdcefficiency.cc:2228
 hmdcefficiency.cc:2229
 hmdcefficiency.cc:2230
 hmdcefficiency.cc:2231
 hmdcefficiency.cc:2232
 hmdcefficiency.cc:2233
 hmdcefficiency.cc:2234
 hmdcefficiency.cc:2235
 hmdcefficiency.cc:2236
 hmdcefficiency.cc:2237
 hmdcefficiency.cc:2238
 hmdcefficiency.cc:2239
 hmdcefficiency.cc:2240
 hmdcefficiency.cc:2241
 hmdcefficiency.cc:2242
 hmdcefficiency.cc:2243
 hmdcefficiency.cc:2244
 hmdcefficiency.cc:2245
 hmdcefficiency.cc:2246
 hmdcefficiency.cc:2247
 hmdcefficiency.cc:2248
 hmdcefficiency.cc:2249
 hmdcefficiency.cc:2250
 hmdcefficiency.cc:2251
 hmdcefficiency.cc:2252
 hmdcefficiency.cc:2253
 hmdcefficiency.cc:2254
 hmdcefficiency.cc:2255
 hmdcefficiency.cc:2256
 hmdcefficiency.cc:2257
 hmdcefficiency.cc:2258
 hmdcefficiency.cc:2259
 hmdcefficiency.cc:2260
 hmdcefficiency.cc:2261
 hmdcefficiency.cc:2262
 hmdcefficiency.cc:2263
 hmdcefficiency.cc:2264
 hmdcefficiency.cc:2265
 hmdcefficiency.cc:2266
 hmdcefficiency.cc:2267
 hmdcefficiency.cc:2268
 hmdcefficiency.cc:2269
 hmdcefficiency.cc:2270
 hmdcefficiency.cc:2271
 hmdcefficiency.cc:2272
 hmdcefficiency.cc:2273
 hmdcefficiency.cc:2274
 hmdcefficiency.cc:2275
 hmdcefficiency.cc:2276
 hmdcefficiency.cc:2277
 hmdcefficiency.cc:2278
 hmdcefficiency.cc:2279
 hmdcefficiency.cc:2280
 hmdcefficiency.cc:2281
 hmdcefficiency.cc:2282
 hmdcefficiency.cc:2283
 hmdcefficiency.cc:2284
 hmdcefficiency.cc:2285
 hmdcefficiency.cc:2286
 hmdcefficiency.cc:2287
 hmdcefficiency.cc:2288
 hmdcefficiency.cc:2289
 hmdcefficiency.cc:2290
 hmdcefficiency.cc:2291
 hmdcefficiency.cc:2292
 hmdcefficiency.cc:2293
 hmdcefficiency.cc:2294
 hmdcefficiency.cc:2295
 hmdcefficiency.cc:2296
 hmdcefficiency.cc:2297
 hmdcefficiency.cc:2298
 hmdcefficiency.cc:2299
 hmdcefficiency.cc:2300
 hmdcefficiency.cc:2301
 hmdcefficiency.cc:2302
 hmdcefficiency.cc:2303
 hmdcefficiency.cc:2304
 hmdcefficiency.cc:2305
 hmdcefficiency.cc:2306
 hmdcefficiency.cc:2307
 hmdcefficiency.cc:2308
 hmdcefficiency.cc:2309
 hmdcefficiency.cc:2310
 hmdcefficiency.cc:2311
 hmdcefficiency.cc:2312
 hmdcefficiency.cc:2313
 hmdcefficiency.cc:2314
 hmdcefficiency.cc:2315
 hmdcefficiency.cc:2316
 hmdcefficiency.cc:2317
 hmdcefficiency.cc:2318
 hmdcefficiency.cc:2319
 hmdcefficiency.cc:2320
 hmdcefficiency.cc:2321
 hmdcefficiency.cc:2322
 hmdcefficiency.cc:2323
 hmdcefficiency.cc:2324
 hmdcefficiency.cc:2325
 hmdcefficiency.cc:2326
 hmdcefficiency.cc:2327
 hmdcefficiency.cc:2328
 hmdcefficiency.cc:2329
 hmdcefficiency.cc:2330
 hmdcefficiency.cc:2331
 hmdcefficiency.cc:2332
 hmdcefficiency.cc:2333
 hmdcefficiency.cc:2334
 hmdcefficiency.cc:2335
 hmdcefficiency.cc:2336
 hmdcefficiency.cc:2337
 hmdcefficiency.cc:2338
 hmdcefficiency.cc:2339
 hmdcefficiency.cc:2340
 hmdcefficiency.cc:2341
 hmdcefficiency.cc:2342
 hmdcefficiency.cc:2343
 hmdcefficiency.cc:2344
 hmdcefficiency.cc:2345
 hmdcefficiency.cc:2346
 hmdcefficiency.cc:2347
 hmdcefficiency.cc:2348
 hmdcefficiency.cc:2349
 hmdcefficiency.cc:2350
 hmdcefficiency.cc:2351
 hmdcefficiency.cc:2352
 hmdcefficiency.cc:2353
 hmdcefficiency.cc:2354
 hmdcefficiency.cc:2355
 hmdcefficiency.cc:2356
 hmdcefficiency.cc:2357
 hmdcefficiency.cc:2358
 hmdcefficiency.cc:2359
 hmdcefficiency.cc:2360
 hmdcefficiency.cc:2361
 hmdcefficiency.cc:2362
 hmdcefficiency.cc:2363
 hmdcefficiency.cc:2364
 hmdcefficiency.cc:2365
 hmdcefficiency.cc:2366
 hmdcefficiency.cc:2367
 hmdcefficiency.cc:2368
 hmdcefficiency.cc:2369
 hmdcefficiency.cc:2370
 hmdcefficiency.cc:2371
 hmdcefficiency.cc:2372
 hmdcefficiency.cc:2373
 hmdcefficiency.cc:2374
 hmdcefficiency.cc:2375
 hmdcefficiency.cc:2376
 hmdcefficiency.cc:2377
 hmdcefficiency.cc:2378
 hmdcefficiency.cc:2379
 hmdcefficiency.cc:2380
 hmdcefficiency.cc:2381
 hmdcefficiency.cc:2382
 hmdcefficiency.cc:2383
 hmdcefficiency.cc:2384
 hmdcefficiency.cc:2385
 hmdcefficiency.cc:2386
 hmdcefficiency.cc:2387
 hmdcefficiency.cc:2388
 hmdcefficiency.cc:2389
 hmdcefficiency.cc:2390
 hmdcefficiency.cc:2391
 hmdcefficiency.cc:2392
 hmdcefficiency.cc:2393
 hmdcefficiency.cc:2394
 hmdcefficiency.cc:2395
 hmdcefficiency.cc:2396
 hmdcefficiency.cc:2397
 hmdcefficiency.cc:2398
 hmdcefficiency.cc:2399
 hmdcefficiency.cc:2400
 hmdcefficiency.cc:2401
 hmdcefficiency.cc:2402
 hmdcefficiency.cc:2403
 hmdcefficiency.cc:2404
 hmdcefficiency.cc:2405
 hmdcefficiency.cc:2406
 hmdcefficiency.cc:2407
 hmdcefficiency.cc:2408
 hmdcefficiency.cc:2409
 hmdcefficiency.cc:2410
 hmdcefficiency.cc:2411
 hmdcefficiency.cc:2412
 hmdcefficiency.cc:2413
 hmdcefficiency.cc:2414
 hmdcefficiency.cc:2415
 hmdcefficiency.cc:2416
 hmdcefficiency.cc:2417
 hmdcefficiency.cc:2418
 hmdcefficiency.cc:2419
 hmdcefficiency.cc:2420
 hmdcefficiency.cc:2421
 hmdcefficiency.cc:2422
 hmdcefficiency.cc:2423
 hmdcefficiency.cc:2424
 hmdcefficiency.cc:2425
 hmdcefficiency.cc:2426
 hmdcefficiency.cc:2427
 hmdcefficiency.cc:2428
 hmdcefficiency.cc:2429
 hmdcefficiency.cc:2430
 hmdcefficiency.cc:2431
 hmdcefficiency.cc:2432
 hmdcefficiency.cc:2433
 hmdcefficiency.cc:2434
 hmdcefficiency.cc:2435
 hmdcefficiency.cc:2436
 hmdcefficiency.cc:2437
 hmdcefficiency.cc:2438
 hmdcefficiency.cc:2439
 hmdcefficiency.cc:2440
 hmdcefficiency.cc:2441
 hmdcefficiency.cc:2442
 hmdcefficiency.cc:2443
 hmdcefficiency.cc:2444
 hmdcefficiency.cc:2445
 hmdcefficiency.cc:2446
 hmdcefficiency.cc:2447
 hmdcefficiency.cc:2448
 hmdcefficiency.cc:2449
 hmdcefficiency.cc:2450
 hmdcefficiency.cc:2451
 hmdcefficiency.cc:2452
 hmdcefficiency.cc:2453
 hmdcefficiency.cc:2454
 hmdcefficiency.cc:2455
 hmdcefficiency.cc:2456
 hmdcefficiency.cc:2457
 hmdcefficiency.cc:2458
 hmdcefficiency.cc:2459
 hmdcefficiency.cc:2460
 hmdcefficiency.cc:2461
 hmdcefficiency.cc:2462
 hmdcefficiency.cc:2463
 hmdcefficiency.cc:2464
 hmdcefficiency.cc:2465
 hmdcefficiency.cc:2466
 hmdcefficiency.cc:2467
 hmdcefficiency.cc:2468
 hmdcefficiency.cc:2469
 hmdcefficiency.cc:2470
 hmdcefficiency.cc:2471
 hmdcefficiency.cc:2472
 hmdcefficiency.cc:2473
 hmdcefficiency.cc:2474
 hmdcefficiency.cc:2475
 hmdcefficiency.cc:2476
 hmdcefficiency.cc:2477
 hmdcefficiency.cc:2478
 hmdcefficiency.cc:2479
 hmdcefficiency.cc:2480
 hmdcefficiency.cc:2481
 hmdcefficiency.cc:2482
 hmdcefficiency.cc:2483
 hmdcefficiency.cc:2484
 hmdcefficiency.cc:2485
 hmdcefficiency.cc:2486
 hmdcefficiency.cc:2487
 hmdcefficiency.cc:2488
 hmdcefficiency.cc:2489
 hmdcefficiency.cc:2490
 hmdcefficiency.cc:2491
 hmdcefficiency.cc:2492
 hmdcefficiency.cc:2493
 hmdcefficiency.cc:2494
 hmdcefficiency.cc:2495
 hmdcefficiency.cc:2496
 hmdcefficiency.cc:2497
 hmdcefficiency.cc:2498
 hmdcefficiency.cc:2499
 hmdcefficiency.cc:2500
 hmdcefficiency.cc:2501
 hmdcefficiency.cc:2502
 hmdcefficiency.cc:2503
 hmdcefficiency.cc:2504
 hmdcefficiency.cc:2505
 hmdcefficiency.cc:2506
 hmdcefficiency.cc:2507
 hmdcefficiency.cc:2508
 hmdcefficiency.cc:2509
 hmdcefficiency.cc:2510
 hmdcefficiency.cc:2511
 hmdcefficiency.cc:2512
 hmdcefficiency.cc:2513
 hmdcefficiency.cc:2514
 hmdcefficiency.cc:2515
 hmdcefficiency.cc:2516
 hmdcefficiency.cc:2517
 hmdcefficiency.cc:2518
 hmdcefficiency.cc:2519
 hmdcefficiency.cc:2520
 hmdcefficiency.cc:2521
 hmdcefficiency.cc:2522
 hmdcefficiency.cc:2523
 hmdcefficiency.cc:2524
 hmdcefficiency.cc:2525
 hmdcefficiency.cc:2526
 hmdcefficiency.cc:2527
 hmdcefficiency.cc:2528
 hmdcefficiency.cc:2529
 hmdcefficiency.cc:2530
 hmdcefficiency.cc:2531
 hmdcefficiency.cc:2532
 hmdcefficiency.cc:2533
 hmdcefficiency.cc:2534
 hmdcefficiency.cc:2535
 hmdcefficiency.cc:2536
 hmdcefficiency.cc:2537
 hmdcefficiency.cc:2538
 hmdcefficiency.cc:2539
 hmdcefficiency.cc:2540
 hmdcefficiency.cc:2541
 hmdcefficiency.cc:2542
 hmdcefficiency.cc:2543
 hmdcefficiency.cc:2544
 hmdcefficiency.cc:2545
 hmdcefficiency.cc:2546
 hmdcefficiency.cc:2547
 hmdcefficiency.cc:2548
 hmdcefficiency.cc:2549
 hmdcefficiency.cc:2550
 hmdcefficiency.cc:2551
 hmdcefficiency.cc:2552
 hmdcefficiency.cc:2553
 hmdcefficiency.cc:2554
 hmdcefficiency.cc:2555
 hmdcefficiency.cc:2556
 hmdcefficiency.cc:2557
 hmdcefficiency.cc:2558
 hmdcefficiency.cc:2559
 hmdcefficiency.cc:2560
 hmdcefficiency.cc:2561
 hmdcefficiency.cc:2562
 hmdcefficiency.cc:2563
 hmdcefficiency.cc:2564
 hmdcefficiency.cc:2565
 hmdcefficiency.cc:2566
 hmdcefficiency.cc:2567
 hmdcefficiency.cc:2568
 hmdcefficiency.cc:2569
 hmdcefficiency.cc:2570
 hmdcefficiency.cc:2571
 hmdcefficiency.cc:2572
 hmdcefficiency.cc:2573
 hmdcefficiency.cc:2574
 hmdcefficiency.cc:2575
 hmdcefficiency.cc:2576
 hmdcefficiency.cc:2577
 hmdcefficiency.cc:2578
 hmdcefficiency.cc:2579
 hmdcefficiency.cc:2580
 hmdcefficiency.cc:2581
 hmdcefficiency.cc:2582
 hmdcefficiency.cc:2583
 hmdcefficiency.cc:2584
 hmdcefficiency.cc:2585
 hmdcefficiency.cc:2586
 hmdcefficiency.cc:2587
 hmdcefficiency.cc:2588
 hmdcefficiency.cc:2589
 hmdcefficiency.cc:2590
 hmdcefficiency.cc:2591
 hmdcefficiency.cc:2592
 hmdcefficiency.cc:2593
 hmdcefficiency.cc:2594
 hmdcefficiency.cc:2595
 hmdcefficiency.cc:2596
 hmdcefficiency.cc:2597
 hmdcefficiency.cc:2598
 hmdcefficiency.cc:2599
 hmdcefficiency.cc:2600
 hmdcefficiency.cc:2601
 hmdcefficiency.cc:2602
 hmdcefficiency.cc:2603
 hmdcefficiency.cc:2604
 hmdcefficiency.cc:2605
 hmdcefficiency.cc:2606
 hmdcefficiency.cc:2607
 hmdcefficiency.cc:2608
 hmdcefficiency.cc:2609
 hmdcefficiency.cc:2610
 hmdcefficiency.cc:2611
 hmdcefficiency.cc:2612
 hmdcefficiency.cc:2613
 hmdcefficiency.cc:2614
 hmdcefficiency.cc:2615
 hmdcefficiency.cc:2616
 hmdcefficiency.cc:2617
 hmdcefficiency.cc:2618
 hmdcefficiency.cc:2619
 hmdcefficiency.cc:2620
 hmdcefficiency.cc:2621
 hmdcefficiency.cc:2622
 hmdcefficiency.cc:2623
 hmdcefficiency.cc:2624
 hmdcefficiency.cc:2625
 hmdcefficiency.cc:2626
 hmdcefficiency.cc:2627
 hmdcefficiency.cc:2628
 hmdcefficiency.cc:2629
 hmdcefficiency.cc:2630
 hmdcefficiency.cc:2631
 hmdcefficiency.cc:2632
 hmdcefficiency.cc:2633
 hmdcefficiency.cc:2634
 hmdcefficiency.cc:2635
 hmdcefficiency.cc:2636
 hmdcefficiency.cc:2637
 hmdcefficiency.cc:2638
 hmdcefficiency.cc:2639
 hmdcefficiency.cc:2640
 hmdcefficiency.cc:2641
 hmdcefficiency.cc:2642
 hmdcefficiency.cc:2643
 hmdcefficiency.cc:2644
 hmdcefficiency.cc:2645
 hmdcefficiency.cc:2646
 hmdcefficiency.cc:2647
 hmdcefficiency.cc:2648
 hmdcefficiency.cc:2649
 hmdcefficiency.cc:2650
 hmdcefficiency.cc:2651
 hmdcefficiency.cc:2652
 hmdcefficiency.cc:2653
 hmdcefficiency.cc:2654
 hmdcefficiency.cc:2655
 hmdcefficiency.cc:2656
 hmdcefficiency.cc:2657
 hmdcefficiency.cc:2658
 hmdcefficiency.cc:2659
 hmdcefficiency.cc:2660
 hmdcefficiency.cc:2661
 hmdcefficiency.cc:2662
 hmdcefficiency.cc:2663
 hmdcefficiency.cc:2664
 hmdcefficiency.cc:2665
 hmdcefficiency.cc:2666
 hmdcefficiency.cc:2667
 hmdcefficiency.cc:2668
 hmdcefficiency.cc:2669
 hmdcefficiency.cc:2670
 hmdcefficiency.cc:2671
 hmdcefficiency.cc:2672
 hmdcefficiency.cc:2673
 hmdcefficiency.cc:2674
 hmdcefficiency.cc:2675
 hmdcefficiency.cc:2676
 hmdcefficiency.cc:2677
 hmdcefficiency.cc:2678
 hmdcefficiency.cc:2679
 hmdcefficiency.cc:2680
 hmdcefficiency.cc:2681
 hmdcefficiency.cc:2682
 hmdcefficiency.cc:2683
 hmdcefficiency.cc:2684
 hmdcefficiency.cc:2685
 hmdcefficiency.cc:2686
 hmdcefficiency.cc:2687
 hmdcefficiency.cc:2688
 hmdcefficiency.cc:2689
 hmdcefficiency.cc:2690
 hmdcefficiency.cc:2691
 hmdcefficiency.cc:2692
 hmdcefficiency.cc:2693
 hmdcefficiency.cc:2694
 hmdcefficiency.cc:2695
 hmdcefficiency.cc:2696
 hmdcefficiency.cc:2697
 hmdcefficiency.cc:2698
 hmdcefficiency.cc:2699
 hmdcefficiency.cc:2700
 hmdcefficiency.cc:2701
 hmdcefficiency.cc:2702
 hmdcefficiency.cc:2703
 hmdcefficiency.cc:2704
 hmdcefficiency.cc:2705
 hmdcefficiency.cc:2706
 hmdcefficiency.cc:2707
 hmdcefficiency.cc:2708
 hmdcefficiency.cc:2709
 hmdcefficiency.cc:2710
 hmdcefficiency.cc:2711
 hmdcefficiency.cc:2712
 hmdcefficiency.cc:2713
 hmdcefficiency.cc:2714
 hmdcefficiency.cc:2715
 hmdcefficiency.cc:2716
 hmdcefficiency.cc:2717
 hmdcefficiency.cc:2718
 hmdcefficiency.cc:2719
 hmdcefficiency.cc:2720
 hmdcefficiency.cc:2721
 hmdcefficiency.cc:2722
 hmdcefficiency.cc:2723
 hmdcefficiency.cc:2724
 hmdcefficiency.cc:2725
 hmdcefficiency.cc:2726
 hmdcefficiency.cc:2727
 hmdcefficiency.cc:2728
 hmdcefficiency.cc:2729
 hmdcefficiency.cc:2730
 hmdcefficiency.cc:2731
 hmdcefficiency.cc:2732
 hmdcefficiency.cc:2733
 hmdcefficiency.cc:2734
 hmdcefficiency.cc:2735
 hmdcefficiency.cc:2736
 hmdcefficiency.cc:2737
 hmdcefficiency.cc:2738
 hmdcefficiency.cc:2739
 hmdcefficiency.cc:2740
 hmdcefficiency.cc:2741
 hmdcefficiency.cc:2742
 hmdcefficiency.cc:2743
 hmdcefficiency.cc:2744
 hmdcefficiency.cc:2745
 hmdcefficiency.cc:2746
 hmdcefficiency.cc:2747
 hmdcefficiency.cc:2748
 hmdcefficiency.cc:2749
 hmdcefficiency.cc:2750
 hmdcefficiency.cc:2751
 hmdcefficiency.cc:2752
 hmdcefficiency.cc:2753
 hmdcefficiency.cc:2754
 hmdcefficiency.cc:2755
 hmdcefficiency.cc:2756
 hmdcefficiency.cc:2757
 hmdcefficiency.cc:2758
 hmdcefficiency.cc:2759
 hmdcefficiency.cc:2760
 hmdcefficiency.cc:2761
 hmdcefficiency.cc:2762
 hmdcefficiency.cc:2763
 hmdcefficiency.cc:2764
 hmdcefficiency.cc:2765
 hmdcefficiency.cc:2766
 hmdcefficiency.cc:2767
 hmdcefficiency.cc:2768
 hmdcefficiency.cc:2769
 hmdcefficiency.cc:2770
 hmdcefficiency.cc:2771
 hmdcefficiency.cc:2772
 hmdcefficiency.cc:2773
 hmdcefficiency.cc:2774
 hmdcefficiency.cc:2775
 hmdcefficiency.cc:2776
 hmdcefficiency.cc:2777
 hmdcefficiency.cc:2778
 hmdcefficiency.cc:2779
 hmdcefficiency.cc:2780
 hmdcefficiency.cc:2781
 hmdcefficiency.cc:2782
 hmdcefficiency.cc:2783
 hmdcefficiency.cc:2784
 hmdcefficiency.cc:2785
 hmdcefficiency.cc:2786
 hmdcefficiency.cc:2787
 hmdcefficiency.cc:2788
 hmdcefficiency.cc:2789
 hmdcefficiency.cc:2790
 hmdcefficiency.cc:2791
 hmdcefficiency.cc:2792
 hmdcefficiency.cc:2793
 hmdcefficiency.cc:2794
 hmdcefficiency.cc:2795
 hmdcefficiency.cc:2796
 hmdcefficiency.cc:2797
 hmdcefficiency.cc:2798
 hmdcefficiency.cc:2799
 hmdcefficiency.cc:2800
 hmdcefficiency.cc:2801
 hmdcefficiency.cc:2802
 hmdcefficiency.cc:2803
 hmdcefficiency.cc:2804
 hmdcefficiency.cc:2805
 hmdcefficiency.cc:2806
 hmdcefficiency.cc:2807
 hmdcefficiency.cc:2808