#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);
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);
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);
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);
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);
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);
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);
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);
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);
fillHistCals();
fillHistRaw();
fillHistRings();
fillHistParticleCands();
return 0;
}
Bool_t HRich700GeoTestRealQa::isCurrentEventGood()
{
HParticleEvtInfo* evtInfo = static_cast<HParticleEvtInfo*>(fCatEvtInfo->getObject(0));
if(evtInfo&&!evtInfo->isGoodEvent(
Particle::kGoodTRIGGER
)) return false;
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);
if (it->second >= blobsCut){
blobsCounter++;
fHM->H2("fhBlobsPmtXPmtY")->Fill(pmtData->fIndX, pmtData->fIndY);
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.);
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);
}
{
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();
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();
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()
{
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();
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 + "/"));
}
}
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