ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : S. Lebedev
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRich700Digitizer
//
//  This class handles the mapping between xy position and PMT
//
//////////////////////////////////////////////////////////////////////////////

#include "hrich700digitizer.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hevent.h"
#include "hgeantrich.h"
#include "hparset.h"
#include "hspectrometer.h"
#include "hrichdetector.h"
#include "richdef.h"
#include "hrichcalsim.h"
#include "hgeantkine.h"
#include "hrich700digipar.h"

#include "TRandom.h"

#include <iostream>
#include <sstream>

using namespace std;


ClassImp(HRich700Digitizer)

HRich700Digitizer* HRich700Digitizer::fDigitizer = 0;

HRich700Digitizer::HRich700Digitizer(const Text_t* name,const Text_t* title):
    HReconstructor(name,title),
fStoreOnlyConvertedPhotonTrackIds(kTRUE)
{
    fDigitizer = this;
    setDeltaElectronUse(kFALSE,kFALSE,109,20.,2.);
    setDeltaElectronMinMomCut(0.,0.,0.,0.,0.,0.);

}

HRich700Digitizer::~HRich700Digitizer()
{

}

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

    // Initialize geant rich cherenkov photon category and set appropriate iterator
    fCatRichPhoton = gHades->getCurrentEvent()->getCategory(catRichGeantRaw);
    if (NULL == fCatRichPhoton) {
    	Error("init", "Initializatin of Cherenkov photon category failed, returning...");
    	return kFALSE;
    }

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

    // Initialize output category catRichCalSim
    HRichDetector* pRichDet = static_cast<HRichDetector*>(gHades->getSetup()->getDetector("Rich"));
    fCatRichCal = gHades->getCurrentEvent()->getCategory(catRichCal);
    if (NULL == fCatRichCal) {
	    fCatRichCal = pRichDet->buildMatrixCat("HRichCalSim", 1);
	    if (NULL == fCatRichCal) {
	        Error("init", "Can not build output category catRichCalSim, returning...");
	           return kFALSE;
	     } else {
	         gHades->getCurrentEvent()->addCategory(catRichCal, fCatRichCal, "Rich");
	   }
    }

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


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


Int_t HRich700Digitizer::execute()
{
    processEvent();

    return 0;
}

void HRich700Digitizer::processEvent()
{
    // prob selection for delta electrons
    setProbabilityForDeltaElectrons();

    Int_t nofPhotons = fCatRichPhoton->getEntries();
    for (Int_t i = 0; i < nofPhotons; i++) {
        HGeantRichPhoton* richPhoton = static_cast<HGeantRichPhoton*>(fCatRichPhoton->getObject(i));

        // work on delta electrons
        Int_t trkNum = richPhoton->getTrack();
        HGeantKine* primary = HGeantKine::getPrimary(trkNum,(HLinearCategory*)fCatKine);
        Bool_t isSkip = workOnDeltaElectrons(primary, richPhoton->getSector());
        if (isSkip) continue;

        processRichPhoton(richPhoton);
    }

    Int_t nofDirects = fCatRichDirect->getEntries();
    for (Int_t i = 0; i < nofDirects; i++) {
        HGeantRichDirect* richDirect = static_cast<HGeantRichDirect*>(fCatRichDirect->getObject(i));

        // work on delta electrons
        Int_t trkNum = richDirect->getTrack();
        HGeantKine* primary = HGeantKine::getPrimary(trkNum,(HLinearCategory*)fCatKine);
        Bool_t isSkip = workOnDeltaElectrons(primary, richDirect->getSector());
        if (isSkip) continue;

        processRichDirect(richDirect);
    }

    addNoiseHits();

    if (fStoreOnlyConvertedPhotonTrackIds == kFALSE) addAllTrackIds();

}

void HRich700Digitizer::setProbabilityForDeltaElectrons()
{
    if(fUseDeltaElectrons && fProbDeltaAccepted<1) {
        fmDeltaTrackProb.clear();
        if(fCatKine){
     	   Int_t nKine = fCatKine->getEntries();
     	   for(Int_t i=0;i<nKine;i++){
     	       HGeantKine* kine =  (HGeantKine*)fCatKine->getObject(i);
     	       Float_t mom = kine->getTotalMomentum() ;
     	       Int_t generator = kine->getGeneratorInfo();
                Bool_t isBeamIonsSim = (kine->getID() == fIonID); // beam ions simulated
                Bool_t isElMomCut = (fUseDeltaMomSelection && kine->getID() == 3 && mom < fMomMaxDeltaElecCut); // any electron < momCut (shooting with kine generator)
                Bool_t isDeltaEl = (!fUseDeltaMomSelection && kine->getID() == 3 && generator ==-3 ); // delta electrons input file source id ==-3
     	       if ( kine->getParentTrack() == 0 && (isBeamIonsSim || isElMomCut || isDeltaEl) ) {
     		       fmDeltaTrackProb[kine] = gRandom->Rndm();
     	       }
     	   }
        }
    }
}

Bool_t HRich700Digitizer::workOnDeltaElectrons(HGeantKine* primary, Int_t sector)
{
    // if return is true: skipp all delta electrons and daughter hits

    if(NULL != primary) {
        Float_t mom = primary->getTotalMomentum() ;
        Int_t generator = primary->getGeneratorInfo();
        Bool_t isBeamIonsSim = (primary->getID() == fIonID); // beam ions simulated
        Bool_t isElMomCut = (fUseDeltaMomSelection && primary->getID() == 3 && mom < fMomMaxDeltaElecCut); // any electron < momCut (shooting with kine generator)
        Bool_t isDeltaEl = (!fUseDeltaMomSelection && primary->getID() == 3 && generator ==-3 ); // delta electrons input file source id ==-3

        if( isBeamIonsSim || isElMomCut || isDeltaEl) {
            if(fUseDeltaElectrons) {
            if(mom < fMomMinDeltaCut[sector]) return kTRUE;  // skipp all delta lower than cutmom

            //-------------------------------------------------------------------
            if(fProbDeltaAccepted<1) {
                Float_t prob = 2;
                fitDelta = fmDeltaTrackProb.find(primary);
                if(fitDelta != fmDeltaTrackProb.end()){
                    prob = fitDelta->second;
                } else {
                    Error("workOnDeltaElectrons()","No primary in delta map for found! Should not happen!");
                    primary->print();
                }
                if(prob < fProbDeltaAccepted ) return kTRUE;
            }
            //-------------------------------------------------------------------
            } else {
                return kTRUE; // skipp all delta electrons and daughter hits
            }
        }
    }
    return kFALSE;
}

void HRich700Digitizer::processRichPhoton(HGeantRichPhoton* photon)
{
    if(photon == NULL) return;
    //trackId of the mother particle (eg. electron, pion etc)
    Int_t trackId = photon->getTrack();
    Double_t momTotal = photon->getEnergy();

    HRich700PmtData* pmtData = fDigiPar->getPMTData(photon->getPmtId());
    if (NULL == pmtData) {
        cout << "processRichPhoton: pmtData is NULL for pmtId:" << photon->getPmtId() << endl;;
        return;
    }
    Bool_t isDetected = fPmt.isPhotonDetected(pmtData->fPmtType, fDigiPar->getCollectionEfficiency(), momTotal);

    if (isDetected) {
        Int_t loc[3];
        fDigiPar->getLocation(photon->getPmtId(), photon->getY(), photon->getX(), loc);  // x and y have to be swapped for compatibility
        addRichCal(loc[0], loc[1], loc[2], trackId);
        addCrossTalkHit(loc[0], loc[1], loc[2], trackId);
    }
}

void HRich700Digitizer::processRichDirect(HGeantRichDirect* direct)
{
    if (direct == NULL) return;
    Int_t trackId = direct->getTrack();
    Bool_t isDetected = kTRUE; // assume that all charged particles are detected
    if (isDetected) {
    	Int_t loc[3];
    	fDigiPar->getLocation(direct->getPmtId(), direct->getY(), direct->getX(), loc); // x and y have to be swapped for compatibility
    	addRichCal(loc[0], loc[1], loc[2], trackId);
    	addCrossTalkHit(loc[0], loc[1], loc[2], trackId);
    }
}

void HRich700Digitizer::addRichCal(Int_t sector, Int_t col, Int_t row, Int_t trackId)
{
    HLocation loc;
    loc.set(3, sector, col, row);
    if (col == -1 || row == -1) return;

    HRichCalSim* calSim = static_cast<HRichCalSim*>(fCatRichCal->getObject(loc));
    if (NULL == calSim) {
    	calSim = static_cast<HRichCalSim*>(fCatRichCal->getSlot(loc));
    	if (NULL != calSim) {
    	    calSim = new(calSim) HRichCalSim;
    	    //calSim->setEventNr(gHades->getCurrentEvent()->getHeader()->getEventSeqNumber());
    	    calSim->setSector(sector);
    	    calSim->setCol(col);
    	    calSim->setRow(row);
    	    calSim->addTrackId(trackId);
    	} else {
    	}
    } else { // pixel was already fired
    	// cout << "pixel was already fired " << calSim->getNofTrackIds()<< endl;
    	if(!calSim->checkTrackId(trackId)){
    	    calSim->addTrackId(trackId);
    	}
    }
}

void HRich700Digitizer::addAllTrackIds()
{
    Int_t nofPhotons = fCatRichPhoton->getEntries();
    for (Int_t i = 0; i < nofPhotons; i++) {
    	HGeantRichPhoton* richPhoton = static_cast<HGeantRichPhoton*>(fCatRichPhoton->getObject(i));
    	if (richPhoton == NULL) continue;
    	Int_t loc[3];
    	fDigiPar->getLocation(richPhoton->getPmtId(), richPhoton->getY(), richPhoton->getX(), loc);  // x and y have to be swapped for compatibility
        addTrackId(loc[0], loc[1], loc[2], richPhoton->getTrack());
    }

    Int_t nofDirects = fCatRichDirect->getEntries();
    for (Int_t i = 0; i < nofDirects; i++) {
    	HGeantRichDirect* richDirect = static_cast<HGeantRichDirect*>(fCatRichDirect->getObject(i));
    	if (richDirect == NULL) continue;
    	Int_t loc[3];
    	fDigiPar->getLocation(richDirect->getPmtId(), richDirect->getY(), richDirect->getX(), loc);  // x and y have to be swapped for compatibility
    	addTrackId(loc[0], loc[1], loc[2], richDirect->getTrack());
    }
}

void HRich700Digitizer::addTrackId(Int_t sector, Int_t col, Int_t row, Int_t trackId)
{
    if (sector == -1 && col == -1 && row == -1) return;
    
    HLocation loc;
    loc.set(3, sector, col, row);

    HRichCalSim* calSim = static_cast<HRichCalSim*>(fCatRichCal->getObject(loc));
    if (NULL != calSim) {
    	if(!calSim->checkTrackId(trackId)){
    	    calSim->addTrackId(trackId);
    	}
    }
}

void HRich700Digitizer::addCrossTalkHit(Int_t sector, Int_t col, Int_t row, Int_t trackId)
{
    if (fDigiPar->getCrossTalkProbability() <=0. ) return;
    if (col == -1 || row == -1) return;

    Bool_t crosstalkHitDetected = kFALSE;
    vector<pair<Int_t, Int_t> > directPixels = fDigiPar->getDirectNeighbourPixels(col, row);
    vector<pair<Int_t, Int_t> > diagonalPixels = fDigiPar->getDiagonalNeighbourPixels(col, row);

    for (UInt_t i = 0; i < directPixels.size(); i++) {
    	if (gRandom->Rndm() < fDigiPar->getCrossTalkProbability() && !crosstalkHitDetected) {
    	    addRichCal(sector, directPixels[i].first, directPixels[i].second, trackId);
    	    crosstalkHitDetected = kTRUE;
    	    break;
    	}
    }

    if (!crosstalkHitDetected) {
    	for (UInt_t i = 0; i < diagonalPixels.size(); i++) {
    	    if (gRandom->Rndm() < fDigiPar->getCrossTalkProbability() / 4. && !crosstalkHitDetected) {
        		addRichCal(sector, diagonalPixels[i].first, diagonalPixels[i].second, trackId);
        		crosstalkHitDetected = kTRUE;
        		break;
    	    }
    	}
    }
}


void HRich700Digitizer::addNoiseHits()
{
    if (fDigiPar->getNofNoiseHits() <= 0) return;
    Int_t sector = 0;
    vector<pair<Int_t, Int_t> > noisePixels = fDigiPar->getNoisePixels(fDigiPar->getNofNoiseHits());
    for (UInt_t i = 0; i < noisePixels.size(); i++) {
        sector = fDigiPar->getSectorPixels(noisePixels[i].first,noisePixels[i].second);
	    addRichCal(sector, noisePixels[i].first, noisePixels[i].second, -1);
    }
}

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