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

#include "hrich700geotestqa.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 "hrichhitsim.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(HRich700GeoTestQa)

    HRich700GeoTestQa::HRich700GeoTestQa():
fEventNum(0)
{

}

HRich700GeoTestQa::~HRich700GeoTestQa()
{

}

Bool_t HRich700GeoTestQa::init()
{


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

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

    fCatRichDirect = gHades->getCurrentEvent()->getCategory(catRichGeantRaw + 1);
    if (NULL == fCatRichDirect) {
	Error("init", "Initialization of geant category for direct hits failed, returning...");
	return kFALSE;
    }


    fCatRichMirror = gHades->getCurrentEvent()->getCategory(catRichGeantRaw + 2);
    if (NULL == fCatRichMirror) {
	Error("init", "Initializatin of RICH mirror category failed, returning...");
	return kFALSE;
    }

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

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

    initHist();
    return kTRUE;

}

void HRich700GeoTestQa::initHist()
{
    fHM = new HRich700HistManager();
    fHM->Create2<TH2D>("fhNofRichPhotonsVsThetaElectron", "fhNofRichPhotonsVsThetaElectron;Theta [deg];Number of photons;Yield", 30, 0, 90, 125, 0, 250);
    fHM->Create2<TH2D>("fhNofRichMirrorPhotonsVsThetaElectron",
		       "fhNofRichMirrorPhotonsVsThetaElectron;Theta [deg];Number of mirror photons;Yield", 30, 0, 90, 175, 0, 350);
    fHM->Create2<TH2D>("fhNofRichCalsVsThetaElectron", "fhNofRichCalsVsThetaElectron;Theta [deg];Number of RICH cals;Yield", 30, 0, 90, 30, -.5, 29.5);

    fHM->Create2<TH2D>("fhNofRichPhotonsVsPhiElectron", "fhNofRichPhotonsVsPhiElectron;Phi [deg];Number of photons;Yield", 60, 0, 360, 125, 0, 250);
    fHM->Create2<TH2D>("fhNofRichMirrorPhotonsVsPhiElectron",
		       "fhNofRichMirrorPhotonsVsPhiElectron;Phi [deg];Number of mirror photons;Yield", 60, 0, 360, 175, 0, 350);
    fHM->Create2<TH2D>("fhNofRichCalsVsPhiElectron", "fhNofRichCalsVsPhiElectron;Phi [deg];Number of RICH cals;Yield", 60, 0, 360, 30, -.5, 29.5);

    fHM->Create2<TH2D>("fhRingXYElectron", "fhRingsXYElectron;X [mm];Y [mm];Yield", 175,-700, 700, 175, -700, 700);
    fHM->Create2<TH2D>("fhRingRadiusVsThetaElectron", "fhRingRadiusVsThetaElectron;Theta [deg];Ring radius [mm];Yield", 30, 0, 90, 70, 0., 35.);

    fHM->Create1<TH1D>("fhRingChi2Electron", "fhRingChi2Electron;Chi2;Yield", 80, 0., 12.);

    fHM->Create2<TH2D>("fhRichPhotonsXY", "fhRichPhotonsXY;X [mm];Y [mm];Yield", 175,-700, 700, 175, -700, 700);
    fHM->Create2<TH2D>("fhRichPhotonsSecXY", "fhRichPhotonsSecXY;X [mm];Y [mm];Yield", 175,-700, 700, 175, -700, 700);
    fHM->Create1<TH1D>("fhRichPhotonsEnergy", "fhRichPhotonsEnergy;Energy [eV];Yield", 120, 0, 12);
    fHM->Create1<TH1D>("fhRichPhotonsWavelength", "fhRichPhotonsWavelength;Wavelength [nm];Yield", 100, 0., 1000);
    fHM->Create2<TH2D>("fhRichDirectsXY", "fhRichDirectsXY;X [mm];Y [mm];Yield", 175,-700, 700, 175, -700, 700);
}

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


Int_t HRich700GeoTestQa::execute()
{
    HRichDrawHist::SetDefaultDrawStyle();
    fEventNum++;
    cout << "HRich700GeoTestQa::execute eventNum " << fEventNum << endl;

    fillMcHist();

    return 0;
}

void HRich700GeoTestQa::fillMcHist()
{
    Int_t nofRichPhotons = fCatRichPhoton->getEntries();
    for (Int_t i = 0; i < nofRichPhotons; i++) {
	HGeantRichPhoton* richPhoton = static_cast<HGeantRichPhoton*>(fCatRichPhoton->getObject(i));
	pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richPhoton->getPmtId());

    // if (richPhoton->getPmtId() > 400) {
    //     cout << "pmtId:" << richPhoton->getPmtId() << " x:" << pmtXY.first << " y:" << pmtXY.second << endl;
    // }

	if (!(pmtXY.first == 0 && pmtXY.second == 0)) {
            // x and y have to be swapped for compatibility
	    fHM->H2("fhRichPhotonsXY")->Fill(pmtXY.first + richPhoton->getY(), pmtXY.second + richPhoton->getX());
            Int_t trackId = richPhoton->getTrack();
	    HGeantKine* kine = (HGeantKine*)fCatKine->getObject(trackId - 1);
	    if (kine != NULL && !kine->isPrimary()) {
		          fHM->H2("fhRichPhotonsSecXY")->Fill(pmtXY.first + richPhoton->getY(), pmtXY.second + richPhoton->getX());
	    }
	} else {
	    //cout << "No Pmt  " <<richPhoton->getPmtId() << " " << pmtXY.first << " " <<  pmtXY.second  << endl;
	}

	fHM->H1("fhRichPhotonsEnergy")->Fill(richPhoton->getEnergy());
	Double_t energy = richPhoton->getEnergy();

	Double_t lambda = HRich700Pmt::getWavelength(energy);
	fHM->H1("fhRichPhotonsWavelength")->Fill(lambda);

	//Float_t x,y,z;
	//kineTrack->getVertex(x,y,z);
    }

    Int_t nofRichDirects = fCatRichDirect->getEntries();
    for (Int_t i = 0; i < nofRichDirects; i++) {
	HGeantRichDirect* richDirect =  static_cast<HGeantRichDirect*>(fCatRichDirect->getObject(i));
	pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richDirect->getPmtId());
	fHM->H2("fhRichDirectsXY")->Fill(pmtXY.first + richDirect->getX(), pmtXY.second + richDirect->getY());
    }

    Int_t nKine = fCatKine->getEntries();
    for(Int_t i=0; i< nKine; i++){
	HGeantKine* kine =  (HGeantKine*)fCatKine-> getObject(i);
	Int_t nofRichHits = kine->getNRichHits();
	if (isPrimaryElectron(kine) && nofRichHits > 0) {
	    fHM->H2("fhNofRichPhotonsVsThetaElectron")->Fill(kine->getThetaDeg(), nofRichHits);
	    fHM->H2("fhNofRichPhotonsVsPhiElectron")->Fill(kine->getPhiDeg(), nofRichHits);
	}
    }

    Int_t nofRichMirror = fCatRichMirror->getEntries();
    for (Int_t i = 0; i < nofRichMirror; i++) {
	HGeantRichMirror* richMirror = (HGeantRichMirror*) fCatRichMirror->getObject(i);
	Int_t nofPhotons = richMirror->getNumPhot();
	HGeantKine* kine =  (HGeantKine*)fCatKine-> getObject(richMirror->getTrack() - 1);
	if (isPrimaryElectron(kine)) {
	    fHM->H2("fhNofRichMirrorPhotonsVsThetaElectron")->Fill(kine->getThetaDeg(), nofPhotons);
	    fHM->H2("fhNofRichMirrorPhotonsVsPhiElectron")->Fill(kine->getPhiDeg(), nofPhotons);
	}
    }

    Int_t nofRichHits = fCatRichHit->getEntries();
    for (Int_t i = 0; i < nofRichHits; i++) {
	HRichHitSim* richHit = (HRichHitSim*) fCatRichHit->getObject(i);

	Int_t nofCals = richHit->fRich700NofRichCals;
	HGeantKine* kine =  (HGeantKine*)fCatKine->getObject(richHit->track1 - 1);
	if (isPrimaryElectron(kine)) {
	    fHM->H2("fhNofRichCalsVsThetaElectron")->Fill(kine->getThetaDeg(), nofCals);
	    fHM->H2("fhNofRichCalsVsPhiElectron")->Fill(kine->getPhiDeg(), nofCals);
	    fHM->H1("fhRingXYElectron")->Fill(richHit->fRich700CircleCenterX, richHit->fRich700CircleCenterY);
	    fHM->H1("fhRingRadiusVsThetaElectron")->Fill(kine->getThetaDeg(), richHit->fRich700CircleRadius);
	    fHM->H1("fhRingChi2Electron")->Fill(richHit->fRich700CircleChi2 / nofCals);
	}
    }
}

Bool_t HRich700GeoTestQa::isPrimaryElectron(
					    HGeantKine* kine)
{
    if (kine == NULL) return kFALSE;
    return (kine->getID() == 2 || kine->getID() == 3) && kine->isPrimary();
}

void HRich700GeoTestQa::drawHist()
{
    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRichPhotonsXY", "hrich_fhRichPhotonsXY", 1000, 800);
	c->cd();
	fHM->Scale("fhRichPhotonsXY", 1./(Double_t)fEventNum);
	HRichDrawHist::DrawH2(fHM->H2("fhRichPhotonsXY"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRichPhotonsSecXY", "hrich_fhRichPhotonsSecXY", 1000, 800);
	c->cd();
	fHM->Scale("fhRichPhotonsSecXY", 1./(Double_t)fEventNum);
	HRichDrawHist::DrawH2(fHM->H2("fhRichPhotonsSecXY"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRichPhotonsEnergy", "hrich_fhRichPhotonsEnergy", 800, 800);
	c->cd();
	fHM->NormalizeToIntegral("fhRichPhotonsEnergy");
	HRichDrawHist::DrawH1(fHM->H1("fhRichPhotonsEnergy"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRichPhotonsWavelength", "hrich_fhRichPhotonsWavelength", 800, 800);
	c->cd();
	fHM->NormalizeToIntegral("fhRichPhotonsWavelength");
	HRichDrawHist::DrawH1(fHM->H1("fhRichPhotonsWavelength"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRichDirectsXY", "hrich_fhRichDirectsXY", 1000, 800);
	c->cd();
	fHM->Scale("fhRichDirectsXY", 1./(Double_t)fEventNum);
	HRichDrawHist::DrawH2(fHM->H2("fhRichDirectsXY"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRingXYElectron", "hrich_fhRingXYElectron", 800, 800);
	c->cd();
	fHM->Scale("fhRingXYElectron", 1./(Double_t)fEventNum);
	HRichDrawHist::DrawH2(fHM->H2("fhRingXYElectron"));
    }

    {
	TCanvas* c = fHM->CreateCanvas("hrich_fhRingChi2Electron", "hrich_fhRingChi2Electron", 800, 800);
	c->cd();
	fHM->NormalizeToIntegral("fhRingChi2Electron");
	HRichDrawHist::DrawH1(fHM->H1("fhRingChi2Electron"));
    }

    drawH2MeanRms(fHM->H2("fhRingRadiusVsThetaElectron"), "hrich_fhRingRadiusVsThetaElectron");

    drawH2MeanRms(fHM->H2("fhNofRichPhotonsVsThetaElectron"), "hrich_fhNofRichPhotonsVsThetaElectron");
    drawH2MeanRms(fHM->H2("fhNofRichMirrorPhotonsVsThetaElectron"), "hrich_fhNofRichMirrorPhotonsVsThetaElectron");
    drawH2MeanRms(fHM->H2("fhNofRichCalsVsThetaElectron"), "hrich_fhNofRichCalsVsThetaElectron");

    drawH2MeanRms(fHM->H2("fhNofRichPhotonsVsPhiElectron"), "hrich_fhNofRichPhotonsVsPhiElectron");
    drawH2MeanRms(fHM->H2("fhNofRichMirrorPhotonsVsPhiElectron"), "hrich_fhNofRichMirrorPhotonsVsPhiElectron");
    drawH2MeanRms(fHM->H2("fhNofRichCalsVsPhiElectron"), "hrich_fhNofRichCalsVsPhiElectron");
}

void HRich700GeoTestQa::createH2MeanRms(
					TH2D* hist,
					TH1D** meanHist,
					TH1D** rmsHist)
{
    *meanHist = (TH1D*)hist->ProjectionX( (string(hist->GetName()) + "_mean").c_str() )->Clone();
    (*meanHist)->GetYaxis()->SetTitle( ("Mean and RMS. " + string(hist->GetYaxis()->GetTitle()) ).c_str());
    *rmsHist = (TH1D*)hist->ProjectionX((string(hist->GetName()) + "_rms").c_str() )->Clone();
    (*rmsHist)->GetYaxis()->SetTitle( ("RMS. "+ string(hist->GetYaxis()->GetTitle()) ).c_str());
    for (Int_t i = 1; i <= hist->GetXaxis()->GetNbins(); i++){
	stringstream ss;
	ss << string(hist->GetName()) << "_py" << i;
	TH1D* pr = hist->ProjectionY(ss.str().c_str(), i, i);
	if (*meanHist == NULL || pr == NULL) continue;
	(*meanHist)->SetBinContent(i, pr->GetMean());
	(*meanHist)->SetBinError(i, pr->GetRMS());
	(*rmsHist)->SetBinContent(i, pr->GetRMS());    }
}

void HRich700GeoTestQa::drawH2MeanRms(
				      TH2* hist,
				      const string& canvasName)
{
    TH1D* mean, *rms;
    createH2MeanRms((TH2D*)hist, &mean, &rms);
    TCanvas *c = fHM->CreateCanvas(canvasName.c_str(), canvasName.c_str(), 1200, 600);
    c->Divide(2, 1);
    c->cd(1);
    hist->Scale(1./hist->Integral());
    HRichDrawHist::DrawH2(hist);
    HRichDrawHist::DrawH1(mean, kLinear, kLinear, "same", kBlack, 4.);
    c->cd(2);
    TH1D* py = (TH1D*)hist->ProjectionY( (string(hist->GetName())+ "_py" ).c_str() )->Clone();
    HRichDrawHist::DrawH1andFitGauss(py);
    py->Scale(1./py->Integral());
    py->GetYaxis()->SetTitle("Yield");
}


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