ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : S. Lebedev
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichEventDisplay
//
//
//////////////////////////////////////////////////////////////////////////////

#include "hrich700eventdisplay.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 "hruntimedb.h"
#include "hspectrometer.h"
#include "richdef.h"
#include "hrich700drawhist.h"
#include "hrich700utils.h"
#include "hrich700digipar.h"
#include "hrichcalsim.h"
#include "hrichhitsim.h"
#include "hgeantkine.h"

#include "TCanvas.h"
#include "TH2D.h"
#include "TPad.h"
#include "TEllipse.h"
#include "TLatex.h"
#include "TBox.h"

#include <iostream>
#include <sstream>
#include <utility>

using namespace std;


ClassImp(HRich700EventDisplay)

    HRich700EventDisplay::HRich700EventDisplay():
fEventNum(0),
    fDrawRichPhotons(kTRUE),
    fDrawRichDirects(kTRUE),
    fDrawRichCals(kTRUE),
    fDrawRichHits(kTRUE),
    fNofEventsToDraw(10),
    fNofDrawnEvents(0)
{

}

HRich700EventDisplay::~HRich700EventDisplay()
{

}

Bool_t HRich700EventDisplay::init()
{


    // 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;
    // }

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

    fCatRichCal = gHades->getCurrentEvent()->getCategory(catRichCal);
    // if (NULL == fCatRichCal) {
	// Error("init", "Initialization of RICH cal failed, returning...");
	// return kFALSE;
    // }

    fCatRichHit = gHades->getCurrentEvent()->getCategory(catRichHit);
    // if (NULL == fCatRichHit) {
	// Error("init", "Initialization of RICH hit failed, returning...");
	// return kFALSE;
    // }

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

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

    fHM = new HRich700HistManager();

    return kTRUE;

}
//============================================================================

//----------------------------------------------------------------------------
Bool_t HRich700EventDisplay::reinit()
{

    return kTRUE;
}
//============================================================================

//----------------------------------------------------------------------------
Int_t HRich700EventDisplay::execute()
{
    HRichDrawHist::SetDefaultDrawStyle();
    fEventNum++;
    // cout << "HRich700EventDisplay::execute eventNum " << fEventNum << endl;

    Bool_t isDrawCurrentEvent = kFALSE;
    //HRichHitSim* richHit = static_cast<HRichHitSim*>(fCatRichHit->getObject(0));
    if (fCatRichHit->getEntries() > 0 ) {
	isDrawCurrentEvent = kTRUE;
	fNofDrawnEvents++;
    }
    if (fNofDrawnEvents > fNofEventsToDraw) return 0;

    if (isDrawCurrentEvent) {
	drawOneEvent();
	drawOneRing();
    }

    return 0;
}
//============================================================================

void HRich700EventDisplay::drawOneEvent()
{
    stringstream ss;
    ss << "hrich_event_display_event_"<< fNofDrawnEvents;
    TCanvas *c = fHM->CreateCanvas(ss.str().c_str(), ss.str().c_str(), 800, 900);
    c->cd();
    TH2D* pad = new TH2D("padU", ";x [mm];y [mm]", 1, -700., 700., 1, -700., 700);
    HRichDrawHist::DrawH2(pad);
    pad->GetYaxis()->SetTitleOffset(0.75);
    gPad->SetLeftMargin(0.1);
    gPad->SetRightMargin(0.05);

    drawPmts(0., 0., false);

    if (fDrawRichHits && fCatRichHit != NULL) {
	Int_t nofRichHits = fCatRichHit->getEntries();
	for (Int_t i = 0; i < nofRichHits; i++) {
	    HRichHit* richHit = static_cast<HRichHit*>(fCatRichHit->getObject(i));
	    TEllipse* circle = new TEllipse(richHit->fRich700CircleCenterX, richHit->fRich700CircleCenterY, richHit->fRich700CircleRadius);
	    circle->SetFillStyle(0);
	    circle->SetLineWidth(3);
	    circle->Draw();
	    TEllipse* cCircle = new TEllipse(richHit->fRich700CircleCenterX, richHit->fRich700CircleCenterY, 5.);
	    cCircle->SetFillColor(kBlack);
	    cCircle->Draw();
	}
    }

    if (fDrawRichCals && fCatRichCal != NULL){
	Int_t nofRichCals = fCatRichCal->getEntries();
	for (Int_t i = 0; i < nofRichCals; i++) {
	    HRichCal* richCal = static_cast<HRichCal*>(fCatRichCal->getObject(i));

	    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);

	    TEllipse* hitDr = new TEllipse(xy.first, xy.second, 5.0);
	    hitDr->SetFillColor(kRed);
	    hitDr->SetLineColor(kRed);
	    hitDr->Draw();
	}
    }


    if (fDrawRichPhotons && fCatRichPhoton != NULL){
	Int_t nofRichPhotons = fCatRichPhoton->getEntries();
	for (Int_t i = 0; i < nofRichPhotons; i++) {
	    HGeantRichPhoton* richPhoton = static_cast<HGeantRichPhoton*>(fCatRichPhoton->getObject(i));
	    pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richPhoton->getPmtId());
	    // x and y have to be swapped for compatibility
	    Double_t photonX = richPhoton->getY();
            Double_t photonY = richPhoton->getX();
	    TEllipse* hitDr = new TEllipse(pmtXY.first + photonX, pmtXY.second + photonY, 1.5);
	    hitDr->SetFillColor(kBlue);
	    hitDr->SetLineColor(kBlue);
	    hitDr->Draw();
	}
    }

    if (fDrawRichDirects && fCatRichDirect != NULL){
	Int_t nofRichDirect = fCatRichDirect->getEntries();
	for (Int_t i = 0; i < nofRichDirect; i++) {
	    HGeantRichDirect* richDirect = static_cast<HGeantRichDirect*>(fCatRichDirect->getObject(i));
	    pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richDirect->getPmtId());
	    // x and y have to be swapped for compatibility
	    Double_t directX = richDirect->getY();
            Double_t directY = richDirect->getX();
	    TEllipse* hitDr = new TEllipse(pmtXY.first + directX, pmtXY.second + directY, 3.0);
	    hitDr->SetFillColor(kGreen);
	    hitDr->SetLineColor(kGreen);
	    hitDr->Draw();
	}
    }

}

void HRich700EventDisplay::drawOneRing()
{

    if (fCatRichHit == NULL) return;

    stringstream ss;
    ss << "hrich_event_display_ring_"<< fNofDrawnEvents;
    TCanvas *c = fHM->CreateCanvas(ss.str().c_str(), ss.str().c_str(), 800, 900);
    c->cd();
    TH2D* pad = new TH2D("padU", ";x [mm];y [mm]", 1, -50., 50., 1, -50., 50);
    HRichDrawHist::DrawH2(pad);
    pad->GetYaxis()->SetTitleOffset(0.75);
    gPad->SetLeftMargin(0.1);
    gPad->SetRightMargin(0.05);

    HRichHit* ring = static_cast<HRichHit*>(fCatRichHit->getObject(0));
    if (ring == NULL) return;
    Double_t xc = ring->fRich700CircleCenterX;
    Double_t yc = ring->fRich700CircleCenterY;

    drawPmts(xc, yc, true);

    if (fDrawRichCals && fCatRichCal != NULL){
	Int_t nofRichCals = fCatRichCal->getEntries();
	Double_t pixelHalfSize = fDigiPar->getPmtSensSize() /fDigiPar->getNPixelInRow() / 2.;

	for (Int_t i = 0; i < nofRichCals; i++) {
	    HRichCal* richCal = static_cast<HRichCal*>(fCatRichCal->getObject(i));

	    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);

	  //  TEllipse* hitDr = new TEllipse(xy.first - xc, xy.second - yc, 2.9);
	  //  hitDr->SetFillColor(kRed);
	  //  hitDr->SetLineColor(kRed);
	  //  hitDr->Draw();

            TBox* box = new TBox(xy.first - xc - pixelHalfSize, xy.second - yc - pixelHalfSize,
				 xy.first - xc + pixelHalfSize, xy.second - yc + pixelHalfSize);
        box->SetFillColor(kRed);
	   // box->SetLineColor(kRed + 3);
	    //box->SetFillStyle(3001); //3001
        box->SetFillColorAlpha(kRed, 0.35);
	    box->SetLineWidth(2);
	    box->Draw();

            // workaround, draw box outer line
	    TBox* box2 = new TBox(xy.first - xc - pixelHalfSize, xy.second - yc - pixelHalfSize,
				 xy.first - xc + pixelHalfSize, xy.second - yc + pixelHalfSize);
	    box2->SetLineColor(kRed + 3);
	    box2->SetFillStyle(0);
	    box2->SetLineWidth(2);
	    box2->Draw();

	}
    }


    TEllipse* circle = new TEllipse(ring->fRich700CircleCenterX - xc, ring->fRich700CircleCenterY - yc, ring->fRich700CircleRadius);
    circle->SetFillStyle(0);
    circle->SetLineWidth(3);
    circle->Draw();
    TEllipse* cCircle = new TEllipse(ring->fRich700CircleCenterX - xc, ring->fRich700CircleCenterY - yc, 1.);
    cCircle->SetFillColor(kBlack);
    cCircle->Draw();

    Bool_t drawAllRings = kTRUE;
    if (drawAllRings) {
	Int_t nofRings = fCatRichHit->getEntries();
	for (Int_t i = 1; i < nofRings; i++) {
	    HRichHit* ring1 = static_cast<HRichHit*>(fCatRichHit->getObject(i));
	    if (ring == NULL) return;
	    TEllipse* circle = new TEllipse(ring1->fRich700CircleCenterX - xc, ring1->fRich700CircleCenterY - yc, ring1->fRich700CircleRadius);
	    circle->SetFillStyle(0);
	    circle->SetLineWidth(3);
	    circle->Draw();
	    TEllipse* cCircle = new TEllipse(ring1->fRich700CircleCenterX - xc, ring1->fRich700CircleCenterY - yc, 1.);
	    cCircle->SetFillColor(kBlack);
	    cCircle->Draw();
	}
    }


    if (fDrawRichPhotons && fCatRichPhoton != NULL){
	Int_t nofRichPhotons = fCatRichPhoton->getEntries();
	for (Int_t i = 0; i < nofRichPhotons; i++) {
	    HGeantRichPhoton* richPhoton = static_cast<HGeantRichPhoton*>(fCatRichPhoton->getObject(i));
	    pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richPhoton->getPmtId());
	    // x and y have to be swapped for compatibility
	    Double_t photonX = richPhoton->getY();
            Double_t photonY = richPhoton->getX();
	    TEllipse* hitDr = new TEllipse( pmtXY.first + photonX - xc, pmtXY.second + photonY - yc, .6);
	    hitDr->SetFillColor(kBlue);
	    hitDr->SetLineColor(kBlue);
	    hitDr->Draw();
	}
    }

    if (fDrawRichDirects && fCatRichDirect != NULL){
	Int_t nofRichDirect = fCatRichDirect->getEntries();
	for (Int_t i = 0; i < nofRichDirect; i++) {
	    HGeantRichDirect* richDirect = static_cast<HGeantRichDirect*>(fCatRichDirect->getObject(i));
	    pair<Double_t, Double_t> pmtXY = fDigiPar->getPmtCenter(richDirect->getPmtId());
	    // x and y have to be swapped for compatibility
	    Double_t directX = richDirect->getY();
            Double_t directY = richDirect->getX();
	    TEllipse* hitDr = new TEllipse( pmtXY.first + directX - xc, pmtXY.second + directY - yc, .8);
	    hitDr->SetFillColor(kGreen);
	    hitDr->SetLineColor(kGreen);
	    hitDr->Draw();
	}
    }

    TString ssCircleParam;
    ssCircleParam.Form("(x, y, R, n)=(%.1f, %.1f, %.2f, %i)", ring->fRich700CircleCenterX, ring->fRich700CircleCenterY,
		       ring->fRich700CircleRadius, ring->fRich700NofRichCals);
    TLatex* latexCircle = new TLatex(-49, 40., ssCircleParam.Data());
    latexCircle->SetTextSize(0.05);
    latexCircle->Draw();


}

void HRich700EventDisplay::drawPmts(Double_t offsetX, Double_t offsetY, Bool_t drawSens)
{
    Double_t pmtHalfSize = fDigiPar->getPmtSize() / 2.;
    Double_t pmtHalfSensSize = fDigiPar->getPmtSensSize() / 2.;

    map<Int_t,HRich700PmtData> pmtDataMap = fDigiPar->getPmtDataMapPmtId();

    const Int_t colors[] = { kBlue, kGreen + 1, kMagenta, kYellow+3, kRed, kCyan+2, kGray, kPink - 7};
    vector<Int_t> colorVec = RichUtils::MakeVector(colors);
    map<Int_t, Int_t> colorMap;
    for(map<Int_t,HRich700PmtData>::iterator it = pmtDataMap.begin(); it != pmtDataMap.end(); it++) {
        if (colorMap.find(it->second.fPmtType) == colorMap.end()) {
            Int_t colorInd = (colorMap.size() >= colorVec.size() )? colorVec.size() - 1: colorMap.size();
            colorMap[it->second.fPmtType] = colors[colorInd];
        }
    }

    for(map<Int_t,HRich700PmtData>::iterator it = pmtDataMap.begin(); it != pmtDataMap.end(); it++) {
        Double_t pmtX = it->second.fX;
        Double_t pmtY = it->second.fY;
        TBox* box = new TBox(pmtX - pmtHalfSize - offsetX, pmtY - pmtHalfSize - offsetY, pmtX + pmtHalfSize - offsetX, pmtY + pmtHalfSize - offsetY);
        box->SetFillStyle(drawSens?3003:3001);
        box->SetFillColor(colorMap[it->second.fPmtType]);
        box->Draw();

        // workaround, draw outer line
        TBox* box2 = new TBox(pmtX - pmtHalfSize - offsetX, pmtY - pmtHalfSize - offsetY, pmtX + pmtHalfSize - offsetX, pmtY + pmtHalfSize - offsetY);
        box2->SetLineColor(kOrange + 1);
        box2->SetFillStyle(0);
        box2->SetLineWidth(2);
        box2->Draw();


        if (drawSens) {
            TBox* boxSens = new TBox(pmtX - pmtHalfSensSize - offsetX, pmtY - pmtHalfSensSize - offsetY,
                         pmtX + pmtHalfSensSize - offsetX, pmtY + pmtHalfSensSize - offsetY);
            boxSens->SetLineColor(kGreen + 2);
            boxSens->SetFillStyle(0);
            boxSens->SetLineWidth(2);
            boxSens->Draw();
        }
    }
}

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