ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : S. Lebedev
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRich700DrawHist
//
//  This class contains drawing util functions of RICH.
//
//////////////////////////////////////////////////////////////////////////////
#include "hrich700drawhist.h"

#include "TH1.h"
#include "TH2.h"
#include "TH1D.h"
#include "TPad.h"
#include "TLegend.h"
#include "TStyle.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TMath.h"
#include "TGaxis.h"
#include "TLegend.h"
#include "TF1.h"
#include "hrich700utils.h"
#include "TLatex.h"

#include <string>
#include <limits>
#include <iostream>
#include <sstream>
#include <cassert>


ClassImp(HRichDrawHist)

    using namespace std;

/* Set default styles for histograms. */
void HRichDrawHist::SetDefaultDrawStyle()
{
    gStyle->SetOptStat("rm");
    gStyle->SetOptFit(1);
    gStyle->SetOptTitle(0);

    gStyle->SetCanvasColor(kWhite);
    gStyle->SetFrameFillColor(kWhite);
    gStyle->SetFrameBorderMode(0);
    gStyle->SetPadColor(kWhite);
    gStyle->SetStatColor(kWhite);
    gStyle->SetTitleFillColor(kWhite);
    gStyle->SetPalette(1);
}

/* Draw TH1 histogram.*/
void HRichDrawHist::DrawH1(
			   TH1* hist,
			   HistScale logx,
			   HistScale logy,
			   const string& drawOpt,
			   Int_t color,
			   Int_t lineWidth,
			   Int_t lineStyle,
			   Int_t markerSize,
			   Int_t markerStyle)
{
    // Draw 1D histogram.
    // hist Pointer to histogram.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // drawOpt Other drawing options (see ROOT documentation for details).
    // color Color.
    // lineWidth Line width.
    // lineStyle Line style (see ROOT documentation for details).
    // markerSize Marker size.
    // markerStyle Marker style (see ROOT documentation for details).

    if (hist == NULL) return;
    Double_t textSize = RichDrawingOptions::TextSize();
    hist->SetLineColor(color);
    hist->SetLineWidth(lineWidth);
    hist->SetLineStyle(lineStyle);
    hist->SetMarkerColor(color);
    hist->SetMarkerSize(markerSize);
    hist->SetMarkerStyle(markerStyle);
    if (logx == kLog) { gPad->SetLogx(); }
    if (logy == kLog) { gPad->SetLogy(); }
    hist->GetXaxis()->SetLabelSize(textSize);
    hist->GetXaxis()->SetNdivisions(505, kTRUE);
    hist->GetYaxis()->SetLabelSize(textSize);
    hist->GetXaxis()->SetTitleSize(textSize);
    hist->GetYaxis()->SetTitleSize(textSize);
    hist->GetXaxis()->SetTitleOffset(1.0);
    hist->GetYaxis()->SetTitleOffset(1.3);
    gPad->SetLeftMargin(0.17);
    gPad->SetBottomMargin(0.15);
    gPad->SetTopMargin(0.12);
    gPad->SetTicks(1, 1);
    hist->Draw(drawOpt.c_str());
    gPad->SetGrid(kTRUE, kTRUE);
    hist->SetStats(kFALSE);
}

/* Draw TH2 histogram.*/
void HRichDrawHist::DrawH2(
			   TH2* hist,
			   HistScale logx,
			   HistScale logy,
			   HistScale logz,
			   const string& drawOpt)
{
    // Draw 2D histogram.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // logz Specify logarithmic or linear scale for Z axis.
    // drawOpt Other drawing options (see ROOT documentation for details).

    if (hist == NULL) return;
    Double_t textSize = RichDrawingOptions::TextSize();
    if (logx == kLog) { gPad->SetLogx(); }
    if (logy == kLog) { gPad->SetLogy(); }
    if (logz == kLog) { gPad->SetLogz(); }
    hist->GetXaxis()->SetLabelSize(textSize);
    hist->GetXaxis()->SetNdivisions(505, kTRUE);
    hist->GetYaxis()->SetLabelSize(textSize);
    hist->GetYaxis()->SetNdivisions(505, kTRUE);
    hist->GetZaxis()->SetLabelSize(textSize);
    // hist->GetZaxis()->SetNdivisions(505, kTRUE);
    hist->GetXaxis()->SetTitleSize(textSize);
    hist->GetYaxis()->SetTitleSize(textSize);
    hist->GetZaxis()->SetTitleSize(textSize);
    hist->GetXaxis()->SetTitleOffset(1.0);
    hist->GetYaxis()->SetTitleOffset(1.3);
    hist->GetZaxis()->SetTitleOffset(1.5);
    gPad->SetLeftMargin(0.17);
    gPad->SetRightMargin(0.30);
    gPad->SetBottomMargin(0.15);
    gPad->SetTicks(1, 1);
    hist->Draw(drawOpt.c_str());
    gPad->SetGrid(kTRUE, kTRUE);
    hist->SetStats(kFALSE);
}

void HRichDrawHist::DrawH1(
			   const vector<TH1*>& histos,
			   const vector<string>& histLabels,
			   HistScale logx,
			   HistScale logy,
			   Bool_t drawLegend,
			   Double_t x1,
			   Double_t y1,
			   Double_t x2,
			   Double_t y2,
			   const string& drawOpt)
{
    // Draw several TH1 histograms.
    // histos Array of histograms.
    // histLabels Array of histogram labels.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // drawLegend If true than legend will be drawn.
    // x1 X coordinate of legend in current pad.
    // y1 Y coordinate of legend in current pad.
    // x2 X coordinate of legend in current pad.
    // y2 Y coordinate of legend in current pad.
    // drawOpt Draw options for TH1->Draw method.

    assert(histos.size() != 0 && histLabels.size() == histos.size());
    Double_t max = std::numeric_limits<Double_t>::min();
    UInt_t nofHistos = histos.size();
    TLegend* legend = new TLegend(x1, y1, x2, y2);
    legend->SetFillColor(kWhite);
    for (UInt_t iHist = 0; iHist < nofHistos; iHist++) {
	TH1* hist = histos[iHist];
	string opt = (iHist == 0) ? drawOpt : (iHist == nofHistos - 1) ? "SAME" + drawOpt : "SAME" + drawOpt;
	DrawH1(hist, logx, logy, opt, RichDrawingOptions::Color(iHist), RichDrawingOptions::LineWidth(),
	       RichDrawingOptions::LineStyle(0), RichDrawingOptions::MarkerSize(), RichDrawingOptions::MarkerStyle(iHist));
	max = std::max(max, hist->GetMaximum());
	legend->AddEntry(hist, histLabels[iHist].c_str(), "lp");
    }
    histos[0]->SetMaximum(max * 1.17);
    if (drawLegend) { legend->Draw(); }
}

void HRichDrawHist::DrawGraph(
			      TGraph* graph,
			      HistScale logx,
			      HistScale logy,
			      const string& drawOpt,
			      Int_t color,
			      Int_t lineWidth,
			      Int_t lineStyle,
			      Int_t markerSize,
			      Int_t markerStyle)
{
    // graph Pointer to TGraph.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // drawOpt Other drawing options (see ROOT documentation for details).
    // color Color.
    // lineWidth Line width.
    // lineStyle Line style (see ROOT documentation for details).
    // markerSize Marker size.
    // markerStyle Marker style (see ROOT documentation for details).

    if (graph == NULL) return;
    Double_t textSize = RichDrawingOptions::TextSize();
    graph->SetLineColor(color);
    graph->SetLineWidth(lineWidth);
    graph->SetLineStyle(lineStyle);
    graph->SetMarkerColor(color);
    graph->SetMarkerSize(markerSize);
    graph->SetMarkerStyle(markerStyle);
    if (drawOpt.find("A") != string::npos) {
	if (logx == kLog) { gPad->SetLogx(); }
	if (logy == kLog) { gPad->SetLogy(); }
	graph->GetXaxis()->SetLabelSize(textSize);
	graph->GetXaxis()->SetNdivisions(505, kTRUE);
	graph->GetYaxis()->SetLabelSize(textSize);
	graph->GetXaxis()->SetTitleSize(textSize);
	graph->GetYaxis()->SetTitleSize(textSize);
	graph->GetXaxis()->SetTitleOffset(1.0);
	graph->GetYaxis()->SetTitleOffset(1.3);
    }
    gPad->SetLeftMargin(0.17);
    gPad->SetBottomMargin(0.15);
    graph->Draw(drawOpt.c_str());
    gPad->SetGrid(kTRUE, kTRUE);
}


void HRichDrawHist::DrawGraph(
			      const vector<TGraph*>& graphs,
			      const vector<string>& graphLabels,
			      HistScale logx,
			      HistScale logy,
			      Bool_t drawLegend,
			      Double_t x1,
			      Double_t y1,
			      Double_t x2,
			      Double_t y2)
{
    // Draw upto 3 TGraphs. If graph == NULL than graph will not be drawn.
    // graphs Vector of TGraphs.
    // graphLabels Vector of graph labels.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // drawLegend If true than legend will be drawn.
    // x1 X coordinate of legend in current pad.
    // y1 Y coordinate of legend in current pad.
    // x2 X coordinate of legend in current pad.
    // y2 Y coordinate of legend in current pad.

    assert(graphs.size() != 0 && graphs.size() == graphLabels.size());

    Double_t max = std::numeric_limits<Double_t>::min();
    Double_t min = std::numeric_limits<Double_t>::max();
    TLegend* legend = new TLegend(x1, y1, x2, y2);
    legend->SetFillColor(kWhite);
    UInt_t nofGraphs = graphs.size();
    for (UInt_t iGraph = 0; iGraph < nofGraphs; iGraph++) {
	TGraph* graph = graphs[iGraph];
	string opt = (iGraph == 0) ? "ACP" : "CP";
	DrawGraph(graph, logx, logy, opt, RichDrawingOptions::Color(iGraph), RichDrawingOptions::LineWidth(),
		  RichDrawingOptions::LineStyle(iGraph), RichDrawingOptions::MarkerSize(), RichDrawingOptions::MarkerStyle(iGraph));
	max = std::max(graph->GetYaxis()->GetXmax(), max);
	min = std::min(graph->GetYaxis()->GetXmin(), min);
	legend->AddEntry(graph, graphLabels[iGraph].c_str(), "lp");
    }
    graphs[0]->SetMaximum(max);
    graphs[0]->SetMinimum(min);
    if (drawLegend) { legend->Draw(); }
}

void HRichDrawHist::DrawGraph2D(
				TGraph2D* graph,
				HistScale logx,
				HistScale logy,
				HistScale logz,
				const string& drawOpt)
{
    // Draw 2D graph.
    // graph Pointer to TGraph2D.
    // logx Specify logarithmic or linear scale for X axis.
    // logy Specify logarithmic or linear scale for Y axis.
    // logz Specify logarithmic or linear scale for Z axis.
    // drawOpt Other drawing options (see ROOT documentation for details).

    Double_t textSize = RichDrawingOptions::TextSize();
    if (logx == kLog) { gPad->SetLogx(); }
    if (logy == kLog) { gPad->SetLogy(); }
    if (logz == kLog) { gPad->SetLogz(); }
    graph->GetXaxis()->SetLabelSize(textSize);
    graph->GetXaxis()->SetNdivisions(505, kTRUE);
    graph->GetYaxis()->SetLabelSize(textSize);
    graph->GetYaxis()->SetNdivisions(505, kTRUE);
    graph->GetZaxis()->SetLabelSize(textSize);
    //   graph->GetZaxis()->SetNdivisions(505, kTRUE);
    graph->GetXaxis()->SetTitleSize(textSize);
    graph->GetYaxis()->SetTitleSize(textSize);
    graph->GetZaxis()->SetTitleSize(textSize);
    graph->GetXaxis()->SetTitleOffset(1.0);
    graph->GetYaxis()->SetTitleOffset(1.3);
    graph->GetZaxis()->SetTitleOffset(1.5);
    gPad->SetLeftMargin(0.17);
    gPad->SetRightMargin(0.30);
    gPad->SetBottomMargin(0.15);
    gPad->SetTicks(1, 1);
    graph->Draw(drawOpt.c_str());
    gPad->SetGrid(kTRUE, kTRUE);
}

void HRichDrawHist::DrawTextOnPad(
				  const string& text,
				  Double_t x1,
				  Double_t y1,
				  Double_t x2,
				  Double_t y2)
{
    // Draw text on a current pad. Latex expression can be used.
    // text Your text. Latex can be also used.
    // x1 X1 coordinate of legend in current pad.
    // y1 Y1 coordinate of legend in current pad.
    // x2 X2 coordinate of legend in current pad.
    // y2 Y2 coordinate of legend in current pad.

    TLegend* leg = new TLegend(x1, y1, x2, y2);
    leg->AddEntry(new TH2D(), text.c_str(), "");
    leg->SetFillColor(kWhite);
    leg->SetFillStyle(0);
    leg->SetBorderSize(0);
    leg->Draw();
}

void HRichDrawHist::DrawH1andFitGauss(
				      TH1* hist,
				      Bool_t drawResults,
				      Bool_t doScale,
				      Double_t userRangeMin,
				      Double_t userRangeMax)
{
    // Draw TH1 and fit with gauss. Draw fit results on top of the histogramm.
    // hist Histogram to be drawn and fitted.
    // drawResults If true - mean/sigma will be drawn.
    // doScale If true - histogramm is scaled to Integral 1.
    // userRangeMin SetRangeUser minimum.
    // userRangeMax SetRangeUser maximum.


    if (hist == NULL) return;

    hist->GetYaxis()->SetTitle("Yield");
    DrawH1(hist);
    if (doScale) hist->Scale(1./ hist->Integral());
    if (!(userRangeMin == 0. && userRangeMax == 0.)) hist->GetXaxis()->SetRangeUser(userRangeMin, userRangeMax);
    hist->Fit("gaus", "Q");
    TF1* func = hist->GetFunction("gaus");
    if (func == NULL) return;
    func->SetLineColor(kBlack);

    if (drawResults) {
	Double_t m = func->GetParameter(1);
	Double_t s = func->GetParameter(2);
	string txt1 = RichUtils::NumberToString<Double_t>(m, 2) + " / " + RichUtils::NumberToString<Double_t>(s, 2);
	TLatex text;
	text.SetTextAlign(21);
	text.SetTextSize(0.06);
	text.DrawTextNDC(0.5, 0.92, txt1.c_str());
    }
}

void HRichDrawHist::DrawH2WithProfile(
    TH2* hist,
	Bool_t doGaussFit,
    Bool_t drawOnlyMean,
    const string& drawOpt2D,
    Int_t profileColor,
    Int_t profileLineWidth)
{
    if (hist == NULL) return;

    // TProfile does not allow to fit individual slice with gauss
  /*  TProfile* profX = (TProfile*)hist->ProfileX("_pfx", 1, -1, "s")->Clone();
    DrawH2(hist, kLinear, kLinear, kLinear, drawOpt);
    if (!drawOnlyMean) {
        DrawH1(profX, kLinear, kLinear, "same", profileColor, profileLineWidth, 1, 1, kOpenCircle);
    } else {
        DrawH1(profX, kLinear, kLinear, "same hist p", profileColor, profileLineWidth, 1, 1, kFullCircle);
    }*/

    TH1D* hMean = (TH1D*)hist->ProjectionX( (string(hist->GetName()) + "_mean").c_str() )->Clone();
    string yTitle = (doGaussFit)?"Mean and sigma. ":"Mean and RMS. ";
    hMean->GetYaxis()->SetTitle( (yTitle + string(hist->GetYaxis()->GetTitle()) ).c_str());
	for (Int_t i = 1; i <= hist->GetXaxis()->GetNbins(); i++){
		stringstream ss;
		ss << string(hist->GetName()) << "_py" << i;
		TH1D* pr = hist->ProjectionY(ss.str().c_str(), i, i);
		if (hMean == NULL || pr == NULL) continue;
        pr->ResetStats(); // workaround, sometimes statistics

		Double_t m = 0., s = 0.;
		if (doGaussFit) {
			pr->Fit("gaus", "QO");
			TF1* func = pr->GetFunction("gaus");
			if (func != NULL) {
				m = func->GetParameter(1);
				s = func->GetParameter(2);
			}
		} else {
			m = pr->GetMean();
			s = pr->GetRMS();
		}

		hMean->SetBinContent(i, m);
		if (!drawOnlyMean){
			hMean->SetBinError(i, s);
		} else {
			hMean->SetBinError(i, 0.);
		}
	}
	DrawH2(hist, kLinear, kLinear, kLinear, drawOpt2D);
	if (!drawOnlyMean) {
		DrawH1(hMean, kLinear, kLinear, "same", profileColor, profileLineWidth, 1, 1, kOpenCircle);
	} else {
		DrawH1(hMean, kLinear, kLinear, "same hist p", profileColor, profileLineWidth, 1, 1, kFullCircle);
	}
}

TH2D* HRichDrawHist::DrawH3Profile(
		TH3* h,
		Bool_t drawMean,
		Bool_t doGaussFit,
		Double_t zMin,
		Double_t zMax)
{
	Int_t nBinsX = h->GetNbinsX();
	Int_t nBinsY = h->GetNbinsY();
	TH2D* h2 = (TH2D*) h->Project3D("yx")->Clone();

	for (Int_t x = 1; x <= nBinsX; x++) {
		for (Int_t y = 1; y <= nBinsY; y++) {
			stringstream ss;
			ss << h->GetName() << "_z_" << x << "_" << y;
			TH1D* hz = h->ProjectionZ(ss.str().c_str(), x, x, y, y);
			Double_t ms = 0.;
			if (doGaussFit) {
				hz->Fit("gaus", "QO");
				TF1* func = hz->GetFunction("gaus");
				if (func != NULL) {
					ms = (drawMean)?func->GetParameter(1):func->GetParameter(2);
				}
			} else {
				ms = (drawMean)?hz->GetMean():hz->GetRMS();
			}
			h2->SetBinContent(x, y, ms);
		}
	}

	string zAxisTitle = string(h->GetZaxis()->GetTitle());
	string sigmaRms = (doGaussFit)?"Sigma.":"RMS.";
	zAxisTitle = (drawMean)?"Mean."+zAxisTitle:sigmaRms+zAxisTitle;

	h2->GetZaxis()->SetTitle(zAxisTitle.c_str());
	if (zMin < zMax) h2->GetZaxis()->SetRangeUser(zMin, zMax);
	DrawH2(h2);

	return h2;
}
 hrich700drawhist.cc:1
 hrich700drawhist.cc:2
 hrich700drawhist.cc:3
 hrich700drawhist.cc:4
 hrich700drawhist.cc:5
 hrich700drawhist.cc:6
 hrich700drawhist.cc:7
 hrich700drawhist.cc:8
 hrich700drawhist.cc:9
 hrich700drawhist.cc:10
 hrich700drawhist.cc:11
 hrich700drawhist.cc:12
 hrich700drawhist.cc:13
 hrich700drawhist.cc:14
 hrich700drawhist.cc:15
 hrich700drawhist.cc:16
 hrich700drawhist.cc:17
 hrich700drawhist.cc:18
 hrich700drawhist.cc:19
 hrich700drawhist.cc:20
 hrich700drawhist.cc:21
 hrich700drawhist.cc:22
 hrich700drawhist.cc:23
 hrich700drawhist.cc:24
 hrich700drawhist.cc:25
 hrich700drawhist.cc:26
 hrich700drawhist.cc:27
 hrich700drawhist.cc:28
 hrich700drawhist.cc:29
 hrich700drawhist.cc:30
 hrich700drawhist.cc:31
 hrich700drawhist.cc:32
 hrich700drawhist.cc:33
 hrich700drawhist.cc:34
 hrich700drawhist.cc:35
 hrich700drawhist.cc:36
 hrich700drawhist.cc:37
 hrich700drawhist.cc:38
 hrich700drawhist.cc:39
 hrich700drawhist.cc:40
 hrich700drawhist.cc:41
 hrich700drawhist.cc:42
 hrich700drawhist.cc:43
 hrich700drawhist.cc:44
 hrich700drawhist.cc:45
 hrich700drawhist.cc:46
 hrich700drawhist.cc:47
 hrich700drawhist.cc:48
 hrich700drawhist.cc:49
 hrich700drawhist.cc:50
 hrich700drawhist.cc:51
 hrich700drawhist.cc:52
 hrich700drawhist.cc:53
 hrich700drawhist.cc:54
 hrich700drawhist.cc:55
 hrich700drawhist.cc:56
 hrich700drawhist.cc:57
 hrich700drawhist.cc:58
 hrich700drawhist.cc:59
 hrich700drawhist.cc:60
 hrich700drawhist.cc:61
 hrich700drawhist.cc:62
 hrich700drawhist.cc:63
 hrich700drawhist.cc:64
 hrich700drawhist.cc:65
 hrich700drawhist.cc:66
 hrich700drawhist.cc:67
 hrich700drawhist.cc:68
 hrich700drawhist.cc:69
 hrich700drawhist.cc:70
 hrich700drawhist.cc:71
 hrich700drawhist.cc:72
 hrich700drawhist.cc:73
 hrich700drawhist.cc:74
 hrich700drawhist.cc:75
 hrich700drawhist.cc:76
 hrich700drawhist.cc:77
 hrich700drawhist.cc:78
 hrich700drawhist.cc:79
 hrich700drawhist.cc:80
 hrich700drawhist.cc:81
 hrich700drawhist.cc:82
 hrich700drawhist.cc:83
 hrich700drawhist.cc:84
 hrich700drawhist.cc:85
 hrich700drawhist.cc:86
 hrich700drawhist.cc:87
 hrich700drawhist.cc:88
 hrich700drawhist.cc:89
 hrich700drawhist.cc:90
 hrich700drawhist.cc:91
 hrich700drawhist.cc:92
 hrich700drawhist.cc:93
 hrich700drawhist.cc:94
 hrich700drawhist.cc:95
 hrich700drawhist.cc:96
 hrich700drawhist.cc:97
 hrich700drawhist.cc:98
 hrich700drawhist.cc:99
 hrich700drawhist.cc:100
 hrich700drawhist.cc:101
 hrich700drawhist.cc:102
 hrich700drawhist.cc:103
 hrich700drawhist.cc:104
 hrich700drawhist.cc:105
 hrich700drawhist.cc:106
 hrich700drawhist.cc:107
 hrich700drawhist.cc:108
 hrich700drawhist.cc:109
 hrich700drawhist.cc:110
 hrich700drawhist.cc:111
 hrich700drawhist.cc:112
 hrich700drawhist.cc:113
 hrich700drawhist.cc:114
 hrich700drawhist.cc:115
 hrich700drawhist.cc:116
 hrich700drawhist.cc:117
 hrich700drawhist.cc:118
 hrich700drawhist.cc:119
 hrich700drawhist.cc:120
 hrich700drawhist.cc:121
 hrich700drawhist.cc:122
 hrich700drawhist.cc:123
 hrich700drawhist.cc:124
 hrich700drawhist.cc:125
 hrich700drawhist.cc:126
 hrich700drawhist.cc:127
 hrich700drawhist.cc:128
 hrich700drawhist.cc:129
 hrich700drawhist.cc:130
 hrich700drawhist.cc:131
 hrich700drawhist.cc:132
 hrich700drawhist.cc:133
 hrich700drawhist.cc:134
 hrich700drawhist.cc:135
 hrich700drawhist.cc:136
 hrich700drawhist.cc:137
 hrich700drawhist.cc:138
 hrich700drawhist.cc:139
 hrich700drawhist.cc:140
 hrich700drawhist.cc:141
 hrich700drawhist.cc:142
 hrich700drawhist.cc:143
 hrich700drawhist.cc:144
 hrich700drawhist.cc:145
 hrich700drawhist.cc:146
 hrich700drawhist.cc:147
 hrich700drawhist.cc:148
 hrich700drawhist.cc:149
 hrich700drawhist.cc:150
 hrich700drawhist.cc:151
 hrich700drawhist.cc:152
 hrich700drawhist.cc:153
 hrich700drawhist.cc:154
 hrich700drawhist.cc:155
 hrich700drawhist.cc:156
 hrich700drawhist.cc:157
 hrich700drawhist.cc:158
 hrich700drawhist.cc:159
 hrich700drawhist.cc:160
 hrich700drawhist.cc:161
 hrich700drawhist.cc:162
 hrich700drawhist.cc:163
 hrich700drawhist.cc:164
 hrich700drawhist.cc:165
 hrich700drawhist.cc:166
 hrich700drawhist.cc:167
 hrich700drawhist.cc:168
 hrich700drawhist.cc:169
 hrich700drawhist.cc:170
 hrich700drawhist.cc:171
 hrich700drawhist.cc:172
 hrich700drawhist.cc:173
 hrich700drawhist.cc:174
 hrich700drawhist.cc:175
 hrich700drawhist.cc:176
 hrich700drawhist.cc:177
 hrich700drawhist.cc:178
 hrich700drawhist.cc:179
 hrich700drawhist.cc:180
 hrich700drawhist.cc:181
 hrich700drawhist.cc:182
 hrich700drawhist.cc:183
 hrich700drawhist.cc:184
 hrich700drawhist.cc:185
 hrich700drawhist.cc:186
 hrich700drawhist.cc:187
 hrich700drawhist.cc:188
 hrich700drawhist.cc:189
 hrich700drawhist.cc:190
 hrich700drawhist.cc:191
 hrich700drawhist.cc:192
 hrich700drawhist.cc:193
 hrich700drawhist.cc:194
 hrich700drawhist.cc:195
 hrich700drawhist.cc:196
 hrich700drawhist.cc:197
 hrich700drawhist.cc:198
 hrich700drawhist.cc:199
 hrich700drawhist.cc:200
 hrich700drawhist.cc:201
 hrich700drawhist.cc:202
 hrich700drawhist.cc:203
 hrich700drawhist.cc:204
 hrich700drawhist.cc:205
 hrich700drawhist.cc:206
 hrich700drawhist.cc:207
 hrich700drawhist.cc:208
 hrich700drawhist.cc:209
 hrich700drawhist.cc:210
 hrich700drawhist.cc:211
 hrich700drawhist.cc:212
 hrich700drawhist.cc:213
 hrich700drawhist.cc:214
 hrich700drawhist.cc:215
 hrich700drawhist.cc:216
 hrich700drawhist.cc:217
 hrich700drawhist.cc:218
 hrich700drawhist.cc:219
 hrich700drawhist.cc:220
 hrich700drawhist.cc:221
 hrich700drawhist.cc:222
 hrich700drawhist.cc:223
 hrich700drawhist.cc:224
 hrich700drawhist.cc:225
 hrich700drawhist.cc:226
 hrich700drawhist.cc:227
 hrich700drawhist.cc:228
 hrich700drawhist.cc:229
 hrich700drawhist.cc:230
 hrich700drawhist.cc:231
 hrich700drawhist.cc:232
 hrich700drawhist.cc:233
 hrich700drawhist.cc:234
 hrich700drawhist.cc:235
 hrich700drawhist.cc:236
 hrich700drawhist.cc:237
 hrich700drawhist.cc:238
 hrich700drawhist.cc:239
 hrich700drawhist.cc:240
 hrich700drawhist.cc:241
 hrich700drawhist.cc:242
 hrich700drawhist.cc:243
 hrich700drawhist.cc:244
 hrich700drawhist.cc:245
 hrich700drawhist.cc:246
 hrich700drawhist.cc:247
 hrich700drawhist.cc:248
 hrich700drawhist.cc:249
 hrich700drawhist.cc:250
 hrich700drawhist.cc:251
 hrich700drawhist.cc:252
 hrich700drawhist.cc:253
 hrich700drawhist.cc:254
 hrich700drawhist.cc:255
 hrich700drawhist.cc:256
 hrich700drawhist.cc:257
 hrich700drawhist.cc:258
 hrich700drawhist.cc:259
 hrich700drawhist.cc:260
 hrich700drawhist.cc:261
 hrich700drawhist.cc:262
 hrich700drawhist.cc:263
 hrich700drawhist.cc:264
 hrich700drawhist.cc:265
 hrich700drawhist.cc:266
 hrich700drawhist.cc:267
 hrich700drawhist.cc:268
 hrich700drawhist.cc:269
 hrich700drawhist.cc:270
 hrich700drawhist.cc:271
 hrich700drawhist.cc:272
 hrich700drawhist.cc:273
 hrich700drawhist.cc:274
 hrich700drawhist.cc:275
 hrich700drawhist.cc:276
 hrich700drawhist.cc:277
 hrich700drawhist.cc:278
 hrich700drawhist.cc:279
 hrich700drawhist.cc:280
 hrich700drawhist.cc:281
 hrich700drawhist.cc:282
 hrich700drawhist.cc:283
 hrich700drawhist.cc:284
 hrich700drawhist.cc:285
 hrich700drawhist.cc:286
 hrich700drawhist.cc:287
 hrich700drawhist.cc:288
 hrich700drawhist.cc:289
 hrich700drawhist.cc:290
 hrich700drawhist.cc:291
 hrich700drawhist.cc:292
 hrich700drawhist.cc:293
 hrich700drawhist.cc:294
 hrich700drawhist.cc:295
 hrich700drawhist.cc:296
 hrich700drawhist.cc:297
 hrich700drawhist.cc:298
 hrich700drawhist.cc:299
 hrich700drawhist.cc:300
 hrich700drawhist.cc:301
 hrich700drawhist.cc:302
 hrich700drawhist.cc:303
 hrich700drawhist.cc:304
 hrich700drawhist.cc:305
 hrich700drawhist.cc:306
 hrich700drawhist.cc:307
 hrich700drawhist.cc:308
 hrich700drawhist.cc:309
 hrich700drawhist.cc:310
 hrich700drawhist.cc:311
 hrich700drawhist.cc:312
 hrich700drawhist.cc:313
 hrich700drawhist.cc:314
 hrich700drawhist.cc:315
 hrich700drawhist.cc:316
 hrich700drawhist.cc:317
 hrich700drawhist.cc:318
 hrich700drawhist.cc:319
 hrich700drawhist.cc:320
 hrich700drawhist.cc:321
 hrich700drawhist.cc:322
 hrich700drawhist.cc:323
 hrich700drawhist.cc:324
 hrich700drawhist.cc:325
 hrich700drawhist.cc:326
 hrich700drawhist.cc:327
 hrich700drawhist.cc:328
 hrich700drawhist.cc:329
 hrich700drawhist.cc:330
 hrich700drawhist.cc:331
 hrich700drawhist.cc:332
 hrich700drawhist.cc:333
 hrich700drawhist.cc:334
 hrich700drawhist.cc:335
 hrich700drawhist.cc:336
 hrich700drawhist.cc:337
 hrich700drawhist.cc:338
 hrich700drawhist.cc:339
 hrich700drawhist.cc:340
 hrich700drawhist.cc:341
 hrich700drawhist.cc:342
 hrich700drawhist.cc:343
 hrich700drawhist.cc:344
 hrich700drawhist.cc:345
 hrich700drawhist.cc:346
 hrich700drawhist.cc:347
 hrich700drawhist.cc:348
 hrich700drawhist.cc:349
 hrich700drawhist.cc:350
 hrich700drawhist.cc:351
 hrich700drawhist.cc:352
 hrich700drawhist.cc:353
 hrich700drawhist.cc:354
 hrich700drawhist.cc:355
 hrich700drawhist.cc:356
 hrich700drawhist.cc:357
 hrich700drawhist.cc:358
 hrich700drawhist.cc:359
 hrich700drawhist.cc:360
 hrich700drawhist.cc:361
 hrich700drawhist.cc:362
 hrich700drawhist.cc:363
 hrich700drawhist.cc:364
 hrich700drawhist.cc:365
 hrich700drawhist.cc:366
 hrich700drawhist.cc:367
 hrich700drawhist.cc:368
 hrich700drawhist.cc:369
 hrich700drawhist.cc:370
 hrich700drawhist.cc:371
 hrich700drawhist.cc:372
 hrich700drawhist.cc:373
 hrich700drawhist.cc:374
 hrich700drawhist.cc:375
 hrich700drawhist.cc:376
 hrich700drawhist.cc:377
 hrich700drawhist.cc:378
 hrich700drawhist.cc:379
 hrich700drawhist.cc:380
 hrich700drawhist.cc:381
 hrich700drawhist.cc:382
 hrich700drawhist.cc:383
 hrich700drawhist.cc:384
 hrich700drawhist.cc:385
 hrich700drawhist.cc:386
 hrich700drawhist.cc:387
 hrich700drawhist.cc:388
 hrich700drawhist.cc:389
 hrich700drawhist.cc:390
 hrich700drawhist.cc:391
 hrich700drawhist.cc:392
 hrich700drawhist.cc:393
 hrich700drawhist.cc:394
 hrich700drawhist.cc:395
 hrich700drawhist.cc:396
 hrich700drawhist.cc:397
 hrich700drawhist.cc:398
 hrich700drawhist.cc:399
 hrich700drawhist.cc:400
 hrich700drawhist.cc:401
 hrich700drawhist.cc:402
 hrich700drawhist.cc:403
 hrich700drawhist.cc:404
 hrich700drawhist.cc:405
 hrich700drawhist.cc:406
 hrich700drawhist.cc:407
 hrich700drawhist.cc:408
 hrich700drawhist.cc:409
 hrich700drawhist.cc:410
 hrich700drawhist.cc:411
 hrich700drawhist.cc:412
 hrich700drawhist.cc:413
 hrich700drawhist.cc:414
 hrich700drawhist.cc:415
 hrich700drawhist.cc:416
 hrich700drawhist.cc:417
 hrich700drawhist.cc:418
 hrich700drawhist.cc:419
 hrich700drawhist.cc:420
 hrich700drawhist.cc:421
 hrich700drawhist.cc:422
 hrich700drawhist.cc:423
 hrich700drawhist.cc:424
 hrich700drawhist.cc:425
 hrich700drawhist.cc:426
 hrich700drawhist.cc:427
 hrich700drawhist.cc:428
 hrich700drawhist.cc:429
 hrich700drawhist.cc:430
 hrich700drawhist.cc:431
 hrich700drawhist.cc:432
 hrich700drawhist.cc:433
 hrich700drawhist.cc:434
 hrich700drawhist.cc:435
 hrich700drawhist.cc:436
 hrich700drawhist.cc:437
 hrich700drawhist.cc:438
 hrich700drawhist.cc:439
 hrich700drawhist.cc:440
 hrich700drawhist.cc:441
 hrich700drawhist.cc:442
 hrich700drawhist.cc:443
 hrich700drawhist.cc:444
 hrich700drawhist.cc:445
 hrich700drawhist.cc:446
 hrich700drawhist.cc:447
 hrich700drawhist.cc:448
 hrich700drawhist.cc:449
 hrich700drawhist.cc:450
 hrich700drawhist.cc:451
 hrich700drawhist.cc:452
 hrich700drawhist.cc:453
 hrich700drawhist.cc:454
 hrich700drawhist.cc:455
 hrich700drawhist.cc:456
 hrich700drawhist.cc:457
 hrich700drawhist.cc:458
 hrich700drawhist.cc:459
 hrich700drawhist.cc:460
 hrich700drawhist.cc:461
 hrich700drawhist.cc:462
 hrich700drawhist.cc:463
 hrich700drawhist.cc:464
 hrich700drawhist.cc:465
 hrich700drawhist.cc:466
 hrich700drawhist.cc:467
 hrich700drawhist.cc:468
 hrich700drawhist.cc:469
 hrich700drawhist.cc:470
 hrich700drawhist.cc:471
 hrich700drawhist.cc:472