ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : S. Lebedev
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRich700GeoTestRealQa
//
//
//////////////////////////////////////////////////////////////////////////////

#include "hrich700geotestrealqa.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hevent.h"
#include "hgeantrich.h"
#include "hlinearcatiter.h"
#include "hmatrixcatiter.h"
#include "hparset.h"
#include "hspectrometer.h"
#include "richdef.h"
#include "hrich700drawhist.h"
#include "hrich700pmt.h"
#include "hrichhit.h"
#include "hrichcal.h"
#include "hrich700raw.h"
#include "hparticletool.h"
#include "hparticledef.h"
#include "hparticlecand.h"
#include "hparticleevtinfo.h"

#include "TCanvas.h"
#include "TH2D.h"
#include "TPad.h"
#include "TEllipse.h"
#include "TRandom.h"
#include "TLatex.h"

#include "hgeantkine.h"

#include "hrich700histmanager.h"
#include "hrich700digipar.h"
#include "hrich700utils.h"

#include <iostream>
#include <sstream>

using namespace std;


ClassImp(HRich700GeoTestRealQa)

    HRich700GeoTestRealQa::HRich700GeoTestRealQa():
fEventNum(0),
fOutputDir(""),
fOutputRootFile("")
{

}

HRich700GeoTestRealQa::~HRich700GeoTestRealQa()
{

}

Bool_t HRich700GeoTestRealQa::init()
{
    fCatRichCal = gHades->getCurrentEvent()->getCategory(catRichCal);
    if (NULL == fCatRichCal) {
       Error("init()", "Initialization of catRicCal category failed, returning...");
       return kFALSE;
    }

    fCatRichHit = gHades->getCurrentEvent()->getCategory(catRichHit);
    if (NULL == fCatRichHit) {
	   Error("init", "Initializatin of RICH hit category failed, returning...");
	   return kFALSE;
    }

    fCatRichRaw = gHades->getCurrentEvent()->getCategory(catRich700Raw);
    // if (NULL == fCatRichRaw) {
    //     Error("init", "Initializatin of RICH raw category failed, returning...");
    //     return kFALSE;
    // }

    fCatParticleCand = gHades->getCurrentEvent()->getCategory(catParticleCand);
    if (NULL == fCatParticleCand) {
	Error("init", "Initializatin of catParticleCand category failed, returning...");
	return kFALSE;
    }

    fDigiPar = (HRich700DigiPar*) gHades->getRuntimeDb()->getContainer("Rich700DigiPar");
    if(!fDigiPar) {
	Error("init", "Can not retrieve HRich700DigiPar");
        return kFALSE;
    }

    fCatEvtInfo = gHades->getCurrentEvent()->getCategory(catParticleEvtInfo);
    if (NULL == fCatEvtInfo) {
	Error("init", "Initializatin of catParticleEvtInfo category failed, returning...");
	return kFALSE;
    }

    initHist();
    return kTRUE;

}

void HRich700GeoTestRealQa::initHist()
{
    fHM = new HRich700HistManager();
    fHM->Create1<TH1D>("fhNofEvents", "fhNofEvents;# Events;Entries", 1, 0, 1);

    fHM->Create2<TH2D>("fhCalsColRow", "fhCalsColRow;Col index;Row index;# Cals/event", 194,-0.5, 193.5, 194, -0.5, 193.5);
    fHM->Create2<TH2D>("fhCalsXY", "fhCalsXY;X [mm];Y [mm];# Cals/event", 175,-700, 700, 175, -700, 700);
    fHM->Create1<TH1D>("fhCalsPmtId", "fhCalsPmtId;PMT ID;# Cals/event", 600,-0.5, 599.5);
    fHM->Create2<TH2D>("fhCalsPmtXPmtY", "fhCalsPmtXPmtY;PMT X;PMT Y;# Cals/event", 25,-0.5, 24.5, 25, -0.5, 24.5);
    fHM->Create1<TH1D>("fhCalsSectors", "fhCalsSectors;Sector;# Cals/event", 6,-0.5, 5.5);
    fHM->Create1<TH1D>("fhNofCalsPerPmt", "fhNofCalsPerPmt;# Cals/PMT/event;# PMT/event", 67,-0.5, 66.5);
    fHM->Create3<TH3D>("fhNofCalsPerPmtPmtXPmtY", "fhNofCalsPerPmtPmtXPmtY;PMT X;PMT Y;# Cals/PMT/event", 25,-0.5, 24.5, 25, -0.5, 24.5, 67,-0.5, 66.5);

    //blobs
    fHM->Create1<TH1D>("fhNofBlobsPerEvent", "fhNofBlobsPerEvent;Nof blobs per event;% of total events", 10,-0.5, 9.5);
    fHM->Create2<TH2D>("fhBlobsPmtXPmtY", "fhBlobsPmtXPmtY;PMT X;PMT Y;Nof blobs/PMT/event", 25,-0.5, 24.5, 25, -0.5, 24.5);
    fHM->Create1<TH1D>("fhBlobsMatchQa", "fhBlobsMatchQa;RICH Matching Qa;Entries/event", 60, 0, 60.);
    fHM->Create2<TH2D>("fhBlobsDThetaVsDPhi", "fhBlobsDThetaVsDPhi;dTheta [deg];dPhi [deg];Entries/event", 60, -30, 30, 60, -30, 30);
    fHM->Create2<TH2D>("fhNofCandsVsNofBlobs", "fhNofCandsVsNofBlobs;Nof cands (used) per event;Nof blobs per event;Entries/event", 20, -0.5, 39.5, 10,-0.5, 9.5);

    fHM->Create1<TH1D>("fhCalsTheta", "fhCalsTheta;Theta [deg];# Cals/event", 100, 0., 100.);
    fHM->Create1<TH1D>("fhCalsPhi", "fhCalsPhi;Phi [deg];# Cals/event", 360, 0., 360.);
    fHM->Create1<TH1D>("fhCalsSectorsInterp", "fhCalsSectorsInterp;Sector;# Cals/event", 6,-0.5, 5.5);

    //ring center XY
    fHM->Create2<TH2D>("fhRingXYMore18mm", "fhRingXYMore18mm;X [mm];Y [mm];Entries/event", 140,-700, 700, 140, -700, 700);
    fHM->Create2<TH2D>("fhRingXYLess18mm", "fhRingXYLess18mm;X [mm];Y [mm];Entries/event", 140,-700, 700, 140, -700, 700);
    fHM->Create2<TH2D>("fhRingXY", "fhRingXY;X [mm];Y [mm];Entries/event", 140,-700, 700, 140, -700, 700);
    fHM->Create2<TH2D>("fhRingXYCand", "fhRingXYCand;X [mm];Y [mm];Entries/event", 140,-700, 700, 140, -700, 700);
    fHM->Create2<TH2D>("fhRingXYTofId", "fhRingXYTofId;X [mm];Y [mm];Entries/event", 140,-700, 700, 140, -700, 700);


    fHM->Create2<TH2D>("fhMomVsBetaMore18mm", "fhMomVsBetaMore18mm;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaLess18mm", "fhMomVsBetaLess18mm;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaCand", "fhMomVsBetaCand;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaRichMatch<1", "fhMomVsBetaRichMatch<1;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaRichMatch<2", "fhMomVsBetaRichMatch<2;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaRichMatch<3", "fhMomVsBetaRichMatch<3;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);
    fHM->Create2<TH2D>("fhMomVsBetaRichMatch<4", "fhMomVsBetaRichMatch<4;p x q [MeV/c];#beta;Entries/event", 50, -1000, 1000, 50, 0., 1.2);

    // Radius
    fHM->Create2<TH2D>("fhThetaVsRadius", "fhThetaVsRadius;Theta [deg];Radius [mm];Entries/event", 15, 0, 90, 60, 0, 30);
    fHM->Create2<TH2D>("fhThetaVsRadiusCand", "fhThetaVsRadiusCand;Theta [deg];Radius [mm];Entries/event", 15, 0, 90, 60, 0, 30);
    fHM->Create2<TH2D>("fhThetaVsRadiusTofId", "fhThetaVsRadiusTofId;Theta [deg];Radius [mm];Entries/event", 15, 0, 90, 60, 0, 30);

    fHM->Create2<TH2D>("fhNofCalsInRingVsRadius", "fhNofCalsInRingVsRadius;Nof cals per ring;Radius [mm];Entries/event", 30, -.5, 29.5, 60, 0, 30);
    fHM->Create2<TH2D>("fhNofCalsInRingVsRadiusCand", "fhNofCalsInRingVsRadiusCand;Nof cals per ring;Radius [mm];Entries/event", 30, -.5, 29.5, 60, 0, 30);
    fHM->Create2<TH2D>("fhNofCalsInRingVsRadiusTofId", "fhNofCalsInRingVsRadiusTofId;Nof cals per ring;Radius [mm];Entries/event", 30, -.5, 29.5, 60, 0, 30);

    fHM->Create2<TH2D>("fhBetaVsRadiusSys0", "fhBetaVsRadiusSys0;#beta;Radius [mm];Entries/event", 50, 0., 1.2, 60, 0, 30);
    fHM->Create2<TH2D>("fhBetaVsRadiusSys1", "fhBetaVsRadiusSys1;#beta;Radius [mm];Entries/event", 50, 0., 1.2, 60, 0, 30);
    fHM->Create2<TH2D>("fhMomVsRadius", "fhMomVsRadius;p x q [MeV/c];Radius [mm];Entries/event", 50, -1000, 1000, 60, 0, 30);
    fHM->Create2<TH2D>("fhNofUsedFlagCandVsRadius", "fhNofUsedFlagCandVsRadius;Nof cands (used) per event;Radius [mm];Entries/event", 15, -0.5, 29.5, 60, 0, 30);
    fHM->Create2<TH2D>("fhRichMatchQaVsRadiusCand", "fhRichMatchQaVsRadiusCand;RICH Matching Qa;Radius [mm];Entries/event", 60, 0., 12., 60, 0, 30);
    fHM->Create2<TH2D>("fhRichMatchQaVsRadiusTofId", "fhRichMatchQaVsRadiusTofId;RICH Matching Qa;Radius [mm];Entries/event", 60, 0., 12., 60, 0, 30);

    // Nof cals per ring
    fHM->Create2<TH2D>("fhThetaVsNofCalsInRing", "fhThetaVsNofCalsInRing;Theta [deg];Nof cals per ring;Entries/event", 15, 0, 90, 30, -0.5, 29.5);
    fHM->Create2<TH2D>("fhThetaVsNofCalsInRingCand", "fhThetaVsNofCalsInRingCand;Theta [deg];Nof cals per ring;Entries/event", 15, 0, 90, 30, -0.5, 29.5);
    fHM->Create2<TH2D>("fhThetaVsNofCalsInRingTofId", "fhThetaVsNofCalsInRingTofId;Theta [deg];Nof cals per ring;Entries/event", 15, 0, 90, 30, -0.5, 29.5);

    // nof Cals in ring vs XY
    fHM->Create3<TH3D>("fhNofCalsInRingVsXY", "fhNofCalsInRingVsXY;PMT X;PMT Y;Nof cals per ring", 25,-0.5, 24.5, 25, -0.5, 24.5, 30, -0.5, 29.5);
    fHM->Create3<TH3D>("fhNofCalsInRingVsXYCand", "fhNofCalsInRingVsXYCand;PMT X;PMT Y;Nof cals per ring", 25,-0.5, 24.5, 25, -0.5, 24.5, 30, -0.5, 29.5);
    fHM->Create3<TH3D>("fhNofCalsInRingVsXYTofId", "fhNofCalsInRingVsXYTofId;PMT X;PMT Y;Nof cals per ring", 25,-0.5, 24.5, 25, -0.5, 24.5, 30, -0.5, 29.5);

    // nof Cals in ring vs Theta Phi
    fHM->Create3<TH3D>("fhNofCalsInRingVsThetaPhi", "fhNofCalsInRingVsThetaPhi;Theta [deg];Phi [deg];Nof cals per ring",  30, 0, 90, 30, 0, 360, 30, -0.5, 29.5);
    fHM->Create3<TH3D>("fhNofCalsInRingVsThetaPhiCand", "fhNofCalsInRingVsThetaPhiCand;Theta [deg];Phi [deg];Nof cals per ring",  30, 0, 90, 30, 0, 360, 30, -0.5, 29.5);
    fHM->Create3<TH3D>("fhNofCalsInRingVsThetaPhiTofId", "fhNofCalsInRingVsThetaPhiTofId;Theta [deg];Phi [deg];Nof cals per ring",  30, 0, 90, 30, 0, 360, 30, -0.5, 29.5);

    fHM->Create1<TH1D>("fhNofCals", "fhNofCals;Nof cals per event;Entries/event", 50, 0, 1500);
    fHM->Create1<TH1D>("fhNofRings", "fhNofRings;Nof rings per event;Entries/event", 20, -0.5, 19.5);
    fHM->Create1<TH1D>("fhNofCands", "fhNofCands;Nof particle cands per event;Entries/event", 50, -0.5, 149.5);
    fHM->Create2<TH2D>("fhNofCalsVsNofRings", "fhNofCalsVsNofRings;Nof cals per event;Nof rings per event;Entries/event", 30, 0, 600, 20, -0.5, 19.5);
    fHM->Create2<TH2D>("fhNofCandsVsNofRings", "fhNofCandsVsNofRings;Nof cands (used) per event;Nof rings per event;Entries/event", 20, -0.5, 39.5, 20, -0.5, 19.5);

    fHM->Create1<TH1D>("fhNofCandsUsedFlag", "fhNofCandsUsedFlag;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);
    fHM->Create1<TH1D>("fhNofCandsTof", "fhNofCandsTofId;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);
    fHM->Create1<TH1D>("fhNofCandsRich", "fhNofCandsRich;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);
    fHM->Create1<TH1D>("fhNofCandsRichTof", "fhNofCandsRichTof;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);
    fHM->Create1<TH1D>("fhNofCandsTofId", "fhNofCandsTofId;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);
    fHM->Create1<TH1D>("fhNofCandsRichTofId", "fhNofCandsRichTofId;Nof particle cands per event;Entries/event", 30, -0.5, 29.5);

    fHM->Create1<TH1D>("fhMomUsedFlag", "fhMomUsedFlag;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomTof", "fhMomTof;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomRich", "fhMomRich;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomRichTof", "fhMomRichTof;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomTofId", "fhMomTofId;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomRichTofId", "fhMomRichTofId;Momentum [MeV/c];Entries/event", 40, 0, 1000);

    fHM->Create2<TH2D>("fhThetaVsPhiUsedFlag", "fhThetaVsPhiUsedFlag;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiTof", "fhThetaVsPhiTof;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiRich", "fhThetaVsPhiRich;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiRichTof", "fhThetaVsPhiRichTof;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiTofId", "fhThetaVsPhiTofId;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiRichTofId", "fhThetaVsPhiRichTofId;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);

    //Plus and Minus efficiency
    fHM->Create1<TH1D>("fhMomTofIdMinus", "fhMomTofIdMinus;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomRichTofIdMinus", "fhMomRichTofIdMinus;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomTofIdPlus", "fhMomTofIdPlus;Momentum [MeV/c];Entries/event", 40, 0, 1000);
    fHM->Create1<TH1D>("fhMomRichTofIdPlus", "fhMomRichTofIdPlus;Momentum [MeV/c];Entries/event", 40, 0, 1000);

    fHM->Create2<TH2D>("fhThetaVsPhiTofIdMinus", "fhThetaVsPhiTofIdMinus;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiRichTofIdMinus", "fhThetaVsPhiRichTofIdMinus;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiTofIdPlus", "fhThetaVsPhiTofIdPlus;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);
    fHM->Create2<TH2D>("fhThetaVsPhiRichTofIdPlus", "fhThetaVsPhiRichTofIdPlus;Theta [deg];Phi [deg];Entries/event", 30, 0, 90, 30, 0, 360);


    fHM->Create1<TH1D>("fhRichMatchQaCand", "fhRichMatchQaCand;RICH Matching Qa;Entries/event", 40, -2, 12.);
    fHM->Create2<TH2D>("fhDThetaVsDPhiCand", "fhDThetaVsDPhiCand;dTheta [deg];dPhi [deg];Entries/event", 60, -12, 12, 60, -12, 12);
    fHM->Create1<TH1D>("fhRichMatchQaTofId", "fhRichMatchQaTofId;RICH Matching Qa;Entries/event", 40, -2, 12.);
    fHM->Create2<TH2D>("fhDThetaVsDPhiTofId", "fhDThetaVsDPhiTofId;dTheta [deg];dPhi [deg];Entries/event", 60, -12, 12, 60, -12, 12);


    for (Int_t iS = 0; iS < 6; iS++) {
        stringstream ss;
        ss << "fhCalsThetaForSector" << iS;
        fHM->Create1<TH1D>(ss.str().c_str() , (ss.str() + ";Theta [deg];# Cals/event").c_str(), 100, 0., 100.);
    }

    fHM->Create2<TH2D>("fhRawPmtPixel", "fhRawPmtPixel;PMT ID;Pixel ID;Entries", 600,-0.5, 599.5, 65, -0.5, 64.5);
    fHM->Create1<TH1D>("fhRawMult", "fhRawMult;Raw hit multiplicity;Entries", 10,-0.5, 9.5);
    fHM->Create1<TH1D>("fhRawToT", "fhRawToT;ToT [ns];Entries", 100, 0., 10);
}

Bool_t HRich700GeoTestRealQa::reinit()
{
    return kTRUE;
}


Int_t HRich700GeoTestRealQa::execute()
{
    if (!isCurrentEventGood()) return 0;
    fEventNum++;
    fHM->H1("fhNofEvents")->Fill(0.5);
    //if (fEventNum%1000 == 0) cout << "HRich700GeoTestRealQa::execute nofGoodEvents " << fEventNum << endl;

    fillHistCals();
    fillHistRaw();
    fillHistRings();
    fillHistParticleCands();
    return 0;
}

Bool_t HRich700GeoTestRealQa::isCurrentEventGood()
{
    HParticleEvtInfo* evtInfo = static_cast<HParticleEvtInfo*>(fCatEvtInfo->getObject(0));
    if(evtInfo&&!evtInfo->isGoodEvent(
        Particle::kGoodTRIGGER
    	// | Particle::kGoodVertexClust
        // | Particle::kGoodVertexCand
        // | Particle::kGoodSTART
        // | Particle::kNoPileUpSTART
        // | Particle::kNoVETO
        // | Particle::kGoodSTARTVETO
        // | Particle::kGoodSTARTMETA
    )) return false;

    // HEventHeader* eventHeader = gHades->getCurrentEvent()->getEventHeader();
    // eventHeader->isTBit(13); //PT3
    return true;
}

void HRich700GeoTestRealQa::fillHistCals()
{
    Int_t blobsCut = 28;
    Int_t nofRichCals = fCatRichCal->getEntries();
    Int_t nofRichRings = fCatRichHit->getEntries();
    fHM->H1("fhNofCals")->Fill(nofRichCals);
    fHM->H1("fhNofRings")->Fill(nofRichRings);
    fHM->H1("fhNofCalsVsNofRings")->Fill(nofRichCals, nofRichRings);
    map<Int_t, Int_t> nofCalsPerPmtMap;
    nofCalsPerPmtMap.clear();
    for (Int_t iPmt = 0; iPmt < 600; iPmt++) {
        nofCalsPerPmtMap[iPmt] = 0;
    }
    for (Int_t iC = 0; iC < nofRichCals; iC++) {
       HRichCal* cal = static_cast<HRichCal*>(fCatRichCal->getObject(iC));
       if (NULL == cal) continue;
       Int_t col = cal->getCol();
       Int_t row = cal->getRow();
       Int_t sector = cal->getSector();
       fHM->H2("fhCalsColRow")->Fill(col, row);
       fHM->H1("fhCalsSectors")->Fill(sector);

       Int_t loc[3];
       loc[0] = cal->getSector();
       loc[1] = col;
       loc[2] = row;
       pair<Double_t, Double_t> xy = fDigiPar->getXY(loc);
       fHM->H2("fhCalsXY")->Fill(xy.first, xy.second);

       Int_t pmtId = fDigiPar->getPMTId(col, row);
       fHM->H1("fhCalsPmtId")->Fill(pmtId);
       nofCalsPerPmtMap[pmtId]++;

       HRich700PmtData* pmtData = fDigiPar->getPMTData(pmtId);
       if (pmtData != NULL) {
           fHM->H2("fhCalsPmtXPmtY")->Fill(pmtData->fIndX, pmtData->fIndY);
       }

       Float_t phiDeg, thetaDeg;
       Int_t sectorInterp = fDigiPar->getSectorPhiThetaDegPixels(col, row, phiDeg, thetaDeg);
       fHM->H1("fhCalsPhi")->Fill(phiDeg);
       fHM->H1("fhCalsTheta")->Fill(thetaDeg);
       fHM->H1("fhCalsSectorsInterp")->Fill(sectorInterp);

       stringstream ss;
       ss << "fhCalsThetaForSector" << sectorInterp;
       fHM->H1(ss.str())->Fill(thetaDeg);
    }

    Int_t blobsCounter = 0;
    map<Int_t, Int_t>::iterator it;
    for ( it = nofCalsPerPmtMap.begin(); it != nofCalsPerPmtMap.end(); it++ ) {
        HRich700PmtData* pmtData = fDigiPar->getPMTData(it->first);
        if (pmtData != NULL) {
            fHM->H1("fhNofCalsPerPmt")->Fill(it->second);
            fHM->H3("fhNofCalsPerPmtPmtXPmtY")->Fill(pmtData->fIndX, pmtData->fIndY, it->second);
            // select only blob PMT
            if (it->second >= blobsCut){
                blobsCounter++;
                fHM->H2("fhBlobsPmtXPmtY")->Fill(pmtData->fIndX, pmtData->fIndY);

                // find the closest track to blob PMT
                Int_t candId = getClosestCand(pmtData->fTheta, pmtData->fPhi );
                HParticleCand* cand = (candId >=0)?static_cast<HParticleCand*>(fCatParticleCand->getObject(candId)):NULL;
                if (NULL != cand) {
                    Double_t candTheta = cand->getTheta();
                    Double_t candPhi = cand->getPhi();
                    Double_t dPhi = ( pmtData->fPhi - candPhi ) * TMath::Sin(TMath::DegToRad() * candTheta);
                    Float_t dTheta = pmtData->fTheta - candTheta;
                    Double_t dQa = sqrt(dPhi*dPhi + dTheta*dTheta);
                    fHM->H1("fhBlobsMatchQa")->Fill(dQa);
                    fHM->H2("fhBlobsDThetaVsDPhi")->Fill(dTheta, dPhi);
                }
            }
        }
    }
    Int_t nofCandsUsedFlag = 0;
    for (Int_t iP = 0; iP < fCatParticleCand->getEntries(); iP++) {
        HParticleCand* cand = static_cast<HParticleCand*>(fCatParticleCand->getObject(iP));
        if (NULL != cand && cand->isFlagBit(kIsUsed)) nofCandsUsedFlag++;
    }
    fHM->H1("fhNofBlobsPerEvent")->Fill(blobsCounter);
    fHM->H1("fhNofCandsVsNofBlobs")->Fill(nofCandsUsedFlag, blobsCounter);
}

Int_t HRich700GeoTestRealQa::getClosestCand(Double_t theta, Double_t phi)
{
    Double_t closestQa = 999.;
    Double_t closestCandId = -1;
    Int_t nofPartCands = fCatParticleCand->getEntries();
    for (Int_t iP = 0; iP < nofPartCands; iP++) {
        HParticleCand* cand = static_cast<HParticleCand*>(fCatParticleCand->getObject(iP));
        if (NULL == cand) continue;
        if (!cand->isFlagBit(kIsUsed)) continue;
        Double_t candTheta = cand->getTheta();
        Double_t candPhi = cand->getPhi();
        Double_t dPhi = ( phi - candPhi ) * TMath::Sin(TMath::DegToRad() * candTheta);
        Float_t dTheta = theta - candTheta;
        Double_t dQa = sqrt(dPhi*dPhi + dTheta*dTheta);

        if (closestQa >= dQa) {
            closestQa = dQa;
            closestCandId = iP;
        }
    }
    return closestCandId;
}

void HRich700GeoTestRealQa::fillHistRings()
{
    Int_t nofRichRings = fCatRichHit->getEntries();
    fHM->H1("fhNofRings")->Fill(nofRichRings);
    for (Int_t iR = 0; iR < nofRichRings; iR++) {
       HRichHit* ring = static_cast<HRichHit*>(fCatRichHit->getObject(iR));
       if (NULL == ring) continue;

       Int_t nofCalsInRing = ring->fRich700NofRichCals;
       Double_t radius = ring->fRich700CircleRadius;

       Double_t xc = ring->fRich700CircleCenterX;
       Double_t yc = ring->fRich700CircleCenterY;

       HRich700PmtData* pmtData = fDigiPar->getPMTData( fDigiPar->getPMTId((Float_t)xc, (Float_t)yc) );

       if (radius >= 18){
           fHM->H2("fhRingXYMore18mm")->Fill(xc, yc);
       } else {
           fHM->H2("fhRingXYLess18mm")->Fill(xc, yc);
       }
       fHM->H2("fhRingXY")->Fill(xc, yc);

       fHM->H2("fhThetaVsNofCalsInRing")->Fill(ring->getTheta(), nofCalsInRing);
       if (pmtData != NULL) fHM->H3("fhNofCalsInRingVsXY")->Fill(pmtData->fIndX, pmtData->fIndY, nofCalsInRing);
       fHM->H3("fhNofCalsInRingVsThetaPhi")->Fill(ring->getTheta(), ring->getPhi(), nofCalsInRing);
       fHM->H2("fhThetaVsRadius")->Fill(ring->getTheta(), radius);
       fHM->H2("fhNofCalsInRingVsRadius")->Fill(nofCalsInRing, radius);
    }
}

void HRich700GeoTestRealQa::fillHistParticleCands()
{
    Int_t nofPartCands = fCatParticleCand->getEntries();
    Int_t nofRichRings = fCatRichHit->getEntries();
    fHM->H1("fhNofCands")->Fill(nofPartCands);

    Int_t nofCandsUsedFlag = 0;
    Int_t nofCandsTof = 0;
    Int_t nofCandsRich = 0;
    Int_t nofCandsRichTof = 0;
    Int_t nofCandsTofId = 0;
    Int_t nofCandsRichTofId = 0;

    for (Int_t iP = 0; iP < nofPartCands; iP++) {
        HParticleCand* cand = static_cast<HParticleCand*>(fCatParticleCand->getObject(iP));
        if (NULL == cand) continue;
        if (!cand->isFlagBit(kIsUsed)) continue;

        nofCandsUsedFlag++;
        Double_t candTheta = cand->getTheta();
        Double_t candPhi = cand->getPhi();
        Double_t candBeta = cand->getBeta();
        Double_t candMom = cand->getMomentum() * cand->getCharge();
        Double_t candMomAbs = std::abs(candMom);
        Double_t candDeltaPhi = cand->getDeltaPhi();;
        Double_t candDeltaTheta = cand->getDeltaTheta();
        Double_t candRichMatchQa = cand->getRichMatchingQuality();;

        Bool_t isRich = cand->getRichInd() >= 0;
        Bool_t isTof = cand->getSystemUsed() >= 0;
        Bool_t isTofIdOk =  (candBeta >= 0.95 && candMomAbs < 250.);
        //Bool_t isTofIdOk =  (candBeta >= 0.9 && candMom < 0. && candMom > -250);

        fHM->H1("fhDThetaVsDPhiCand")->Fill(candDeltaTheta, candDeltaPhi);
        fHM->H1("fhRichMatchQaCand")->Fill(candRichMatchQa);
        fHM->H1("fhMomVsBetaCand")->Fill(candMom, candBeta);
        if (candRichMatchQa > 0){
            if (candRichMatchQa < 1) fHM->H1("fhMomVsBetaRichMatch<1")->Fill(candMom, candBeta);
            if (candRichMatchQa < 2) fHM->H1("fhMomVsBetaRichMatch<2")->Fill(candMom, candBeta);
            if (candRichMatchQa < 3) fHM->H1("fhMomVsBetaRichMatch<3")->Fill(candMom, candBeta);
            if (candRichMatchQa < 4) fHM->H1("fhMomVsBetaRichMatch<4")->Fill(candMom, candBeta);
        }

        fHM->H1("fhMomUsedFlag")->Fill(candMomAbs);
        fHM->H2("fhThetaVsPhiUsedFlag")->Fill(candTheta, candPhi);
        if (isTof) {
            nofCandsTof++;
            fHM->H1("fhMomTof")->Fill(candMomAbs);
            fHM->H2("fhThetaVsPhiTof")->Fill(candTheta, candPhi);
        }
        if (isTofIdOk) {
            nofCandsTofId++;
            fHM->H1("fhMomTofId")->Fill(candMomAbs);
            fHM->H2("fhThetaVsPhiTofId")->Fill(candTheta, candPhi);
            if (candMom > 0) {
                fHM->H1("fhMomTofIdPlus")->Fill(candMomAbs);
                fHM->H2("fhThetaVsPhiTofIdPlus")->Fill(candTheta, candPhi);
            } else {
                fHM->H1("fhMomTofIdMinus")->Fill(candMomAbs);
                fHM->H2("fhThetaVsPhiTofIdMinus")->Fill(candTheta, candPhi);
            }
            fHM->H1("fhDThetaVsDPhiTofId")->Fill(candDeltaTheta, candDeltaPhi);
            fHM->H1("fhRichMatchQaTofId")->Fill(candRichMatchQa);
        }

        if (isRich) {
            nofCandsRich++;
            fHM->H1("fhMomRich")->Fill(candMomAbs);
            fHM->H2("fhThetaVsPhiRich")->Fill(candTheta, candPhi);
            HRichHit* ring = static_cast<HRichHit*>(fCatRichHit->getObject(cand->getRichInd()));
            if (NULL != ring) {
                fHM->H2("fhThetaVsRadiusCand")->Fill(ring->getTheta(), ring->fRich700CircleRadius);
                fHM->H2("fhNofCalsInRingVsRadiusCand")->Fill(ring->fRich700NofRichCals, ring->fRich700CircleRadius);
                fHM->H2("fhThetaVsNofCalsInRingCand")->Fill(ring->getTheta(), ring->fRich700NofRichCals);
                HRich700PmtData* pmtData = fDigiPar->getPMTData( fDigiPar->getPMTId((Float_t)ring->fRich700CircleCenterX, (Float_t)ring->fRich700CircleCenterY) );
                if (pmtData!=NULL) fHM->H3("fhNofCalsInRingVsXYCand")->Fill(pmtData->fIndX, pmtData->fIndY, ring->fRich700NofRichCals);
                fHM->H3("fhNofCalsInRingVsThetaPhiCand")->Fill(ring->getTheta(), ring->getPhi(), ring->fRich700NofRichCals);
                if (ring->fRich700CircleRadius >= 18){
                    fHM->H1("fhMomVsBetaMore18mm")->Fill(candMom, candBeta);
                } else {
                    fHM->H1("fhMomVsBetaLess18mm")->Fill(candMom, candBeta);
                }
                fHM->H2("fhRingXYCand")->Fill(ring->fRich700CircleCenterX, ring->fRich700CircleCenterY);

                if (isTofIdOk) {
                    fHM->H2("fhThetaVsRadiusTofId")->Fill(ring->getTheta(), ring->fRich700CircleRadius);
                    fHM->H2("fhNofCalsInRingVsRadiusTofId")->Fill(ring->fRich700NofRichCals, ring->fRich700CircleRadius);
                    fHM->H2("fhThetaVsNofCalsInRingTofId")->Fill(ring->getTheta(), ring->fRich700NofRichCals);
                    HRich700PmtData* pmtData = fDigiPar->getPMTData( fDigiPar->getPMTId((Float_t)ring->fRich700CircleCenterX, (Float_t)ring->fRich700CircleCenterY) );
                    if (pmtData!=NULL) fHM->H3("fhNofCalsInRingVsXYTofId")->Fill(pmtData->fIndX, pmtData->fIndY, ring->fRich700NofRichCals);
                    fHM->H3("fhNofCalsInRingVsThetaPhiTofId")->Fill(ring->getTheta(), ring->getPhi(), ring->fRich700NofRichCals);
                    fHM->H2("fhRingXYTofId")->Fill(ring->fRich700CircleCenterX, ring->fRich700CircleCenterY);
                    fHM->H2("fhRichMatchQaVsRadiusTofId")->Fill(candRichMatchQa, ring->fRich700CircleRadius);
                }
                if (cand->getSystemUsed() == 0){
                    fHM->H2("fhBetaVsRadiusSys0")->Fill(candBeta, ring->fRich700CircleRadius);
                } else if (cand->getSystemUsed() == 1){
                    fHM->H2("fhBetaVsRadiusSys1")->Fill(candBeta, ring->fRich700CircleRadius);
                }
                fHM->H2("fhMomVsRadius")->Fill(candMom, ring->fRich700CircleRadius);
                fHM->H2("fhRichMatchQaVsRadiusCand")->Fill(candRichMatchQa, ring->fRich700CircleRadius);
            }
        }

        if (isRich && isTof) {
            fHM->H1("fhMomRichTof")->Fill(candMomAbs);
            fHM->H2("fhThetaVsPhiRichTof")->Fill(candTheta, candPhi);

            nofCandsRichTof++;
        }
        if (isRich && isTofIdOk) {
            fHM->H1("fhMomRichTofId")->Fill(candMomAbs);
            fHM->H2("fhThetaVsPhiRichTofId")->Fill(candTheta, candPhi);
            if (candMom > 0) {
                fHM->H1("fhMomRichTofIdPlus")->Fill(candMomAbs);
                fHM->H2("fhThetaVsPhiRichTofIdPlus")->Fill(candTheta, candPhi);
            } else {
                fHM->H1("fhMomRichTofIdMinus")->Fill(candMomAbs);
                fHM->H2("fhThetaVsPhiRichTofIdMinus")->Fill(candTheta, candPhi);
            }
            nofCandsRichTofId++;
        }
    }

    fHM->H1("fhNofCandsUsedFlag")->Fill(nofCandsUsedFlag);
    fHM->H1("fhNofCandsRich")->Fill(nofCandsRich);
    fHM->H1("fhNofCandsTof")->Fill(nofCandsTof);
    fHM->H1("fhNofCandsRichTof")->Fill(nofCandsRichTof);
    fHM->H1("fhNofCandsTofId")->Fill(nofCandsTofId);
    fHM->H1("fhNofCandsRichTofId")->Fill(nofCandsRichTofId);

    fHM->H2("fhNofCandsVsNofRings")->Fill(nofCandsUsedFlag, nofRichRings);

    for (Int_t iP = 0; iP < nofPartCands; iP++) {
        HParticleCand* cand = static_cast<HParticleCand*>(fCatParticleCand->getObject(iP));
        if (NULL == cand) continue;
        if (!cand->isFlagBit(kIsUsed)) continue;
        if (cand->getRichInd() >= 0) {
            HRichHit* ring = static_cast<HRichHit*>(fCatRichHit->getObject(cand->getRichInd()));
            if (NULL != ring) {
                fHM->H1("fhNofUsedFlagCandVsRadius")->Fill(nofCandsUsedFlag, ring->fRich700CircleRadius);
            }
        }
    }
}

void HRich700GeoTestRealQa::fillHistRaw()
{
    if (fCatRichRaw == NULL) return;
    Int_t nofRichRaws = fCatRichRaw->getEntries();
    for (Int_t iR = 0; iR < nofRichRaws; iR++){
       HRich700Raw* raw = static_cast<HRich700Raw*>(fCatRichRaw->getObject(iR));
       if (NULL == raw) continue;
       Int_t pmtId = raw->getPMT();
       Int_t pixel = raw->getPixel();
       Int_t mult = raw->getMultiplicity();
       fHM->H2("fhRawPmtPixel")->Fill(pmtId, pixel);
       fHM->H1("fhRawMult")->Fill(mult);
       for (Int_t iH = 0; iH < mult; iH++) {
           const HRich700hit_t* hit = raw->getHit(iH);
           if (hit == nullptr) continue;
           fHM->H1("fhRawToT")->Fill(hit->fToT);
       }
    }
}


void HRich700GeoTestRealQa::drawHist(Bool_t doEventScale)
{
    HRichDrawHist::SetDefaultDrawStyle();
    Double_t nofEvents = fHM->H1("fhNofEvents")->GetEntries();
    Double_t eventScale = (doEventScale)?1./nofEvents:1.;
    cout << "Number of events:" << nofEvents << endl;
    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhCalsXY", "hrich_fhCalsXY", 1800, 600);
    c->Divide(3, 1);
    c->cd(1);
    fHM->Scale("fhCalsColRow", eventScale);
	HRichDrawHist::DrawH2(fHM->H2("fhCalsColRow"));
    c->cd(2);
    fHM->Scale("fhCalsXY", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhCalsXY"));
    c->cd(3);
    fHM->Scale("fhCalsPmtXPmtY", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhCalsPmtXPmtY"));
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhCals", "hrich_fhCals", 1200, 1200);
    c->Divide(2,2);
    c->cd(1);
    fHM->Scale("fhCalsPmtId", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhCalsPmtId"));
    c->cd(2);
    fHM->Scale("fhCalsSectors", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhCalsSectors"));
    c->cd(3);
    fHM->Scale("fhNofCalsPerPmt", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhNofCalsPerPmt"), kLinear, kLog);
    c->cd(4);
    TH2D* h = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsPerPmtPmtXPmtY"));
    HRichDrawHist::DrawH2(h);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhBlobs", "hrich_fhBlobs", 1800, 600);
    c->Divide(3,1);
    c->cd(1);
    fHM->NormalizeToIntegral("fhNofBlobsPerEvent");
    fHM->Scale("fhNofBlobsPerEvent", 100.);
    HRichDrawHist::DrawH1(fHM->H1("fhNofBlobsPerEvent"));
    c->cd(2);
    fHM->Scale("fhBlobsPmtXPmtY", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhBlobsPmtXPmtY"));
    c->cd(3);
    fHM->Scale("fhNofCandsVsNofBlobs", eventScale);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhNofCandsVsNofBlobs"));
    fHM->H2("fhNofCandsVsNofBlobs")->GetYaxis()->SetRangeUser(-.5, 3.5);
    gPad->SetLogz();
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhBlobsClosestCand", "hrich_fhBlobsClosestCand", 1200, 1200);
    c->Divide(2, 2);
    c->cd(1);
    fHM->Scale("fhBlobsDThetaVsDPhi", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhBlobsDThetaVsDPhi"));
    c->cd(2);
    fHM->Scale("fhBlobsMatchQa", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhBlobsMatchQa"), kLinear, kLog);
    c->cd(3);
    TH1D* prY = fHM->H2("fhBlobsDThetaVsDPhi")->ProjectionY();
    prY->GetYaxis()->SetTitle("Entries/event");
    HRichDrawHist::DrawH1(prY);
    c->cd(4);
    TH1D* prX = fHM->H2("fhBlobsDThetaVsDPhi")->ProjectionX();
    prX->GetYaxis()->SetTitle("Entries/event");
    HRichDrawHist::DrawH1(prX);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhNofPerEvent", "hrich_fhNofPerEvent", 1800, 600);
    c->Divide(3, 1);
    c->cd(1);
    fHM->Scale("fhNofCals", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhNofCals"));
    string txtCals = RichUtils::NumberToString(fHM->H1("fhNofCals")->GetMean()) + "/" + RichUtils::NumberToString(fHM->H1("fhNofCals")->GetRMS());
    HRichDrawHist::DrawTextOnPad(txtCals, 0.1, 0.90, 0.9, 0.99);
    c->cd(2);
    fHM->Scale("fhNofRings", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhNofRings"));
    string txtRings = RichUtils::NumberToString(fHM->H1("fhNofRings")->GetMean()) + "/" + RichUtils::NumberToString(fHM->H1("fhNofRings")->GetRMS());
    HRichDrawHist::DrawTextOnPad(txtRings, 0.1, 0.90, 0.9, 0.99);
    c->cd(3);
    fHM->Scale("fhNofCands", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhNofCands"));
    string txtCands = RichUtils::NumberToString(fHM->H1("fhNofCands")->GetMean()) + "/" + RichUtils::NumberToString(fHM->H1("fhNofCands")->GetRMS());
    HRichDrawHist::DrawTextOnPad(txtCands, 0.1, 0.90, 0.9, 0.99);
    }

    {
    fHM->CreateCanvas("hrich_fhNofCands", "hrich_fhNofCands", 1000, 800);
    vector<TH1*> vH;
    vH.push_back(fHM->H1("fhNofCandsUsedFlag"));
    vH.push_back(fHM->H1("fhNofCandsRich"));
    vH.push_back(fHM->H1("fhNofCandsTof"));
    vH.push_back(fHM->H1("fhNofCandsRichTof"));
    vH.push_back(fHM->H1("fhNofCandsTofId"));
    vH.push_back(fHM->H1("fhNofCandsRichTofId"));
    for (UInt_t i = 0; i < vH.size();i++){vH[i]->Scale(eventScale);}
    fHM->H1("fhNofCandsUsedFlag")->SetMinimum(0.95 * eventScale);
    vector<string> vLabel;
    vLabel.push_back("UsedFlag (" + RichUtils::NumberToString(fHM->H1("fhNofCandsUsedFlag")->GetMean()) + ")");
    vLabel.push_back("RICH (" + RichUtils::NumberToString(fHM->H1("fhNofCandsRich")->GetMean()) + ")");
    vLabel.push_back("TOF (" + RichUtils::NumberToString(fHM->H1("fhNofCandsTof")->GetMean()) + ")");
    vLabel.push_back("RICH+TOF (" + RichUtils::NumberToString(fHM->H1("fhNofCandsRichTof")->GetMean()) + ")");
    vLabel.push_back("TOF ID (" + RichUtils::NumberToString(fHM->H1("fhNofCandsTofId")->GetMean()) + ")");
    vLabel.push_back("RICH+TOF ID(" + RichUtils::NumberToString(fHM->H1("fhNofCandsRichTofId")->GetMean()) + ")");
    HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog);
    }

    {
        // calculate efficiency before scaling histograms
        TCanvas* c = fHM->CreateCanvas("hrich_fhRichEff", "hrich_fhRichEff", 1000, 1000);
        c->Divide(2,2);
        TH1D* pxEff1 = RichUtils::DivideH1((TH1D*)fHM->H1("fhMomRichTofId")->Clone(), (TH1D*)fHM->H1("fhMomTofId")->Clone(), "", 100., "Relative efficiency [%]");
        pxEff1->SetMinimum(0.);

        TH1D* pxEff2 = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofId")->ProjectionY()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofId")->ProjectionY()->Clone(), "", 100., "Relative efficiency [%]");
        pxEff2->SetMinimum(0.);

        TH1D* pxEff3 = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofId")->ProjectionX()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofId")->ProjectionX()->Clone(), "", 100., "Relative efficiency [%]");
        pxEff3->SetMinimum(0.);

        TH2D* pxEff4 = RichUtils::DivideH2((TH2D*)fHM->H2("fhThetaVsPhiRichTofId")->Clone(), (TH2D*)fHM->H2("fhThetaVsPhiTofId")->Clone(), "", 100., "Relative efficiency [%]");
        pxEff4->SetMinimum(0.);

        c->cd(1);
        vector<TH1*> hist1;
        hist1.push_back(pxEff1);
        vector<string> labels1;
        stringstream ss1;
        ss1.precision(1);
        ss1 << "Efficiency (" << fixed << 100.*fHM->H1("fhMomRichTofId")->GetEntries() / fHM->H1("fhMomTofId")->GetEntries() << "%)";
        labels1.push_back(ss1.str());
        HRichDrawHist::DrawH1(hist1, labels1);
        hist1[0]->GetXaxis()->SetRangeUser(0, 500);

        c->cd(2);
        vector<TH1*> hist2;
        hist2.push_back(pxEff2);
        vector<string> labels2;
        stringstream ss2;
        ss2.precision(1);
        ss2 << "Efficiency (" << fixed << 100.*fHM->H1("fhThetaVsPhiRichTofId")->GetEntries() / fHM->H1("fhThetaVsPhiTofId")->GetEntries() << "%)";
        labels2.push_back(ss2.str());
        HRichDrawHist::DrawH1(hist2, labels2);

        c->cd(3);
        vector<TH1*> hist3;
        hist3.push_back(pxEff3);
        vector<string> labels3;
        stringstream ss3;
        ss3.precision(1);
        ss3 << "Efficiency (" << fixed << 100.*fHM->H2("fhThetaVsPhiRichTofId")->GetEntries() / fHM->H2("fhThetaVsPhiTofId")->GetEntries() << "%)";
        labels3.push_back(ss3.str());
        HRichDrawHist::DrawH1(hist3, labels3);

        c->cd(4);
        HRichDrawHist::DrawH2(pxEff4);
    }

    {
        TCanvas* c = fHM->CreateCanvas("hrich_fhRichEffPlusMinus", "hrich_fhRichEffPlusMinus", 1800, 600);
        c->Divide(3,1);
        TH1D* pxEff1Plus = RichUtils::DivideH1((TH1D*)fHM->H1("fhMomRichTofIdPlus")->Clone(), (TH1D*)fHM->H1("fhMomTofIdPlus")->Clone(), "", 100., "Relative efficiency [%]");
        TH1D* pxEff1Minus = RichUtils::DivideH1((TH1D*)fHM->H1("fhMomRichTofIdMinus")->Clone(), (TH1D*)fHM->H1("fhMomTofIdMinus")->Clone(), "", 100., "Relative efficiency [%]");
        pxEff1Plus->SetMinimum(0.);

        TH1D* pxEff2Plus = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofIdPlus")->ProjectionY()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofIdPlus")->ProjectionY()->Clone(), "", 100., "Relative efficiency [%]");
        TH1D* pxEff2Minus = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofIdMinus")->ProjectionY()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofIdMinus")->ProjectionY()->Clone(), "", 100., "Relative efficiency [%]");
        pxEff2Plus->SetMinimum(0.);

        TH1D* pxEff3Plus = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofIdPlus")->ProjectionX()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofIdPlus")->ProjectionX()->Clone(), "", 100., "Relative efficiency [%]");
        TH1D* pxEff3Minus = RichUtils::DivideH1((TH1D*)fHM->H2("fhThetaVsPhiRichTofIdMinus")->ProjectionX()->Clone(), (TH1D*)fHM->H2("fhThetaVsPhiTofIdMinus")->ProjectionX()->Clone(), "", 100., "Relative efficiency [%]");
        pxEff3Plus->SetMinimum(0.);

        c->cd(1);
        vector<TH1*> hist1;
        hist1.push_back(pxEff1Plus);
        hist1.push_back(pxEff1Minus);
        vector<string> labels1;
        stringstream ss1Plus;
        ss1Plus.precision(1);
        ss1Plus << "Plus (" << fixed << 100.*fHM->H1("fhMomRichTofIdPlus")->GetEntries() / fHM->H1("fhMomTofIdPlus")->GetEntries() << "%)";
        stringstream ss1Minus;
        ss1Minus.precision(1);
        ss1Minus << "Minus (" << fixed << 100.*fHM->H1("fhMomRichTofIdMinus")->GetEntries() / fHM->H1("fhMomTofIdMinus")->GetEntries() << "%)";
        labels1.push_back(ss1Plus.str());
        labels1.push_back(ss1Minus.str());
        HRichDrawHist::DrawH1(hist1, labels1);
        hist1[0]->GetXaxis()->SetRangeUser(0, 500);

        c->cd(2);
        vector<TH1*> hist2;
        hist2.push_back(pxEff2Plus);
        hist2.push_back(pxEff2Minus);
        vector<string> labels2;
        stringstream ss2Plus;
        ss2Plus.precision(1);
        ss2Plus << "Plus (" << fixed << 100.*fHM->H1("fhThetaVsPhiRichTofIdPlus")->GetEntries() / fHM->H1("fhThetaVsPhiTofIdPlus")->GetEntries() << "%)";
        stringstream ss2Minus;
        ss2Minus.precision(1);
        ss2Minus << "Minus (" << fixed << 100.*fHM->H1("fhThetaVsPhiRichTofIdMinus")->GetEntries() / fHM->H1("fhThetaVsPhiTofIdMinus")->GetEntries() << "%)";
        labels2.push_back(ss2Plus.str());
        labels2.push_back(ss2Minus.str());
        HRichDrawHist::DrawH1(hist2, labels2);

        c->cd(3);
        vector<TH1*> hist3;
        hist3.push_back(pxEff3Plus);
        hist3.push_back(pxEff3Minus);
        vector<string> labels3;
        stringstream ss3Plus;
        ss3Plus.precision(1);
        ss3Plus << "Plus (" << fixed << 100.*fHM->H2("fhThetaVsPhiRichTofIdPlus")->GetEntries() / fHM->H2("fhThetaVsPhiTofIdPlus")->GetEntries() << "%)";
        stringstream ss3Minus;
        ss3Minus.precision(1);
        ss3Minus << "Minus (" << fixed << 100.*fHM->H2("fhThetaVsPhiRichTofIdMinus")->GetEntries() / fHM->H2("fhThetaVsPhiTofIdMinus")->GetEntries() << "%)";
        labels3.push_back(ss3Plus.str());
        labels3.push_back(ss3Minus.str());
        HRichDrawHist::DrawH1(hist3, labels3);
    }

    {
    fHM->CreateCanvas("hrich_fhMomCand", "hrich_fhMomCand", 1000, 800);
    vector<TH1*> vH;
    vH.push_back(fHM->H1("fhMomUsedFlag"));
    vH.push_back(fHM->H1("fhMomRich"));
    vH.push_back(fHM->H1("fhMomTof"));
    vH.push_back(fHM->H1("fhMomRichTof"));
    vH.push_back(fHM->H1("fhMomTofId"));
    vH.push_back(fHM->H1("fhMomRichTofId"));
    for (UInt_t i = 0; i < vH.size();i++){vH[i]->Scale(eventScale);}
    fHM->H1("fhMomUsedFlag")->SetMinimum(0.95 * eventScale);
    vector<string> vLabel;
    vLabel.push_back("UsedFlag (" + RichUtils::NumberToString(fHM->H1("fhMomUsedFlag")->GetEntries()*eventScale) + ")");
    vLabel.push_back("RICH (" + RichUtils::NumberToString(fHM->H1("fhMomRich")->GetEntries()*eventScale) + ")");
    vLabel.push_back("TOF (" + RichUtils::NumberToString(fHM->H1("fhMomTof")->GetEntries()*eventScale) + ")");
    vLabel.push_back("RICH+TOF (" + RichUtils::NumberToString(fHM->H1("fhMomRichTof")->GetEntries()*eventScale) + ")");
    vLabel.push_back("TOF ID (" + RichUtils::NumberToString(fHM->H1("fhMomTofId")->GetEntries()*eventScale) + ")");
    vLabel.push_back("RICH+TOF ID(" + RichUtils::NumberToString(fHM->H1("fhMomRichTofId")->GetEntries()*eventScale) + ")");
    HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog, true, 0.7, 0.8, 0.99, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhThetaVsPhiCand1D", "hrich_fhThetaVsPhiCand1D", 1200, 600);
    c->Divide(2,1);
    c->cd(1);
    {
        vector<TH1*> vH;
        vH.push_back(fHM->H2("fhThetaVsPhiUsedFlag")->ProjectionY());
        vH.push_back(fHM->H2("fhThetaVsPhiRich")->ProjectionY());
        vH.push_back(fHM->H2("fhThetaVsPhiTof")->ProjectionY());
        vH.push_back(fHM->H2("fhThetaVsPhiRichTof")->ProjectionY());
        vH.push_back(fHM->H2("fhThetaVsPhiTofId")->ProjectionY());
        vH.push_back(fHM->H2("fhThetaVsPhiRichTofId")->ProjectionY());
        for (UInt_t i = 0; i < vH.size();i++){vH[i]->Scale(eventScale);}
        vH[0]->SetMinimum(0.95 * eventScale);
        vector<string> vLabel;
        vLabel.push_back("UsedFlag (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiUsedFlag")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRich")->GetEntries()*eventScale) + ")");
        vLabel.push_back("TOF (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTof")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH+TOF (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTof")->GetEntries()*eventScale) + ")");
        vLabel.push_back("TOF ID (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTofId")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH+TOF ID(" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTofId")->GetEntries()*eventScale) + ")");
        HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog, true, 0.7, 0.8, 0.99, 0.99);
    }
    c->cd(2);
    {
        vector<TH1*> vH;
        vH.push_back(fHM->H2("fhThetaVsPhiUsedFlag")->ProjectionX());
        vH.push_back(fHM->H2("fhThetaVsPhiRich")->ProjectionX());
        vH.push_back(fHM->H2("fhThetaVsPhiTof")->ProjectionX());
        vH.push_back(fHM->H2("fhThetaVsPhiRichTof")->ProjectionX());
        vH.push_back(fHM->H2("fhThetaVsPhiTofId")->ProjectionX());
        vH.push_back(fHM->H2("fhThetaVsPhiRichTofId")->ProjectionX());
        for (UInt_t i = 0; i < vH.size();i++){vH[i]->Scale(eventScale);}
        vH[0]->SetMinimum(0.95 * eventScale);
        vector<string> vLabel;
        vLabel.push_back("UsedFlag (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiUsedFlag")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRich")->GetEntries()*eventScale) + ")");
        vLabel.push_back("TOF (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTof")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH+TOF (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTof")->GetEntries()*eventScale) + ")");
        vLabel.push_back("TOF ID (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTofId")->GetEntries()*eventScale) + ")");
        vLabel.push_back("RICH+TOF ID(" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTofId")->GetEntries()*eventScale) + ")");
        HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog, true, 0.7, 0.8, 0.99, 0.99);
    }
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhThetaVsPhiCand2D", "hrich_fhThetaVsPhiCand2D", 1800, 1200);
    c->Divide(3,2);
    c->cd(1);
    fHM->Scale("fhThetaVsPhiUsedFlag", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiUsedFlag"));
    HRichDrawHist::DrawTextOnPad("UsedFlag (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiUsedFlag")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    c->cd(2);
    fHM->Scale("fhThetaVsPhiTof", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiTof"));
    HRichDrawHist::DrawTextOnPad("Tof (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTof")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    c->cd(3);
    fHM->Scale("fhThetaVsPhiRich", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiRich"));
    HRichDrawHist::DrawTextOnPad("Rich (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRich")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    c->cd(4);
    fHM->Scale("fhThetaVsPhiRichTof", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiRichTof"));
    HRichDrawHist::DrawTextOnPad("RichTof (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTof")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    c->cd(5);
    fHM->Scale("fhThetaVsPhiTofId", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiTofId"));
    HRichDrawHist::DrawTextOnPad("TofId (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiTofId")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    c->cd(6);
    fHM->Scale("fhThetaVsPhiRichTofId", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhThetaVsPhiRichTofId"));
    HRichDrawHist::DrawTextOnPad("RichTofId (" + RichUtils::NumberToString(fHM->H2("fhThetaVsPhiRichTofId")->GetEntries()*eventScale) + ")", 0.2, 0.90, 0.7, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhNofPerEvent2D", "hrich_fhNofPerEvent2D", 1600, 700);
    c->Divide(2, 1);
    c->cd(1);
    fHM->Scale("fhNofCandsVsNofRings", eventScale);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhNofCandsVsNofRings"));
    gPad->SetLogz();
    c->cd(2);
    fHM->Scale("fhNofCalsVsNofRings", eventScale);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhNofCalsVsNofRings"));
    gPad->SetLogz();
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhMomVsBeta", "hrich_fhMomVsBeta", 1800, 1200);
    c->Divide(3, 2);
    c->cd(1);
    fHM->Scale("fhMomVsBetaCand", eventScale);
	HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaCand"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Candidates (isUsed)", 0.2, 0.90, 0.8, 0.99);
    c->cd(2);
    fHM->Scale("fhMomVsBetaMore18mm", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaMore18mm"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Radius > 18 mm", 0.2, 0.90, 0.8, 0.99);
    c->cd(3);
    fHM->Scale("fhMomVsBetaLess18mm", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaLess18mm"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Radius < 18 mm", 0.2, 0.90, 0.8, 0.99);

    Double_t max = std::max(fHM->H2("fhMomVsBetaMore18mm")->GetMaximum(), fHM->H2("fhMomVsBetaLess18mm")->GetMaximum());
    fHM->H2("fhMomVsBetaMore18mm")->SetMaximum(1.2 * max);
    fHM->H2("fhMomVsBetaLess18mm")->SetMaximum(1.2 * max);

    c->cd(4);
    TH2D* eff1 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaMore18mm")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff1);
    eff1->SetMinimum(0.); eff1->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("Radius > 18 mm", 0.2, 0.90, 0.8, 0.99);
    c->cd(5);
    TH2D* eff2 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaLess18mm")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff2);
    eff2->SetMinimum(0.); eff2->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("Radius < 18 mm", 0.2, 0.90, 0.8, 0.99);

    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhMomVsBeta2", "hrich_fhMomVsBeta2", 1800, 900);
    c->Divide(4, 2);
    c->cd(1);
    fHM->Scale("fhMomVsBetaRichMatch<1", eventScale);
	HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaRichMatch<1"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 1", 0.2, 0.90, 0.8, 0.99);
    c->cd(2);
    fHM->Scale("fhMomVsBetaRichMatch<2", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaRichMatch<2"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 2", 0.2, 0.90, 0.8, 0.99);
    c->cd(3);
    fHM->Scale("fhMomVsBetaRichMatch<3", eventScale);
	HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaRichMatch<3"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 3", 0.2, 0.90, 0.8, 0.99);
    c->cd(4);
    fHM->Scale("fhMomVsBetaRichMatch<4", eventScale);
	HRichDrawHist::DrawH2(fHM->H2("fhMomVsBetaRichMatch<4"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 4", 0.2, 0.90, 0.8, 0.99);
    c->cd(5);
    TH2D* eff1 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaRichMatch<1")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff1);
    eff1->SetMinimum(0.); eff1->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 1", 0.2, 0.90, 0.8, 0.99);
    c->cd(6);
    TH2D* eff2 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaRichMatch<2")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff2);
    eff2->SetMinimum(0.); eff2->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 2", 0.2, 0.90, 0.8, 0.99);
    c->cd(7);
    TH2D* eff3 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaRichMatch<3")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff3);
    eff3->SetMinimum(0.); eff3->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 3", 0.2, 0.90, 0.8, 0.99);
    c->cd(8);
    TH2D* eff4 = RichUtils::DivideH2((TH2D*)fHM->H2("fhMomVsBetaRichMatch<4")->Clone(), (TH2D*)fHM->H2("fhMomVsBetaCand")->Clone(), "", 100., "% to all candidates");
    HRichDrawHist::DrawH2(eff4);
    eff4->SetMinimum(0.); eff4->SetMaximum(100.);
    HRichDrawHist::DrawTextOnPad("RICH matching Qa < 4", 0.2, 0.90, 0.8, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRingXY", "hrich_fhRingXY", 1800, 1200);
    c->Divide(3, 2);
    c->cd(1);
    fHM->Scale("fhRingXYMore18mm", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRingXYMore18mm"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Radius > 18 mm", 0.3, 0.90, 0.7, 0.99);
    c->cd(2);
    fHM->Scale("fhRingXYLess18mm", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRingXYLess18mm"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Radius < 18 mm", 0.3, 0.90, 0.7, 0.99);
    c->cd(3);
    fHM->Scale("fhRingXY", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRingXY"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("All rings", 0.3, 0.90, 0.7, 0.99);
    c->cd(4);
    fHM->Scale("fhRingXYCand", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRingXYCand"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Candidates", 0.3, 0.90, 0.7, 0.99);
    c->cd(5);
    fHM->Scale("fhRingXYTofId", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRingXYTofId"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.3, 0.90, 0.7, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRichMatchQa", "hrich_fhRichMatchQa", 1800, 1200);
    c->Divide(3, 2);
    {
        c->cd(1);
        fHM->Scale("fhDThetaVsDPhiCand", eventScale);
        HRichDrawHist::DrawH2(fHM->H2("fhDThetaVsDPhiCand"));
        HRichDrawHist::DrawTextOnPad("Candidates (isUsed)", 0.2, 0.90, 0.8, 0.99);
        c->cd(2);
        TH1D* prY = fHM->H2("fhDThetaVsDPhiCand")->ProjectionY();
        TH1D* prX = fHM->H2("fhDThetaVsDPhiCand")->ProjectionX();
        prY->GetYaxis()->SetTitle("Entries/event");
        prY->GetXaxis()->SetTitle("dAngle [deg]");
        vector<TH1*> vH;
        vH.push_back(prY);
        vH.push_back(prX);
        vector<string> vLabel;
        vLabel.push_back("dPhi");
        vLabel.push_back("dTheta");
        HRichDrawHist::DrawH1(vH, vLabel);
        c->cd(3);
        fHM->Scale("fhRichMatchQaCand", eventScale);
        HRichDrawHist::DrawH1(fHM->H1("fhRichMatchQaCand"), kLinear, kLog);
    }
    {
        c->cd(4);
        fHM->Scale("fhDThetaVsDPhiTofId", eventScale);
        HRichDrawHist::DrawH2(fHM->H2("fhDThetaVsDPhiTofId"));
        HRichDrawHist::DrawTextOnPad("TOF ID", 0.3, 0.90, 0.7, 0.99);
        c->cd(5);
        TH1D* prY = fHM->H2("fhDThetaVsDPhiTofId")->ProjectionY();
        TH1D* prX = fHM->H2("fhDThetaVsDPhiTofId")->ProjectionX();
        prY->GetYaxis()->SetTitle("Entries/event");
        prY->GetXaxis()->SetTitle("dAngle [deg]");
        vector<TH1*> vH;
        vH.push_back(prY);
        vH.push_back(prX);
        vector<string> vLabel;
        vLabel.push_back("dPhi");
        vLabel.push_back("dTheta");
        HRichDrawHist::DrawH1(vH, vLabel);
        c->cd(6);
        fHM->Scale("fhRichMatchQaTofId", eventScale);
        HRichDrawHist::DrawH1(fHM->H1("fhRichMatchQaTofId"), kLinear, kLog);
    }
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRadius", "hrich_fhRadius", 1800, 1200);
    c->Divide(3, 2);
    c->cd(1);
    fHM->Scale("fhBetaVsRadiusSys0", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhBetaVsRadiusSys0"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Sys0", 0.4, 0.90, 0.6, 0.99);
    c->cd(2);
    fHM->Scale("fhBetaVsRadiusSys1", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhBetaVsRadiusSys1"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Sys1", 0.4, 0.90, 0.6, 0.99);
    c->cd(3);
    fHM->Scale("fhMomVsRadius", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhMomVsRadius"), kLinear, kLinear, kLog);
    c->cd(4);
    fHM->Scale("fhRichMatchQaVsRadiusCand", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRichMatchQaVsRadiusCand"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Candidates (isUsed)", 0.1, 0.90, 0.8, 0.99);
    c->cd(5);
    fHM->Scale("fhRichMatchQaVsRadiusTofId", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhRichMatchQaVsRadiusTofId"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.2, 0.90, 0.8, 0.99);
    c->cd(6);
    fHM->Scale("fhNofUsedFlagCandVsRadius", eventScale);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhNofUsedFlagCandVsRadius"));
    gPad->SetLogz();
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRadius2", "hrich_fhRadius2", 1200, 1200);
    fHM->Scale("fhThetaVsRadius", eventScale);
    fHM->Scale("fhThetaVsRadiusCand", eventScale);
    fHM->Scale("fhThetaVsRadiusTofId", eventScale);
    c->Divide(2,2);
    c->cd(1);
    vector<TH1*> vH;
    TH1* hPrY1 = (TH1*)fHM->H2("fhThetaVsRadius")->ProjectionY();
    TH1* hPrY2 = (TH1*)fHM->H2("fhThetaVsRadiusCand")->ProjectionY();
    TH1* hPrY3 = (TH1*)fHM->H2("fhThetaVsRadiusTofId")->ProjectionY();
    hPrY1->ResetStats(); // workaround, some problems with statistics
    hPrY2->ResetStats();
    hPrY3->ResetStats();
    hPrY1->GetYaxis()->SetTitle("Entries/event");
    vH.push_back(hPrY1);
    hPrY1->SetMinimum(0.9 * eventScale);
    vH.push_back(hPrY2);
    vH.push_back(hPrY3);
    vector<string> vLabel;
    vLabel.push_back("All (" + RichUtils::NumberToString(hPrY1->GetMean()) + ")");
    vLabel.push_back("Candidates (" + RichUtils::NumberToString(hPrY2->GetMean()) + ")");
    vLabel.push_back("TOF ID (" + RichUtils::NumberToString(hPrY3->GetMean()) + ")");
    HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog, true, 0.6, 0.89, 0.99, 0.99);
    c->cd(2);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsRadius"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("All rings", 0.4, 0.90, 0.6, 0.99);
    c->cd(3);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsRadiusCand"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("Candidates", 0.4, 0.90, 0.6, 0.99);
    c->cd(4);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsRadiusTofId"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.4, 0.90, 0.6, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRadius3", "hrich_fhRadius3", 1800, 600);
    c->Divide(3,1);
    c->cd(1);
    fHM->Scale("fhNofCalsInRingVsRadius", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhNofCalsInRingVsRadius"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("All rings", 0.4, 0.90, 0.6, 0.99);
    c->cd(2);
    fHM->Scale("fhNofCalsInRingVsRadiusCand", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhNofCalsInRingVsRadiusCand"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("Candidates", 0.4, 0.90, 0.6, 0.99);
    c->cd(3);
    fHM->Scale("fhNofCalsInRingVsRadiusTofId", eventScale);
    HRichDrawHist::DrawH2(fHM->H2("fhNofCalsInRingVsRadiusTofId"), kLinear, kLinear, kLog);
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.4, 0.90, 0.6, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhNofCalsInRing", "hrich_fhNofCalsInRing", 1200, 1200);
    fHM->Scale("fhThetaVsNofCalsInRing", eventScale);
    fHM->Scale("fhThetaVsNofCalsInRingCand", eventScale);
    fHM->Scale("fhThetaVsNofCalsInRingTofId", eventScale);
    c->Divide(2,2);
    c->cd(1);
    vector<TH1*> vH;
    TH1* hPrY1 = (TH1*)fHM->H2("fhThetaVsNofCalsInRing")->ProjectionY()->Clone();
    TH1* hPrY2 = (TH1*)fHM->H2("fhThetaVsNofCalsInRingCand")->ProjectionY()->Clone();
    TH1* hPrY3 = (TH1*)fHM->H2("fhThetaVsNofCalsInRingTofId")->ProjectionY()->Clone();
    hPrY1->ResetStats(); // workaround, some problems with statistics
    hPrY2->ResetStats();
    hPrY3->ResetStats();
    hPrY1->GetYaxis()->SetTitle("Entries/event");
    vH.push_back(hPrY1);
    hPrY1->SetMinimum(0.9 * eventScale);
    vH.push_back(hPrY2);
    vH.push_back(hPrY3);
    vector<string> vLabel;
    vLabel.push_back("All (" + RichUtils::NumberToString(hPrY1->GetMean()) + ")");
    vLabel.push_back("Candidates (" + RichUtils::NumberToString(hPrY2->GetMean()) + ")");
    vLabel.push_back("TOF ID (" + RichUtils::NumberToString(hPrY3->GetMean()) + ")");
    HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog);
    c->cd(2);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsNofCalsInRing"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("All rings", 0.4, 0.90, 0.6, 0.99);
    c->cd(3);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsNofCalsInRingCand"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("Candidates", 0.3, 0.90, 0.7, 0.99);
    c->cd(4);
    HRichDrawHist::DrawH2WithProfile(fHM->H2("fhThetaVsNofCalsInRingTofId"));
    gPad->SetLogz();
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.4, 0.90, 0.6, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhNofCalsInRingXY", "hrich_fhNofCalsInRingXY", 1800, 1200);
    c->Divide(3,2);
    c->cd(1);
    TH2D* pr1 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsXY"));
    pr1->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr1);
    HRichDrawHist::DrawTextOnPad("All rings", 0.4, 0.90, 0.6, 0.99);
    c->cd(2);
    TH2D* pr2 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsXYCand"));
    pr2->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr2);
    HRichDrawHist::DrawTextOnPad("Candidates", 0.3, 0.90, 0.7, 0.99);
    c->cd(3);
    TH2D* pr3 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsXYTofId"));
    pr3->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr3);
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.4, 0.90, 0.6, 0.99);
    c->cd(4);
    TH2D* pr4 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsThetaPhi"));
    pr4->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr4);
    HRichDrawHist::DrawTextOnPad("All rings", 0.4, 0.90, 0.6, 0.99);
    c->cd(5);
    TH2D* pr5 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsThetaPhiCand"));
    pr5->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr5);
    HRichDrawHist::DrawTextOnPad("Candidates", 0.3, 0.90, 0.7, 0.99);
    c->cd(6);
    TH2D* pr6 = HRichDrawHist::DrawH3Profile(fHM->H3("fhNofCalsInRingVsThetaPhiTofId"));
    pr6->GetZaxis()->SetRangeUser(8, 22);
    HRichDrawHist::DrawH2(pr6);
    HRichDrawHist::DrawTextOnPad("TOF ID", 0.4, 0.90, 0.6, 0.99);
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhCalsPhiThetaInterp", "hrich_fhCalsPhiThetaInterp", 1500, 500);
    c->Divide(3, 1);
    c->cd(1);
    fHM->Scale("fhCalsSectorsInterp", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhCalsSectorsInterp"));
    c->cd(2);
    fHM->Scale("fhCalsPhi", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhCalsPhi"));
    c->cd(3);
    fHM->Scale("fhCalsTheta", eventScale);
    HRichDrawHist::DrawH1(fHM->H1("fhCalsTheta"));
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhCalsThetaForSector", "hrich_fhCalsThetaForSector", 1500, 1000);
    c->Divide(3, 2);
    for (Int_t iS = 0; iS < 6; iS++) {
        c->cd(iS+1);
        stringstream ss;
        ss << "fhCalsThetaForSector" << iS;
        fHM->Scale(ss.str(), eventScale);
        HRichDrawHist::DrawH1(fHM->H1(ss.str()));
        stringstream ss2;
        ss2 << "Sector " << iS;
        HRichDrawHist::DrawTextOnPad(ss2.str(), 0.25, 0.9, 0.75, 0.99);
    }
    }

    {
    TCanvas* c = fHM->CreateCanvas("hrich_fhRaw", "hrich_fhRaw", 1800, 600);
    c->Divide(3,1);
    c->cd(1);
    HRichDrawHist::DrawH2(fHM->H2("fhRawPmtPixel"));
    c->cd(2);
    HRichDrawHist::DrawH1(fHM->H1("fhRawMult"));
    c->cd(3);
    HRichDrawHist::DrawH1(fHM->H1("fhRawToT"), kLinear, kLog);
    }

}

//---------------------------------------------------------------------------
Bool_t HRich700GeoTestRealQa::finalize()
{
    //drawHist(false);
    if (fOutputDir != "") {
        fHM->SaveCanvasToImage(string(fOutputDir + "/"));
    }

    if (fOutputRootFile != "") {
        TFile* file = new TFile(fOutputRootFile.c_str(), "RECREATE");
        fHM->WriteToFile();
        file->Close();
    }

    return kTRUE;
}

void HRich700GeoTestRealQa::drawFromFile(const string& fileName, const string& outputDir)
{
    TFile* file = new TFile(fileName.c_str(), "READ");

    fHM = new HRich700HistManager();
    fHM->ReadFromFile(file);

    drawHist(true);

    if (outputDir != "") {
        fHM->SaveCanvasToImage(string(outputDir + "/"));
    }

    file->Close();
}

void HRich700GeoTestRealQa::drawManyFromFile(const vector<string>& fileNames, const vector<string>& legNames, const string& outputDir)
{
    HRichDrawHist::SetDefaultDrawStyle();
    fHM = new HRich700HistManager(); // will be used to store canvases

    if (fileNames.size() != legNames.size()) {
        cout << "ERROR fileNames.size() != legNames.size()" << endl;
        return;
    }
    vector<HRich700HistManager*> hm;
    vector<TFile*> rootFiles;
    hm.resize(fileNames.size());
    rootFiles.resize(fileNames.size());
    for (UInt_t i = 0; i < hm.size(); i++) {
        rootFiles[i] = new TFile(fileNames[i].c_str(), "READ");
        hm[i] = new HRich700HistManager();
        hm[i]->ReadFromFile(rootFiles[i]);
    }

    {
        fHM->CreateCanvas("hrich_m_fhNofCalsInRingTofId", "hrich_m_fhNofCalsInRingTofId", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;
        for (UInt_t i = 0; i < hm.size(); i++){
            TH1* hPrY = (TH1*)hm[i]->H2("fhThetaVsNofCalsInRingTofId")->ProjectionY()->Clone();
            hPrY->Scale(1./hm[i]->H1("fhNofEvents")->GetEntries());
            hPrY->GetYaxis()->SetTitle("Entries/event");
            vH.push_back(hPrY);
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(hPrY->GetMean()) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }

    {
        fHM->CreateCanvas("hrich_m_fhNofCalsPerEvent", "hrich_m_fhNofCalsPerEvent", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;
        for (UInt_t i = 0; i < hm.size(); i++){
            hm[i]->H1("fhNofCals")->Scale(1./hm[i]->H1("fhNofEvents")->GetEntries());
            vH.push_back(hm[i]->H1("fhNofCals"));
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(hm[i]->H1("fhNofCals")->GetMean()) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }

    {
        fHM->CreateCanvas("hrich_m_fhRichMatchQaCand", "hrich_m_fhRichMatchQaCand", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;
        for (UInt_t i = 0; i < hm.size(); i++){
            hm[i]->H1("fhRichMatchQaCand")->Scale(1./hm[i]->H1("fhNofEvents")->GetEntries());
            vH.push_back(hm[i]->H1("fhRichMatchQaCand"));
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(hm[i]->H1("fhRichMatchQaCand")->GetMean()) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel, kLinear, kLog);
    }




    {
        fHM->CreateCanvas("hrich_m_fhRadiusTofId", "hrich_m_fhRadiusTofId", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;
        for (UInt_t i = 0; i < hm.size(); i++){
            TH1* hPrY = (TH1*)hm[i]->H2("fhThetaVsRadiusTofId")->ProjectionY()->Clone();
            hPrY->Scale(1./hm[i]->H1("fhNofEvents")->GetEntries());
            hPrY->GetYaxis()->SetTitle("Entries/event");
            vH.push_back(hPrY);
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(hPrY->GetMean()) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }

    {
        fHM->CreateCanvas("hrich_m_fhRichEffMom", "hrich_m_fhRichEffMom", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;

        for (UInt_t i = 0; i < hm.size(); i++){
            TH1D* pxEff = RichUtils::DivideH1((TH1D*)hm[i]->H1("fhMomRichTofId")->Clone(), (TH1D*)hm[i]->H1("fhMomTofId")->Clone(), "", 100., "Relative efficiency [%]");
            pxEff->SetMinimum(0.);
            pxEff->GetXaxis()->SetRangeUser(0, 500);
            vH.push_back(pxEff);
            stringstream ss1;
            ss1.precision(1);
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(100.*hm[i]->H1("fhMomRichTofId")->GetEntries() / hm[i]->H1("fhMomTofId")->GetEntries() ) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }

    {
        fHM->CreateCanvas("hrich_m_fhRichEffPhi", "hrich_m_fhRichEffPhi", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;

        for (UInt_t i = 0; i < hm.size(); i++){
            TH1D* pxEff = RichUtils::DivideH1((TH1D*)hm[i]->H2("fhThetaVsPhiRichTofId")->ProjectionY()->Clone(), (TH1D*)hm[i]->H2("fhThetaVsPhiTofId")->ProjectionY()->Clone(), "", 100., "Relative efficiency [%]");
            pxEff->SetMinimum(0.);
            vH.push_back(pxEff);
            stringstream ss1;
            ss1.precision(1);
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(100.*hm[i]->H1("fhThetaVsPhiRichTofId")->GetEntries() / hm[i]->H1("fhThetaVsPhiTofId")->GetEntries() ) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }

    {
        fHM->CreateCanvas("hrich_m_fhRichEffTheta", "hrich_m_fhRichEffTheta", 900, 900);
        vector<TH1*> vH;
        vector<string> vLabel;

        for (UInt_t i = 0; i < hm.size(); i++){
            TH1D* pxEff = RichUtils::DivideH1((TH1D*)hm[i]->H2("fhThetaVsPhiRichTofId")->ProjectionX()->Clone(), (TH1D*)hm[i]->H2("fhThetaVsPhiTofId")->ProjectionX()->Clone(), "", 100., "Relative efficiency [%]");
            pxEff->SetMinimum(0.);
            vH.push_back(pxEff);
            stringstream ss1;
            ss1.precision(1);
            vLabel.push_back(legNames[i] + " (" + RichUtils::NumberToString(100.*hm[i]->H1("fhThetaVsPhiRichTofId")->GetEntries() / hm[i]->H1("fhThetaVsPhiTofId")->GetEntries() ) + ")");
        }
        HRichDrawHist::DrawH1(vH, vLabel);
    }



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