#include "hrich700ringfinderhough.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hcategory.h"
#include "hevent.h"
#include "hlinearcatiter.h"
#include "hmatrixcatiter.h"
#include "hruntimedb.h"
#include "hparset.h"
#include "hrichdetector.h"
#include "hgeantdef.h"
#include "richdef.h"
#include "hrichcal.h"
#include "hrichcalsim.h"
#include "hrichhit.h"
#include "hrichhitsim.h"
#include "hrich700digipar.h"
#include "hrich700ringfinderpar.h"
#include "hrich700ringfittercop.h"
#include "TSystem.h"
#include "TMath.h"
#include <iostream>
#include <cmath>
#include <set>
#include <algorithm>
#include <iostream>
using std::cout;
using std::endl;
using std::vector;
using std::set;
using std::sort;
ClassImp(HRich700RingFinderHough)
HRich700RingFinderHough::HRich700RingFinderHough(const Text_t* name,const Text_t* title ):
HReconstructor(name,title),
fNofParts(0),
fMaxDistance(0.f),
fMinDistance(0.f),
fMinDistanceSq(0.f),
fMaxDistanceSq(0.f),
fMinRadius(0.f),
fMaxRadius(0.f),
fDx(0.f),
fDy(0.f),
fDr(0.f),
fNofBinsX(0),
fNofBinsY(0),
fNofBinsXY(0),
fHTCut(0),
fNofBinsR(0),
fHTCutR(0),
fMinNofHitsInArea(0),
fUsedHitsAllCut(0.0),
fRmsCoeffCOP(0.f),
fMaxCutCOP(0.f),
fCurMinX(0.f),
fCurMinY(0.f),
fData(),
fHist(),
fHistR(),
fHitInd()
{
}
HRich700RingFinderHough::~HRich700RingFinderHough()
{
}
Bool_t HRich700RingFinderHough::init()
{
HRichDetector* pRichDet = static_cast<HRichDetector*>(gHades->getSetup()->getDetector("Rich"));
if (pRichDet == NULL) {
Warning("init", "No RICH detector in setup!");
}
fIsSimulation = kFALSE;
if(gHades->getCurrentEvent()->getCategory(catGeantKine)) fIsSimulation = kTRUE;
fCatRichCal = gHades->getCurrentEvent()->getCategory(catRichCal);
if (NULL == fCatRichCal) {
Warning("init", "No category catRichCal found!");
}
fCatRichHit = gHades->getCurrentEvent()->getCategory(catRichHit);
if (NULL == fCatRichHit) {
if(pRichDet) {
if(fIsSimulation) { fCatRichHit = pRichDet->buildLinearCat("HRichHitSim", 10); }
else { fCatRichHit = pRichDet->buildLinearCat("HRichHit" , 10); }
if (NULL == fCatRichHit) {
Error("init", "Cannot create category catRichHit!");
} else {
gHades->getCurrentEvent()->addCategory(catRichHit, fCatRichHit, "Rich");
}
}
} else {
Error("init", "No category catRichHit found");
}
fDigiPar = (HRich700DigiPar*) gHades->getRuntimeDb()->getContainer("Rich700DigiPar");
if(!fDigiPar) {
Error("init", "Can not retrieve HRich700DigiPar");
return kFALSE;
}
fRingPar = (HRich700RingFinderPar*) gHades->getRuntimeDb()->getContainer("Rich700RingFinderPar");
if(!fRingPar) {
Error("init", "Can not retrieve HRich700RingFinderPar");
return kFALSE;
}
return kTRUE;
}
Bool_t HRich700RingFinderHough::reinit()
{
setParameters();
fHist .resize(fNofBinsXY);
fHistR .resize(fNofBinsR);
fHitInd.resize(fNofParts);
return kTRUE;
}
Int_t HRich700RingFinderHough::execute()
{
fEventNum++;
processEvent();
return 0;
}
void HRich700RingFinderHough::processEvent()
{
if(!fCatRichCal || !fCatRichHit) return;
fData.clear();
Int_t nofRichCals = fCatRichCal->getEntries();
for (Int_t iC = 0; iC < nofRichCals; iC++) {
HRichCalSim* richCal = static_cast<HRichCalSim*>(fCatRichCal->getObject(iC));
if (NULL == richCal) continue;
Int_t loc[3];
loc[0] = richCal->getSector();
loc[1] = richCal->getCol();
loc[2] = richCal->getRow();
pair<Double_t, Double_t> xy = fDigiPar->getXY(loc);
HRich700HoughHit houghHit;
houghHit.fX = xy.first;
houghHit.fY = xy.second;
houghHit.fX2plusY2 = houghHit.fX * houghHit.fX + houghHit.fY * houghHit.fY;
houghHit.fId = iC;
houghHit.fIsUsed = kFALSE;
fData.push_back(houghHit);
}
if (fData.size() > MAX_NOF_HITS) {
Warning("processEvent()","Number of hits is more than %i. Skipped!",MAX_NOF_HITS);
} else {
std::sort(fData.begin(), fData.end(), HRich700HoughHitCmpUp());
HoughTransformReconstruction();
}
}
void HRich700RingFinderHough::setParameters()
{
fMaxDistance = fRingPar->getMaxDistance();
fMinDistance = fRingPar->getMinDistance();
fMinDistanceSq = fMinDistance*fMinDistance;
fMaxDistanceSq = fMaxDistance*fMaxDistance;
fMinRadius = fRingPar->getMinRadius();
fMaxRadius = fRingPar->getMaxRadius();
fHTCut = (UShort_t)fRingPar->getHTCut();
fHTCutR = (UShort_t)fRingPar->getHTCutR();
fMinNofHitsInArea = (UShort_t)fRingPar->getMinNofHitsInArea();
fNofBinsX = (UShort_t)fRingPar->getNofBinsX();
fNofBinsY = (UShort_t)fRingPar->getNofBinsY();
fNofBinsR = (UShort_t)fRingPar->getNofBinsR();
fRmsCoeffCOP = fRingPar->getRmsCoeffCOP();
fMaxCutCOP = fRingPar->getMaxCutCOP();
fUsedHitsAllCut = fRingPar->getUsedHitsAllCut();
fNofParts = (UShort_t)fRingPar->getNofParts();
fDx = 2.f * fMaxDistance / (Float_t)fNofBinsX;
fDy = 2.f * fMaxDistance / (Float_t)fNofBinsY;
fDr = fMaxRadius / (Float_t)fNofBinsR;
fNofBinsXY = fNofBinsX * fNofBinsY;
}
void HRich700RingFinderHough::HoughTransformReconstruction()
{
fFoundRings.clear();
Int_t indmin, indmax;
UInt_t size = fData.size();
for (UInt_t iHit = 0; iHit < size; iHit++){
if (fData[iHit].fIsUsed == kTRUE) continue;
fCurMinX = fData[iHit].fX - fMaxDistance;
fCurMinY = fData[iHit].fY - fMaxDistance;
DefineLocalAreaAndHits(fData[iHit].fX, fData[iHit].fY , &indmin, &indmax);
HoughTransform(indmin, indmax);
FindPeak(indmin, indmax);
}
}
void HRich700RingFinderHough::DefineLocalAreaAndHits(Float_t x0,
Float_t y0,
Int_t *indmin,
Int_t *indmax)
{
HRich700HoughHit mpnt;
vector<HRich700HoughHit>::iterator itmin, itmax;
mpnt.fX = x0 - fMaxDistance;
itmin = std::lower_bound(fData.begin(), fData.end(), mpnt, HRich700HoughHitCmpUp());
mpnt.fX = x0 + fMaxDistance;
itmax = std::lower_bound(fData.begin(), fData.end(), mpnt, HRich700HoughHitCmpUp()) - 1;
*indmin = itmin - fData.begin();
*indmax = itmax - fData.begin();
Int_t arSize = *indmax - *indmin + 1;
if (arSize <= fMinNofHitsInArea) return;
for (UShort_t i = 0; i < fNofParts; i++){
fHitInd[i].clear();
fHitInd[i].reserve( (*indmax-*indmin) / fNofParts);
}
UShort_t indmin1 = (UShort_t)(*indmin);
UShort_t indmax1 = (UShort_t)(*indmax);
for (UShort_t i = indmin1; i <= indmax1; i++) {
if (fData[i].fIsUsed == kTRUE) continue;
Float_t ry = y0 - fData[i].fY;
if (fabs(ry) > fMaxDistance) continue;
Float_t rx = x0 - fData[i].fX;
Float_t d = rx * rx + ry * ry;
if (d > fMaxDistanceSq) continue;
fHitInd[i % fNofParts].push_back(i);
}
for (UShort_t j = 0; j < fNofBinsXY; j++){
fHist[j] = 0;
}
for (UShort_t k = 0; k < fNofBinsR; k++) {
fHistR[k] = 0;
}
}
void HRich700RingFinderHough::HoughTransform(UShort_t indmin,UShort_t indmax)
{
for (Int_t iPart = 0; iPart < fNofParts; iPart++){
HoughTransformGroup(indmin, indmax, iPart);
}
}
void HRich700RingFinderHough::HoughTransformGroup(UShort_t indmin,
UShort_t indmax,
Int_t iPart)
{
UShort_t nofHits = fHitInd[iPart].size();
Float_t xcs, ycs;
Float_t dx = 1.0f/fDx, dy = 1.0f/fDy, dr = 1.0f/fDr;
vector<HRich700HoughHit> data;
data.resize(nofHits);
for (Int_t i = 0; i < nofHits; i++){
data[i] = fData[ fHitInd[iPart][i] ];
}
typedef vector<HRich700HoughHit>::iterator iH;
for (iH iHit1 = data.begin(); iHit1 != data.end(); iHit1++) {
Float_t iH1X = iHit1->fX;
Float_t iH1Y = iHit1->fY;
for (iH iHit2 = iHit1 + 1; iHit2 != data.end(); iHit2++) {
Float_t iH2X = iHit2->fX;
Float_t iH2Y = iHit2->fY;
Float_t rx0 = iH1X - iH2X;
Float_t ry0 = iH1Y- iH2Y;
Float_t r12 = rx0 * rx0 + ry0 * ry0;
if (r12 < fMinDistanceSq || r12 > fMaxDistanceSq) continue;
Float_t t10 = iHit1->fX2plusY2 - iHit2->fX2plusY2;
for (iH iHit3 = iHit2 + 1; iHit3 != data.end(); iHit3++) {
Float_t iH3X = iHit3->fX;
Float_t iH3Y = iHit3->fY;
Float_t rx1 = iH1X - iH3X;
Float_t ry1 = iH1Y - iH3Y;
Float_t r13 = rx1 * rx1 + ry1 * ry1;
if (r13 < fMinDistanceSq || r13 > fMaxDistanceSq)continue;
Float_t rx2 = iH2X - iH3X;
Float_t ry2 = iH2Y - iH3Y;
Float_t r23 = rx2 * rx2 + ry2 * ry2;
if (r23 < fMinDistanceSq || r23 > fMaxDistanceSq)continue;
Float_t det = rx2*ry0 - rx0*ry2;
if (det == 0.0f) continue;
Float_t t19 = 0.5f / det;
Float_t t5 = iHit2->fX2plusY2 - iHit3->fX2plusY2;
Float_t xc = (t5 * ry0 - t10 * ry2) * t19;
xcs = xc - fCurMinX;
Int_t intX = Int_t( xcs *dx);
if (intX < 0 || intX >= fNofBinsX ) continue;
Float_t yc = (t10 * rx2 - t5 * rx0) * t19;
ycs = yc - fCurMinY;
Int_t intY = Int_t( ycs *dy);
if (intY < 0 || intY >= fNofBinsY ) continue;
Float_t t6 = iH1X - xc;
Float_t t7 = iH1Y - yc;
Float_t r = sqrt(t6 * t6 + t7 * t7);
Int_t intR = Int_t(r *dr);
if (intR < 0 || intR >= fNofBinsR) continue;
fHist[intX * fNofBinsX + intY]++;
fHistR[intR]++;
}
}
}
}
void HRich700RingFinderHough::FindPeak(Int_t indmin, Int_t indmax)
{
Int_t maxBinR = -1, maxR = -1;
UInt_t size = fHistR.size();
for (UInt_t k = 0; k < size; k++){
if (fHistR[k] > maxBinR){
maxBinR = fHistR[k];
maxR = k;
}
}
if (maxBinR < fHTCutR) return;
Int_t maxBinXY = -1, maxXY = -1;
size = fHist.size();
for (UInt_t k = 0; k < size; k++){
if (fHist[k] > maxBinXY){
maxBinXY = fHist[k];
maxXY = k;
}
}
if (maxBinXY < fHTCut) return;
HRich700Ring ring1;
Float_t xc, yc, r;
Float_t rx, ry, dr;
xc = (maxXY / fNofBinsX + 0.5f)* fDx + fCurMinX;
yc = (maxXY % fNofBinsX + 0.5f)* fDy + fCurMinY;
r = (maxR + 0.5f) * fDr;
for (Int_t j = indmin; j < indmax + 1; j++) {
rx = fData[j].fX - xc;
ry = fData[j].fY - yc;
dr = fabs(sqrt(rx * rx + ry * ry) - r);
if (dr > 10.) continue;
HRich700Hit hit1;
hit1.fX = fData[j].fX;
hit1.fY = fData[j].fY;
ring1.fHits.push_back(hit1);
}
if (ring1.fHits.size() < 5) {
return;
}
HRich700RingFitterCOP::FitRing(&ring1);
Float_t drCOPCut = fRmsCoeffCOP * sqrt(ring1.fCircleChi2 / ring1.fHits.size());
if (drCOPCut > fMaxCutCOP) drCOPCut = fMaxCutCOP;
xc = ring1.fCircleXCenter;
yc = ring1.fCircleYCenter;
r = ring1.fCircleRadius;
HRich700Ring ring2;
for (Int_t j = indmin; j < indmax + 1; j++) {
rx = fData[j].fX - xc;
ry = fData[j].fY - yc;
dr = fabs(sqrt(rx * rx + ry * ry) - r);
if (dr > drCOPCut) continue;
HRich700Hit hit1;
hit1.fX = fData[j].fX;
hit1.fY = fData[j].fY;
hit1.fId = fData[j].fId;
ring2.fHits.push_back(hit1);
}
if (ring2.fHits.size() < 5) {
return;
}
HRich700RingFitterCOP::FitRing(&ring2);
RemoveHitsOfFoundRing(indmin, indmax, &ring2);
AddRing(&ring2);
}
void HRich700RingFinderHough::RemoveHitsOfFoundRing(Int_t indmin, Int_t indmax, HRich700Ring* ring)
{
for (UInt_t iH = 0; iH < ring->fHits.size(); iH++) {
for (Int_t j = indmin; j < indmax + 1; j++) {
if (ring->fHits[iH].fX == fData[j].fX && ring->fHits[iH].fY == fData[j].fY){
fData[j].fIsUsed = kTRUE;
}
}
}
}
void HRich700RingFinderHough::AddRing(HRich700Ring* ring)
{
HRich700RingFitterCOP::FitRing(ring);
HLocation loc;
loc.set(1, 1);
HRichHitSim* hitS=0;
HRichHit* hit = (HRichHit*)fCatRichHit->getNewSlot(loc);
if(fIsSimulation) {
hit = new (hit) HRichHitSim();
hitS = (HRichHitSim*) hit;
} else {
hit = new (hit) HRichHit();
}
if (NULL != hit) {
Float_t x = ring->fCircleXCenter;
Float_t y = ring->fCircleYCenter;
Float_t theta,phi;
hit->nSector = fDigiPar->getInterpolatedSectorThetaPhi(x,y,theta,phi);
hit->fTheta = theta;
hit->fPhi = phi;
hit->fRich700NofRichCals = ring->fHits.size();
hit->fRich700CircleCenterX = ring->fCircleXCenter;
hit->fRich700CircleCenterY = ring->fCircleYCenter;
hit->fRich700CircleRadius = ring->fCircleRadius;
hit->fRich700CircleChi2 = ring->fCircleChi2;
for (UInt_t iC = 0; iC < ring->fHits.size(); iC++) {
if (iC >= NMAXCALSPERRING) break;
hit->fRich700CalIds[iC] = ring->fHits[iC].fId;
}
hit->setXY(x,y);
Int_t pmtID = fDigiPar->getPMTId(x,y);
if(pmtID!=-1){
HRich700PmtData* data = fDigiPar->getPMTData(pmtID);
if(data){
hit->setRingCenterX(data->fIndX);
hit->setRingCenterY(data->fIndY);
hit->setLabXYZ (x,y,data->fZ);
}
} else {
hit->setLabXYZ(x,y,-1000);
}
if(hitS){
Int_t trackIds[3];
Int_t weights[3];
RecoToMc(ring, trackIds, weights);
hitS->track1 = trackIds[0];
hitS->track2 = trackIds[1];
hitS->track3 = trackIds[2];
hitS->weigTrack1 = weights[0];
hitS->weigTrack2 = weights[1];
hitS->weigTrack3 = weights[2];
}
}
}
void HRich700RingFinderHough::RingSelection()
{
Int_t nofRings = fFoundRings.size();
sort(fFoundRings.begin(), fFoundRings.end(), HRich700RingComparatorMore());
set<UShort_t> usedHitsAll;
vector<UShort_t> goodRingIndex;
goodRingIndex.reserve(nofRings);
for (Int_t iRing = 0; iRing < nofRings; iRing++){
fFoundRings[iRing].fIsGood = kFALSE;
Int_t nofHits = fFoundRings[iRing].fHits.size();
Bool_t isGoodRingAll = kTRUE;
Int_t nofUsedHitsAll = 0;
for(Int_t iHit = 0; iHit < nofHits; iHit++){
set<UShort_t>::iterator it = usedHitsAll.find(fFoundRings[iRing].fHits[iHit].fId);
if(it != usedHitsAll.end()){
nofUsedHitsAll++;
}
}
if ((Float_t)nofUsedHitsAll/(Float_t)nofHits > fUsedHitsAllCut){
isGoodRingAll = kFALSE;
}
if (isGoodRingAll){
fFoundRings[iRing].fIsGood = kTRUE;
goodRingIndex.push_back(iRing);
for(Int_t iHit = 0; iHit < nofHits; iHit++){
usedHitsAll.insert(fFoundRings[iRing].fHits[iHit].fId);
}
}
}
usedHitsAll.clear();
goodRingIndex.clear();
}
void HRich700RingFinderHough::RecoToMc(const HRich700Ring* ring,
Int_t* trackIds,
Int_t* weights)
{
map<Int_t, Int_t> trackIdMap;
for (UInt_t iH = 0; iH < ring->fHits.size(); iH++) {
Int_t calId = ring->fHits[iH].fId;
HRichCalSim* richCal = static_cast<HRichCalSim*>(fCatRichCal->getObject(calId));
if (NULL == richCal) continue;
Int_t nofTrackIds = richCal->getNofTrackIds();
for (Int_t iT = 0; iT < nofTrackIds; iT++) {
Int_t trackId = richCal->getTrackId(iT);
trackIdMap[trackId]++;
}
}
Int_t maxTrackId = 0;
Int_t maxNofHits = 0;
for(map<Int_t, Int_t>::iterator it = trackIdMap.begin(); it != trackIdMap.end(); it++) {
Int_t trackId = it->first;
Int_t nofHits = it->second;
if (nofHits > maxNofHits) {
maxTrackId = trackId;
maxNofHits = nofHits;
}
}
trackIds[0] = maxTrackId;
trackIds[1] = -1;
trackIds[2] = -1;
weights[0] = maxNofHits ;
weights[1] = 0;
weights[2] = 0;
}
Bool_t HRich700RingFinderHough::finalize()
{
return kTRUE;
}
hrich700ringfinderhough.cc:1 hrich700ringfinderhough.cc:2 hrich700ringfinderhough.cc:3 hrich700ringfinderhough.cc:4 hrich700ringfinderhough.cc:5 hrich700ringfinderhough.cc:6 hrich700ringfinderhough.cc:7 hrich700ringfinderhough.cc:8 hrich700ringfinderhough.cc:9 hrich700ringfinderhough.cc:10 hrich700ringfinderhough.cc:11 hrich700ringfinderhough.cc:12 hrich700ringfinderhough.cc:13 hrich700ringfinderhough.cc:14 hrich700ringfinderhough.cc:15 hrich700ringfinderhough.cc:16 hrich700ringfinderhough.cc:17 hrich700ringfinderhough.cc:18 hrich700ringfinderhough.cc:19 hrich700ringfinderhough.cc:20 hrich700ringfinderhough.cc:21 hrich700ringfinderhough.cc:22 hrich700ringfinderhough.cc:23 hrich700ringfinderhough.cc:24 hrich700ringfinderhough.cc:25 hrich700ringfinderhough.cc:26 hrich700ringfinderhough.cc:27 hrich700ringfinderhough.cc:28 hrich700ringfinderhough.cc:29 hrich700ringfinderhough.cc:30 hrich700ringfinderhough.cc:31 hrich700ringfinderhough.cc:32 hrich700ringfinderhough.cc:33 hrich700ringfinderhough.cc:34 hrich700ringfinderhough.cc:35 hrich700ringfinderhough.cc:36 hrich700ringfinderhough.cc:37 hrich700ringfinderhough.cc:38 hrich700ringfinderhough.cc:39 hrich700ringfinderhough.cc:40 hrich700ringfinderhough.cc:41 hrich700ringfinderhough.cc:42 hrich700ringfinderhough.cc:43 hrich700ringfinderhough.cc:44 hrich700ringfinderhough.cc:45 hrich700ringfinderhough.cc:46 hrich700ringfinderhough.cc:47 hrich700ringfinderhough.cc:48 hrich700ringfinderhough.cc:49 hrich700ringfinderhough.cc:50 hrich700ringfinderhough.cc:51 hrich700ringfinderhough.cc:52 hrich700ringfinderhough.cc:53 hrich700ringfinderhough.cc:54 hrich700ringfinderhough.cc:55 hrich700ringfinderhough.cc:56 hrich700ringfinderhough.cc:57 hrich700ringfinderhough.cc:58 hrich700ringfinderhough.cc:59 hrich700ringfinderhough.cc:60 hrich700ringfinderhough.cc:61 hrich700ringfinderhough.cc:62 hrich700ringfinderhough.cc:63 hrich700ringfinderhough.cc:64 hrich700ringfinderhough.cc:65 hrich700ringfinderhough.cc:66 hrich700ringfinderhough.cc:67 hrich700ringfinderhough.cc:68 hrich700ringfinderhough.cc:69 hrich700ringfinderhough.cc:70 hrich700ringfinderhough.cc:71 hrich700ringfinderhough.cc:72 hrich700ringfinderhough.cc:73 hrich700ringfinderhough.cc:74 hrich700ringfinderhough.cc:75 hrich700ringfinderhough.cc:76 hrich700ringfinderhough.cc:77 hrich700ringfinderhough.cc:78 hrich700ringfinderhough.cc:79 hrich700ringfinderhough.cc:80 hrich700ringfinderhough.cc:81 hrich700ringfinderhough.cc:82 hrich700ringfinderhough.cc:83 hrich700ringfinderhough.cc:84 hrich700ringfinderhough.cc:85 hrich700ringfinderhough.cc:86 hrich700ringfinderhough.cc:87 hrich700ringfinderhough.cc:88 hrich700ringfinderhough.cc:89 hrich700ringfinderhough.cc:90 hrich700ringfinderhough.cc:91 hrich700ringfinderhough.cc:92 hrich700ringfinderhough.cc:93 hrich700ringfinderhough.cc:94 hrich700ringfinderhough.cc:95 hrich700ringfinderhough.cc:96 hrich700ringfinderhough.cc:97 hrich700ringfinderhough.cc:98 hrich700ringfinderhough.cc:99 hrich700ringfinderhough.cc:100 hrich700ringfinderhough.cc:101 hrich700ringfinderhough.cc:102 hrich700ringfinderhough.cc:103 hrich700ringfinderhough.cc:104 hrich700ringfinderhough.cc:105 hrich700ringfinderhough.cc:106 hrich700ringfinderhough.cc:107 hrich700ringfinderhough.cc:108 hrich700ringfinderhough.cc:109 hrich700ringfinderhough.cc:110 hrich700ringfinderhough.cc:111 hrich700ringfinderhough.cc:112 hrich700ringfinderhough.cc:113 hrich700ringfinderhough.cc:114 hrich700ringfinderhough.cc:115 hrich700ringfinderhough.cc:116 hrich700ringfinderhough.cc:117 hrich700ringfinderhough.cc:118 hrich700ringfinderhough.cc:119 hrich700ringfinderhough.cc:120 hrich700ringfinderhough.cc:121 hrich700ringfinderhough.cc:122 hrich700ringfinderhough.cc:123 hrich700ringfinderhough.cc:124 hrich700ringfinderhough.cc:125 hrich700ringfinderhough.cc:126 hrich700ringfinderhough.cc:127 hrich700ringfinderhough.cc:128 hrich700ringfinderhough.cc:129 hrich700ringfinderhough.cc:130 hrich700ringfinderhough.cc:131 hrich700ringfinderhough.cc:132 hrich700ringfinderhough.cc:133 hrich700ringfinderhough.cc:134 hrich700ringfinderhough.cc:135 hrich700ringfinderhough.cc:136 hrich700ringfinderhough.cc:137 hrich700ringfinderhough.cc:138 hrich700ringfinderhough.cc:139 hrich700ringfinderhough.cc:140 hrich700ringfinderhough.cc:141 hrich700ringfinderhough.cc:142 hrich700ringfinderhough.cc:143 hrich700ringfinderhough.cc:144 hrich700ringfinderhough.cc:145 hrich700ringfinderhough.cc:146 hrich700ringfinderhough.cc:147 hrich700ringfinderhough.cc:148 hrich700ringfinderhough.cc:149 hrich700ringfinderhough.cc:150 hrich700ringfinderhough.cc:151 hrich700ringfinderhough.cc:152 hrich700ringfinderhough.cc:153 hrich700ringfinderhough.cc:154 hrich700ringfinderhough.cc:155 hrich700ringfinderhough.cc:156 hrich700ringfinderhough.cc:157 hrich700ringfinderhough.cc:158 hrich700ringfinderhough.cc:159 hrich700ringfinderhough.cc:160 hrich700ringfinderhough.cc:161 hrich700ringfinderhough.cc:162 hrich700ringfinderhough.cc:163 hrich700ringfinderhough.cc:164 hrich700ringfinderhough.cc:165 hrich700ringfinderhough.cc:166 hrich700ringfinderhough.cc:167 hrich700ringfinderhough.cc:168 hrich700ringfinderhough.cc:169 hrich700ringfinderhough.cc:170 hrich700ringfinderhough.cc:171 hrich700ringfinderhough.cc:172 hrich700ringfinderhough.cc:173 hrich700ringfinderhough.cc:174 hrich700ringfinderhough.cc:175 hrich700ringfinderhough.cc:176 hrich700ringfinderhough.cc:177 hrich700ringfinderhough.cc:178 hrich700ringfinderhough.cc:179 hrich700ringfinderhough.cc:180 hrich700ringfinderhough.cc:181 hrich700ringfinderhough.cc:182 hrich700ringfinderhough.cc:183 hrich700ringfinderhough.cc:184 hrich700ringfinderhough.cc:185 hrich700ringfinderhough.cc:186 hrich700ringfinderhough.cc:187 hrich700ringfinderhough.cc:188 hrich700ringfinderhough.cc:189 hrich700ringfinderhough.cc:190 hrich700ringfinderhough.cc:191 hrich700ringfinderhough.cc:192 hrich700ringfinderhough.cc:193 hrich700ringfinderhough.cc:194 hrich700ringfinderhough.cc:195 hrich700ringfinderhough.cc:196 hrich700ringfinderhough.cc:197 hrich700ringfinderhough.cc:198 hrich700ringfinderhough.cc:199 hrich700ringfinderhough.cc:200 hrich700ringfinderhough.cc:201 hrich700ringfinderhough.cc:202 hrich700ringfinderhough.cc:203 hrich700ringfinderhough.cc:204 hrich700ringfinderhough.cc:205 hrich700ringfinderhough.cc:206 hrich700ringfinderhough.cc:207 hrich700ringfinderhough.cc:208 hrich700ringfinderhough.cc:209 hrich700ringfinderhough.cc:210 hrich700ringfinderhough.cc:211 hrich700ringfinderhough.cc:212 hrich700ringfinderhough.cc:213 hrich700ringfinderhough.cc:214 hrich700ringfinderhough.cc:215 hrich700ringfinderhough.cc:216 hrich700ringfinderhough.cc:217 hrich700ringfinderhough.cc:218 hrich700ringfinderhough.cc:219 hrich700ringfinderhough.cc:220 hrich700ringfinderhough.cc:221 hrich700ringfinderhough.cc:222 hrich700ringfinderhough.cc:223 hrich700ringfinderhough.cc:224 hrich700ringfinderhough.cc:225 hrich700ringfinderhough.cc:226 hrich700ringfinderhough.cc:227 hrich700ringfinderhough.cc:228 hrich700ringfinderhough.cc:229 hrich700ringfinderhough.cc:230 hrich700ringfinderhough.cc:231 hrich700ringfinderhough.cc:232 hrich700ringfinderhough.cc:233 hrich700ringfinderhough.cc:234 hrich700ringfinderhough.cc:235 hrich700ringfinderhough.cc:236 hrich700ringfinderhough.cc:237 hrich700ringfinderhough.cc:238 hrich700ringfinderhough.cc:239 hrich700ringfinderhough.cc:240 hrich700ringfinderhough.cc:241 hrich700ringfinderhough.cc:242 hrich700ringfinderhough.cc:243 hrich700ringfinderhough.cc:244 hrich700ringfinderhough.cc:245 hrich700ringfinderhough.cc:246 hrich700ringfinderhough.cc:247 hrich700ringfinderhough.cc:248 hrich700ringfinderhough.cc:249 hrich700ringfinderhough.cc:250 hrich700ringfinderhough.cc:251 hrich700ringfinderhough.cc:252 hrich700ringfinderhough.cc:253 hrich700ringfinderhough.cc:254 hrich700ringfinderhough.cc:255 hrich700ringfinderhough.cc:256 hrich700ringfinderhough.cc:257 hrich700ringfinderhough.cc:258 hrich700ringfinderhough.cc:259 hrich700ringfinderhough.cc:260 hrich700ringfinderhough.cc:261 hrich700ringfinderhough.cc:262 hrich700ringfinderhough.cc:263 hrich700ringfinderhough.cc:264 hrich700ringfinderhough.cc:265 hrich700ringfinderhough.cc:266 hrich700ringfinderhough.cc:267 hrich700ringfinderhough.cc:268 hrich700ringfinderhough.cc:269 hrich700ringfinderhough.cc:270 hrich700ringfinderhough.cc:271 hrich700ringfinderhough.cc:272 hrich700ringfinderhough.cc:273 hrich700ringfinderhough.cc:274 hrich700ringfinderhough.cc:275 hrich700ringfinderhough.cc:276 hrich700ringfinderhough.cc:277 hrich700ringfinderhough.cc:278 hrich700ringfinderhough.cc:279 hrich700ringfinderhough.cc:280 hrich700ringfinderhough.cc:281 hrich700ringfinderhough.cc:282 hrich700ringfinderhough.cc:283 hrich700ringfinderhough.cc:284 hrich700ringfinderhough.cc:285 hrich700ringfinderhough.cc:286 hrich700ringfinderhough.cc:287 hrich700ringfinderhough.cc:288 hrich700ringfinderhough.cc:289 hrich700ringfinderhough.cc:290 hrich700ringfinderhough.cc:291 hrich700ringfinderhough.cc:292 hrich700ringfinderhough.cc:293 hrich700ringfinderhough.cc:294 hrich700ringfinderhough.cc:295 hrich700ringfinderhough.cc:296 hrich700ringfinderhough.cc:297 hrich700ringfinderhough.cc:298 hrich700ringfinderhough.cc:299 hrich700ringfinderhough.cc:300 hrich700ringfinderhough.cc:301 hrich700ringfinderhough.cc:302 hrich700ringfinderhough.cc:303 hrich700ringfinderhough.cc:304 hrich700ringfinderhough.cc:305 hrich700ringfinderhough.cc:306 hrich700ringfinderhough.cc:307 hrich700ringfinderhough.cc:308 hrich700ringfinderhough.cc:309 hrich700ringfinderhough.cc:310 hrich700ringfinderhough.cc:311 hrich700ringfinderhough.cc:312 hrich700ringfinderhough.cc:313 hrich700ringfinderhough.cc:314 hrich700ringfinderhough.cc:315 hrich700ringfinderhough.cc:316 hrich700ringfinderhough.cc:317 hrich700ringfinderhough.cc:318 hrich700ringfinderhough.cc:319 hrich700ringfinderhough.cc:320 hrich700ringfinderhough.cc:321 hrich700ringfinderhough.cc:322 hrich700ringfinderhough.cc:323 hrich700ringfinderhough.cc:324 hrich700ringfinderhough.cc:325 hrich700ringfinderhough.cc:326 hrich700ringfinderhough.cc:327 hrich700ringfinderhough.cc:328 hrich700ringfinderhough.cc:329 hrich700ringfinderhough.cc:330 hrich700ringfinderhough.cc:331 hrich700ringfinderhough.cc:332 hrich700ringfinderhough.cc:333 hrich700ringfinderhough.cc:334 hrich700ringfinderhough.cc:335 hrich700ringfinderhough.cc:336 hrich700ringfinderhough.cc:337 hrich700ringfinderhough.cc:338 hrich700ringfinderhough.cc:339 hrich700ringfinderhough.cc:340 hrich700ringfinderhough.cc:341 hrich700ringfinderhough.cc:342 hrich700ringfinderhough.cc:343 hrich700ringfinderhough.cc:344 hrich700ringfinderhough.cc:345 hrich700ringfinderhough.cc:346 hrich700ringfinderhough.cc:347 hrich700ringfinderhough.cc:348 hrich700ringfinderhough.cc:349 hrich700ringfinderhough.cc:350 hrich700ringfinderhough.cc:351 hrich700ringfinderhough.cc:352 hrich700ringfinderhough.cc:353 hrich700ringfinderhough.cc:354 hrich700ringfinderhough.cc:355 hrich700ringfinderhough.cc:356 hrich700ringfinderhough.cc:357 hrich700ringfinderhough.cc:358 hrich700ringfinderhough.cc:359 hrich700ringfinderhough.cc:360 hrich700ringfinderhough.cc:361 hrich700ringfinderhough.cc:362 hrich700ringfinderhough.cc:363 hrich700ringfinderhough.cc:364 hrich700ringfinderhough.cc:365 hrich700ringfinderhough.cc:366 hrich700ringfinderhough.cc:367 hrich700ringfinderhough.cc:368 hrich700ringfinderhough.cc:369 hrich700ringfinderhough.cc:370 hrich700ringfinderhough.cc:371 hrich700ringfinderhough.cc:372 hrich700ringfinderhough.cc:373 hrich700ringfinderhough.cc:374 hrich700ringfinderhough.cc:375 hrich700ringfinderhough.cc:376 hrich700ringfinderhough.cc:377 hrich700ringfinderhough.cc:378 hrich700ringfinderhough.cc:379 hrich700ringfinderhough.cc:380 hrich700ringfinderhough.cc:381 hrich700ringfinderhough.cc:382 hrich700ringfinderhough.cc:383 hrich700ringfinderhough.cc:384 hrich700ringfinderhough.cc:385 hrich700ringfinderhough.cc:386 hrich700ringfinderhough.cc:387 hrich700ringfinderhough.cc:388 hrich700ringfinderhough.cc:389 hrich700ringfinderhough.cc:390 hrich700ringfinderhough.cc:391 hrich700ringfinderhough.cc:392 hrich700ringfinderhough.cc:393 hrich700ringfinderhough.cc:394 hrich700ringfinderhough.cc:395 hrich700ringfinderhough.cc:396 hrich700ringfinderhough.cc:397 hrich700ringfinderhough.cc:398 hrich700ringfinderhough.cc:399 hrich700ringfinderhough.cc:400 hrich700ringfinderhough.cc:401 hrich700ringfinderhough.cc:402 hrich700ringfinderhough.cc:403 hrich700ringfinderhough.cc:404 hrich700ringfinderhough.cc:405 hrich700ringfinderhough.cc:406 hrich700ringfinderhough.cc:407 hrich700ringfinderhough.cc:408 hrich700ringfinderhough.cc:409 hrich700ringfinderhough.cc:410 hrich700ringfinderhough.cc:411 hrich700ringfinderhough.cc:412 hrich700ringfinderhough.cc:413 hrich700ringfinderhough.cc:414 hrich700ringfinderhough.cc:415 hrich700ringfinderhough.cc:416 hrich700ringfinderhough.cc:417 hrich700ringfinderhough.cc:418 hrich700ringfinderhough.cc:419 hrich700ringfinderhough.cc:420 hrich700ringfinderhough.cc:421 hrich700ringfinderhough.cc:422 hrich700ringfinderhough.cc:423 hrich700ringfinderhough.cc:424 hrich700ringfinderhough.cc:425 hrich700ringfinderhough.cc:426 hrich700ringfinderhough.cc:427 hrich700ringfinderhough.cc:428 hrich700ringfinderhough.cc:429 hrich700ringfinderhough.cc:430 hrich700ringfinderhough.cc:431 hrich700ringfinderhough.cc:432 hrich700ringfinderhough.cc:433 hrich700ringfinderhough.cc:434 hrich700ringfinderhough.cc:435 hrich700ringfinderhough.cc:436 hrich700ringfinderhough.cc:437 hrich700ringfinderhough.cc:438 hrich700ringfinderhough.cc:439 hrich700ringfinderhough.cc:440 hrich700ringfinderhough.cc:441 hrich700ringfinderhough.cc:442 hrich700ringfinderhough.cc:443 hrich700ringfinderhough.cc:444 hrich700ringfinderhough.cc:445 hrich700ringfinderhough.cc:446 hrich700ringfinderhough.cc:447 hrich700ringfinderhough.cc:448 hrich700ringfinderhough.cc:449 hrich700ringfinderhough.cc:450 hrich700ringfinderhough.cc:451 hrich700ringfinderhough.cc:452 hrich700ringfinderhough.cc:453 hrich700ringfinderhough.cc:454 hrich700ringfinderhough.cc:455 hrich700ringfinderhough.cc:456 hrich700ringfinderhough.cc:457 hrich700ringfinderhough.cc:458 hrich700ringfinderhough.cc:459 hrich700ringfinderhough.cc:460 hrich700ringfinderhough.cc:461 hrich700ringfinderhough.cc:462 hrich700ringfinderhough.cc:463 hrich700ringfinderhough.cc:464 hrich700ringfinderhough.cc:465 hrich700ringfinderhough.cc:466 hrich700ringfinderhough.cc:467 hrich700ringfinderhough.cc:468 hrich700ringfinderhough.cc:469 hrich700ringfinderhough.cc:470 hrich700ringfinderhough.cc:471 hrich700ringfinderhough.cc:472 hrich700ringfinderhough.cc:473 hrich700ringfinderhough.cc:474 hrich700ringfinderhough.cc:475 hrich700ringfinderhough.cc:476 hrich700ringfinderhough.cc:477 hrich700ringfinderhough.cc:478 hrich700ringfinderhough.cc:479 hrich700ringfinderhough.cc:480 hrich700ringfinderhough.cc:481 hrich700ringfinderhough.cc:482 hrich700ringfinderhough.cc:483 hrich700ringfinderhough.cc:484 hrich700ringfinderhough.cc:485 hrich700ringfinderhough.cc:486 hrich700ringfinderhough.cc:487 hrich700ringfinderhough.cc:488 hrich700ringfinderhough.cc:489 hrich700ringfinderhough.cc:490 hrich700ringfinderhough.cc:491 hrich700ringfinderhough.cc:492 hrich700ringfinderhough.cc:493 hrich700ringfinderhough.cc:494 hrich700ringfinderhough.cc:495 hrich700ringfinderhough.cc:496 hrich700ringfinderhough.cc:497 hrich700ringfinderhough.cc:498 hrich700ringfinderhough.cc:499 hrich700ringfinderhough.cc:500 hrich700ringfinderhough.cc:501 hrich700ringfinderhough.cc:502 hrich700ringfinderhough.cc:503 hrich700ringfinderhough.cc:504 hrich700ringfinderhough.cc:505 hrich700ringfinderhough.cc:506 hrich700ringfinderhough.cc:507 hrich700ringfinderhough.cc:508 hrich700ringfinderhough.cc:509 hrich700ringfinderhough.cc:510 hrich700ringfinderhough.cc:511 hrich700ringfinderhough.cc:512 hrich700ringfinderhough.cc:513 hrich700ringfinderhough.cc:514 hrich700ringfinderhough.cc:515 hrich700ringfinderhough.cc:516 hrich700ringfinderhough.cc:517 hrich700ringfinderhough.cc:518 hrich700ringfinderhough.cc:519 hrich700ringfinderhough.cc:520 hrich700ringfinderhough.cc:521 hrich700ringfinderhough.cc:522 hrich700ringfinderhough.cc:523 hrich700ringfinderhough.cc:524 hrich700ringfinderhough.cc:525 hrich700ringfinderhough.cc:526 hrich700ringfinderhough.cc:527 hrich700ringfinderhough.cc:528 hrich700ringfinderhough.cc:529 hrich700ringfinderhough.cc:530 hrich700ringfinderhough.cc:531 hrich700ringfinderhough.cc:532 hrich700ringfinderhough.cc:533 hrich700ringfinderhough.cc:534 hrich700ringfinderhough.cc:535 hrich700ringfinderhough.cc:536 hrich700ringfinderhough.cc:537 hrich700ringfinderhough.cc:538 hrich700ringfinderhough.cc:539 hrich700ringfinderhough.cc:540 hrich700ringfinderhough.cc:541 hrich700ringfinderhough.cc:542 hrich700ringfinderhough.cc:543 hrich700ringfinderhough.cc:544 hrich700ringfinderhough.cc:545 hrich700ringfinderhough.cc:546 hrich700ringfinderhough.cc:547 hrich700ringfinderhough.cc:548 hrich700ringfinderhough.cc:549 hrich700ringfinderhough.cc:550 hrich700ringfinderhough.cc:551 hrich700ringfinderhough.cc:552 hrich700ringfinderhough.cc:553 hrich700ringfinderhough.cc:554 hrich700ringfinderhough.cc:555 hrich700ringfinderhough.cc:556 hrich700ringfinderhough.cc:557 hrich700ringfinderhough.cc:558 hrich700ringfinderhough.cc:559 hrich700ringfinderhough.cc:560 hrich700ringfinderhough.cc:561 hrich700ringfinderhough.cc:562 hrich700ringfinderhough.cc:563 hrich700ringfinderhough.cc:564 hrich700ringfinderhough.cc:565 hrich700ringfinderhough.cc:566 hrich700ringfinderhough.cc:567 hrich700ringfinderhough.cc:568 hrich700ringfinderhough.cc:569 hrich700ringfinderhough.cc:570 hrich700ringfinderhough.cc:571 hrich700ringfinderhough.cc:572 hrich700ringfinderhough.cc:573 hrich700ringfinderhough.cc:574 hrich700ringfinderhough.cc:575 hrich700ringfinderhough.cc:576 hrich700ringfinderhough.cc:577 hrich700ringfinderhough.cc:578 hrich700ringfinderhough.cc:579 hrich700ringfinderhough.cc:580 hrich700ringfinderhough.cc:581 hrich700ringfinderhough.cc:582 hrich700ringfinderhough.cc:583 hrich700ringfinderhough.cc:584 hrich700ringfinderhough.cc:585 hrich700ringfinderhough.cc:586 hrich700ringfinderhough.cc:587 hrich700ringfinderhough.cc:588 hrich700ringfinderhough.cc:589 hrich700ringfinderhough.cc:590 hrich700ringfinderhough.cc:591 hrich700ringfinderhough.cc:592 hrich700ringfinderhough.cc:593 hrich700ringfinderhough.cc:594 hrich700ringfinderhough.cc:595 hrich700ringfinderhough.cc:596 hrich700ringfinderhough.cc:597 hrich700ringfinderhough.cc:598 hrich700ringfinderhough.cc:599 hrich700ringfinderhough.cc:600 hrich700ringfinderhough.cc:601 hrich700ringfinderhough.cc:602 hrich700ringfinderhough.cc:603 hrich700ringfinderhough.cc:604 hrich700ringfinderhough.cc:605 hrich700ringfinderhough.cc:606 hrich700ringfinderhough.cc:607 hrich700ringfinderhough.cc:608 hrich700ringfinderhough.cc:609 hrich700ringfinderhough.cc:610 hrich700ringfinderhough.cc:611 hrich700ringfinderhough.cc:612 hrich700ringfinderhough.cc:613 hrich700ringfinderhough.cc:614 hrich700ringfinderhough.cc:615 hrich700ringfinderhough.cc:616 hrich700ringfinderhough.cc:617 hrich700ringfinderhough.cc:618 hrich700ringfinderhough.cc:619 hrich700ringfinderhough.cc:620 hrich700ringfinderhough.cc:621 hrich700ringfinderhough.cc:622 hrich700ringfinderhough.cc:623 hrich700ringfinderhough.cc:624 hrich700ringfinderhough.cc:625 hrich700ringfinderhough.cc:626 hrich700ringfinderhough.cc:627 hrich700ringfinderhough.cc:628 hrich700ringfinderhough.cc:629 hrich700ringfinderhough.cc:630 hrich700ringfinderhough.cc:631 hrich700ringfinderhough.cc:632 hrich700ringfinderhough.cc:633 hrich700ringfinderhough.cc:634 hrich700ringfinderhough.cc:635 hrich700ringfinderhough.cc:636 hrich700ringfinderhough.cc:637 hrich700ringfinderhough.cc:638 hrich700ringfinderhough.cc:639 hrich700ringfinderhough.cc:640 hrich700ringfinderhough.cc:641 hrich700ringfinderhough.cc:642 hrich700ringfinderhough.cc:643 hrich700ringfinderhough.cc:644 hrich700ringfinderhough.cc:645 hrich700ringfinderhough.cc:646 hrich700ringfinderhough.cc:647