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

#include "hrich700histmanager.h"
#include "hrich700utils.h"

#include "TH1.h"
#include "TH2.h"
#include "TNamed.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "TFile.h"
#include "TDirectory.h"
#include "TKey.h"
#include "TClass.h"

#include <vector>
#include <map>
#include <string>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <climits>

using std::string;
using std::map;
using std::cout;
using std::endl;
using std::vector;
using std::exception;
using std::sort;

class CompareTNamedMore:
public std::binary_function<
    const TNamed*,
    const TNamed*,
    Bool_t>
{
public:
    Bool_t operator()(const TNamed* object1, const TNamed* object2) const {
	return string(object1->GetName()) > string(object2->GetName());
    }
};

HRich700HistManager::HRich700HistManager():
    fMap()
{

}

HRich700HistManager::~HRich700HistManager()
{

}


void HRich700HistManager::Add(const string& name,TNamed* object)
{
    // Add new named object to manager.
    // name Name of the object.
    // object Pointer to object.

    map<string, TNamed*>::iterator it = fMap.find(name);
    if (it != fMap.end()){
        cout << "HRich700HistManager::Add Object with name:" << name << " was already added. Set new object." << endl;
    }

    std::pair<string, TNamed*> newpair = std::make_pair(name, object);
    fMap.insert(newpair);
}
/*
template<class T> void HRich700HistManager::Create1(const string& name,
						    const string& title,
						    Int_t nofBins,
						    Double_t minBin,
						    Double_t maxBin)
{
    // Helper function for creation of 1-dimensional histograms and profiles.
    // Template argument is a real object type that has to be created, for example,
    //  Create1<TH1F>("name", "title", 100, 0, 100);
    // name Object name.
    // title Object title.
    // nofBins Number of bins.
    // minBin Low axis limit.
    //maxBin Upper axis limit.

    T* h = new T(name.c_str(), title.c_str(), nofBins, minBin, maxBin);
    Add(name, h);
}
*/
/*
template<class T> void HRich700HistManager::Create2(const string& name,
						    const string& title,
						    Int_t nofBinsX,
						    Double_t minBinX,
						    Double_t maxBinX,
						    Int_t nofBinsY,
						    Double_t minBinY,
						    Double_t maxBinY)
{
    // Helper function for creation of 2-dimensional histograms and profiles.
    // Template argument is a real object type that has to be created, for example,
    // Create2<TH2F>("name", "title", 100, 0, 100, 200, 0, 200);
    // name Object name.
    //  title Object title.
    // nofBinsX Number of bins for X axis.
    // minBinX Low X axis limit.
    // maxBinX Upper X axis limit.
    // nofBinsY Number of bins for Y axis.
    // minBinY Low Y axis limit.
    //maxBinY Upper Y axis limit.

    T* h = new T(name.c_str(), title.c_str(), nofBinsX, minBinX, maxBinX, nofBinsY, minBinY, maxBinY);
    Add(name, h);
}
*/
/*
template<class T> void HRich700HistManager::Create3(const string& name,
						    const string& title,
						    Int_t nofBinsX,
						    Double_t minBinX,
						    Double_t maxBinX,
						    Int_t nofBinsY,
						    Double_t minBinY,
						    Double_t maxBinY,
						    Int_t nofBinsZ,
						    Double_t minBinZ,
						    Double_t maxBinZ)
{
    // Helper function for creation of 3-dimensional histograms and profiles.
    // Template argument is a real object type that has to be created, for example,
    // Create3<TH3F>("name", "title", 100, 0, 100, 200, 0, 200, 300, 0, 300);
    // name Object name.
    // title Object title.
    // nofBinsX Number of bins for X axis.
    // minBinX Low X axis limit.
    // maxBinX Upper X axis limit.
    // nofBinsY Number of bins for Y axis.
    // minBinY Low Y axis limit.
    // maxBinY Upper Y axis limit.
    // nofBinsZ Number of bins for Z axis.
    // minBinZ Low Z axis limit.
    // maxBinZ Upper Z axis limit.

    T* h = new T(name.c_str(), title.c_str(), nofBinsX, minBinX, maxBinX, nofBinsY, minBinY, maxBinY, nofBinsZ, minBinZ, maxBinZ);
    Add(name, h);
}
*/
TH1* HRich700HistManager::H1(const string& name) const {

    // Return pointer to TH1 histogram.
    // name Name of histogram.
    // pointer to TH1 histogram.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::H1(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TH1*>(fMap.find(name)->second);
}

TH2* HRich700HistManager::H2(const string& name) const {
    // Return pointer to TH2 histogram.
    // name Name of histogram.
    // pointer to TH2 histogram.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::H2(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TH2*>(fMap.find(name)->second);
}

TH3* HRich700HistManager::H3(const string& name) const {
    // Return pointer to TH3 histogram.
    // name Name of histogram.
    //pointer to TH3 histogram.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::H3(name): name=" << name << std::endl;
      }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TH3*>(fMap.find(name)->second);
}

TGraph* HRich700HistManager::G1(const string& name) const {
    // Return pointer to TGraph.
    // name Name of graph.
    // pointer to TGraph.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::G1(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TGraph*>(fMap.find(name)->second);
}

TGraph2D* HRich700HistManager::G2(const string& name) const {
    // Return pointer to TGraph2D.
    // name Name of graph.
    // pointer to TGraph.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::G2(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TGraph2D*>(fMap.find(name)->second);
}

TProfile* HRich700HistManager::P1(const string& name) const {
    // Return pointer to TProfile.
    // name Name of profile.
    // pointer to TProfile.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::P1(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TProfile*>(fMap.find(name)->second);
}

TProfile2D* HRich700HistManager::P2(const string& name) const {
    // Return pointer to TH2 histogram.
    // name Name of histogram.
    // pointer to TH1 histogram.

    if (fMap.count(name) == 0) { // Temporarily used for debugging
	std::cout << "Error: RichHistManager::P2(name): name=" << name << std::endl;
    }
    assert(fMap.count(name) != 0);
    return dynamic_cast<TProfile2D*>(fMap.find(name)->second);
}

Bool_t HRich700HistManager::Exists(const string& name) const {
    // Check existence of histogram in manager.
    // name Name of histogram.
    // return True if histogram exists in manager.

    return (fMap.count(name) == 0) ? kFALSE : kTRUE;
}

void HRich700HistManager::WriteToFile()
{
    //Write all histograms to current opened file.

    map<string, TNamed*>::iterator it;
    for (it = fMap.begin(); it != fMap.end(); it++){
	it->second->Write();
    }
}

void HRich700HistManager::ReadFromFile(
				       TFile* file)
{
    // Read histograms from file.
    // file Pointer to file with histograms.

    assert(file != NULL);
    cout << "-I- HRich700HistManager::ReadFromFile" << endl;
    TDirectory* dir = gDirectory;
    TIter nextkey(dir->GetListOfKeys());
    TKey *key;
    while ((key = (TKey*) nextkey())) {
    	TObject* obj = key->ReadObj();
        AddTNamedObject(obj);
        AddTDirectoryObject(obj);
    }
}

void HRich700HistManager::AddTNamedObject(
				       TObject* obj)
{
    if (obj->IsA()->InheritsFrom (TH1::Class()) || obj->IsA()->InheritsFrom (TGraph::Class()) || obj->IsA()->InheritsFrom (TGraph2D::Class())) {
	    TNamed* h = (TNamed*) obj;
	    //TNamed* h1 = (TNamed*)file->Get(h->GetName());
	    Add(string(h->GetName()), h);
	}
}

void HRich700HistManager::AddTDirectoryObject(
				       TObject* obj)
{
    if (obj->IsA()->InheritsFrom (TDirectoryFile::Class())) {
        TDirectoryFile* fileDir = (TDirectoryFile*)obj;
        TIter nextkey(fileDir->GetListOfKeys());
        TKey *key2;
        while ((key2 = (TKey*) nextkey())) {
            TObject* obj2 = key2->ReadObj();
            AddTNamedObject(obj2);
            AddTDirectoryObject(obj2);
        }
    }
}

void HRich700HistManager::Clear(Option_t*)
{
    //Clear memory. Remove all histograms.
    map<string, TNamed*>::iterator it;
    for (it = fMap.begin(); it != fMap.end(); it++) {
	delete (*it).second;
    }
    fMap.clear();
}

void HRich700HistManager::ShrinkEmptyBinsH1(
					    const string& histName)
{
    // Shrink empty bins in H1.
    // histName Name of histogram.

    TH1* hist = H1(histName);
    Int_t nofBins = hist->GetNbinsX();
    Int_t minShrinkBin = INT_MIN;//std::numeric_limits<Int_t>::max();
    Int_t maxShrinkBin = INT_MAX;//std::numeric_limits<Int_t>::min();
    Bool_t isSet = kFALSE;
    for (Int_t iBin = 1; iBin <= nofBins; iBin++) {
	Double_t content = hist->GetBinContent(iBin);
	if (content != 0.) {
	    minShrinkBin = std::min(iBin, minShrinkBin);
	    maxShrinkBin = std::max(iBin, maxShrinkBin);
	    isSet = kTRUE;
	}
    }
    if (isSet) {
	hist->GetXaxis()->SetRange(minShrinkBin, maxShrinkBin);
    }
}

void HRich700HistManager::ShrinkEmptyBinsH2(
					    const string& histName)
{
    // Shrink empty bins in H2.
    // histName Name of histogram.

    TH1* hist = H2(histName);
    Int_t nofBinsX = hist->GetNbinsX();
    Int_t nofBinsY = hist->GetNbinsY();
    Int_t minShrinkBinX = INT_MAX;//std::numeric_limits<Int_t>::max();
    Int_t maxShrinkBinX = INT_MIN;//std::numeric_limits<Int_t>::min();
    Int_t minShrinkBinY = INT_MAX;//std::numeric_limits<Int_t>::max();
    Int_t maxShrinkBinY = INT_MIN;//std::numeric_limits<Int_t>::min();
    Bool_t isSet = kFALSE;
    for (Int_t iBinX = 1; iBinX <= nofBinsX; iBinX++) {
	for (Int_t iBinY = 1; iBinY <= nofBinsY; iBinY++) {
	    Double_t content = hist->GetBinContent(iBinX, iBinY);
	    if (content != 0.) {
		minShrinkBinX = std::min(iBinX, minShrinkBinX);
		maxShrinkBinX = std::max(iBinX, maxShrinkBinX);
		minShrinkBinY = std::min(iBinY, minShrinkBinY);
		maxShrinkBinY = std::max(iBinY, maxShrinkBinY);
		isSet = kTRUE;
	    }
	}
    }
    if (isSet) {
	hist->GetXaxis()->SetRange(minShrinkBinX, maxShrinkBinX);
	hist->GetYaxis()->SetRange(minShrinkBinY, maxShrinkBinY);
    }
}

void HRich700HistManager::Scale(
				const string& histName,
				Double_t scale)
{
    // Scale histogram.
    // histName Name of histogram.
    // scale Scaling factor.

    H1(histName)->Scale(scale);
}

void HRich700HistManager::NormalizeToIntegral(
					      const string& histName)
{
    // Normalize histogram to integral.
    // histName Name of histogram.

    TH1* hist = H1(histName);
    hist->Scale(1. / hist->Integral());
}


void HRich700HistManager::Rebin(
				const string& histName,
				Int_t ngroup)
{
    // Rebin histogram.
    // histName Name of histogram.
    // ngroup Rebining factor.

    TH1* hist = H1(histName);
    if (ngroup > 1) {
	hist->Rebin(ngroup);
	hist->Scale(1. / (Double_t)ngroup);
    }
}


string HRich700HistManager::ToString() const
{
    // Return string representation of class.
    // string representation of class.

    string str = "HRich700HistManager list of histograms:\n";
    map<string, TNamed*>::const_iterator it;
    for (it = fMap.begin(); it != fMap.end(); it++){
	str += it->first + "\n";
    }
    return str;
}

TCanvas* HRich700HistManager::CreateCanvas(
		const string& name,
		const string& title,
		Int_t width,
		Int_t height)
{
	TCanvas* c = new TCanvas(name.c_str(), title.c_str(), width, height);
	fCanvases.push_back(c);
	return c;
}

void HRich700HistManager::SaveCanvasToImage(
		const string& outputDir,
		const string& options)
{
	for (UInt_t i = 0; i < fCanvases.size(); i++) {
		RichUtils::SaveCanvasAsImage(fCanvases[i], outputDir, options);
	}
}

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