#include "hrich700digiparcreator.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hevent.h"
#include "hgeantrich.h"
#include "hlinearcatiter.h"
#include "hmatrixcatiter.h"
#include "hparset.h"
#include "hspectrometer.h"
#include "richdef.h"
#include "hrich700drawhist.h"
#include "hrich700pmt.h"
#include "hrichhitsim.h"
#include "htool.h"
#include "hhistconverter.h"
#include "TCanvas.h"
#include "TH2D.h"
#include "TPad.h"
#include "TEllipse.h"
#include "TRandom.h"
#include "TLatex.h"
#include "TStyle.h"
#include "hgeantkine.h"
#include "hrich700histmanager.h"
#include "hrich700digipar.h"
#include "hrich700utils.h"
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
ClassImp(HRich700DigiParCreator)
HRich700DigiParCreator::HRich700DigiParCreator():
fEventNum(0),
fOutputFilePath("richpar_output.dat"),
fOutputHistFilePath("richpar_hist.root")
{
}
HRich700DigiParCreator::~HRich700DigiParCreator()
{
}
Bool_t HRich700DigiParCreator::init()
{
fCatKine = gHades->getCurrentEvent()->getCategory(catGeantKine);
if (NULL == fCatKine) {
Error("init", "Initializatin of kine category failed, returning...");
return kFALSE;
}
fCatRichHit = gHades->getCurrentEvent()->getCategory(catRichHit);
if (NULL == fCatRichHit) {
Error("init", "Initializatin of RICH hit category failed, returning...");
return kFALSE;
}
fDigiPar = (HRich700DigiPar*) gHades->getRuntimeDb()->getContainer("Rich700DigiPar");
if(fDigiPar == NULL) {
Error("init", "Can not retrieve HRich700DigiPar");
return kFALSE;
}
fRingFinderPar = (HRich700RingFinderPar*) gHades->getRuntimeDb()->getContainer("Rich700RingFinderPar");
if(fRingFinderPar == NULL) {
Error("init", "Can not retrieve fRingFinderPar");
return kFALSE;
}
initHist();
return kTRUE;
}
void HRich700DigiParCreator::initHist()
{
for(Int_t i = 0; i < knPmt; i++){
fhPhi[i] = new TH1F(Form("fhPhi[%i]", i), Form("fhPhi[%i];Phi [deg];Counter", i), 1440, 0, 360);
fhTheta[i] = new TH1F(Form("fhTheta[%i]", i), Form("fhTheta[%i];Theta [deg];Counter", i), 360, 0, 90);
}
const Double_t hMinXY = -660.;
const Double_t hMaxXY = 660;
fhXYCounter = new TH2F("fhXYCounter", "fhXYCounter;X [mm];Y [mm];Counter", knXY, hMinXY, hMaxXY, knXY, hMinXY, hMaxXY);
fhXYPhiMean = new TH2F("fhXYPhiMean", "fhXYPhiMean;X [mm];Y [mm];Phi_{mean} [deg]", knXY, hMinXY, hMaxXY, knXY, hMinXY, hMaxXY);
fhXYThetaMean = new TH2F("fhXYThetaMean", "fhXYThetaMean;X [mm];Y [mm];Theta_{mean} [deg]", knXY, hMinXY, hMaxXY, knXY, hMinXY, hMaxXY);
fhXYPhiRms = new TH2F("fhXYPhiRms", "fhXYPhiRms;X [mm];Y [mm];Phi_{RMS} [deg]", knXY, hMinXY, hMaxXY, knXY, hMinXY, hMaxXY);
fhXYThetaRms = new TH2F("fhXYThetaRms", "fhXYThetaRms;X [mm];Y [mm];Theta_{RMS} [deg]", knXY, hMinXY, hMaxXY, knXY, hMinXY, hMaxXY);
for(Int_t i = 0; i < knXY; i++){
for(Int_t j = 0; j < knXY; j++){
fhPhiXY[i][j] = new TH1F(Form("fhPhiXY[%i][%i]", i, j), Form("fhPhiXY[%i][%i];Phi [deg];Counter", i, j), 1440, 0, 360);
fhThetaXY[i][j] = new TH1F(Form("fhThetaXY[%i][%i]", i, j), Form("fhThetaXY[%i][%i];Theta [deg];Counter", i, j), 360, 0, 90);
}
}
const Double_t hMinInd = -0.5;
const Double_t hMaxInd = 23.5;
const Int_t nofBinsInd = 24;
fhXYIndCounter = new TH2F("fhXYIndCounter", "fhXYIndCounter;PMT X_{ind};PMT Y_{ind};Counter", nofBinsInd, hMinInd, hMaxInd, nofBinsInd, hMinInd, hMaxInd);
fhXYIndPhiMean = new TH2F("fhXYIndPhiMean", "fhXYIndPhiMean;PMT X_{ind};PMT Y_{ind};Phi_{mean} [deg]", nofBinsInd, hMinInd, hMaxInd, nofBinsInd, hMinInd, hMaxInd);
fhXYIndThetaMean = new TH2F("fhXYIndThetaMean", "fhXYIndThetaMean;PMT X_{ind};PMT Y_{ind};Theta_{mean} [deg]", nofBinsInd, hMinInd, hMaxInd, nofBinsInd, hMinInd, hMaxInd);
fhXYIndPhiRms = new TH2F("fhXYIndPhiRms", "fhXYIndPhiRms;PMT X_{ind};PMT Y_{ind};Phi_{RMS} [deg]", nofBinsInd, hMinInd, hMaxInd, nofBinsInd, hMinInd, hMaxInd);
fhXYIndThetaRms = new TH2F("fhXYIndThetaRms", "fhXYIndThetaRms;PMT X_{ind};PMT Y_{ind};Theta_{RMS} [deg]", nofBinsInd, hMinInd, hMaxInd, nofBinsInd, hMinInd, hMaxInd);
fhXYPhiInterpolation = new TH2F("fhXYPhiInterpolation", "fhXYPhiInterpolation;X [mm];Y [mm];Phi", 200, -636, 636, 200, -636, 636);
fhXYThetaInterpolation = new TH2F("fhXYThetaInterpolation", "fhXYThetaInterpolation;X [mm];Y[mm];Theta", 200, -636, 636, 200, -636, 636);
}
Bool_t HRich700DigiParCreator::reinit()
{
return kTRUE;
}
Int_t HRich700DigiParCreator::execute()
{
HRichDrawHist::SetDefaultDrawStyle();
fEventNum++;
if (fEventNum % 10000 == 0) cout << "HRich700DigiParCreator::execute eventNum " << fEventNum << endl;
processEvent();
return 0;
}
void HRich700DigiParCreator::processEvent()
{
Int_t nofRichHits = fCatRichHit->getEntries();
for (Int_t i = 0; i < nofRichHits; i++) {
HRichHitSim* richHit = (HRichHitSim*) fCatRichHit->getObject(i);
if (richHit == NULL) continue;
HGeantKine* kine = (HGeantKine*)fCatKine->getObject(richHit->track1 - 1);
if (!isPrimaryElectron(kine)) continue;
Int_t pmtId = fDigiPar->getPMTId((Float_t)richHit->fRich700CircleCenterX, (Float_t)richHit->fRich700CircleCenterY);
if (pmtId < 0) {
continue;
}
Float_t theta = 0;
Float_t phi = 0;
Int_t gsec = kine->getPhiThetaDeg(theta, phi);
HRich700PmtData* richdata = fDigiPar->getPMTData(pmtId);
Double_t ringX = richHit->fRich700CircleCenterX;
Double_t ringY = richHit->fRich700CircleCenterY;
Int_t sec = fDigiPar->getSector(ringX, ringY);
Bool_t isGoodXdY = ( fabs(ringX - richdata->fX) < 5. && fabs(ringY - richdata->fY) < 5. );
if(isGoodXdY && richHit->fRich700CircleChi2 < 500. && sec == gsec){
fhPhi[pmtId]->Fill(phi);
fhTheta[pmtId]->Fill(theta);
fhXYIndCounter->Fill(richdata->fIndX, richdata->fIndY);
}
if(richHit->fRich700CircleChi2 < 500. && sec == gsec){
fhXYCounter->Fill(ringX, ringY);
Int_t xBin = fhXYCounter->GetXaxis()->FindBin(ringX) - 1;
Int_t yBin = fhXYCounter->GetYaxis()->FindBin(ringY) - 1;
if (xBin < 0 || xBin >= knXY || yBin < 0 || yBin >= knXY) {
} else {
fhPhiXY[xBin][yBin]->Fill(phi);
fhThetaXY[xBin][yBin]->Fill(theta);
}
}
}
}
Double_t HRich700DigiParCreator::calculateHistMean(TH1* hist, Double_t minVal, Double_t maxVal)
{
if (hist == NULL) return 0.;
Double_t width = 5.;
Double_t mean = hist->GetMean();
hist->GetXaxis()->SetRangeUser(mean > width? mean - width : minVal, mean < maxVal - width? mean + width : maxVal);
mean = hist->GetMean();
width = 5. * hist->GetRMS();
hist->GetXaxis()->SetRangeUser(mean > width? mean - width: minVal, mean < maxVal - width? mean + width : maxVal);
return hist->GetMean();
}
void HRich700DigiParCreator::createOutputFile()
{
string rfStr = fRingFinderPar->getStringForParTxtFile();
string digiStr = fDigiPar->getStringForParTxtFile();
string digiPmtIdStr = createStringPhiThetaPmtId();
string digiXYStr = createStringPhiThetaXY();
ofstream fout;
fout.open(fOutputFilePath.c_str());
fout << rfStr << digiStr << digiPmtIdStr << digiXYStr;
fout << "##############################################################################" <<endl;
fout.close();
}
string HRich700DigiParCreator::createStringPhiThetaPmtId()
{
ostringstream ss;
ss <<"fArrayPmt: Double_t \\" << endl;
for(Int_t i = 0; i < knPmt; i++){
HRich700PmtData* pd = fDigiPar->getPMTData(i);
if(pd == NULL){
cout<<" NO pmt for id "<< i <<endl;
continue;
}
Double_t phiMean = calculateHistMean(fhPhi[i], 0., 360.);
Double_t thetaMean = calculateHistMean(fhTheta[i], 0., 90.);
if (fhPhi[i]->Integral() < 4){
phiMean = 0.;
thetaMean = 0.;
}
ss << pd->fPmtId << " " << pd->fIndX << " " << pd->fIndY << " " << pd->fX << " "
<< pd->fY << " " << pd->fZ << " " << pd->fPmtType << " " << thetaMean << " "
<< phiMean << " \\" << endl;
fhXYIndPhiMean->Fill(pd->fIndX, pd->fIndY, phiMean);
fhXYIndThetaMean->Fill(pd->fIndX, pd->fIndY, thetaMean);
fhXYIndPhiRms->Fill(pd->fIndX, pd->fIndY, fhPhi[i]->GetRMS());
fhXYIndThetaRms->Fill(pd->fIndX, pd->fIndY, fhTheta[i]->GetRMS());
}
string str = ss.str().substr(0, ss.str().size() - 3);
str = string(str + "\n");
cout << str << endl;
return str;
}
string HRich700DigiParCreator::createStringPhiThetaXY()
{
ostringstream ss;
for(Int_t i = 0; i < knXY; i++){
for(Int_t j = 0; j < knXY; j++){
TH1F* hth = fhThetaXY[i][j];
TH1F* hph = fhPhiXY[i][j];
Double_t phiMean = calculateHistMean(hph, 0., 360.);
Double_t thetaMean = calculateHistMean(hth, 0., 90.);
if (hph->Integral() < 4){
phiMean = 0.;
thetaMean = 0.;
}
fhXYPhiMean->SetBinContent(i+1, j+1, phiMean);
fhXYThetaMean->SetBinContent(i+1, j+1, thetaMean);
fhXYPhiRms->SetBinContent(i+1, j+1, hph->GetRMS());
fhXYThetaRms->SetBinContent(i+1, j+1, hth->GetRMS());
}
}
TArrayD linDataPhi;
TArrayD linDataTheta;
HHistConverter::fillArray(fhXYPhiMean, linDataPhi, "fArrayPhiMean", 10, 10, kFALSE);
HHistConverter::fillArray(fhXYThetaMean, linDataTheta, "fArrayThetaMean", 10, 10, kFALSE);
HHistConverter::writeArray(ss, "fArrayPhiMean", linDataPhi, 10);
HHistConverter::writeArray(ss, "fArrayThetaMean", linDataTheta, 10);
return ss.str();
}
void HRich700DigiParCreator::fillInterpolatedHist()
{
for(Int_t i = 0; i < 200; i++){
for(Int_t j = 0; j < 200; j++){
Float_t x = fhXYCounter->GetXaxis()->GetBinCenter(i+1);
Float_t y = fhXYCounter->GetYaxis()->GetBinCenter(j+1);
Float_t phi,theta;
if(fDigiPar->getInterpolatedThetaPhiPMT(x, y, theta, phi)){
fhXYPhiInterpolation->SetBinContent(i+1, j+1, phi) ;
fhXYThetaInterpolation->SetBinContent(i+1, j+1, theta) ;
}
}
}
}
void HRich700DigiParCreator::writeHist()
{
TFile* out = new TFile(fOutputHistFilePath.c_str(), "RECREATE");
out->cd();
fhXYIndCounter->SetOption("colz");
fhXYIndPhiMean->SetOption("colz");
fhXYIndThetaMean->SetOption("colz");
fhXYIndPhiRms->SetOption("colz");
fhXYIndThetaRms->SetOption("colz");
fhXYPhiInterpolation->SetOption("colz");
fhXYThetaInterpolation->SetOption("colz");
fhXYCounter->SetOption("colz");
fhXYPhiMean->SetOption("colz");
fhXYThetaMean->SetOption("colz");
fhXYPhiRms->SetOption("colz");
fhXYThetaRms->SetOption("colz");
fhXYIndCounter->Write();
fhXYIndPhiMean->Write();
fhXYIndThetaMean->Write();
fhXYIndPhiRms->Write();
fhXYIndThetaRms->Write();
fhXYPhiInterpolation->Write();
fhXYThetaInterpolation->Write();
fhXYCounter->Write();
fhXYPhiMean->Write();
fhXYThetaMean->Write();
fhXYPhiRms->Write();
fhXYThetaRms->Write();
HTool::changeToDir("phi");
for(Int_t i = 0; i < knPmt; i++){
fhPhi[i]->Write();
}
out->cd();
HTool::changeToDir("theta");
for(Int_t i = 0; i < knPmt;i++){
fhTheta[i]->Write();
}
out->cd();
HTool::changeToDir("thetaxy");
for(Int_t i = 0; i < knXY; i++){
for(Int_t j=0; j < knXY; j++){
fhThetaXY[i][j]->Write();
}
}
out->cd();
HTool::changeToDir("phixy");
for(Int_t i = 0; i < knXY; i++){
for(Int_t j = 0; j < knXY; j++){
fhPhiXY[i][j]->Write();
}
}
out->Save();
out->Write();
}
Bool_t HRich700DigiParCreator::isPrimaryElectron(
HGeantKine* kine)
{
if (kine == NULL) return kFALSE;
return (kine->getID() == 2 || kine->getID() == 3) && kine->isPrimary();
}
Bool_t HRich700DigiParCreator::finalize()
{
createOutputFile();
fillInterpolatedHist();
writeHist();
cout << "Output files:" << endl;
cout << "Par file:" << fOutputFilePath << endl;
cout << "Histograms:" << fOutputHistFilePath << endl;
return kTRUE;
}
void HRich700DigiParCreator::drawHist()
{
{
fHM->CreateCanvas("hrichdigipar_fhXYCounter", "hrichdigipar_fhXYCounter", 1000, 800);
HRichDrawHist::DrawH2(fHM->H2("fhXYCounter"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhXYMean", "hrichdigipar_fhXYMean", 1500, 700);
c->Divide(2,1);
c->cd(1);
HRichDrawHist::DrawH2(fHM->H2("fhXYPhiMean"));
c->cd(2);
HRichDrawHist::DrawH2(fHM->H2("fhXYThetaMean"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhXYRms", "hrichdigipar_fhXYRms", 1500, 700);
c->Divide(2,1);
c->cd(1);
fHM->H2("fhXYPhiRms")->GetZaxis()->SetRangeUser(0., 2.);
HRichDrawHist::DrawH2(fHM->H2("fhXYPhiRms"));
c->cd(2);
fHM->H2("fhXYThetaRms")->GetZaxis()->SetRangeUser(0., 2.);
HRichDrawHist::DrawH2(fHM->H2("fhXYThetaRms"));
}
{
fHM->CreateCanvas("hrichdigipar_fhXYIndCounter", "hrichdigipar_fhXYIndCounter", 1000, 800);
HRichDrawHist::DrawH2(fHM->H2("fhXYIndCounter"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhXYIndMean", "hrichdigipar_fhXYIndMean", 1500, 700);
c->Divide(2,1);
c->cd(1);
HRichDrawHist::DrawH2(fHM->H2("fhXYIndPhiMean"));
c->cd(2);
HRichDrawHist::DrawH2(fHM->H2("fhXYIndThetaMean"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhXYIndRms", "hrichdigipar_fhXYIndRms", 1500, 700);
c->Divide(2,1);
c->cd(1);
HRichDrawHist::DrawH2(fHM->H2("fhXYIndPhiRms"));
c->cd(2);
HRichDrawHist::DrawH2(fHM->H2("fhXYIndThetaRms"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhXYInterpolation", "hrichdigipar_fhXYInterpolation", 1500, 700);
c->Divide(2,1);
c->cd(1);
HRichDrawHist::DrawH2(fHM->H2("fhXYPhiInterpolation"));
c->cd(2);
HRichDrawHist::DrawH2(fHM->H2("fhXYThetaInterpolation"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhPhi_fhTheta", "hrichdigipar_fhPhi_fhTheta", 1500, 700);
c->Divide(3,2);
c->cd(1);
HRichDrawHist::DrawH1(fHM->H1("fhPhi[183]"));
c->cd(2);
HRichDrawHist::DrawH1(fHM->H1("fhPhi[125]"));
c->cd(3);
HRichDrawHist::DrawH1(fHM->H1("fhPhi[350]"));
c->cd(4);
HRichDrawHist::DrawH1(fHM->H1("fhTheta[200]"));
c->cd(5);
HRichDrawHist::DrawH1(fHM->H1("fhTheta[400]"));
c->cd(6);
HRichDrawHist::DrawH1(fHM->H1("fhTheta[500]"));
}
{
TCanvas* c = fHM->CreateCanvas("hrichdigipar_fhPhiXY_fhThetaXY", "hrichdigipar_fhPhiXY_fhThetaXY", 1500, 700);
c->Divide(3,2);
c->cd(1);
HRichDrawHist::DrawH1(fHM->H1("fhPhiXY[183][100]"));
c->cd(2);
HRichDrawHist::DrawH1(fHM->H1("fhPhiXY[125][200]"));
c->cd(3);
HRichDrawHist::DrawH1(fHM->H1("fhPhiXY[50][50]"));
c->cd(4);
HRichDrawHist::DrawH1(fHM->H1("fhThetaXY[200][77]"));
c->cd(5);
HRichDrawHist::DrawH1(fHM->H1("fhThetaXY[156][99]"));
c->cd(6);
HRichDrawHist::DrawH1(fHM->H1("fhThetaXY[69][70]"));
}
}
void HRich700DigiParCreator::drawFromFile( const string& fileName, const string& outputDir)
{
HRichDrawHist::SetDefaultDrawStyle();
gStyle->SetOptTitle(1);
fHM = new HRich700HistManager();
TFile* file = new TFile(fileName.c_str());
fHM->ReadFromFile(file);
drawHist();
fHM->SaveCanvasToImage(string(outputDir + "/"));
}
hrich700digiparcreator.cc:1 hrich700digiparcreator.cc:2 hrich700digiparcreator.cc:3 hrich700digiparcreator.cc:4 hrich700digiparcreator.cc:5 hrich700digiparcreator.cc:6 hrich700digiparcreator.cc:7 hrich700digiparcreator.cc:8 hrich700digiparcreator.cc:9 hrich700digiparcreator.cc:10 hrich700digiparcreator.cc:11 hrich700digiparcreator.cc:12 hrich700digiparcreator.cc:13 hrich700digiparcreator.cc:14 hrich700digiparcreator.cc:15 hrich700digiparcreator.cc:16 hrich700digiparcreator.cc:17 hrich700digiparcreator.cc:18 hrich700digiparcreator.cc:19 hrich700digiparcreator.cc:20 hrich700digiparcreator.cc:21 hrich700digiparcreator.cc:22 hrich700digiparcreator.cc:23 hrich700digiparcreator.cc:24 hrich700digiparcreator.cc:25 hrich700digiparcreator.cc:26 hrich700digiparcreator.cc:27 hrich700digiparcreator.cc:28 hrich700digiparcreator.cc:29 hrich700digiparcreator.cc:30 hrich700digiparcreator.cc:31 hrich700digiparcreator.cc:32 hrich700digiparcreator.cc:33 hrich700digiparcreator.cc:34 hrich700digiparcreator.cc:35 hrich700digiparcreator.cc:36 hrich700digiparcreator.cc:37 hrich700digiparcreator.cc:38 hrich700digiparcreator.cc:39 hrich700digiparcreator.cc:40 hrich700digiparcreator.cc:41 hrich700digiparcreator.cc:42 hrich700digiparcreator.cc:43 hrich700digiparcreator.cc:44 hrich700digiparcreator.cc:45 hrich700digiparcreator.cc:46 hrich700digiparcreator.cc:47 hrich700digiparcreator.cc:48 hrich700digiparcreator.cc:49 hrich700digiparcreator.cc:50 hrich700digiparcreator.cc:51 hrich700digiparcreator.cc:52 hrich700digiparcreator.cc:53 hrich700digiparcreator.cc:54 hrich700digiparcreator.cc:55 hrich700digiparcreator.cc:56 hrich700digiparcreator.cc:57 hrich700digiparcreator.cc:58 hrich700digiparcreator.cc:59 hrich700digiparcreator.cc:60 hrich700digiparcreator.cc:61 hrich700digiparcreator.cc:62 hrich700digiparcreator.cc:63 hrich700digiparcreator.cc:64 hrich700digiparcreator.cc:65 hrich700digiparcreator.cc:66 hrich700digiparcreator.cc:67 hrich700digiparcreator.cc:68 hrich700digiparcreator.cc:69 hrich700digiparcreator.cc:70 hrich700digiparcreator.cc:71 hrich700digiparcreator.cc:72 hrich700digiparcreator.cc:73 hrich700digiparcreator.cc:74 hrich700digiparcreator.cc:75 hrich700digiparcreator.cc:76 hrich700digiparcreator.cc:77 hrich700digiparcreator.cc:78 hrich700digiparcreator.cc:79 hrich700digiparcreator.cc:80 hrich700digiparcreator.cc:81 hrich700digiparcreator.cc:82 hrich700digiparcreator.cc:83 hrich700digiparcreator.cc:84 hrich700digiparcreator.cc:85 hrich700digiparcreator.cc:86 hrich700digiparcreator.cc:87 hrich700digiparcreator.cc:88 hrich700digiparcreator.cc:89 hrich700digiparcreator.cc:90 hrich700digiparcreator.cc:91 hrich700digiparcreator.cc:92 hrich700digiparcreator.cc:93 hrich700digiparcreator.cc:94 hrich700digiparcreator.cc:95 hrich700digiparcreator.cc:96 hrich700digiparcreator.cc:97 hrich700digiparcreator.cc:98 hrich700digiparcreator.cc:99 hrich700digiparcreator.cc:100 hrich700digiparcreator.cc:101 hrich700digiparcreator.cc:102 hrich700digiparcreator.cc:103 hrich700digiparcreator.cc:104 hrich700digiparcreator.cc:105 hrich700digiparcreator.cc:106 hrich700digiparcreator.cc:107 hrich700digiparcreator.cc:108 hrich700digiparcreator.cc:109 hrich700digiparcreator.cc:110 hrich700digiparcreator.cc:111 hrich700digiparcreator.cc:112 hrich700digiparcreator.cc:113 hrich700digiparcreator.cc:114 hrich700digiparcreator.cc:115 hrich700digiparcreator.cc:116 hrich700digiparcreator.cc:117 hrich700digiparcreator.cc:118 hrich700digiparcreator.cc:119 hrich700digiparcreator.cc:120 hrich700digiparcreator.cc:121 hrich700digiparcreator.cc:122 hrich700digiparcreator.cc:123 hrich700digiparcreator.cc:124 hrich700digiparcreator.cc:125 hrich700digiparcreator.cc:126 hrich700digiparcreator.cc:127 hrich700digiparcreator.cc:128 hrich700digiparcreator.cc:129 hrich700digiparcreator.cc:130 hrich700digiparcreator.cc:131 hrich700digiparcreator.cc:132 hrich700digiparcreator.cc:133 hrich700digiparcreator.cc:134 hrich700digiparcreator.cc:135 hrich700digiparcreator.cc:136 hrich700digiparcreator.cc:137 hrich700digiparcreator.cc:138 hrich700digiparcreator.cc:139 hrich700digiparcreator.cc:140 hrich700digiparcreator.cc:141 hrich700digiparcreator.cc:142 hrich700digiparcreator.cc:143 hrich700digiparcreator.cc:144 hrich700digiparcreator.cc:145 hrich700digiparcreator.cc:146 hrich700digiparcreator.cc:147 hrich700digiparcreator.cc:148 hrich700digiparcreator.cc:149 hrich700digiparcreator.cc:150 hrich700digiparcreator.cc:151 hrich700digiparcreator.cc:152 hrich700digiparcreator.cc:153 hrich700digiparcreator.cc:154 hrich700digiparcreator.cc:155 hrich700digiparcreator.cc:156 hrich700digiparcreator.cc:157 hrich700digiparcreator.cc:158 hrich700digiparcreator.cc:159 hrich700digiparcreator.cc:160 hrich700digiparcreator.cc:161 hrich700digiparcreator.cc:162 hrich700digiparcreator.cc:163 hrich700digiparcreator.cc:164 hrich700digiparcreator.cc:165 hrich700digiparcreator.cc:166 hrich700digiparcreator.cc:167 hrich700digiparcreator.cc:168 hrich700digiparcreator.cc:169 hrich700digiparcreator.cc:170 hrich700digiparcreator.cc:171 hrich700digiparcreator.cc:172 hrich700digiparcreator.cc:173 hrich700digiparcreator.cc:174 hrich700digiparcreator.cc:175 hrich700digiparcreator.cc:176 hrich700digiparcreator.cc:177 hrich700digiparcreator.cc:178 hrich700digiparcreator.cc:179 hrich700digiparcreator.cc:180 hrich700digiparcreator.cc:181 hrich700digiparcreator.cc:182 hrich700digiparcreator.cc:183 hrich700digiparcreator.cc:184 hrich700digiparcreator.cc:185 hrich700digiparcreator.cc:186 hrich700digiparcreator.cc:187 hrich700digiparcreator.cc:188 hrich700digiparcreator.cc:189 hrich700digiparcreator.cc:190 hrich700digiparcreator.cc:191 hrich700digiparcreator.cc:192 hrich700digiparcreator.cc:193 hrich700digiparcreator.cc:194 hrich700digiparcreator.cc:195 hrich700digiparcreator.cc:196 hrich700digiparcreator.cc:197 hrich700digiparcreator.cc:198 hrich700digiparcreator.cc:199 hrich700digiparcreator.cc:200 hrich700digiparcreator.cc:201 hrich700digiparcreator.cc:202 hrich700digiparcreator.cc:203 hrich700digiparcreator.cc:204 hrich700digiparcreator.cc:205 hrich700digiparcreator.cc:206 hrich700digiparcreator.cc:207 hrich700digiparcreator.cc:208 hrich700digiparcreator.cc:209 hrich700digiparcreator.cc:210 hrich700digiparcreator.cc:211 hrich700digiparcreator.cc:212 hrich700digiparcreator.cc:213 hrich700digiparcreator.cc:214 hrich700digiparcreator.cc:215 hrich700digiparcreator.cc:216 hrich700digiparcreator.cc:217 hrich700digiparcreator.cc:218 hrich700digiparcreator.cc:219 hrich700digiparcreator.cc:220 hrich700digiparcreator.cc:221 hrich700digiparcreator.cc:222 hrich700digiparcreator.cc:223 hrich700digiparcreator.cc:224 hrich700digiparcreator.cc:225 hrich700digiparcreator.cc:226 hrich700digiparcreator.cc:227 hrich700digiparcreator.cc:228 hrich700digiparcreator.cc:229 hrich700digiparcreator.cc:230 hrich700digiparcreator.cc:231 hrich700digiparcreator.cc:232 hrich700digiparcreator.cc:233 hrich700digiparcreator.cc:234 hrich700digiparcreator.cc:235 hrich700digiparcreator.cc:236 hrich700digiparcreator.cc:237 hrich700digiparcreator.cc:238 hrich700digiparcreator.cc:239 hrich700digiparcreator.cc:240 hrich700digiparcreator.cc:241 hrich700digiparcreator.cc:242 hrich700digiparcreator.cc:243 hrich700digiparcreator.cc:244 hrich700digiparcreator.cc:245 hrich700digiparcreator.cc:246 hrich700digiparcreator.cc:247 hrich700digiparcreator.cc:248 hrich700digiparcreator.cc:249 hrich700digiparcreator.cc:250 hrich700digiparcreator.cc:251 hrich700digiparcreator.cc:252 hrich700digiparcreator.cc:253 hrich700digiparcreator.cc:254 hrich700digiparcreator.cc:255 hrich700digiparcreator.cc:256 hrich700digiparcreator.cc:257 hrich700digiparcreator.cc:258 hrich700digiparcreator.cc:259 hrich700digiparcreator.cc:260 hrich700digiparcreator.cc:261 hrich700digiparcreator.cc:262 hrich700digiparcreator.cc:263 hrich700digiparcreator.cc:264 hrich700digiparcreator.cc:265 hrich700digiparcreator.cc:266 hrich700digiparcreator.cc:267 hrich700digiparcreator.cc:268 hrich700digiparcreator.cc:269 hrich700digiparcreator.cc:270 hrich700digiparcreator.cc:271 hrich700digiparcreator.cc:272 hrich700digiparcreator.cc:273 hrich700digiparcreator.cc:274 hrich700digiparcreator.cc:275 hrich700digiparcreator.cc:276 hrich700digiparcreator.cc:277 hrich700digiparcreator.cc:278 hrich700digiparcreator.cc:279 hrich700digiparcreator.cc:280 hrich700digiparcreator.cc:281 hrich700digiparcreator.cc:282 hrich700digiparcreator.cc:283 hrich700digiparcreator.cc:284 hrich700digiparcreator.cc:285 hrich700digiparcreator.cc:286 hrich700digiparcreator.cc:287 hrich700digiparcreator.cc:288 hrich700digiparcreator.cc:289 hrich700digiparcreator.cc:290 hrich700digiparcreator.cc:291 hrich700digiparcreator.cc:292 hrich700digiparcreator.cc:293 hrich700digiparcreator.cc:294 hrich700digiparcreator.cc:295 hrich700digiparcreator.cc:296 hrich700digiparcreator.cc:297 hrich700digiparcreator.cc:298 hrich700digiparcreator.cc:299 hrich700digiparcreator.cc:300 hrich700digiparcreator.cc:301 hrich700digiparcreator.cc:302 hrich700digiparcreator.cc:303 hrich700digiparcreator.cc:304 hrich700digiparcreator.cc:305 hrich700digiparcreator.cc:306 hrich700digiparcreator.cc:307 hrich700digiparcreator.cc:308 hrich700digiparcreator.cc:309 hrich700digiparcreator.cc:310 hrich700digiparcreator.cc:311 hrich700digiparcreator.cc:312 hrich700digiparcreator.cc:313 hrich700digiparcreator.cc:314 hrich700digiparcreator.cc:315 hrich700digiparcreator.cc:316 hrich700digiparcreator.cc:317 hrich700digiparcreator.cc:318 hrich700digiparcreator.cc:319 hrich700digiparcreator.cc:320 hrich700digiparcreator.cc:321 hrich700digiparcreator.cc:322 hrich700digiparcreator.cc:323 hrich700digiparcreator.cc:324 hrich700digiparcreator.cc:325 hrich700digiparcreator.cc:326 hrich700digiparcreator.cc:327 hrich700digiparcreator.cc:328 hrich700digiparcreator.cc:329 hrich700digiparcreator.cc:330 hrich700digiparcreator.cc:331 hrich700digiparcreator.cc:332 hrich700digiparcreator.cc:333 hrich700digiparcreator.cc:334 hrich700digiparcreator.cc:335 hrich700digiparcreator.cc:336 hrich700digiparcreator.cc:337 hrich700digiparcreator.cc:338 hrich700digiparcreator.cc:339 hrich700digiparcreator.cc:340 hrich700digiparcreator.cc:341 hrich700digiparcreator.cc:342 hrich700digiparcreator.cc:343 hrich700digiparcreator.cc:344 hrich700digiparcreator.cc:345 hrich700digiparcreator.cc:346 hrich700digiparcreator.cc:347 hrich700digiparcreator.cc:348 hrich700digiparcreator.cc:349 hrich700digiparcreator.cc:350 hrich700digiparcreator.cc:351 hrich700digiparcreator.cc:352 hrich700digiparcreator.cc:353 hrich700digiparcreator.cc:354 hrich700digiparcreator.cc:355 hrich700digiparcreator.cc:356 hrich700digiparcreator.cc:357 hrich700digiparcreator.cc:358 hrich700digiparcreator.cc:359 hrich700digiparcreator.cc:360 hrich700digiparcreator.cc:361 hrich700digiparcreator.cc:362 hrich700digiparcreator.cc:363 hrich700digiparcreator.cc:364 hrich700digiparcreator.cc:365 hrich700digiparcreator.cc:366 hrich700digiparcreator.cc:367 hrich700digiparcreator.cc:368 hrich700digiparcreator.cc:369 hrich700digiparcreator.cc:370 hrich700digiparcreator.cc:371 hrich700digiparcreator.cc:372 hrich700digiparcreator.cc:373 hrich700digiparcreator.cc:374 hrich700digiparcreator.cc:375 hrich700digiparcreator.cc:376 hrich700digiparcreator.cc:377 hrich700digiparcreator.cc:378 hrich700digiparcreator.cc:379 hrich700digiparcreator.cc:380 hrich700digiparcreator.cc:381 hrich700digiparcreator.cc:382 hrich700digiparcreator.cc:383 hrich700digiparcreator.cc:384 hrich700digiparcreator.cc:385 hrich700digiparcreator.cc:386 hrich700digiparcreator.cc:387 hrich700digiparcreator.cc:388 hrich700digiparcreator.cc:389 hrich700digiparcreator.cc:390 hrich700digiparcreator.cc:391 hrich700digiparcreator.cc:392 hrich700digiparcreator.cc:393 hrich700digiparcreator.cc:394 hrich700digiparcreator.cc:395 hrich700digiparcreator.cc:396 hrich700digiparcreator.cc:397 hrich700digiparcreator.cc:398 hrich700digiparcreator.cc:399 hrich700digiparcreator.cc:400 hrich700digiparcreator.cc:401 hrich700digiparcreator.cc:402 hrich700digiparcreator.cc:403 hrich700digiparcreator.cc:404 hrich700digiparcreator.cc:405 hrich700digiparcreator.cc:406 hrich700digiparcreator.cc:407 hrich700digiparcreator.cc:408 hrich700digiparcreator.cc:409 hrich700digiparcreator.cc:410 hrich700digiparcreator.cc:411 hrich700digiparcreator.cc:412 hrich700digiparcreator.cc:413 hrich700digiparcreator.cc:414 hrich700digiparcreator.cc:415 hrich700digiparcreator.cc:416 hrich700digiparcreator.cc:417 hrich700digiparcreator.cc:418 hrich700digiparcreator.cc:419 hrich700digiparcreator.cc:420 hrich700digiparcreator.cc:421 hrich700digiparcreator.cc:422 hrich700digiparcreator.cc:423 hrich700digiparcreator.cc:424 hrich700digiparcreator.cc:425 hrich700digiparcreator.cc:426 hrich700digiparcreator.cc:427 hrich700digiparcreator.cc:428 hrich700digiparcreator.cc:429 hrich700digiparcreator.cc:430 hrich700digiparcreator.cc:431 hrich700digiparcreator.cc:432 hrich700digiparcreator.cc:433 hrich700digiparcreator.cc:434 hrich700digiparcreator.cc:435 hrich700digiparcreator.cc:436 hrich700digiparcreator.cc:437 hrich700digiparcreator.cc:438 hrich700digiparcreator.cc:439 hrich700digiparcreator.cc:440 hrich700digiparcreator.cc:441 hrich700digiparcreator.cc:442 hrich700digiparcreator.cc:443 hrich700digiparcreator.cc:444 hrich700digiparcreator.cc:445 hrich700digiparcreator.cc:446 hrich700digiparcreator.cc:447 hrich700digiparcreator.cc:448 hrich700digiparcreator.cc:449 hrich700digiparcreator.cc:450 hrich700digiparcreator.cc:451 hrich700digiparcreator.cc:452 hrich700digiparcreator.cc:453 hrich700digiparcreator.cc:454 hrich700digiparcreator.cc:455 hrich700digiparcreator.cc:456 hrich700digiparcreator.cc:457 hrich700digiparcreator.cc:458 hrich700digiparcreator.cc:459 hrich700digiparcreator.cc:460 hrich700digiparcreator.cc:461 hrich700digiparcreator.cc:462 hrich700digiparcreator.cc:463 hrich700digiparcreator.cc:464 hrich700digiparcreator.cc:465 hrich700digiparcreator.cc:466 hrich700digiparcreator.cc:467 hrich700digiparcreator.cc:468 hrich700digiparcreator.cc:469 hrich700digiparcreator.cc:470 hrich700digiparcreator.cc:471 hrich700digiparcreator.cc:472 hrich700digiparcreator.cc:473 hrich700digiparcreator.cc:474 hrich700digiparcreator.cc:475 hrich700digiparcreator.cc:476 hrich700digiparcreator.cc:477 hrich700digiparcreator.cc:478 hrich700digiparcreator.cc:479 hrich700digiparcreator.cc:480 hrich700digiparcreator.cc:481 hrich700digiparcreator.cc:482 hrich700digiparcreator.cc:483 hrich700digiparcreator.cc:484 hrich700digiparcreator.cc:485 hrich700digiparcreator.cc:486 hrich700digiparcreator.cc:487 hrich700digiparcreator.cc:488 hrich700digiparcreator.cc:489 hrich700digiparcreator.cc:490 hrich700digiparcreator.cc:491 hrich700digiparcreator.cc:492 hrich700digiparcreator.cc:493 hrich700digiparcreator.cc:494 hrich700digiparcreator.cc:495 hrich700digiparcreator.cc:496 hrich700digiparcreator.cc:497 hrich700digiparcreator.cc:498 hrich700digiparcreator.cc:499 hrich700digiparcreator.cc:500 hrich700digiparcreator.cc:501 hrich700digiparcreator.cc:502 hrich700digiparcreator.cc:503 hrich700digiparcreator.cc:504 hrich700digiparcreator.cc:505 hrich700digiparcreator.cc:506 hrich700digiparcreator.cc:507 hrich700digiparcreator.cc:508 hrich700digiparcreator.cc:509 hrich700digiparcreator.cc:510 hrich700digiparcreator.cc:511 hrich700digiparcreator.cc:512 hrich700digiparcreator.cc:513